diff options
author | 2017-02-05 15:45:26 +0100 | |
---|---|---|
committer | 2017-02-05 15:46:07 +0100 | |
commit | 02c97cd0f7c4d630f1a90f9f2626746e47a28c09 (patch) | |
tree | 2b48d051a55f2b65525824546cd9fcf9e05907cf | |
parent | d20b4ba6864b45d0c068d98d43e63c8bc5014a3b (diff) |
Updated Catch to latest (nw)
141 files changed, 11970 insertions, 14289 deletions
diff --git a/3rdparty/catch/.gitignore b/3rdparty/catch/.gitignore index 3ca4b5c555c..675ae4cefdf 100644 --- a/3rdparty/catch/.gitignore +++ b/3rdparty/catch/.gitignore @@ -14,9 +14,15 @@ Breakpoints.xcbkptlist projects/VS2010/TestCatch/_UpgradeReport_Files/ projects/VS2010/TestCatch/TestCatch/TestCatch.vcxproj.filters projects/VisualStudio/TestCatch/UpgradeLog.XML +projects/CMake/.idea +projects/CMake/cmake-build-debug UpgradeLog.XML Resources/DWARF -projects/XCode/iOSTest/Build +projects/Generated *.pyc DerivedData *.xccheckout +Build +.idea +cmake-build-debug +cmake-build-release diff --git a/3rdparty/catch/.travis.yml b/3rdparty/catch/.travis.yml index 8b519069daf..bf8c90e3117 100644 --- a/3rdparty/catch/.travis.yml +++ b/3rdparty/catch/.travis.yml @@ -119,12 +119,12 @@ matrix: # 3/ OSX Clang Builds - os: osx - osx_image: xcode7 + osx_image: xcode7.3 compiler: clang env: COMPILER='ccache clang++' BUILD_TYPE='Debug' - os: osx - osx_image: xcode7 + osx_image: xcode7.3 compiler: clang env: COMPILER='ccache clang++' BUILD_TYPE='Release' @@ -145,7 +145,7 @@ install: - | if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then CMAKE_URL="http://www.cmake.org/files/v3.3/cmake-3.3.2-Linux-x86_64.tar.gz" - mkdir cmake && travis_retry wget --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C cmake + mkdir cmake && travis_retry wget --no-check-certificate --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C cmake export PATH=${DEPS_DIR}/cmake/bin:${PATH} elif [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then which cmake || brew install cmake @@ -155,7 +155,7 @@ install: before_script: - export CXX=${COMPILER} - cd ${TRAVIS_BUILD_DIR} - - cmake -Hprojects/CMake -BBuild -DCMAKE_BUILD_TYPE=${BUILD_TYPE} + - cmake -H. -BBuild -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -Wdev - cd Build script: diff --git a/3rdparty/catch/CMakeLists.txt b/3rdparty/catch/CMakeLists.txt new file mode 100644 index 00000000000..e4a74a8d47a --- /dev/null +++ b/3rdparty/catch/CMakeLists.txt @@ -0,0 +1,262 @@ +cmake_minimum_required(VERSION 3.0) + +project(CatchSelfTest) + +set_property(GLOBAL PROPERTY USE_FOLDERS ON) + +# define some folders +set(CATCH_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +set(SELF_TEST_DIR ${CATCH_DIR}/projects/SelfTest) +set(BENCHMARK_DIR ${CATCH_DIR}/projects/Benchmark) +set(HEADER_DIR ${CATCH_DIR}/include) + +if(USE_CPP11) + ## We can't turn this on by default, since it breaks on travis + message(STATUS "Enabling C++11") + set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}") +elseif(USE_CPP14) + message(STATUS "Enabling C++14") + set(CMAKE_CXX_FLAGS "-std=c++14 ${CMAKE_CXX_FLAGS}") +endif() + +#checks that the given hard-coded list contains all headers + sources in the given folder +function(CheckFileList LIST_VAR FOLDER) + set(MESSAGE " should be added to the variable ${LIST_VAR}") + set(MESSAGE "${MESSAGE} in ${CMAKE_CURRENT_LIST_FILE}\n") + file(GLOB GLOBBED_LIST "${FOLDER}/*.cpp" + "${FOLDER}/*.hpp" + "${FOLDER}/*.h") + list(REMOVE_ITEM GLOBBED_LIST ${${LIST_VAR}}) + foreach(EXTRA_ITEM ${GLOBBED_LIST}) + string(REPLACE "${CATCH_DIR}/" "" RELATIVE_FILE_NAME "${EXTRA_ITEM}") + message(AUTHOR_WARNING "The file \"${RELATIVE_FILE_NAME}\"${MESSAGE}") + endforeach() +endfunction() + +function(CheckFileListRec LIST_VAR FOLDER) + set(MESSAGE " should be added to the variable ${LIST_VAR}") + set(MESSAGE "${MESSAGE} in ${CMAKE_CURRENT_LIST_FILE}\n") + file(GLOB_RECURSE GLOBBED_LIST "${FOLDER}/*.cpp" + "${FOLDER}/*.hpp" + "${FOLDER}/*.h") + list(REMOVE_ITEM GLOBBED_LIST ${${LIST_VAR}}) + foreach(EXTRA_ITEM ${GLOBBED_LIST}) + string(REPLACE "${CATCH_DIR}/" "" RELATIVE_FILE_NAME "${EXTRA_ITEM}") + message(AUTHOR_WARNING "The file \"${RELATIVE_FILE_NAME}\"${MESSAGE}") + endforeach() +endfunction() + +# define the sources of the self test +# Please keep these ordered alphabetically +set(TEST_SOURCES + ${SELF_TEST_DIR}/ApproxTests.cpp + ${SELF_TEST_DIR}/BDDTests.cpp + ${SELF_TEST_DIR}/ClassTests.cpp + ${SELF_TEST_DIR}/CmdLineTests.cpp + ${SELF_TEST_DIR}/ConditionTests.cpp + ${SELF_TEST_DIR}/EnumToString.cpp + ${SELF_TEST_DIR}/ExceptionTests.cpp + ${SELF_TEST_DIR}/GeneratorTests.cpp + ${SELF_TEST_DIR}/MessageTests.cpp + ${SELF_TEST_DIR}/MiscTests.cpp + ${SELF_TEST_DIR}/PartTrackerTests.cpp + ${SELF_TEST_DIR}/TagAliasTests.cpp + ${SELF_TEST_DIR}/TestMain.cpp + ${SELF_TEST_DIR}/ToStringPair.cpp + ${SELF_TEST_DIR}/ToStringTuple.cpp + ${SELF_TEST_DIR}/ToStringVector.cpp + ${SELF_TEST_DIR}/ToStringWhich.cpp + ${SELF_TEST_DIR}/TrickyTests.cpp + ${SELF_TEST_DIR}/VariadicMacrosTests.cpp + ) +CheckFileList(TEST_SOURCES ${SELF_TEST_DIR}) + +# A set of impl files that just #include a single header +# Please keep these ordered alphabetically +set(IMPL_SOURCES + ${SELF_TEST_DIR}/SurrogateCpps/catch_common.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_console_colour.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_debugger.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_capture.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_config.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_exception.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_generators.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_registry_hub.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_reporter.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_runner.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_testcase.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_message.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_option.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_ptr.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_stream.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_streambuf.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_test_spec.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_xmlwriter.cpp + ${SELF_TEST_DIR}/SurrogateCpps/catch_test_case_tracker.cpp + ) +CheckFileList(IMPL_SOURCES ${SELF_TEST_DIR}/SurrogateCpps) + + +# Please keep these ordered alphabetically +set(TOP_LEVEL_HEADERS + ${HEADER_DIR}/catch.hpp + ${HEADER_DIR}/catch_session.hpp + ${HEADER_DIR}/catch_with_main.hpp + ) +CheckFileList(TOP_LEVEL_HEADERS ${HEADER_DIR}) + +# Please keep these ordered alphabetically +set(EXTERNAL_HEADERS + ${HEADER_DIR}/external/clara.h + ${HEADER_DIR}/external/tbc_text_format.h + ) +CheckFileList(EXTERNAL_HEADERS ${HEADER_DIR}/external) + + +# Please keep these ordered alphabetically +set(INTERNAL_HEADERS + ${HEADER_DIR}/internal/catch_approx.hpp + ${HEADER_DIR}/internal/catch_assertionresult.h + ${HEADER_DIR}/internal/catch_assertionresult.hpp + ${HEADER_DIR}/internal/catch_capture.hpp + ${HEADER_DIR}/internal/catch_clara.h + ${HEADER_DIR}/internal/catch_commandline.hpp + ${HEADER_DIR}/internal/catch_common.h + ${HEADER_DIR}/internal/catch_common.hpp + ${HEADER_DIR}/internal/catch_compiler_capabilities.h + ${HEADER_DIR}/internal/catch_config.hpp + ${HEADER_DIR}/internal/catch_console_colour.hpp + ${HEADER_DIR}/internal/catch_console_colour_impl.hpp + ${HEADER_DIR}/internal/catch_context.h + ${HEADER_DIR}/internal/catch_context_impl.hpp + ${HEADER_DIR}/internal/catch_debugger.h + ${HEADER_DIR}/internal/catch_debugger.hpp + ${HEADER_DIR}/internal/catch_default_main.hpp + ${HEADER_DIR}/internal/catch_evaluate.hpp + ${HEADER_DIR}/internal/catch_exception_translator_registry.hpp + ${HEADER_DIR}/internal/catch_expression_lhs.hpp + ${HEADER_DIR}/internal/catch_fatal_condition.hpp + ${HEADER_DIR}/internal/catch_generators.hpp + ${HEADER_DIR}/internal/catch_generators_impl.hpp + ${HEADER_DIR}/internal/catch_impl.hpp + ${HEADER_DIR}/internal/catch_interfaces_capture.h + ${HEADER_DIR}/internal/catch_interfaces_config.h + ${HEADER_DIR}/internal/catch_interfaces_exception.h + ${HEADER_DIR}/internal/catch_interfaces_generators.h + ${HEADER_DIR}/internal/catch_interfaces_registry_hub.h + ${HEADER_DIR}/internal/catch_interfaces_reporter.h + ${HEADER_DIR}/internal/catch_interfaces_runner.h + ${HEADER_DIR}/internal/catch_interfaces_tag_alias_registry.h + ${HEADER_DIR}/internal/catch_interfaces_testcase.h + ${HEADER_DIR}/internal/catch_legacy_reporter_adapter.h + ${HEADER_DIR}/internal/catch_legacy_reporter_adapter.hpp + ${HEADER_DIR}/internal/catch_list.hpp + ${HEADER_DIR}/internal/catch_matchers.hpp + ${HEADER_DIR}/internal/catch_message.h + ${HEADER_DIR}/internal/catch_message.hpp + ${HEADER_DIR}/internal/catch_notimplemented_exception.h + ${HEADER_DIR}/internal/catch_notimplemented_exception.hpp + ${HEADER_DIR}/internal/catch_objc.hpp + ${HEADER_DIR}/internal/catch_objc_arc.hpp + ${HEADER_DIR}/internal/catch_option.hpp + ${HEADER_DIR}/internal/catch_platform.h + ${HEADER_DIR}/internal/catch_ptr.hpp + ${HEADER_DIR}/internal/catch_reenable_warnings.h + ${HEADER_DIR}/internal/catch_registry_hub.hpp + ${HEADER_DIR}/internal/catch_reporter_registrars.hpp + ${HEADER_DIR}/internal/catch_reporter_registry.hpp + ${HEADER_DIR}/internal/catch_result_builder.h + ${HEADER_DIR}/internal/catch_result_builder.hpp + ${HEADER_DIR}/internal/catch_result_type.h + ${HEADER_DIR}/internal/catch_run_context.hpp + ${HEADER_DIR}/internal/catch_section.h + ${HEADER_DIR}/internal/catch_section.hpp + ${HEADER_DIR}/internal/catch_section_info.h + ${HEADER_DIR}/internal/catch_section_info.hpp + ${HEADER_DIR}/internal/catch_stream.h + ${HEADER_DIR}/internal/catch_stream.hpp + ${HEADER_DIR}/internal/catch_streambuf.h + ${HEADER_DIR}/internal/catch_suppress_warnings.h + ${HEADER_DIR}/internal/catch_tag_alias.h + ${HEADER_DIR}/internal/catch_tag_alias_registry.h + ${HEADER_DIR}/internal/catch_tag_alias_registry.hpp + ${HEADER_DIR}/internal/catch_test_case_info.h + ${HEADER_DIR}/internal/catch_test_case_info.hpp + ${HEADER_DIR}/internal/catch_test_case_registry_impl.hpp + ${HEADER_DIR}/internal/catch_test_case_tracker.hpp + ${HEADER_DIR}/internal/catch_test_registry.hpp + ${HEADER_DIR}/internal/catch_test_spec.hpp + ${HEADER_DIR}/internal/catch_test_spec_parser.hpp + ${HEADER_DIR}/internal/catch_text.h + ${HEADER_DIR}/internal/catch_timer.h + ${HEADER_DIR}/internal/catch_timer.hpp + ${HEADER_DIR}/internal/catch_tostring.h + ${HEADER_DIR}/internal/catch_tostring.hpp + ${HEADER_DIR}/internal/catch_totals.hpp + ${HEADER_DIR}/internal/catch_version.h + ${HEADER_DIR}/internal/catch_version.hpp + ${HEADER_DIR}/internal/catch_wildcard_pattern.hpp + ${HEADER_DIR}/internal/catch_windows_h_proxy.h + ${HEADER_DIR}/internal/catch_xmlwriter.hpp + ) +CheckFileList(INTERNAL_HEADERS ${HEADER_DIR}/internal) + +# Please keep these ordered alphabetically +set(REPORTER_HEADERS + ${HEADER_DIR}/reporters/catch_reporter_bases.hpp + ${HEADER_DIR}/reporters/catch_reporter_compact.hpp + ${HEADER_DIR}/reporters/catch_reporter_console.hpp + ${HEADER_DIR}/reporters/catch_reporter_junit.hpp + ${HEADER_DIR}/reporters/catch_reporter_multi.hpp + ${HEADER_DIR}/reporters/catch_reporter_teamcity.hpp + ${HEADER_DIR}/reporters/catch_reporter_xml.hpp + ) +CheckFileList(REPORTER_HEADERS ${HEADER_DIR}/reporters) + +# Specify the headers, too, so CLion recognises them as project files +set(HEADERS + ${TOP_LEVEL_HEADERS} + ${EXTERNAL_HEADERS} + ${INTERNAL_HEADERS} + ${REPORTER_HEADERS} + ) + + +set(BENCH_SOURCES + ${BENCHMARK_DIR}/BenchMain.cpp + ${BENCHMARK_DIR}/StringificationBench.cpp + ) +CheckFileList(BENCH_SOURCES ${BENCHMARK_DIR}) + +# Provide some groupings for IDEs +SOURCE_GROUP("Tests" FILES ${TEST_SOURCES}) +SOURCE_GROUP("Surrogates" FILES ${IMPL_SOURCES}) +SOURCE_GROUP("Benchmarks" FILES ${BENCH_SOURCES}) + +# configure the executable +include_directories(${HEADER_DIR}) +add_executable(SelfTest ${TEST_SOURCES} ${IMPL_SOURCES} ${HEADERS}) +add_executable(Benchmark ${BENCH_SOURCES} ${HEADERS}) + +# Add desired warnings +if ( CMAKE_CXX_COMPILER_ID MATCHES "Clang|AppleClang|GNU" ) + target_compile_options( SelfTest PRIVATE -Wall -Wextra ) + target_compile_options( Benchmark PRIVATE -Wall -Wextra ) +endif() +if ( CMAKE_CXX_COMPILER_ID MATCHES "MSVC" ) + target_compile_options( SelfTest PRIVATE /W4 ) + target_compile_options( Benchmark PRIVATE /W4 ) +endif() + + +# configure unit tests via CTest +enable_testing() +add_test(NAME RunTests COMMAND SelfTest) + +add_test(NAME ListTests COMMAND SelfTest --list-tests) +set_tests_properties(ListTests PROPERTIES PASS_REGULAR_EXPRESSION "[0-9]+ test cases") + +add_test(NAME ListTags COMMAND SelfTest --list-tags) +set_tests_properties(ListTags PROPERTIES PASS_REGULAR_EXPRESSION "[0-9]+ tags") + +install(DIRECTORY "single_include/" DESTINATION "include/catch/") diff --git a/3rdparty/catch/README.md b/3rdparty/catch/README.md index 88ed122fdcd..06edcc26bb0 100644 --- a/3rdparty/catch/README.md +++ b/3rdparty/catch/README.md @@ -1,10 +1,10 @@  -*v1.5.8* +*v1.7.0* -Build status (on Travis CI) [](https://travis-ci.org/philsquared/Catch) +Build status (on Travis CI) [](https://travis-ci.org/philsquared/Catch) -<a href="https://raw.githubusercontent.com/philsquared/Catch/master/single_include/catch.hpp">The latest, single header, version can be downloaded directly using this link</a> +<a href="https://github.com/philsquared/Catch/releases/download/v1.7.0/catch.hpp">The latest, single header, version can be downloaded directly using this link</a> ## What's the Catch? diff --git a/3rdparty/catch/catch-logo-tiny.png b/3rdparty/catch/catch-logo-tiny.png Binary files differnew file mode 100644 index 00000000000..26f49069274 --- /dev/null +++ b/3rdparty/catch/catch-logo-tiny.png diff --git a/3rdparty/catch/docs/Readme.md b/3rdparty/catch/docs/Readme.md index 6621fb81bcd..c2f11f72108 100644 --- a/3rdparty/catch/docs/Readme.md +++ b/3rdparty/catch/docs/Readme.md @@ -17,3 +17,4 @@ Other * [Why Catch?](why-catch.md) * [Contributing](contributing.md) +* [Release Notes](release-notes.md)
\ No newline at end of file diff --git a/3rdparty/catch/docs/assertions.md b/3rdparty/catch/docs/assertions.md index 82bb96a3447..f64fdcfe2b2 100644 --- a/3rdparty/catch/docs/assertions.md +++ b/3rdparty/catch/docs/assertions.md @@ -34,6 +34,15 @@ Example: REQUIRE_FALSE( thisReturnsFalse() ); ``` +Do note that "overly complex" expressions cannot be decomposed and thus will not compile. This is done partly for practical reasons (to keep the underlying expression template machinery to minimum) and partly for philosophical reasons (assertions should be simple and deterministic). + +Examples: +* `CHECK(a == 1 && b == 2);` +This expression is too complex because of the `&&` operator. If you want to check that 2 or more properties hold, you can either put the expression into parenthesis, which stops decomposition from working, or you need to decompose the expression into two assertions: `CHECK( a == 1 ); CHECK( b == 2);` +* `CHECK( a == 2 || b == 1 );` +This expression is too complex because of the `||` operator. If you want to check that one of several properties hold, you can put the expression into parenthesis (unlike with `&&`, expression decomposition into several `CHECK`s is not possible). + + ### Floating point comparisons When comparing floating point numbers - especially if at least one of them has been computed - great care must be taken to allow for rounding errors and inexact representations. diff --git a/3rdparty/catch/docs/build-systems.md b/3rdparty/catch/docs/build-systems.md index b001dc19d99..a14c93e0812 100644 --- a/3rdparty/catch/docs/build-systems.md +++ b/3rdparty/catch/docs/build-systems.md @@ -69,7 +69,7 @@ ExternalProject_Add( # Expose required variable (CATCH_INCLUDE_DIR) to parent scope ExternalProject_Get_Property(catch source_dir) -set(CATCH_INCLUDE_DIR ${source_dir}/include CACHE INTERNAL "Path to include folder for Catch") +set(CATCH_INCLUDE_DIR ${source_dir}/single_include CACHE INTERNAL "Path to include folder for Catch") ``` If you put it in, e.g., `${PROJECT_SRC_DIR}/${EXT_PROJECTS_DIR}/catch/`, you can use it in your project by adding the following to your root CMake file: diff --git a/3rdparty/catch/docs/command-line.md b/3rdparty/catch/docs/command-line.md index d1d4bd4a614..cc69d5ff641 100644 --- a/3rdparty/catch/docs/command-line.md +++ b/3rdparty/catch/docs/command-line.md @@ -17,6 +17,9 @@ Click one of the followings links to take you straight to that option - or scrol <a href="#warnings"> ` -w, --warn`</a><br /> <a href="#reporting-timings"> ` -d, --durations`</a><br /> <a href="#input-file"> ` -f, --input-file`</a><br /> +<a href="#run-section"> ` -c, --section`</a><br /> +<a href="#filenames-as-tags"> ` -#, --filenames-as-tags`</a><br /> + </br> @@ -66,6 +69,8 @@ A series of tags form an AND expression wheras a comma-separated sequence forms <pre>[one][two],[three]</pre> This matches all tests tagged `[one]` and `[two]`, as well as all tests tagged `[three]` +Test names containing special characters, such as `,` or `[` can specify them on the command line using `\`. +`\` also escapes itself. <a id="choosing-a-reporter-to-use"></a> ## Choosing a reporter to use @@ -115,7 +120,7 @@ Sometimes this results in a flood of failure messages and you'd rather just see --list-reporters </pre> -```-l``` or ```--list-tests`` will list all registered tests, along with any tags. +```-l``` or ```--list-tests``` will list all registered tests, along with any tags. If one or more test-specs have been supplied too then only the matching tests will be listed. ```-t``` or ```--list-tags``` lists all available tags, along with the number of test cases they match. Again, supplying test specs limits the tags that match. @@ -215,6 +220,59 @@ In either case the actual value for the seed is printed as part of Catch's outpu Prints the command line arguments to stdout + +<a id="run-section"></a> +## Specify the section to run +<pre>-s, --section <section name></pre> + +To limit execution to a specific section within a test case, use this option one or more times. +To narrow to sub-sections use multiple instances, where each subsequent instance specifies a deeper nesting level. + +E.g. if you have: + +<pre> +TEST_CASE( "Test" ) { + SECTION( "sa" ) { + SECTION( "sb" ) { + /*...*/ + } + SECTION( "sc" ) { + /*...*/ + } + } + SECTION( "sd" ) { + /*...*/ + } +} +</pre> + +Then you can run `sb` with: +<pre>./MyExe Test -c sa -c sb</pre> + +Or run just `sd` with: +<pre>./MyExe Test -c sd</pre> + +To run all of `sa`, including `sb` and `sc` use: +<pre>./MyExe Test -c sa</pre> + +There are some limitations of this feature to be aware of: +- Code outside of sections being skipped will still be executed - e.g. any set-up code in the TEST_CASE before the +start of the first section.</br> +- At time of writing, wildcards are not supported in section names. +- If you specify a section without narrowing to a test case first then all test cases will be executed +(but only matching sections within them). + + +<a id="filenames-as-tags"></a> +## Filenames as tags +<pre>-#, --filenames-as-tags</pre> + +When this option is used then every test is given an additional tag which is formed of the unqualified +filename it is found in, with any extension stripped, prefixed with the `#` character. + +So, for example, tests within the file `~\Dev\MyProject\Ferrets.cpp` would be tagged `[#Ferrets]`. + + --- -[Home](Readme.md)
\ No newline at end of file +[Home](Readme.md) diff --git a/3rdparty/catch/docs/configuration.md b/3rdparty/catch/docs/configuration.md index 33052190cf3..ea57e78988a 100644 --- a/3rdparty/catch/docs/configuration.md +++ b/3rdparty/catch/docs/configuration.md @@ -61,6 +61,8 @@ This can be useful on certain platforms that do not provide ```std::cout``` and CATCH_CONFIG_CPP11_LONG_LONG // generates overloads for the long long type CATCH_CONFIG_CPP11_OVERRIDE // CATCH_OVERRIDE expands to override (for virtual function implementations) CATCH_CONFIG_CPP11_UNIQUE_PTR // Use std::unique_ptr instead of std::auto_ptr + CATCH_CONFIG_CPP11_SHUFFLE // Use std::shuffle instead of std::random_shuffle + CATCH_CONFIG_CPP11_TYPE_TRAITS // Use std::enable_if and <type_traits> Catch has some basic compiler detection that will attempt to select the appropriate mix of these macros. However being incomplete - and often without access to the respective compilers - this detection tends to be conservative. So overriding control is given to the user. If a compiler supports a feature (and Catch does not already detect it) then one or more of these may be defined to enable it (or suppress it, in some cases). If you do do this please raise an issue, specifying your compiler version (ideally with an idea of how to detect it) and stating that it has such support. @@ -68,6 +70,13 @@ You may also suppress any of these features by using the `_NO_` form, e.g. `CATC All C++11 support can be disabled with `CATCH_CONFIG_NO_CPP11` +# Windows header clutter + +On Windows Catch includes `windows.h`. To minimize global namespace clutter in the implementation file, it defines `NOMINMAX` and `WIN32_LEAN_AND_MEAN` before including it. You can control this behaviour via two macros: + + CATCH_CONFIG_NO_NOMINMAX // Stops Catch from using NOMINMAX macro + CATCH_CONFIG_NO_WIN32_LEAN_AND_MEAN // Stops Catch from using WIN32_LEAN_AND_MEAN macro + --- -[Home](Readme.md)
\ No newline at end of file +[Home](Readme.md) diff --git a/3rdparty/catch/docs/contributing.md b/3rdparty/catch/docs/contributing.md index 49a663c042b..28d0643d42a 100644 --- a/3rdparty/catch/docs/contributing.md +++ b/3rdparty/catch/docs/contributing.md @@ -1,22 +1,40 @@ # Contributing to Catch -So you want to contribute something to Catch? That's great! Whether it's a bug fix, a new feature, support for additional compilers - or just a fix to the documentation - all contributions are very welcome and very much appreciated. Of course so are bug reports and other comments and questions. +So you want to contribute something to Catch? That's great! Whether it's a bug fix, a new feature, support for +additional compilers - or just a fix to the documentation - all contributions are very welcome and very much appreciated. +Of course so are bug reports and other comments and questions. -If you are contributing to the code base there are a few simple guidelines to keep in mind. This also includes notes to help you find your way around. As this is liable to drift out of date please raise an issue or, better still, a pull request for this file, if you notice that. +If you are contributing to the code base there are a few simple guidelines to keep in mind. This also includes notes to +help you find your way around. As this is liable to drift out of date please raise an issue or, better still, a pull +request for this file, if you notice that. ## Branches -Ongoing development is on the "develop" branch (if there is one, currently), or on feature branches that are branched off of develop. Please target any pull requests at develop, or, for larger chunks of work, a branch off of develop. +Ongoing development is currently on _master_. At some point an integration branch will be set-up and PRs should target + that - but for now it's all against master. You may see feature branches come and go from time to time, too. ## Directory structure -Users of Catch primarily use the single header version. Maintainers should work with the full source (which is still, primarily, in headers). This can be found in the ```include``` folder, but you may prefer to use one of the IDE project files (for MSVC or XCode). These can be found under ```projects/```*IDE Name*```/```*project name*. A number of contributors have proposed make files, and submitted their own versions. At some point these should be made available too. +_Users_ of Catch primarily use the single header version. _Maintainers_ should work with the full source (which is still, +primarily, in headers). This can be found in the `include` folder. There are a set of test files, currently under +`projects/SelfTest`. The test app can be built via CMake from the `CMakeLists.txt` file in the root, or you can generate +project files for Visual Studio, XCode, and others (instructions in the `projects` folder). If you have access to CLion +that can work with the CMake file directly. -In addition to the include files and IDE projects there are a number of tests in cpp files. These can all be found in ```projects/SelfTest```. You'll also see a ```SurrogateCpps``` directory in there. This contains a set of cpp files that each ```#include``` a single header. While these files are not essential to compilation they help to keep the implementation headers self-contained. At time of writing this set is not complete but has reasonable coverage. If you add additional headers please try to remember to add a surrogate cpp for it. +As well as the runtime test files you'll also see a `SurrogateCpps` directory under `projects/SelfTest`. +This contains a set of .cpp files that each `#include` a single header. +While these files are not essential to compilation they help to keep the implementation headers self-contained. +At time of writing this set is not complete but has reasonable coverage. +If you add additional headers please try to remember to add a surrogate cpp for it. -The other directories are ```scripts``` which contains a set of python scripts to help in testing Catch as well as generating the single include, and docs, which contains the documentation as a set of markdown files. +The other directories are `scripts` which contains a set of python scripts to help in testing Catch as well as +generating the single include, and `docs`, which contains the documentation as a set of markdown files. - *this document is in-progress...* +__When submitting a pull request please do not include changes to the single include, or to the version number file +as these are managed by the scripts!__ + + + *this document is still in-progress...* --- diff --git a/3rdparty/catch/docs/own-main.md b/3rdparty/catch/docs/own-main.md index f8c836e6f27..67e551f3c51 100644 --- a/3rdparty/catch/docs/own-main.md +++ b/3rdparty/catch/docs/own-main.md @@ -16,7 +16,7 @@ If you just need to have code that executes before and/ or after Catch this is t #define CATCH_CONFIG_RUNNER #include "catch.hpp" -int main( int argc, char* const argv[] ) +int main( int argc, char* argv[] ) { // global setup... @@ -24,7 +24,7 @@ int main( int argc, char* const argv[] ) // global clean-up... - return result; + return ( result < 0xff ? result : 0xff ); } ``` @@ -36,9 +36,9 @@ If you still want Catch to process the command line, but you want to programatic #define CATCH_CONFIG_RUNNER #include "catch.hpp" -int main( int argc, char* const argv[] ) +int main( int argc, char* argv[] ) { - Catch::Session session; // There must be exactly once instance + Catch::Session session; // There must be exactly one instance // writing to session.configData() here sets defaults // this is the preferred way to set them @@ -51,7 +51,11 @@ int main( int argc, char* const argv[] ) // overrides command line args // only do this if you know you need to - return session.run(); + int numFailed = session.run(); + // Note that on unices only the lower 8 bits are usually used, clamping + // the return value to 255 prevents false negative when some multiple + // of 256 tests has failed + return ( numFailed < 0xff ? numFailed : 0xff ); } ``` @@ -65,4 +69,4 @@ Catch embeds a powerful command line parser which you can also use to parse your --- -[Home](Readme.md)
\ No newline at end of file +[Home](Readme.md) diff --git a/3rdparty/catch/docs/release-notes.md b/3rdparty/catch/docs/release-notes.md new file mode 100644 index 00000000000..bec9910e7cd --- /dev/null +++ b/3rdparty/catch/docs/release-notes.md @@ -0,0 +1,77 @@ +# 1.7.0 + +### Features/ Changes: +* Catch now runs significantly faster for passing tests + * Microbenchmark focused on Catch's overhead went from ~3.4s to ~0.7s. + * Real world test using [JSON for Modern C++](https://github.com/nlohmann/json)'s test suite went from ~6m 25s to ~4m 14s. +* Catch can now run specific sections within test cases. + * For now the support is only basic (no wildcards or tags), for details see the [documentation](docs/command-line.md). +* Catch now supports SEH on Windows as well as signals on Linux. + * After receiving a signal, Catch reports failing assertion and then passes the signal onto the previous handler. +* Approx can be used to compare values against strong typedefs (available in C++11 mode only). + * Strong typedefs mean types that are explicitly convertible to double. +* CHECK macro no longer stops executing section if an exception happens. +* Certain characters (space, tab, etc) are now pretty printed. + * This means that a `char c = ' '; REQUIRE(c == '\t');` would be printed as `' ' == '\t'`, instead of ` == 9`. + +### Fixes: +* Text formatting no longer attempts to access out-of-bounds characters under certain conditions. +* THROW family of assertions no longer trigger `-Wunused-value` on expressions containing explicit cast. +* Breaking into debugger under OS X works again and no longer required `DEBUG` to be defined. +* Compilation no longer breaks under certain compiler if a lambda is used inside assertion macro. + +### Other: +* Catch's CMakeLists now defines install command. +* Catch's CMakeLists now generates projects with warnings enabled. + + + + + +# Older versions +Release notes were not maintained prior to v1.6.0, but you should be able to work them out from the Git history + +## 1.6.1 + +### Features/ Changes: +* Catch now supports breaking into debugger on Linux + +### Fixes: +* Generators no longer leak memory (generators are still unsupported in general) +* JUnit reporter now reports UTC timestamps, instead of "tbd" +* `CHECK_THAT` macro is now properly defined as `CATCH_CHECK_THAT` when using `CATCH_` prefixed macros + +### Other: +* Types with overloaded `&&` operator are no longer evaluated twice when used in an assertion macro. +* The use of `__COUNTER__` is supressed when Catch is parsed by CLion + * This change is not active when compiling a binary +* Approval tests can now be run on Windows +* CMake will now warn if a file is present in the `include` folder but not is not enumerated as part of the project +* Catch now defines `NOMINMAX` and `WIN32_LEAN_AND_MEAN` before including `windows.h` + * This can be disabled if needed, see [documentation](docs/configuration.md) for details. + + +## 1.6.0 + +### Cmake/ projects: +* Moved CMakeLists.txt to root, made it friendlier for CLion and generating XCode and VS projects, and removed the manually maintained XCode and VS projects. + +### Features/ Changes: +* Approx now supports `>=` and `<=` +* Can now use `\` to escape chars in test names on command line +* Standardize C++11 feature toggles + +### Fixes: +* Blue shell colour +* Missing argument to `CATCH_CHECK_THROWS` +* Don't encode extended ASCII in XML +* use `std::shuffle` on more compilers (fixes deprecation warning/error) +* Use `__COUNTER__` more consistently (where available) + +### Other: +* Tweaks and changes to scripts - particularly for Approval test - to make them more portable + + +--- + +[Home](Readme.md) diff --git a/3rdparty/catch/docs/test-cases-and-sections.md b/3rdparty/catch/docs/test-cases-and-sections.md index 86644f006cd..809935b6384 100644 --- a/3rdparty/catch/docs/test-cases-and-sections.md +++ b/3rdparty/catch/docs/test-cases-and-sections.md @@ -2,7 +2,7 @@ While Catch fully supports the traditional, xUnit, style of class-based fixtures containing test case methods this is not the preferred style. -Instead Catch provides a powerful mechanism for nesting test case sections within a test case. For a more detailed discussion see the [tutorial](tutorial.md#testCasesAndSections). +Instead Catch provides a powerful mechanism for nesting test case sections within a test case. For a more detailed discussion see the [tutorial](tutorial.md#test-cases-and-sections). Test cases and sections are very easy to use in practice: @@ -34,14 +34,16 @@ Tag names are not case sensitive. All tag names beginning with non-alphanumeric characters are reserved by Catch. Catch defines a number of "special" tags, which have meaning to the test runner itself. These special tags all begin with a symbol character. Following is a list of currently defined special tags and their meanings. -* `[!hide]` or `[.]` (or, for legacy reasons, `[hide]`) - causes test cases to be skipped from the default list (ie when no test cases have been explicitly selected through tag expressions or name wildcards). The hide tag is often combined with another, user, tag (for example `[.][integration]` - so all integration tests are excluded from the default run but can be run by passing `[integration]` on the command line). As a short-cut you can combine these by simply prefixing your user tag with a `.` - e.g. `[.integration]`. Because the hide tag has evolved to have several forms, all forms are added as tags if you use one of them. +* `[!hide]` or `[.]` (or, for legacy reasons, `[hide]`) - causes test cases to be skipped from the default list (i.e. when no test cases have been explicitly selected through tag expressions or name wildcards). The hide tag is often combined with another, user, tag (for example `[.][integration]` - so all integration tests are excluded from the default run but can be run by passing `[integration]` on the command line). As a short-cut you can combine these by simply prefixing your user tag with a `.` - e.g. `[.integration]`. Because the hide tag has evolved to have several forms, all forms are added as tags if you use one of them. -* `[!throws]` - lets Catch know that this test is likely to throw an exception even if successful. This causes the test to be exluded when running with `-e` or `--nothrow`. +* `[!throws]` - lets Catch know that this test is likely to throw an exception even if successful. This causes the test to be excluded when running with `-e` or `--nothrow`. * `[!shouldfail]` - reverse the failing logic of the test: if the test is successful if it fails, and vice-versa. * `[!mayfail]` - doesn't fail the test if any given assertion fails (but still reports it). This can be useful to flag a work-in-progress, or a known issue that you don't want to immediately fix but still want to track in the your tests. +* `[!nonportable]` - Indicates that behaviour may vary between platforms or compilers. + * `[#<filename>]` - running with `-#` or `--filenames-as-tags` causes Catch to add the filename, prefixed with `#` (and with any extension stripped) as a tag. e.g. tests in testfile.cpp would all be tagged `[#testfile]`. * `[@<alias>]` - tag aliases all begin with `@` (see below). @@ -52,7 +54,7 @@ Between tag expressions and wildcarded test names (as well as combinations of th CATCH_REGISTER_TAG_ALIAS( <alias string>, <tag expression> ) -Aliases must begining with the `@` character. An example of a tag alias is: +Aliases must begin with the `@` character. An example of a tag alias is: CATCH_REGISTER_TAG_ALIAS( "[@nhf]", "[failing]~[.]" ) @@ -83,4 +85,4 @@ Other than the additional prefixes and the formatting in the console reporter th --- -[Home](Readme.md)
\ No newline at end of file +[Home](Readme.md) diff --git a/3rdparty/catch/docs/test-fixtures.md b/3rdparty/catch/docs/test-fixtures.md index 6bef762b8e3..fc546b3997d 100644 --- a/3rdparty/catch/docs/test-fixtures.md +++ b/3rdparty/catch/docs/test-fixtures.md @@ -1,4 +1,4 @@ -Although Catch allows you to group tests together as sections within a test case, it can still convenient, sometimes, to group them using a more traditional test fixture. Catch fully supports this too. You define the test fixture as a simple structure: +Although Catch allows you to group tests together as sections within a test case, it can still be convenient, sometimes, to group them using a more traditional test fixture. Catch fully supports this too. You define the test fixture as a simple structure: ```c++ class UniqueTestsFixture { @@ -29,4 +29,4 @@ The two test cases here will create uniquely-named derived classes of UniqueTest --- -[Home](Readme.md)
\ No newline at end of file +[Home](Readme.md) diff --git a/3rdparty/catch/docs/tutorial.md b/3rdparty/catch/docs/tutorial.md index 1aa2a659fbc..7392459262e 100644 --- a/3rdparty/catch/docs/tutorial.md +++ b/3rdparty/catch/docs/tutorial.md @@ -233,7 +233,7 @@ The requirement is that the following block of code ([or equivalent](own-main.md appears in _exactly one_ source file. Use as many additional cpp files (or whatever you call your implementation files) as you need for your tests, partitioned however makes most sense for your way of working. Each additional file need only ```#include "catch.hpp"``` - do not repeat the ```#define```! -In fact it is usually a good idea to put the block with the ```#define``` [in it's own source file](slow-compiles.md). +In fact it is usually a good idea to put the block with the ```#define``` [in its own source file](slow-compiles.md). Do not write your tests in header files! diff --git a/3rdparty/catch/include/catch.hpp b/3rdparty/catch/include/catch.hpp index 332fcd0b184..b16f2e5f6df 100644 --- a/3rdparty/catch/include/catch.hpp +++ b/3rdparty/catch/include/catch.hpp @@ -81,12 +81,12 @@ #define CATCH_CHECKED_ELSE( expr ) INTERNAL_CATCH_ELSE( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECKED_ELSE" ) #define CATCH_CHECK_NOFAIL( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, "CATCH_CHECK_NOFAIL" ) -#define CATCH_CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THROWS" ) +#define CATCH_CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, "", "CATCH_CHECK_THROWS" ) #define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THROWS_AS" ) #define CATCH_CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, matcher, "CATCH_CHECK_THROWS_WITH" ) #define CATCH_CHECK_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_NOTHROW" ) -#define CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THAT" ) +#define CATCH_CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THAT" ) #define CATCH_REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::Normal, "CATCH_REQUIRE_THAT" ) #define CATCH_INFO( msg ) INTERNAL_CATCH_INFO( msg, "CATCH_INFO" ) diff --git a/3rdparty/catch/include/external/clara.h b/3rdparty/catch/include/external/clara.h index 369c1b76c38..a999a37bf16 100644 --- a/3rdparty/catch/include/external/clara.h +++ b/3rdparty/catch/include/external/clara.h @@ -396,9 +396,12 @@ namespace Clara { inline void convertInto( std::string const& _source, std::string& _dest ) { _dest = _source; } + char toLowerCh(char c) { + return static_cast<char>( ::tolower( c ) ); + } inline void convertInto( std::string const& _source, bool& _dest ) { std::string sourceLC = _source; - std::transform( sourceLC.begin(), sourceLC.end(), sourceLC.begin(), ::tolower ); + std::transform( sourceLC.begin(), sourceLC.end(), sourceLC.begin(), toLowerCh ); if( sourceLC == "y" || sourceLC == "1" || sourceLC == "true" || sourceLC == "yes" || sourceLC == "on" ) _dest = true; else if( sourceLC == "n" || sourceLC == "0" || sourceLC == "false" || sourceLC == "no" || sourceLC == "off" ) diff --git a/3rdparty/catch/include/external/tbc_text_format.h b/3rdparty/catch/include/external/tbc_text_format.h index a63d6a14e9b..5209d804250 100644 --- a/3rdparty/catch/include/external/tbc_text_format.h +++ b/3rdparty/catch/include/external/tbc_text_format.h @@ -37,19 +37,16 @@ namespace Tbc { TextAttributes() : initialIndent( std::string::npos ), indent( 0 ), - width( consoleWidth-1 ), - tabChar( '\t' ) + width( consoleWidth-1 ) {} TextAttributes& setInitialIndent( std::size_t _value ) { initialIndent = _value; return *this; } TextAttributes& setIndent( std::size_t _value ) { indent = _value; return *this; } TextAttributes& setWidth( std::size_t _value ) { width = _value; return *this; } - TextAttributes& setTabChar( char _value ) { tabChar = _value; return *this; } std::size_t initialIndent; // indent of first line, or npos std::size_t indent; // indent of subsequent lines, or all if initialIndent is npos std::size_t width; // maximum width of text, including indent. Longer text will wrap - char tabChar; // If this char is seen the indent is changed to current pos }; class Text { @@ -57,63 +54,80 @@ namespace Tbc { Text( std::string const& _str, TextAttributes const& _attr = TextAttributes() ) : attr( _attr ) { - std::string wrappableChars = " [({.,/|\\-"; - std::size_t indent = _attr.initialIndent != std::string::npos - ? _attr.initialIndent - : _attr.indent; - std::string remainder = _str; + const std::string wrappableBeforeChars = "[({<\t"; + const std::string wrappableAfterChars = "])}>-,./|\\"; + const std::string wrappableInsteadOfChars = " \n\r"; + std::string indent = _attr.initialIndent != std::string::npos + ? std::string( _attr.initialIndent, ' ' ) + : std::string( _attr.indent, ' ' ); + + typedef std::string::const_iterator iterator; + iterator it = _str.begin(); + const iterator strEnd = _str.end(); + + while( it != strEnd ) { - while( !remainder.empty() ) { if( lines.size() >= 1000 ) { lines.push_back( "... message truncated due to excessive size" ); return; } - std::size_t tabPos = std::string::npos; - std::size_t width = (std::min)( remainder.size(), _attr.width - indent ); - std::size_t pos = remainder.find_first_of( '\n' ); - if( pos <= width ) { - width = pos; - } - pos = remainder.find_last_of( _attr.tabChar, width ); - if( pos != std::string::npos ) { - tabPos = pos; - if( remainder[width] == '\n' ) - width--; - remainder = remainder.substr( 0, tabPos ) + remainder.substr( tabPos+1 ); - } - if( width == remainder.size() ) { - spliceLine( indent, remainder, width ); - } - else if( remainder[width] == '\n' ) { - spliceLine( indent, remainder, width ); - if( width <= 1 || remainder.size() != 1 ) - remainder = remainder.substr( 1 ); - indent = _attr.indent; - } - else { - pos = remainder.find_last_of( wrappableChars, width ); - if( pos != std::string::npos && pos > 0 ) { - spliceLine( indent, remainder, pos ); - if( remainder[0] == ' ' ) - remainder = remainder.substr( 1 ); + + std::string suffix; + std::size_t width = (std::min)( static_cast<size_t>( strEnd-it ), _attr.width-static_cast<size_t>( indent.size() ) ); + iterator itEnd = it+width; + iterator itNext = _str.end(); + + iterator itNewLine = std::find( it, itEnd, '\n' ); + if( itNewLine != itEnd ) + itEnd = itNewLine; + + if( itEnd != strEnd ) { + bool foundWrapPoint = false; + iterator findIt = itEnd; + do { + if( wrappableAfterChars.find( *findIt ) != std::string::npos && findIt != itEnd ) { + itEnd = findIt+1; + itNext = findIt+1; + foundWrapPoint = true; + } + else if( findIt > it && wrappableBeforeChars.find( *findIt ) != std::string::npos ) { + itEnd = findIt; + itNext = findIt; + foundWrapPoint = true; + } + else if( wrappableInsteadOfChars.find( *findIt ) != std::string::npos ) { + itNext = findIt+1; + itEnd = findIt; + foundWrapPoint = true; + } + if( findIt == it ) + break; + else + --findIt; + } + while( !foundWrapPoint ); + + if( !foundWrapPoint ) { + // No good wrap char, so we'll break mid word and add a hyphen + --itEnd; + itNext = itEnd; + suffix = "-"; } else { - spliceLine( indent, remainder, width-1 ); - lines.back() += "-"; + while( itEnd > it && wrappableInsteadOfChars.find( *(itEnd-1) ) != std::string::npos ) + --itEnd; } - if( lines.size() == 1 ) - indent = _attr.indent; - if( tabPos != std::string::npos ) - indent += tabPos; } + lines.push_back( indent + std::string( it, itEnd ) + suffix ); + + if( indent.size() != _attr.indent ) + indent = std::string( _attr.indent, ' ' ); + it = itNext; } } - void spliceLine( std::size_t _indent, std::string& _remainder, std::size_t _pos ) { - lines.push_back( std::string( _indent, ' ' ) + _remainder.substr( 0, _pos ) ); - _remainder = _remainder.substr( _pos ); - } + typedef std::vector<std::string>::const_iterator const_iterator; @@ -138,6 +152,7 @@ namespace Tbc { return _stream; } + private: std::string str; TextAttributes attr; diff --git a/3rdparty/catch/include/internal/catch_approx.hpp b/3rdparty/catch/include/internal/catch_approx.hpp index f5dba61a70d..f193742763a 100644 --- a/3rdparty/catch/include/internal/catch_approx.hpp +++ b/3rdparty/catch/include/internal/catch_approx.hpp @@ -13,6 +13,10 @@ #include <cmath> #include <limits> +#if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) +#include <type_traits> +#endif + namespace Catch { namespace Detail { @@ -41,6 +45,53 @@ namespace Detail { return approx; } +#if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator == ( const T& lhs, Approx const& rhs ) { + // Thanks to Richard Harris for his help refining this formula + auto lhs_v = double(lhs); + return fabs( lhs_v - rhs.m_value ) < rhs.m_epsilon * (rhs.m_scale + (std::max)( fabs(lhs_v), fabs(rhs.m_value) ) ); + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator == ( Approx const& lhs, const T& rhs ) { + return operator==( rhs, lhs ); + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator != ( T lhs, Approx const& rhs ) { + return !operator==( lhs, rhs ); + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator != ( Approx const& lhs, T rhs ) { + return !operator==( rhs, lhs ); + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator <= ( T lhs, Approx const& rhs ) + { + return double(lhs) < rhs.m_value || lhs == rhs; + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator <= ( Approx const& lhs, T rhs ) + { + return lhs.m_value < double(rhs) || lhs == rhs; + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator >= ( T lhs, Approx const& rhs ) + { + return double(lhs) > rhs.m_value || lhs == rhs; + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator >= ( Approx const& lhs, T rhs ) + { + return lhs.m_value > double(rhs) || lhs == rhs; + } +#else friend bool operator == ( double lhs, Approx const& rhs ) { // Thanks to Richard Harris for his help refining this formula return fabs( lhs - rhs.m_value ) < rhs.m_epsilon * (rhs.m_scale + (std::max)( fabs(lhs), fabs(rhs.m_value) ) ); @@ -58,6 +109,27 @@ namespace Detail { return !operator==( rhs, lhs ); } + friend bool operator <= ( double lhs, Approx const& rhs ) + { + return lhs < rhs.m_value || lhs == rhs; + } + + friend bool operator <= ( Approx const& lhs, double rhs ) + { + return lhs.m_value < rhs || lhs == rhs; + } + + friend bool operator >= ( double lhs, Approx const& rhs ) + { + return lhs > rhs.m_value || lhs == rhs; + } + + friend bool operator >= ( Approx const& lhs, double rhs ) + { + return lhs.m_value > rhs || lhs == rhs; + } +#endif + Approx& epsilon( double newEpsilon ) { m_epsilon = newEpsilon; return *this; diff --git a/3rdparty/catch/include/internal/catch_assertionresult.h b/3rdparty/catch/include/internal/catch_assertionresult.h index 99b3a7c3beb..e2b979f8ceb 100644 --- a/3rdparty/catch/include/internal/catch_assertionresult.h +++ b/3rdparty/catch/include/internal/catch_assertionresult.h @@ -13,6 +13,27 @@ namespace Catch { + struct STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison; + + struct DecomposedExpression + { + virtual ~DecomposedExpression() {} + virtual bool isBinaryExpression() const { + return false; + } + virtual void reconstructExpression( std::string& dest ) const = 0; + + // Only simple binary comparisons can be decomposed. + // If more complex check is required then wrap sub-expressions in parentheses. + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator + ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator - ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator * ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator / ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator % ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( T const& ); + }; + struct AssertionInfo { AssertionInfo() {} @@ -29,11 +50,41 @@ namespace Catch { struct AssertionResultData { - AssertionResultData() : resultType( ResultWas::Unknown ) {} + AssertionResultData() : decomposedExpression( CATCH_NULL ) + , resultType( ResultWas::Unknown ) + , negated( false ) + , parenthesized( false ) {} + + void negate( bool parenthesize ) { + negated = !negated; + parenthesized = parenthesize; + if( resultType == ResultWas::Ok ) + resultType = ResultWas::ExpressionFailed; + else if( resultType == ResultWas::ExpressionFailed ) + resultType = ResultWas::Ok; + } + + std::string const& reconstructExpression() const { + if( decomposedExpression != CATCH_NULL ) { + decomposedExpression->reconstructExpression( reconstructedExpression ); + if( parenthesized ) { + reconstructedExpression.insert( 0, 1, '(' ); + reconstructedExpression.append( 1, ')' ); + } + if( negated ) { + reconstructedExpression.insert( 0, 1, '!' ); + } + decomposedExpression = CATCH_NULL; + } + return reconstructedExpression; + } - std::string reconstructedExpression; + mutable DecomposedExpression const* decomposedExpression; + mutable std::string reconstructedExpression; std::string message; ResultWas::OfType resultType; + bool negated; + bool parenthesized; }; class AssertionResult { @@ -60,6 +111,8 @@ namespace Catch { std::string getMessage() const; SourceLineInfo getSourceInfo() const; std::string getTestMacroName() const; + void discardDecomposedExpression() const; + void expandDecomposedExpression() const; protected: AssertionInfo m_info; diff --git a/3rdparty/catch/include/internal/catch_assertionresult.hpp b/3rdparty/catch/include/internal/catch_assertionresult.hpp index bd59de9af4e..9b637028cdc 100644 --- a/3rdparty/catch/include/internal/catch_assertionresult.hpp +++ b/3rdparty/catch/include/internal/catch_assertionresult.hpp @@ -56,7 +56,7 @@ namespace Catch { std::string AssertionResult::getExpression() const { if( isFalseTest( m_info.resultDisposition ) ) - return "!" + m_info.capturedExpression; + return '!' + m_info.capturedExpression; else return m_info.capturedExpression; } @@ -72,7 +72,7 @@ namespace Catch { } std::string AssertionResult::getExpandedExpression() const { - return m_resultData.reconstructedExpression; + return m_resultData.reconstructExpression(); } std::string AssertionResult::getMessage() const { @@ -86,6 +86,14 @@ namespace Catch { return m_info.macroName; } + void AssertionResult::discardDecomposedExpression() const { + m_resultData.decomposedExpression = CATCH_NULL; + } + + void AssertionResult::expandDecomposedExpression() const { + m_resultData.reconstructExpression(); + } + } // end namespace Catch #endif // TWOBLUECUBES_CATCH_ASSERTIONRESULT_HPP_INCLUDED diff --git a/3rdparty/catch/include/internal/catch_capture.hpp b/3rdparty/catch/include/internal/catch_capture.hpp index fa5835b85b2..04be7016399 100644 --- a/3rdparty/catch/include/internal/catch_capture.hpp +++ b/3rdparty/catch/include/internal/catch_capture.hpp @@ -37,10 +37,11 @@ ( __catchResult <= expr ).endExpression(); \ } \ catch( ... ) { \ - __catchResult.useActiveException( Catch::ResultDisposition::Normal ); \ + __catchResult.useActiveException( resultDisposition ); \ } \ INTERNAL_CATCH_REACT( __catchResult ) \ - } while( Catch::isTrue( false && !!(expr) ) ) // expr here is never evaluated at runtime but it forces the compiler to give it a look + } while( Catch::isTrue( false && static_cast<bool>( !!(expr) ) ) ) // expr here is never evaluated at runtime but it forces the compiler to give it a look + // The double negation silences MSVC's C4800 warning, the static_cast forces short-circuit evaluation if the type has overloaded &&. /////////////////////////////////////////////////////////////////////////////// #define INTERNAL_CATCH_IF( expr, resultDisposition, macroName ) \ @@ -57,7 +58,7 @@ do { \ Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \ try { \ - expr; \ + static_cast<void>(expr); \ __catchResult.captureResult( Catch::ResultWas::Ok ); \ } \ catch( ... ) { \ @@ -72,7 +73,7 @@ Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition, #matcher ); \ if( __catchResult.allowThrows() ) \ try { \ - expr; \ + static_cast<void>(expr); \ __catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \ } \ catch( ... ) { \ @@ -89,7 +90,7 @@ Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \ if( __catchResult.allowThrows() ) \ try { \ - expr; \ + static_cast<void>(expr); \ __catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \ } \ catch( exceptionType ) { \ @@ -132,13 +133,7 @@ do { \ Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #arg ", " #matcher, resultDisposition ); \ try { \ - std::string matcherAsString = (matcher).toString(); \ - __catchResult \ - .setLhs( Catch::toString( arg ) ) \ - .setRhs( matcherAsString == Catch::Detail::unprintableString ? #matcher : matcherAsString ) \ - .setOp( "matches" ) \ - .setResultType( (matcher).match( arg ) ); \ - __catchResult.captureExpression(); \ + __catchResult.captureMatch( arg, matcher, #matcher ); \ } catch( ... ) { \ __catchResult.useActiveException( resultDisposition | Catch::ResultDisposition::ContinueOnFailure ); \ } \ diff --git a/3rdparty/catch/include/internal/catch_commandline.hpp b/3rdparty/catch/include/internal/catch_commandline.hpp index 89eced34655..7186da37c9f 100644 --- a/3rdparty/catch/include/internal/catch_commandline.hpp +++ b/3rdparty/catch/include/internal/catch_commandline.hpp @@ -23,13 +23,14 @@ namespace Catch { config.abortAfter = x; } inline void addTestOrTags( ConfigData& config, std::string const& _testSpec ) { config.testsOrTags.push_back( _testSpec ); } + inline void addSectionToRun( ConfigData& config, std::string const& sectionName ) { config.sectionsToRun.push_back( sectionName ); } inline void addReporterName( ConfigData& config, std::string const& _reporterName ) { config.reporterNames.push_back( _reporterName ); } inline void addWarning( ConfigData& config, std::string const& _warning ) { if( _warning == "NoAssertions" ) config.warnings = static_cast<WarnAbout::What>( config.warnings | WarnAbout::NoAssertions ); else - throw std::runtime_error( "Unrecognised warning: '" + _warning + "'" ); + throw std::runtime_error( "Unrecognised warning: '" + _warning + '\'' ); } inline void setOrder( ConfigData& config, std::string const& order ) { if( startsWith( "declared", order ) ) @@ -39,7 +40,7 @@ namespace Catch { else if( startsWith( "random", order ) ) config.runOrder = RunTests::InRandomOrder; else - throw std::runtime_error( "Unrecognised ordering: '" + order + "'" ); + throw std::runtime_error( "Unrecognised ordering: '" + order + '\'' ); } inline void setRngSeed( ConfigData& config, std::string const& seed ) { if( seed == "time" ) { @@ -64,7 +65,7 @@ namespace Catch { } inline void setUseColour( ConfigData& config, std::string const& value ) { std::string mode = toLower( value ); - + if( mode == "yes" ) config.useColour = UseColour::Yes; else if( mode == "no" ) @@ -85,10 +86,10 @@ namespace Catch { std::string line; while( std::getline( f, line ) ) { line = trim(line); - if( !line.empty() && !startsWith( line, "#" ) ) { - if( !startsWith( line, "\"" ) ) - line = "\"" + line + "\""; - addTestOrTags( config, line + "," ); + if( !line.empty() && !startsWith( line, '#' ) ) { + if( !startsWith( line, '"' ) ) + line = '"' + line + '"'; + addTestOrTags( config, line + ',' ); } } } @@ -176,6 +177,10 @@ namespace Catch { .describe( "adds a tag for the filename" ) .bind( &ConfigData::filenamesAsTags ); + cli["-c"]["--section"] + .describe( "specify section to run" ) + .bind( &addSectionToRun, "section name" ); + // Less common commands which don't have a short form cli["--list-test-names-only"] .describe( "list all/matching test cases names only" ) @@ -196,7 +201,7 @@ namespace Catch { cli["--force-colour"] .describe( "force colourised output (deprecated)" ) .bind( &forceColour ); - + cli["--use-colour"] .describe( "should output be colourised" ) .bind( &setUseColour, "yes|no" ); diff --git a/3rdparty/catch/include/internal/catch_common.h b/3rdparty/catch/include/internal/catch_common.h index 545276e748a..a42b558e949 100644 --- a/3rdparty/catch/include/internal/catch_common.h +++ b/3rdparty/catch/include/internal/catch_common.h @@ -8,6 +8,8 @@ #ifndef TWOBLUECUBES_CATCH_COMMON_H_INCLUDED #define TWOBLUECUBES_CATCH_COMMON_H_INCLUDED +#include "catch_compiler_capabilities.h" + #define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line #define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) #ifdef CATCH_CONFIG_COUNTER @@ -77,7 +79,10 @@ namespace Catch { } bool startsWith( std::string const& s, std::string const& prefix ); + bool startsWith( std::string const& s, char prefix ); bool endsWith( std::string const& s, std::string const& suffix ); + bool endsWith( std::string const& s, char suffix ); + bool contains( std::string const& s, std::string const& infix ); bool contains( std::string const& s, std::string const& infix ); void toLowerInPlace( std::string& s ); std::string toLower( std::string const& s ); @@ -97,8 +102,8 @@ namespace Catch { SourceLineInfo(); SourceLineInfo( char const* _file, std::size_t _line ); - SourceLineInfo( SourceLineInfo const& other ); # ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + SourceLineInfo(SourceLineInfo const& other) = default; SourceLineInfo( SourceLineInfo && ) = default; SourceLineInfo& operator = ( SourceLineInfo const& ) = default; SourceLineInfo& operator = ( SourceLineInfo && ) = default; @@ -107,7 +112,7 @@ namespace Catch { bool operator == ( SourceLineInfo const& other ) const; bool operator < ( SourceLineInfo const& other ) const; - std::string file; + char const* file; std::size_t line; }; diff --git a/3rdparty/catch/include/internal/catch_common.hpp b/3rdparty/catch/include/internal/catch_common.hpp index 7ad5b1cae81..766c3df8b48 100644 --- a/3rdparty/catch/include/internal/catch_common.hpp +++ b/3rdparty/catch/include/internal/catch_common.hpp @@ -10,17 +10,28 @@ #include "catch_common.h" +#include <cstring> + namespace Catch { bool startsWith( std::string const& s, std::string const& prefix ) { - return s.size() >= prefix.size() && s.substr( 0, prefix.size() ) == prefix; + return s.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), s.begin()); + } + bool startsWith( std::string const& s, char prefix ) { + return !s.empty() && s[0] == prefix; } bool endsWith( std::string const& s, std::string const& suffix ) { - return s.size() >= suffix.size() && s.substr( s.size()-suffix.size(), suffix.size() ) == suffix; + return s.size() >= suffix.size() && std::equal(suffix.rbegin(), suffix.rend(), s.rbegin()); + } + bool endsWith( std::string const& s, char suffix ) { + return !s.empty() && s[s.size()-1] == suffix; } bool contains( std::string const& s, std::string const& infix ) { return s.find( infix ) != std::string::npos; } + bool contains( std::string const& s, char infix ) { + return s.find(infix) != std::string::npos; + } char toLowerCh(char c) { return static_cast<char>( ::tolower( c ) ); } @@ -37,7 +48,7 @@ namespace Catch { std::string::size_type start = str.find_first_not_of( whitespaceChars ); std::string::size_type end = str.find_last_not_of( whitespaceChars ); - return start != std::string::npos ? str.substr( start, 1+end-start ) : ""; + return start != std::string::npos ? str.substr( start, 1+end-start ) : std::string(); } bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ) { @@ -60,29 +71,25 @@ namespace Catch { {} std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser ) { - os << pluraliser.m_count << " " << pluraliser.m_label; + os << pluraliser.m_count << ' ' << pluraliser.m_label; if( pluraliser.m_count != 1 ) - os << "s"; + os << 's'; return os; } - SourceLineInfo::SourceLineInfo() : line( 0 ){} + SourceLineInfo::SourceLineInfo() : file(""), line( 0 ){} SourceLineInfo::SourceLineInfo( char const* _file, std::size_t _line ) : file( _file ), line( _line ) {} - SourceLineInfo::SourceLineInfo( SourceLineInfo const& other ) - : file( other.file ), - line( other.line ) - {} bool SourceLineInfo::empty() const { - return file.empty(); + return file[0] == '\0'; } bool SourceLineInfo::operator == ( SourceLineInfo const& other ) const { - return line == other.line && file == other.file; + return line == other.line && (file == other.file || std::strcmp(file, other.file) == 0); } bool SourceLineInfo::operator < ( SourceLineInfo const& other ) const { - return line < other.line || ( line == other.line && file < other.file ); + return line < other.line || ( line == other.line && (std::strcmp(file, other.file) < 0)); } void seedRng( IConfig const& config ) { @@ -95,16 +102,16 @@ namespace Catch { std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ) { #ifndef __GNUG__ - os << info.file << "(" << info.line << ")"; + os << info.file << '(' << info.line << ')'; #else - os << info.file << ":" << info.line; + os << info.file << ':' << info.line; #endif return os; } void throwLogicError( std::string const& message, SourceLineInfo const& locationInfo ) { std::ostringstream oss; - oss << locationInfo << ": Internal Catch error: '" << message << "'"; + oss << locationInfo << ": Internal Catch error: '" << message << '\''; if( alwaysTrue() ) throw std::logic_error( oss.str() ); } diff --git a/3rdparty/catch/include/internal/catch_compiler_capabilities.h b/3rdparty/catch/include/internal/catch_compiler_capabilities.h index 5af1e76a8d7..2b947fbda6a 100644 --- a/3rdparty/catch/include/internal/catch_compiler_capabilities.h +++ b/3rdparty/catch/include/internal/catch_compiler_capabilities.h @@ -19,6 +19,8 @@ // CATCH_CONFIG_CPP11_LONG_LONG : is long long supported? // CATCH_CONFIG_CPP11_OVERRIDE : is override supported? // CATCH_CONFIG_CPP11_UNIQUE_PTR : is unique_ptr supported (otherwise use auto_ptr) +// CATCH_CONFIG_CPP11_SHUFFLE : is std::shuffle supported? +// CATCH_CONFIG_CPP11_TYPE_TRAITS : are type_traits and enable_if supported? // CATCH_CONFIG_CPP11_OR_GREATER : Is C++11 supported? @@ -115,6 +117,8 @@ #if (_MSC_VER >= 1900 ) // (VC++ 13 (VS2015)) #define CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT #define CATCH_INTERNAL_CONFIG_CPP11_GENERATED_METHODS +#define CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE +#define CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS #endif #endif // _MSC_VER @@ -180,7 +184,12 @@ # if !defined(CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) # define CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR # endif - +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE) +# define CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE +# endif +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS) +# define CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS +# endif #endif // __cplusplus >= 201103L @@ -203,18 +212,27 @@ #if defined(CATCH_INTERNAL_CONFIG_VARIADIC_MACROS) && !defined(CATCH_CONFIG_NO_VARIADIC_MACROS) && !defined(CATCH_CONFIG_VARIADIC_MACROS) # define CATCH_CONFIG_VARIADIC_MACROS #endif -#if defined(CATCH_INTERNAL_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_NO_LONG_LONG) && !defined(CATCH_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_NO_CPP11) +#if defined(CATCH_INTERNAL_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_CPP11_NO_LONG_LONG) && !defined(CATCH_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_NO_CPP11) # define CATCH_CONFIG_CPP11_LONG_LONG #endif -#if defined(CATCH_INTERNAL_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_NO_OVERRIDE) && !defined(CATCH_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_NO_CPP11) +#if defined(CATCH_INTERNAL_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_CPP11_NO_OVERRIDE) && !defined(CATCH_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_NO_CPP11) # define CATCH_CONFIG_CPP11_OVERRIDE #endif -#if defined(CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_NO_UNIQUE_PTR) && !defined(CATCH_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_NO_CPP11) +#if defined(CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_CPP11_NO_UNIQUE_PTR) && !defined(CATCH_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_NO_CPP11) # define CATCH_CONFIG_CPP11_UNIQUE_PTR #endif -#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) +// Use of __COUNTER__ is suppressed if __JETBRAINS_IDE__ is #defined (meaning we're being parsed by a JetBrains IDE for +// analytics) because, at time of writing, __COUNTER__ is not properly handled by it. +// This does not affect compilation +#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) && !defined(__JETBRAINS_IDE__) # define CATCH_CONFIG_COUNTER #endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE) && !defined(CATCH_CONFIG_CPP11_NO_SHUFFLE) && !defined(CATCH_CONFIG_CPP11_SHUFFLE) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_SHUFFLE +#endif +# if defined(CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS) && !defined(CATCH_CONFIG_CPP11_NO_TYPE_TRAITS) && !defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_TYPE_TRAITS +# endif #if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS) # define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS diff --git a/3rdparty/catch/include/internal/catch_config.hpp b/3rdparty/catch/include/internal/catch_config.hpp index 72b0f6c7723..7d7887aaf51 100644 --- a/3rdparty/catch/include/internal/catch_config.hpp +++ b/3rdparty/catch/include/internal/catch_config.hpp @@ -74,6 +74,7 @@ namespace Catch { std::vector<std::string> reporterNames; std::vector<std::string> testsOrTags; + std::vector<std::string> sectionsToRun; }; @@ -115,7 +116,8 @@ namespace Catch { bool shouldDebugBreak() const { return m_data.shouldDebugBreak; } - std::vector<std::string> getReporterNames() const { return m_data.reporterNames; } + std::vector<std::string> const& getReporterNames() const { return m_data.reporterNames; } + std::vector<std::string> const& getSectionsToRun() const CATCH_OVERRIDE { return m_data.sectionsToRun; } int abortAfter() const { return m_data.abortAfter; } diff --git a/3rdparty/catch/include/internal/catch_console_colour_impl.hpp b/3rdparty/catch/include/internal/catch_console_colour_impl.hpp index f776952bfe7..ba2a9d1c3ae 100644 --- a/3rdparty/catch/include/internal/catch_console_colour_impl.hpp +++ b/3rdparty/catch/include/internal/catch_console_colour_impl.hpp @@ -41,15 +41,7 @@ namespace Catch { #if defined ( CATCH_CONFIG_COLOUR_WINDOWS ) ///////////////////////////////////////// -#ifndef NOMINMAX -#define NOMINMAX -#endif - -#ifdef __AFXDLL -#include <AfxWin.h> -#else -#include <windows.h> -#endif +#include "catch_windows_h_proxy.h" namespace Catch { namespace { @@ -131,7 +123,7 @@ namespace { case Colour::White: return setColour( "[0m" ); case Colour::Red: return setColour( "[0;31m" ); case Colour::Green: return setColour( "[0;32m" ); - case Colour::Blue: return setColour( "[0:34m" ); + case Colour::Blue: return setColour( "[0;34m" ); case Colour::Cyan: return setColour( "[0;36m" ); case Colour::Yellow: return setColour( "[0;33m" ); case Colour::Grey: return setColour( "[1;30m" ); diff --git a/3rdparty/catch/include/internal/catch_context_impl.hpp b/3rdparty/catch/include/internal/catch_context_impl.hpp index 030f29e2742..8516ad93b30 100644 --- a/3rdparty/catch/include/internal/catch_context_impl.hpp +++ b/3rdparty/catch/include/internal/catch_context_impl.hpp @@ -12,6 +12,7 @@ #include "catch_context.h" #include "catch_stream.hpp" +#include "catch_common.h" namespace Catch { @@ -21,6 +22,11 @@ namespace Catch { Context( Context const& ); void operator=( Context const& ); + public: + virtual ~Context() { + deleteAllValues( m_generatorsByTestName ); + } + public: // IContext virtual IResultCapture* getResultCapture() { return m_resultCapture; diff --git a/3rdparty/catch/include/internal/catch_debugger.h b/3rdparty/catch/include/internal/catch_debugger.h index 0dd36aa3539..15a4c64bb43 100644 --- a/3rdparty/catch/include/internal/catch_debugger.h +++ b/3rdparty/catch/include/internal/catch_debugger.h @@ -23,27 +23,36 @@ namespace Catch{ // The following code snippet based on: // http://cocoawithlove.com/2008/03/break-into-debugger.html - #ifdef DEBUG - #if defined(__ppc64__) || defined(__ppc__) - #define CATCH_BREAK_INTO_DEBUGGER() \ - if( Catch::isDebuggerActive() ) { \ - __asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n" \ - : : : "memory","r0","r3","r4" ); \ - } - #else - #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) {__asm__("int $3\n" : : );} - #endif + #if defined(__ppc64__) || defined(__ppc__) + #define CATCH_TRAP() \ + __asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n" \ + : : : "memory","r0","r3","r4" ) + #else + #define CATCH_TRAP() __asm__("int $3\n" : : ) #endif +#elif defined(CATCH_PLATFORM_LINUX) + // If we can use inline assembler, do it because this allows us to break + // directly at the location of the failing check instead of breaking inside + // raise() called from it, i.e. one stack frame below. + #if defined(__GNUC__) && (defined(__i386) || defined(__x86_64)) + #define CATCH_TRAP() asm volatile ("int $3") + #else // Fall back to the generic way. + #include <signal.h> + + #define CATCH_TRAP() raise(SIGTRAP) + #endif #elif defined(_MSC_VER) - #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { __debugbreak(); } + #define CATCH_TRAP() __debugbreak() #elif defined(__MINGW32__) extern "C" __declspec(dllimport) void __stdcall DebugBreak(); - #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { DebugBreak(); } + #define CATCH_TRAP() DebugBreak() #endif -#ifndef CATCH_BREAK_INTO_DEBUGGER -#define CATCH_BREAK_INTO_DEBUGGER() Catch::alwaysTrue(); +#ifdef CATCH_TRAP + #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { CATCH_TRAP(); } +#else + #define CATCH_BREAK_INTO_DEBUGGER() Catch::alwaysTrue(); #endif #endif // TWOBLUECUBES_CATCH_DEBUGGER_H_INCLUDED diff --git a/3rdparty/catch/include/internal/catch_debugger.hpp b/3rdparty/catch/include/internal/catch_debugger.hpp index 8c552661972..77ab29ccb4d 100644 --- a/3rdparty/catch/include/internal/catch_debugger.hpp +++ b/3rdparty/catch/include/internal/catch_debugger.hpp @@ -61,6 +61,33 @@ } } // namespace Catch +#elif defined(CATCH_PLATFORM_LINUX) + #include <fstream> + #include <string> + + namespace Catch{ + // The standard POSIX way of detecting a debugger is to attempt to + // ptrace() the process, but this needs to be done from a child and not + // this process itself to still allow attaching to this process later + // if wanted, so is rather heavy. Under Linux we have the PID of the + // "debugger" (which doesn't need to be gdb, of course, it could also + // be strace, for example) in /proc/$PID/status, so just get it from + // there instead. + bool isDebuggerActive(){ + std::ifstream in("/proc/self/status"); + for( std::string line; std::getline(in, line); ) { + static const int PREFIX_LEN = 11; + if( line.compare(0, PREFIX_LEN, "TracerPid:\t") == 0 ) { + // We're traced if the PID is not 0 and no other PID starts + // with 0 digit, so it's enough to check for just a single + // character. + return line.length() > PREFIX_LEN && line[PREFIX_LEN] != '0'; + } + } + + return false; + } + } // namespace Catch #elif defined(_MSC_VER) extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); namespace Catch { diff --git a/3rdparty/catch/include/internal/catch_default_main.hpp b/3rdparty/catch/include/internal/catch_default_main.hpp index 54202fb397a..12ca902477c 100644 --- a/3rdparty/catch/include/internal/catch_default_main.hpp +++ b/3rdparty/catch/include/internal/catch_default_main.hpp @@ -12,7 +12,8 @@ // Standard C/C++ main entry point int main (int argc, char * argv[]) { - return Catch::Session().run( argc, argv ); + int result = Catch::Session().run( argc, argv ); + return ( result < 0xff ? result : 0xff ); } #else // __OBJC__ @@ -30,7 +31,7 @@ int main (int argc, char * const argv[]) { [pool drain]; #endif - return result; + return ( result < 0xff ? result : 0xff ); } #endif // __OBJC__ diff --git a/3rdparty/catch/include/internal/catch_expression_lhs.hpp b/3rdparty/catch/include/internal/catch_expression_lhs.hpp index 51b803e5e69..9670d2a1c0c 100644 --- a/3rdparty/catch/include/internal/catch_expression_lhs.hpp +++ b/3rdparty/catch/include/internal/catch_expression_lhs.hpp @@ -14,90 +14,155 @@ namespace Catch { -// Wraps the LHS of an expression and captures the operator and RHS (if any) - -// wrapping them all in a ResultBuilder object -template<typename T> -class ExpressionLhs { - ExpressionLhs& operator = ( ExpressionLhs const& ); -# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS - ExpressionLhs& operator = ( ExpressionLhs && ) = delete; -# endif +template<typename LhsT, Internal::Operator Op, typename RhsT> +class BinaryExpression; + +template<typename ArgT, typename MatcherT> +class MatchExpression; +// Wraps the LHS of an expression and overloads comparison operators +// for also capturing those and RHS (if any) +template<typename T> +class ExpressionLhs : public DecomposedExpression { public: - ExpressionLhs( ResultBuilder& rb, T lhs ) : m_rb( rb ), m_lhs( lhs ) {} -# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS - ExpressionLhs( ExpressionLhs const& ) = default; - ExpressionLhs( ExpressionLhs && ) = default; -# endif + ExpressionLhs( ResultBuilder& rb, T lhs ) : m_rb( rb ), m_lhs( lhs ), m_truthy(false) {} template<typename RhsT> - ResultBuilder& operator == ( RhsT const& rhs ) { + BinaryExpression<T, Internal::IsEqualTo, RhsT const&> + operator == ( RhsT const& rhs ) const { return captureExpression<Internal::IsEqualTo>( rhs ); } template<typename RhsT> - ResultBuilder& operator != ( RhsT const& rhs ) { + BinaryExpression<T, Internal::IsNotEqualTo, RhsT const&> + operator != ( RhsT const& rhs ) const { return captureExpression<Internal::IsNotEqualTo>( rhs ); } template<typename RhsT> - ResultBuilder& operator < ( RhsT const& rhs ) { + BinaryExpression<T, Internal::IsLessThan, RhsT const&> + operator < ( RhsT const& rhs ) const { return captureExpression<Internal::IsLessThan>( rhs ); } template<typename RhsT> - ResultBuilder& operator > ( RhsT const& rhs ) { + BinaryExpression<T, Internal::IsGreaterThan, RhsT const&> + operator > ( RhsT const& rhs ) const { return captureExpression<Internal::IsGreaterThan>( rhs ); } template<typename RhsT> - ResultBuilder& operator <= ( RhsT const& rhs ) { + BinaryExpression<T, Internal::IsLessThanOrEqualTo, RhsT const&> + operator <= ( RhsT const& rhs ) const { return captureExpression<Internal::IsLessThanOrEqualTo>( rhs ); } template<typename RhsT> - ResultBuilder& operator >= ( RhsT const& rhs ) { + BinaryExpression<T, Internal::IsGreaterThanOrEqualTo, RhsT const&> + operator >= ( RhsT const& rhs ) const { return captureExpression<Internal::IsGreaterThanOrEqualTo>( rhs ); } - ResultBuilder& operator == ( bool rhs ) { + BinaryExpression<T, Internal::IsEqualTo, bool> operator == ( bool rhs ) const { return captureExpression<Internal::IsEqualTo>( rhs ); } - ResultBuilder& operator != ( bool rhs ) { + BinaryExpression<T, Internal::IsNotEqualTo, bool> operator != ( bool rhs ) const { return captureExpression<Internal::IsNotEqualTo>( rhs ); } void endExpression() { - bool value = m_lhs ? true : false; + m_truthy = m_lhs ? true : false; m_rb - .setLhs( Catch::toString( value ) ) - .setResultType( value ) - .endExpression(); + .setResultType( m_truthy ) + .endExpression( *this ); } - // Only simple binary expressions are allowed on the LHS. - // If more complex compositions are required then place the sub expression in parentheses - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator + ( RhsT const& ); - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator - ( RhsT const& ); - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator / ( RhsT const& ); - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator * ( RhsT const& ); - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( RhsT const& ); - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( RhsT const& ); + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE { + dest = Catch::toString( m_truthy ); + } private: template<Internal::Operator Op, typename RhsT> - ResultBuilder& captureExpression( RhsT const& rhs ) { - return m_rb - .setResultType( Internal::compare<Op>( m_lhs, rhs ) ) - .setLhs( Catch::toString( m_lhs ) ) - .setRhs( Catch::toString( rhs ) ) - .setOp( Internal::OperatorTraits<Op>::getName() ); + BinaryExpression<T, Op, RhsT&> captureExpression( RhsT& rhs ) const { + return BinaryExpression<T, Op, RhsT&>( m_rb, m_lhs, rhs ); + } + + template<Internal::Operator Op> + BinaryExpression<T, Op, bool> captureExpression( bool rhs ) const { + return BinaryExpression<T, Op, bool>( m_rb, m_lhs, rhs ); } private: ResultBuilder& m_rb; T m_lhs; + bool m_truthy; +}; + +template<typename LhsT, Internal::Operator Op, typename RhsT> +class BinaryExpression : public DecomposedExpression { +public: + BinaryExpression( ResultBuilder& rb, LhsT lhs, RhsT rhs ) + : m_rb( rb ), m_lhs( lhs ), m_rhs( rhs ) {} + + void endExpression() const { + m_rb + .setResultType( Internal::compare<Op>( m_lhs, m_rhs ) ) + .endExpression( *this ); + } + + virtual bool isBinaryExpression() const CATCH_OVERRIDE { + return true; + } + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE { + std::string lhs = Catch::toString( m_lhs ); + std::string rhs = Catch::toString( m_rhs ); + char delim = lhs.size() + rhs.size() < 40 && + lhs.find('\n') == std::string::npos && + rhs.find('\n') == std::string::npos ? ' ' : '\n'; + dest.reserve( 7 + lhs.size() + rhs.size() ); + // 2 for spaces around operator + // 2 for operator + // 2 for parentheses (conditionally added later) + // 1 for negation (conditionally added later) + dest = lhs; + dest += delim; + dest += Internal::OperatorTraits<Op>::getName(); + dest += delim; + dest += rhs; + } + +private: + ResultBuilder& m_rb; + LhsT m_lhs; + RhsT m_rhs; +}; + +template<typename ArgT, typename MatcherT> +class MatchExpression : public DecomposedExpression { +public: + MatchExpression( ArgT arg, MatcherT matcher, char const* matcherString ) + : m_arg( arg ), m_matcher( matcher ), m_matcherString( matcherString ) {} + + virtual bool isBinaryExpression() const CATCH_OVERRIDE { + return true; + } + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE { + std::string matcherAsString = m_matcher.toString(); + dest = Catch::toString( m_arg ); + dest += ' '; + if( matcherAsString == Detail::unprintableString ) + dest += m_matcherString; + else + dest += matcherAsString; + } + +private: + ArgT m_arg; + MatcherT m_matcher; + char const* m_matcherString; }; } // end namespace Catch diff --git a/3rdparty/catch/include/internal/catch_fatal_condition.hpp b/3rdparty/catch/include/internal/catch_fatal_condition.hpp index dd21d5904bd..29021a392cb 100644 --- a/3rdparty/catch/include/internal/catch_fatal_condition.hpp +++ b/3rdparty/catch/include/internal/catch_fatal_condition.hpp @@ -12,25 +12,75 @@ namespace Catch { - // Report the error condition then exit the process - inline void fatal( std::string const& message, int exitCode ) { + // Report the error condition + inline void reportFatal( std::string const& message ) { IContext& context = Catch::getCurrentContext(); IResultCapture* resultCapture = context.getResultCapture(); resultCapture->handleFatalErrorCondition( message ); - - if( Catch::alwaysTrue() ) // avoids "no return" warnings - exit( exitCode ); } } // namespace Catch #if defined ( CATCH_PLATFORM_WINDOWS ) ///////////////////////////////////////// + +#include "catch_windows_h_proxy.h" + + namespace Catch { + struct SignalDefs { DWORD id; const char* name; }; + extern SignalDefs signalDefs[]; + // There is no 1-1 mapping between signals and windows exceptions. + // Windows can easily distinguish between SO and SigSegV, + // but SigInt, SigTerm, etc are handled differently. + SignalDefs signalDefs[] = { + { EXCEPTION_ILLEGAL_INSTRUCTION, "SIGILL - Illegal instruction signal" }, + { EXCEPTION_STACK_OVERFLOW, "SIGSEGV - Stack overflow" }, + { EXCEPTION_ACCESS_VIOLATION, "SIGSEGV - Segmentation violation signal" }, + { EXCEPTION_INT_DIVIDE_BY_ZERO, "Divide by zero error" }, + }; + struct FatalConditionHandler { - void reset() {} - }; + + static LONG CALLBACK handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo) { + for (int i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i) { + if (ExceptionInfo->ExceptionRecord->ExceptionCode == signalDefs[i].id) { + reportFatal(signalDefs[i].name); + } + } + // If its not an exception we care about, pass it along. + // This stops us from eating debugger breaks etc. + return EXCEPTION_CONTINUE_SEARCH; + } + + // 32k seems enough for Catch to handle stack overflow, + // but the value was found experimentally, so there is no strong guarantee + FatalConditionHandler():m_isSet(true), m_guaranteeSize(32 * 1024), m_exceptionHandlerHandle(CATCH_NULL) { + // Register as first handler in current chain + m_exceptionHandlerHandle = AddVectoredExceptionHandler(1, handleVectoredException); + // Pass in guarantee size to be filled + SetThreadStackGuarantee(&m_guaranteeSize); + } + + void reset() { + if (m_isSet) { + // Unregister handler and restore the old guarantee + RemoveVectoredExceptionHandler(m_exceptionHandlerHandle); + SetThreadStackGuarantee(&m_guaranteeSize); + m_exceptionHandlerHandle = CATCH_NULL; + m_isSet = false; + } + } + + ~FatalConditionHandler() { + reset(); + } + private: + bool m_isSet; + ULONG m_guaranteeSize; + PVOID m_exceptionHandlerHandle; + }; } // namespace Catch @@ -40,7 +90,10 @@ namespace Catch { namespace Catch { - struct SignalDefs { int id; const char* name; }; + struct SignalDefs { + int id; + const char* name; + }; extern SignalDefs signalDefs[]; SignalDefs signalDefs[] = { { SIGINT, "SIGINT - Terminal interrupt signal" }, @@ -49,35 +102,68 @@ namespace Catch { { SIGSEGV, "SIGSEGV - Segmentation violation signal" }, { SIGTERM, "SIGTERM - Termination request signal" }, { SIGABRT, "SIGABRT - Abort (abnormal termination) signal" } - }; + }; struct FatalConditionHandler { + static bool isSet; + static struct sigaction oldSigActions [sizeof(signalDefs)/sizeof(SignalDefs)]; + static stack_t oldSigStack; + static char altStackMem[SIGSTKSZ]; + static void handleSignal( int sig ) { - for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) - if( sig == signalDefs[i].id ) - fatal( signalDefs[i].name, -sig ); - fatal( "<unknown signal>", -sig ); + std::string name = "<unknown signal>"; + for (std::size_t i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i) { + SignalDefs &def = signalDefs[i]; + if (sig == def.id) { + name = def.name; + break; + } + } + reset(); + reportFatal(name); + raise( sig ); } - FatalConditionHandler() : m_isSet( true ) { - for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) - signal( signalDefs[i].id, handleSignal ); + FatalConditionHandler() { + isSet = true; + stack_t sigStack; + sigStack.ss_sp = altStackMem; + sigStack.ss_size = SIGSTKSZ; + sigStack.ss_flags = 0; + sigaltstack(&sigStack, &oldSigStack); + struct sigaction sa = { 0 }; + + sa.sa_handler = handleSignal; + sa.sa_flags = SA_ONSTACK; + for (std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i) { + sigaction(signalDefs[i].id, &sa, &oldSigActions[i]); + } } + + ~FatalConditionHandler() { reset(); } - void reset() { - if( m_isSet ) { - for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) - signal( signalDefs[i].id, SIG_DFL ); - m_isSet = false; + static void reset() { + if( isSet ) { + // Set signals back to previous values -- hopefully nobody overwrote them in the meantime + for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) { + sigaction(signalDefs[i].id, &oldSigActions[i], CATCH_NULL); + } + // Return the old stack + sigaltstack(&oldSigStack, CATCH_NULL); + isSet = false; } } - - bool m_isSet; }; + bool FatalConditionHandler::isSet = false; + struct sigaction FatalConditionHandler::oldSigActions[sizeof(signalDefs)/sizeof(SignalDefs)] = {}; + stack_t FatalConditionHandler::oldSigStack = {}; + char FatalConditionHandler::altStackMem[SIGSTKSZ] = {}; + + } // namespace Catch #endif // not Windows diff --git a/3rdparty/catch/include/internal/catch_interfaces_config.h b/3rdparty/catch/include/internal/catch_interfaces_config.h index 17914b4e04f..08226c88d4a 100644 --- a/3rdparty/catch/include/internal/catch_interfaces_config.h +++ b/3rdparty/catch/include/internal/catch_interfaces_config.h @@ -41,7 +41,7 @@ namespace Catch { Auto, Yes, No - }; }; + }; }; class TestSpec; @@ -62,6 +62,8 @@ namespace Catch { virtual RunTests::InWhatOrder runOrder() const = 0; virtual unsigned int rngSeed() const = 0; virtual UseColour::YesOrNo useColour() const = 0; + virtual std::vector<std::string> const& getSectionsToRun() const = 0; + }; } diff --git a/3rdparty/catch/include/internal/catch_interfaces_reporter.h b/3rdparty/catch/include/internal/catch_interfaces_reporter.h index 98e2cd6a02b..3aebab986eb 100644 --- a/3rdparty/catch/include/internal/catch_interfaces_reporter.h +++ b/3rdparty/catch/include/internal/catch_interfaces_reporter.h @@ -248,7 +248,7 @@ namespace Catch virtual void testRunEnded( TestRunStats const& testRunStats ) = 0; virtual void skipTest( TestCaseInfo const& testInfo ) = 0; - + virtual MultipleReporters* tryAsMulti() { return CATCH_NULL; } }; diff --git a/3rdparty/catch/include/internal/catch_list.hpp b/3rdparty/catch/include/internal/catch_list.hpp index f83827eedc2..e09898e9c97 100644 --- a/3rdparty/catch/include/internal/catch_list.hpp +++ b/3rdparty/catch/include/internal/catch_list.hpp @@ -51,9 +51,9 @@ namespace Catch { } if( !config.testSpec().hasFilters() ) - Catch::cout() << pluralise( matchedTests, "test case" ) << "\n" << std::endl; + Catch::cout() << pluralise( matchedTests, "test case" ) << '\n' << std::endl; else - Catch::cout() << pluralise( matchedTests, "matching test case" ) << "\n" << std::endl; + Catch::cout() << pluralise( matchedTests, "matching test case" ) << '\n' << std::endl; return matchedTests; } @@ -68,8 +68,8 @@ namespace Catch { ++it ) { matchedTests++; TestCaseInfo const& testCaseInfo = it->getTestCaseInfo(); - if( startsWith( testCaseInfo.name, "#" ) ) - Catch::cout() << "\"" << testCaseInfo.name << "\"" << std::endl; + if( startsWith( testCaseInfo.name, '#' ) ) + Catch::cout() << '"' << testCaseInfo.name << '"' << std::endl; else Catch::cout() << testCaseInfo.name << std::endl; } @@ -132,9 +132,9 @@ namespace Catch { .setInitialIndent( 0 ) .setIndent( oss.str().size() ) .setWidth( CATCH_CONFIG_CONSOLE_WIDTH-10 ) ); - Catch::cout() << oss.str() << wrapper << "\n"; + Catch::cout() << oss.str() << wrapper << '\n'; } - Catch::cout() << pluralise( tagCounts.size(), "tag" ) << "\n" << std::endl; + Catch::cout() << pluralise( tagCounts.size(), "tag" ) << '\n' << std::endl; return tagCounts.size(); } @@ -153,9 +153,9 @@ namespace Catch { .setWidth( CATCH_CONFIG_CONSOLE_WIDTH - maxNameLen-8 ) ); Catch::cout() << " " << it->first - << ":" + << ':' << std::string( maxNameLen - it->first.size() + 2, ' ' ) - << wrapper << "\n"; + << wrapper << '\n'; } Catch::cout() << std::endl; return factories.size(); diff --git a/3rdparty/catch/include/internal/catch_matchers.hpp b/3rdparty/catch/include/internal/catch_matchers.hpp index ab8fec15f6d..9146e39e9aa 100644 --- a/3rdparty/catch/include/internal/catch_matchers.hpp +++ b/3rdparty/catch/include/internal/catch_matchers.hpp @@ -184,7 +184,7 @@ namespace Matchers { { return m_caseSensitivity == CaseSensitive::No ? " (case insensitive)" - : ""; + : std::string(); } CaseSensitive::Choice m_caseSensitivity; std::string m_str; @@ -202,7 +202,7 @@ namespace Matchers { return m_data.m_str == m_data.adjustString( expr );; } virtual std::string toString() const { - return "equals: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); + return "equals: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); } CasedString m_data; @@ -219,7 +219,7 @@ namespace Matchers { return m_data.adjustString( expr ).find( m_data.m_str ) != std::string::npos; } virtual std::string toString() const { - return "contains: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); + return "contains: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); } CasedString m_data; @@ -237,7 +237,7 @@ namespace Matchers { return startsWith( m_data.adjustString( expr ), m_data.m_str ); } virtual std::string toString() const { - return "starts with: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); + return "starts with: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); } CasedString m_data; @@ -254,7 +254,7 @@ namespace Matchers { return endsWith( m_data.adjustString( expr ), m_data.m_str ); } virtual std::string toString() const { - return "ends with: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); + return "ends with: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); } CasedString m_data; diff --git a/3rdparty/catch/include/internal/catch_platform.h b/3rdparty/catch/include/internal/catch_platform.h index 0142dc14b9c..09b91bfb979 100644 --- a/3rdparty/catch/include/internal/catch_platform.h +++ b/3rdparty/catch/include/internal/catch_platform.h @@ -10,11 +10,19 @@ #define TWOBLUECUBES_CATCH_PLATFORM_H_INCLUDED #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) -#define CATCH_PLATFORM_MAC +# define CATCH_PLATFORM_MAC #elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -#define CATCH_PLATFORM_IPHONE +# define CATCH_PLATFORM_IPHONE +#elif defined(linux) || defined(__linux) || defined(__linux__) +# define CATCH_PLATFORM_LINUX #elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) -#define CATCH_PLATFORM_WINDOWS +# define CATCH_PLATFORM_WINDOWS +# if !defined(NOMINMAX) && !defined(CATCH_CONFIG_NO_NOMINMAX) +# define CATCH_DEFINES_NOMINMAX +# endif +# if !defined(WIN32_LEAN_AND_MEAN) && !defined(CATCH_CONFIG_NO_WIN32_LEAN_AND_MEAN) +# define CATCH_DEFINES_WIN32_LEAN_AND_MEAN +# endif #endif #endif // TWOBLUECUBES_CATCH_PLATFORM_H_INCLUDED diff --git a/3rdparty/catch/include/internal/catch_reporter_registrars.hpp b/3rdparty/catch/include/internal/catch_reporter_registrars.hpp index 7bd7b6100e7..4d5557e17af 100644 --- a/3rdparty/catch/include/internal/catch_reporter_registrars.hpp +++ b/3rdparty/catch/include/internal/catch_reporter_registrars.hpp @@ -74,7 +74,7 @@ namespace Catch { return new T( config ); } virtual std::string getDescription() const { - return ""; + return std::string(); } }; diff --git a/3rdparty/catch/include/internal/catch_result_builder.h b/3rdparty/catch/include/internal/catch_result_builder.h index 89002660d96..dfdffd5f51f 100644 --- a/3rdparty/catch/include/internal/catch_result_builder.h +++ b/3rdparty/catch/include/internal/catch_result_builder.h @@ -19,22 +19,20 @@ namespace Catch { template<typename T> class ExpressionLhs; - struct STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison; - struct CopyableStream { CopyableStream() {} CopyableStream( CopyableStream const& other ) { oss << other.oss.str(); } CopyableStream& operator=( CopyableStream const& other ) { - oss.str(""); + oss.str(std::string()); oss << other.oss.str(); return *this; } std::ostringstream oss; }; - class ResultBuilder { + class ResultBuilder : public DecomposedExpression { public: ResultBuilder( char const* macroName, SourceLineInfo const& lineInfo, @@ -52,19 +50,15 @@ namespace Catch { return *this; } - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( RhsT const& ); - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( RhsT const& ); - ResultBuilder& setResultType( ResultWas::OfType result ); ResultBuilder& setResultType( bool result ); - ResultBuilder& setLhs( std::string const& lhs ); - ResultBuilder& setRhs( std::string const& rhs ); - ResultBuilder& setOp( std::string const& op ); - void endExpression(); + void endExpression( DecomposedExpression const& expr ); + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE; - std::string reconstructExpression() const; AssertionResult build() const; + AssertionResult build( DecomposedExpression const& expr ) const; void useActiveException( ResultDisposition::Flags resultDisposition = ResultDisposition::Normal ); void captureResult( ResultWas::OfType resultType ); @@ -76,14 +70,12 @@ namespace Catch { bool shouldDebugBreak() const; bool allowThrows() const; + template<typename ArgT, typename MatcherT> + void captureMatch( ArgT const& arg, MatcherT const& matcher, char const* matcherString ); + private: AssertionInfo m_assertionInfo; AssertionResultData m_data; - struct ExprComponents { - ExprComponents() : testFalse( false ) {} - bool testFalse; - std::string lhs, rhs, op; - } m_exprComponents; CopyableStream m_stream; bool m_shouldDebugBreak; @@ -106,6 +98,14 @@ namespace Catch { return ExpressionLhs<bool>( *this, value ); } + template<typename ArgT, typename MatcherT> + inline void ResultBuilder::captureMatch( ArgT const& arg, MatcherT const& matcher, + char const* matcherString ) { + MatchExpression<ArgT const&, MatcherT const&> expr( arg, matcher, matcherString ); + setResultType( matcher.match( arg ) ); + endExpression( expr ); + } + } // namespace Catch #endif // TWOBLUECUBES_CATCH_RESULT_BUILDER_H_INCLUDED diff --git a/3rdparty/catch/include/internal/catch_result_builder.hpp b/3rdparty/catch/include/internal/catch_result_builder.hpp index d453fecfb9b..7bb2cdc283a 100644 --- a/3rdparty/catch/include/internal/catch_result_builder.hpp +++ b/3rdparty/catch/include/internal/catch_result_builder.hpp @@ -41,22 +41,10 @@ namespace Catch { m_data.resultType = result ? ResultWas::Ok : ResultWas::ExpressionFailed; return *this; } - ResultBuilder& ResultBuilder::setLhs( std::string const& lhs ) { - m_exprComponents.lhs = lhs; - return *this; - } - ResultBuilder& ResultBuilder::setRhs( std::string const& rhs ) { - m_exprComponents.rhs = rhs; - return *this; - } - ResultBuilder& ResultBuilder::setOp( std::string const& op ) { - m_exprComponents.op = op; - return *this; - } - void ResultBuilder::endExpression() { - m_exprComponents.testFalse = isFalseTest( m_assertionInfo.resultDisposition ); - captureExpression(); + void ResultBuilder::endExpression( DecomposedExpression const& expr ) { + AssertionResult result = build( expr ); + handleResult( result ); } void ResultBuilder::useActiveException( ResultDisposition::Flags resultDisposition ) { @@ -69,6 +57,7 @@ namespace Catch { setResultType( resultType ); captureExpression(); } + void ResultBuilder::captureExpectedException( std::string const& expectedMessage ) { if( expectedMessage.empty() ) captureExpectedException( Matchers::Impl::Generic::AllOf<std::string>() ); @@ -78,7 +67,7 @@ namespace Catch { void ResultBuilder::captureExpectedException( Matchers::Impl::Matcher<std::string> const& matcher ) { - assert( m_exprComponents.testFalse == false ); + assert( !isFalseTest( m_assertionInfo.resultDisposition ) ); AssertionResultData data = m_data; data.resultType = ResultWas::Ok; data.reconstructedExpression = m_assertionInfo.capturedExpression; @@ -96,6 +85,7 @@ namespace Catch { AssertionResult result = build(); handleResult( result ); } + void ResultBuilder::handleResult( AssertionResult const& result ) { getResultCapture().assertionEnded( result ); @@ -107,6 +97,7 @@ namespace Catch { m_shouldThrow = true; } } + void ResultBuilder::react() { if( m_shouldThrow ) throw Catch::TestFailureException(); @@ -117,43 +108,32 @@ namespace Catch { AssertionResult ResultBuilder::build() const { - assert( m_data.resultType != ResultWas::Unknown ); + return build( *this ); + } + // CAVEAT: The returned AssertionResult stores a pointer to the argument expr, + // a temporary DecomposedExpression, which in turn holds references to + // operands, possibly temporary as well. + // It should immediately be passed to handleResult; if the expression + // needs to be reported, its string expansion must be composed before + // the temporaries are destroyed. + AssertionResult ResultBuilder::build( DecomposedExpression const& expr ) const + { + assert( m_data.resultType != ResultWas::Unknown ); AssertionResultData data = m_data; - // Flip bool results if testFalse is set - if( m_exprComponents.testFalse ) { - if( data.resultType == ResultWas::Ok ) - data.resultType = ResultWas::ExpressionFailed; - else if( data.resultType == ResultWas::ExpressionFailed ) - data.resultType = ResultWas::Ok; + // Flip bool results if FalseTest flag is set + if( isFalseTest( m_assertionInfo.resultDisposition ) ) { + data.negate( expr.isBinaryExpression() ); } data.message = m_stream.oss.str(); - data.reconstructedExpression = reconstructExpression(); - if( m_exprComponents.testFalse ) { - if( m_exprComponents.op == "" ) - data.reconstructedExpression = "!" + data.reconstructedExpression; - else - data.reconstructedExpression = "!(" + data.reconstructedExpression + ")"; - } + data.decomposedExpression = &expr; // for lazy reconstruction return AssertionResult( m_assertionInfo, data ); } - std::string ResultBuilder::reconstructExpression() const { - if( m_exprComponents.op == "" ) - return m_exprComponents.lhs.empty() ? m_assertionInfo.capturedExpression : m_exprComponents.op + m_exprComponents.lhs; - else if( m_exprComponents.op == "matches" ) - return m_exprComponents.lhs + " " + m_exprComponents.rhs; - else if( m_exprComponents.op != "!" ) { - if( m_exprComponents.lhs.size() + m_exprComponents.rhs.size() < 40 && - m_exprComponents.lhs.find("\n") == std::string::npos && - m_exprComponents.rhs.find("\n") == std::string::npos ) - return m_exprComponents.lhs + " " + m_exprComponents.op + " " + m_exprComponents.rhs; - else - return m_exprComponents.lhs + "\n" + m_exprComponents.op + "\n" + m_exprComponents.rhs; - } - else - return "{can't expand - use " + m_assertionInfo.macroName + "_FALSE( " + m_assertionInfo.capturedExpression.substr(1) + " ) instead of " + m_assertionInfo.macroName + "( " + m_assertionInfo.capturedExpression + " ) for better diagnostics}"; + + void ResultBuilder::reconstructExpression( std::string& dest ) const { + dest = m_assertionInfo.capturedExpression; } } // end namespace Catch diff --git a/3rdparty/catch/include/internal/catch_run_context.hpp b/3rdparty/catch/include/internal/catch_run_context.hpp index d37bdba1dda..bf2bdb7d499 100644 --- a/3rdparty/catch/include/internal/catch_run_context.hpp +++ b/3rdparty/catch/include/internal/catch_run_context.hpp @@ -97,10 +97,11 @@ namespace Catch { do { - m_trackerContext.startRun(); + ITracker& rootTracker = m_trackerContext.startRun(); + dynamic_cast<SectionTracker&>( rootTracker ).addInitialFilters( m_config->getSectionsToRun() ); do { m_trackerContext.startCycle(); - m_testCaseTracker = &SectionTracker::acquire( m_trackerContext, testInfo.name ); + m_testCaseTracker = &SectionTracker::acquire( m_trackerContext, TestCaseTracking::NameAndLocation( testInfo.name, testInfo.lineInfo ) ); runCurrentTest( redirectedCout, redirectedCerr ); } while( !m_testCaseTracker->isSuccessfullyCompleted() && !aborting() ); @@ -146,7 +147,7 @@ namespace Catch { m_messages.clear(); // Reset working state - m_lastAssertionInfo = AssertionInfo( "", m_lastAssertionInfo.lineInfo, "{Unknown expression after the reported line}" , m_lastAssertionInfo.resultDisposition ); + m_lastAssertionInfo = AssertionInfo( std::string(), m_lastAssertionInfo.lineInfo, "{Unknown expression after the reported line}" , m_lastAssertionInfo.resultDisposition ); m_lastResult = result; } @@ -155,10 +156,7 @@ namespace Catch { Counts& assertions ) { - std::ostringstream oss; - oss << sectionInfo.name << "@" << sectionInfo.lineInfo; - - ITracker& sectionTracker = SectionTracker::acquire( m_trackerContext, oss.str() ); + ITracker& sectionTracker = SectionTracker::acquire( m_trackerContext, TestCaseTracking::NameAndLocation( sectionInfo.name, sectionInfo.lineInfo ) ); if( !sectionTracker.isOpen() ) return false; m_activeSections.push_back( §ionTracker ); @@ -217,7 +215,7 @@ namespace Catch { virtual std::string getCurrentTestName() const { return m_activeTestCase ? m_activeTestCase->getTestCaseInfo().name - : ""; + : std::string(); } virtual const AssertionResult* getLastResult() const { @@ -247,11 +245,11 @@ namespace Catch { deltaTotals.testCases.failed = 1; m_reporter->testCaseEnded( TestCaseStats( testInfo, deltaTotals, - "", - "", + std::string(), + std::string(), false ) ); m_totals.testCases.failed++; - testGroupEnded( "", m_totals, 1, 1 ); + testGroupEnded( std::string(), m_totals, 1, 1 ); m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, false ) ); } @@ -270,7 +268,7 @@ namespace Catch { Counts prevAssertions = m_totals.assertions; double duration = 0; try { - m_lastAssertionInfo = AssertionInfo( "TEST_CASE", testCaseInfo.lineInfo, "", ResultDisposition::Normal ); + m_lastAssertionInfo = AssertionInfo( "TEST_CASE", testCaseInfo.lineInfo, std::string(), ResultDisposition::Normal ); seedRng( *m_config ); diff --git a/3rdparty/catch/include/internal/catch_stream.h b/3rdparty/catch/include/internal/catch_stream.h index 1bf5ee183f8..d8deebab4dd 100644 --- a/3rdparty/catch/include/internal/catch_stream.h +++ b/3rdparty/catch/include/internal/catch_stream.h @@ -15,6 +15,7 @@ #include <streambuf> #include <ostream> #include <fstream> +#include <memory> namespace Catch { diff --git a/3rdparty/catch/include/internal/catch_stream.hpp b/3rdparty/catch/include/internal/catch_stream.hpp index 2703df5dfe2..42f51e82806 100644 --- a/3rdparty/catch/include/internal/catch_stream.hpp +++ b/3rdparty/catch/include/internal/catch_stream.hpp @@ -61,7 +61,7 @@ namespace Catch { m_ofs.open( filename.c_str() ); if( m_ofs.fail() ) { std::ostringstream oss; - oss << "Unable to open file: '" << filename << "'"; + oss << "Unable to open file: '" << filename << '\''; throw std::domain_error( oss.str() ); } } diff --git a/3rdparty/catch/include/internal/catch_tag_alias_registry.hpp b/3rdparty/catch/include/internal/catch_tag_alias_registry.hpp index e5ad11b2340..a1fa56b97b9 100644 --- a/3rdparty/catch/include/internal/catch_tag_alias_registry.hpp +++ b/3rdparty/catch/include/internal/catch_tag_alias_registry.hpp @@ -43,7 +43,7 @@ namespace Catch { void TagAliasRegistry::add( char const* alias, char const* tag, SourceLineInfo const& lineInfo ) { - if( !startsWith( alias, "[@" ) || !endsWith( alias, "]" ) ) { + if( !startsWith( alias, "[@" ) || !endsWith( alias, ']' ) ) { std::ostringstream oss; oss << "error: tag alias, \"" << alias << "\" is not of the form [@alias name].\n" << lineInfo; throw std::domain_error( oss.str().c_str() ); @@ -51,7 +51,7 @@ namespace Catch { if( !m_registry.insert( std::make_pair( alias, TagAlias( tag, lineInfo ) ) ).second ) { std::ostringstream oss; oss << "error: tag alias, \"" << alias << "\" already registered.\n" - << "\tFirst seen at " << find(alias)->lineInfo << "\n" + << "\tFirst seen at " << find(alias)->lineInfo << '\n' << "\tRedefined at " << lineInfo; throw std::domain_error( oss.str().c_str() ); } diff --git a/3rdparty/catch/include/internal/catch_test_case_info.h b/3rdparty/catch/include/internal/catch_test_case_info.h index 6ab1f375b6c..b821abd3c38 100644 --- a/3rdparty/catch/include/internal/catch_test_case_info.h +++ b/3rdparty/catch/include/internal/catch_test_case_info.h @@ -29,7 +29,8 @@ namespace Catch { IsHidden = 1 << 1, ShouldFail = 1 << 2, MayFail = 1 << 3, - Throws = 1 << 4 + Throws = 1 << 4, + NonPortable = 1 << 5 }; TestCaseInfo( std::string const& _name, diff --git a/3rdparty/catch/include/internal/catch_test_case_info.hpp b/3rdparty/catch/include/internal/catch_test_case_info.hpp index 90f53411104..3847cc936ec 100644 --- a/3rdparty/catch/include/internal/catch_test_case_info.hpp +++ b/3rdparty/catch/include/internal/catch_test_case_info.hpp @@ -16,7 +16,7 @@ namespace Catch { inline TestCaseInfo::SpecialProperties parseSpecialTag( std::string const& tag ) { - if( startsWith( tag, "." ) || + if( startsWith( tag, '.' ) || tag == "hide" || tag == "!hide" ) return TestCaseInfo::IsHidden; @@ -26,6 +26,8 @@ namespace Catch { return TestCaseInfo::ShouldFail; else if( tag == "!mayfail" ) return TestCaseInfo::MayFail; + else if( tag == "!nonportable" ) + return TestCaseInfo::NonPortable; else return TestCaseInfo::None; } @@ -100,7 +102,7 @@ namespace Catch { std::ostringstream oss; for( std::set<std::string>::const_iterator it = tags.begin(), itEnd = tags.end(); it != itEnd; ++it ) { - oss << "[" << *it << "]"; + oss << '[' << *it << ']'; std::string lcaseTag = toLower( *it ); testCaseInfo.properties = static_cast<TestCaseInfo::SpecialProperties>( testCaseInfo.properties | parseSpecialTag( lcaseTag ) ); testCaseInfo.lcaseTags.insert( lcaseTag ); diff --git a/3rdparty/catch/include/internal/catch_test_case_registry_impl.hpp b/3rdparty/catch/include/internal/catch_test_case_registry_impl.hpp index a70b019b9f6..0565b54a12d 100644 --- a/3rdparty/catch/include/internal/catch_test_case_registry_impl.hpp +++ b/3rdparty/catch/include/internal/catch_test_case_registry_impl.hpp @@ -19,9 +19,6 @@ #include <iostream> #include <algorithm> -#ifdef CATCH_CPP14_OR_GREATER -#include <random> -#endif namespace Catch { @@ -30,7 +27,7 @@ namespace Catch { result_type operator()( result_type n ) const { return std::rand() % n; } -#ifdef CATCH_CPP14_OR_GREATER +#ifdef CATCH_CONFIG_CPP11_SHUFFLE static constexpr result_type min() { return 0; } static constexpr result_type max() { return 1000000; } result_type operator()() const { return std::rand() % max(); } @@ -38,7 +35,7 @@ namespace Catch { template<typename V> static void shuffle( V& vector ) { RandomNumberGenerator rng; -#ifdef CATCH_CPP14_OR_GREATER +#ifdef CATCH_CONFIG_CPP11_SHUFFLE std::shuffle( vector.begin(), vector.end(), rng ); #else std::random_shuffle( vector.begin(), vector.end(), rng ); @@ -81,7 +78,7 @@ namespace Catch { ss << Colour( Colour::Red ) << "error: TEST_CASE( \"" << it->name << "\" ) already defined.\n" - << "\tFirst seen at " << prev.first->getTestCaseInfo().lineInfo << "\n" + << "\tFirst seen at " << prev.first->getTestCaseInfo().lineInfo << '\n' << "\tRedefined at " << it->getTestCaseInfo().lineInfo << std::endl; throw std::runtime_error(ss.str()); @@ -113,7 +110,7 @@ namespace Catch { virtual void registerTest( TestCase const& testCase ) { std::string name = testCase.getTestCaseInfo().name; - if( name == "" ) { + if( name.empty() ) { std::ostringstream oss; oss << "Anonymous test case " << ++m_unnamedCount; return registerTest( testCase.withName( oss.str() ) ); @@ -162,7 +159,7 @@ namespace Catch { inline std::string extractClassName( std::string const& classOrQualifiedMethodName ) { std::string className = classOrQualifiedMethodName; - if( startsWith( className, "&" ) ) + if( startsWith( className, '&' ) ) { std::size_t lastColons = className.rfind( "::" ); std::size_t penultimateColons = className.rfind( "::", lastColons-1 ); diff --git a/3rdparty/catch/include/internal/catch_test_case_tracker.hpp b/3rdparty/catch/include/internal/catch_test_case_tracker.hpp index 3973e7b9614..5a866336541 100644 --- a/3rdparty/catch/include/internal/catch_test_case_tracker.hpp +++ b/3rdparty/catch/include/internal/catch_test_case_tracker.hpp @@ -15,15 +15,26 @@ #include <string> #include <assert.h> #include <vector> +#include <iterator> namespace Catch { namespace TestCaseTracking { + struct NameAndLocation { + std::string name; + SourceLineInfo location; + + NameAndLocation( std::string const& _name, SourceLineInfo const& _location ) + : name( _name ), + location( _location ) + {} + }; + struct ITracker : SharedImpl<> { virtual ~ITracker(); // static queries - virtual std::string name() const = 0; + virtual NameAndLocation const& nameAndLocation() const = 0; // dynamic queries virtual bool isComplete() const = 0; // Successfully completed or failed @@ -39,15 +50,15 @@ namespace TestCaseTracking { virtual void markAsNeedingAnotherRun() = 0; virtual void addChild( Ptr<ITracker> const& child ) = 0; - virtual ITracker* findChild( std::string const& name ) = 0; + virtual ITracker* findChild( NameAndLocation const& nameAndLocation ) = 0; virtual void openChild() = 0; - + // Debug/ checking virtual bool isSectionTracker() const = 0; virtual bool isIndexTracker() const = 0; }; - class TrackerContext { + class TrackerContext { enum RunState { NotStarted, @@ -110,30 +121,32 @@ namespace TestCaseTracking { Failed }; class TrackerHasName { - std::string m_name; + NameAndLocation m_nameAndLocation; public: - TrackerHasName( std::string const& name ) : m_name( name ) {} + TrackerHasName( NameAndLocation const& nameAndLocation ) : m_nameAndLocation( nameAndLocation ) {} bool operator ()( Ptr<ITracker> const& tracker ) { - return tracker->name() == m_name; + return + tracker->nameAndLocation().name == m_nameAndLocation.name && + tracker->nameAndLocation().location == m_nameAndLocation.location; } }; typedef std::vector<Ptr<ITracker> > Children; - std::string m_name; + NameAndLocation m_nameAndLocation; TrackerContext& m_ctx; ITracker* m_parent; Children m_children; CycleState m_runState; public: - TrackerBase( std::string const& name, TrackerContext& ctx, ITracker* parent ) - : m_name( name ), + TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ) + : m_nameAndLocation( nameAndLocation ), m_ctx( ctx ), m_parent( parent ), m_runState( NotStarted ) {} virtual ~TrackerBase(); - virtual std::string name() const CATCH_OVERRIDE { - return m_name; + virtual NameAndLocation const& nameAndLocation() const CATCH_OVERRIDE { + return m_nameAndLocation; } virtual bool isComplete() const CATCH_OVERRIDE { return m_runState == CompletedSuccessfully || m_runState == Failed; @@ -153,8 +166,8 @@ namespace TestCaseTracking { m_children.push_back( child ); } - virtual ITracker* findChild( std::string const& name ) CATCH_OVERRIDE { - Children::const_iterator it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( name ) ); + virtual ITracker* findChild( NameAndLocation const& nameAndLocation ) CATCH_OVERRIDE { + Children::const_iterator it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( nameAndLocation ) ); return( it != m_children.end() ) ? it->get() : CATCH_NULL; @@ -174,7 +187,7 @@ namespace TestCaseTracking { virtual bool isSectionTracker() const CATCH_OVERRIDE { return false; } virtual bool isIndexTracker() const CATCH_OVERRIDE { return false; } - + void open() { m_runState = Executing; moveToThis(); @@ -232,32 +245,56 @@ namespace TestCaseTracking { }; class SectionTracker : public TrackerBase { + std::vector<std::string> m_filters; public: - SectionTracker( std::string const& name, TrackerContext& ctx, ITracker* parent ) - : TrackerBase( name, ctx, parent ) - {} + SectionTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ) + : TrackerBase( nameAndLocation, ctx, parent ) + { + if( parent ) { + while( !parent->isSectionTracker() ) + parent = &parent->parent(); + + SectionTracker& parentSection = static_cast<SectionTracker&>( *parent ); + addNextFilters( parentSection.m_filters ); + } + } virtual ~SectionTracker(); virtual bool isSectionTracker() const CATCH_OVERRIDE { return true; } - - static SectionTracker& acquire( TrackerContext& ctx, std::string const& name ) { + + static SectionTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation ) { SectionTracker* section = CATCH_NULL; ITracker& currentTracker = ctx.currentTracker(); - if( ITracker* childTracker = currentTracker.findChild( name ) ) { + if( ITracker* childTracker = currentTracker.findChild( nameAndLocation ) ) { assert( childTracker ); assert( childTracker->isSectionTracker() ); section = static_cast<SectionTracker*>( childTracker ); } else { - section = new SectionTracker( name, ctx, ¤tTracker ); + section = new SectionTracker( nameAndLocation, ctx, ¤tTracker ); currentTracker.addChild( section ); } - if( !ctx.completedCycle() && !section->isComplete() ) { + if( !ctx.completedCycle() ) + section->tryOpen(); + return *section; + } + + void tryOpen() { + if( !isComplete() && (m_filters.empty() || m_filters[0].empty() || m_filters[0] == m_nameAndLocation.name ) ) + open(); + } - section->open(); + void addInitialFilters( std::vector<std::string> const& filters ) { + if( !filters.empty() ) { + m_filters.push_back(""); // Root - should never be consulted + m_filters.push_back(""); // Test Case - not a section filter + std::copy( filters.begin(), filters.end(), std::back_inserter( m_filters ) ); } - return *section; + } + void addNextFilters( std::vector<std::string> const& filters ) { + if( filters.size() > 1 ) + std::copy( filters.begin()+1, filters.end(), std::back_inserter( m_filters ) ); } }; @@ -265,26 +302,26 @@ namespace TestCaseTracking { int m_size; int m_index; public: - IndexTracker( std::string const& name, TrackerContext& ctx, ITracker* parent, int size ) - : TrackerBase( name, ctx, parent ), + IndexTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent, int size ) + : TrackerBase( nameAndLocation, ctx, parent ), m_size( size ), m_index( -1 ) {} virtual ~IndexTracker(); virtual bool isIndexTracker() const CATCH_OVERRIDE { return true; } - - static IndexTracker& acquire( TrackerContext& ctx, std::string const& name, int size ) { + + static IndexTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation, int size ) { IndexTracker* tracker = CATCH_NULL; ITracker& currentTracker = ctx.currentTracker(); - if( ITracker* childTracker = currentTracker.findChild( name ) ) { + if( ITracker* childTracker = currentTracker.findChild( nameAndLocation ) ) { assert( childTracker ); assert( childTracker->isIndexTracker() ); tracker = static_cast<IndexTracker*>( childTracker ); } else { - tracker = new IndexTracker( name, ctx, ¤tTracker, size ); + tracker = new IndexTracker( nameAndLocation, ctx, ¤tTracker, size ); currentTracker.addChild( tracker ); } @@ -312,7 +349,7 @@ namespace TestCaseTracking { }; inline ITracker& TrackerContext::startRun() { - m_rootTracker = new SectionTracker( "{root}", *this, CATCH_NULL ); + m_rootTracker = new SectionTracker( NameAndLocation( "{root}", CATCH_INTERNAL_LINEINFO ), *this, CATCH_NULL ); m_currentTracker = CATCH_NULL; m_runState = Executing; return *m_rootTracker; diff --git a/3rdparty/catch/include/internal/catch_test_spec_parser.hpp b/3rdparty/catch/include/internal/catch_test_spec_parser.hpp index 3f794c6b97d..0c328365af4 100644 --- a/3rdparty/catch/include/internal/catch_test_spec_parser.hpp +++ b/3rdparty/catch/include/internal/catch_test_spec_parser.hpp @@ -19,11 +19,12 @@ namespace Catch { class TestSpecParser { - enum Mode{ None, Name, QuotedName, Tag }; + enum Mode{ None, Name, QuotedName, Tag, EscapedName }; Mode m_mode; bool m_exclusion; std::size_t m_start, m_pos; std::string m_arg; + std::vector<std::size_t> m_escapeChars; TestSpec::Filter m_currentFilter; TestSpec m_testSpec; ITagAliasRegistry const* m_tagAliases; @@ -36,6 +37,7 @@ namespace Catch { m_exclusion = false; m_start = std::string::npos; m_arg = m_tagAliases->expandAliases( arg ); + m_escapeChars.clear(); for( m_pos = 0; m_pos < m_arg.size(); ++m_pos ) visitChar( m_arg[m_pos] ); if( m_mode == Name ) @@ -54,6 +56,7 @@ namespace Catch { case '~': m_exclusion = true; return; case '[': return startNewMode( Tag, ++m_pos ); case '"': return startNewMode( QuotedName, ++m_pos ); + case '\\': return escape(); default: startNewMode( Name, m_pos ); break; } } @@ -69,7 +72,11 @@ namespace Catch { addPattern<TestSpec::NamePattern>(); startNewMode( Tag, ++m_pos ); } + else if( c == '\\' ) + escape(); } + else if( m_mode == EscapedName ) + m_mode = Name; else if( m_mode == QuotedName && c == '"' ) addPattern<TestSpec::NamePattern>(); else if( m_mode == Tag && c == ']' ) @@ -79,10 +86,19 @@ namespace Catch { m_mode = mode; m_start = start; } + void escape() { + if( m_mode == None ) + m_start = m_pos; + m_mode = EscapedName; + m_escapeChars.push_back( m_pos ); + } std::string subString() const { return m_arg.substr( m_start, m_pos - m_start ); } template<typename T> void addPattern() { std::string token = subString(); + for( size_t i = 0; i < m_escapeChars.size(); ++i ) + token = token.substr( 0, m_escapeChars[i]-i ) + token.substr( m_escapeChars[i]+1-i ); + m_escapeChars.clear(); if( startsWith( token, "exclude:" ) ) { m_exclusion = true; token = token.substr( 8 ); diff --git a/3rdparty/catch/include/internal/catch_timer.hpp b/3rdparty/catch/include/internal/catch_timer.hpp index 2ba709e36dd..00adfc3bf0f 100644 --- a/3rdparty/catch/include/internal/catch_timer.hpp +++ b/3rdparty/catch/include/internal/catch_timer.hpp @@ -15,7 +15,7 @@ #endif #ifdef CATCH_PLATFORM_WINDOWS -#include <windows.h> +#include "catch_windows_h_proxy.h" #else #include <sys/time.h> #endif diff --git a/3rdparty/catch/include/internal/catch_tostring.hpp b/3rdparty/catch/include/internal/catch_tostring.hpp index 0a20ee2de2b..e61191b9d2d 100644 --- a/3rdparty/catch/include/internal/catch_tostring.hpp +++ b/3rdparty/catch/include/internal/catch_tostring.hpp @@ -69,7 +69,7 @@ std::string toString( std::string const& value ) { } } } - return "\"" + s + "\""; + return '"' + s + '"'; } std::string toString( std::wstring const& value ) { @@ -90,19 +90,19 @@ std::string toString( char* const value ) { std::string toString( const wchar_t* const value ) { - return value ? Catch::toString( std::wstring(value) ) : std::string( "{null string}" ); + return value ? Catch::toString( std::wstring(value) ) : std::string( "{null string}" ); } std::string toString( wchar_t* const value ) { - return Catch::toString( static_cast<const wchar_t*>( value ) ); + return Catch::toString( static_cast<const wchar_t*>( value ) ); } std::string toString( int value ) { std::ostringstream oss; oss << value; if( value > Detail::hexThreshold ) - oss << " (0x" << std::hex << value << ")"; + oss << " (0x" << std::hex << value << ')'; return oss.str(); } @@ -110,7 +110,7 @@ std::string toString( unsigned long value ) { std::ostringstream oss; oss << value; if( value > Detail::hexThreshold ) - oss << " (0x" << std::hex << value << ")"; + oss << " (0x" << std::hex << value << ')'; return oss.str(); } @@ -138,7 +138,7 @@ std::string toString( const double value ) { return fpToString( value, 10 ); } std::string toString( const float value ) { - return fpToString( value, 5 ) + "f"; + return fpToString( value, 5 ) + 'f'; } std::string toString( bool value ) { @@ -146,9 +146,19 @@ std::string toString( bool value ) { } std::string toString( char value ) { - return value < ' ' - ? toString( static_cast<unsigned int>( value ) ) - : Detail::makeString( value ); + if ( value == '\r' ) + return "'\\r'"; + if ( value == '\f' ) + return "'\\f'"; + if ( value == '\n' ) + return "'\\n'"; + if ( value == '\t' ) + return "'\\t'"; + if ( '\0' <= value && value < ' ' ) + return toString( static_cast<unsigned int>( value ) ); + char chstr[] = "' '"; + chstr[1] = value; + return chstr; } std::string toString( signed char value ) { @@ -164,14 +174,14 @@ std::string toString( long long value ) { std::ostringstream oss; oss << value; if( value > Detail::hexThreshold ) - oss << " (0x" << std::hex << value << ")"; + oss << " (0x" << std::hex << value << ')'; return oss.str(); } std::string toString( unsigned long long value ) { std::ostringstream oss; oss << value; if( value > Detail::hexThreshold ) - oss << " (0x" << std::hex << value << ")"; + oss << " (0x" << std::hex << value << ')'; return oss.str(); } #endif diff --git a/3rdparty/catch/include/internal/catch_version.hpp b/3rdparty/catch/include/internal/catch_version.hpp index cca4c6e0816..279facf551b 100644 --- a/3rdparty/catch/include/internal/catch_version.hpp +++ b/3rdparty/catch/include/internal/catch_version.hpp @@ -26,18 +26,18 @@ namespace Catch { {} std::ostream& operator << ( std::ostream& os, Version const& version ) { - os << version.majorVersion << "." - << version.minorVersion << "." + os << version.majorVersion << '.' + << version.minorVersion << '.' << version.patchNumber; if( !version.branchName.empty() ) { - os << "-" << version.branchName - << "." << version.buildNumber; + os << '-' << version.branchName + << '.' << version.buildNumber; } return os; } - Version libraryVersion( 1, 5, 8, "", 0 ); + Version libraryVersion( 1, 7, 0, "", 0 ); } diff --git a/3rdparty/catch/include/internal/catch_wildcard_pattern.hpp b/3rdparty/catch/include/internal/catch_wildcard_pattern.hpp index cd8b07e1921..6ce66a4d189 100644 --- a/3rdparty/catch/include/internal/catch_wildcard_pattern.hpp +++ b/3rdparty/catch/include/internal/catch_wildcard_pattern.hpp @@ -27,11 +27,11 @@ namespace Catch m_wildcard( NoWildcard ), m_pattern( adjustCase( pattern ) ) { - if( startsWith( m_pattern, "*" ) ) { + if( startsWith( m_pattern, '*' ) ) { m_pattern = m_pattern.substr( 1 ); m_wildcard = WildcardAtStart; } - if( endsWith( m_pattern, "*" ) ) { + if( endsWith( m_pattern, '*' ) ) { m_pattern = m_pattern.substr( 0, m_pattern.size()-1 ); m_wildcard = static_cast<WildcardPosition>( m_wildcard | WildcardAtEnd ); } diff --git a/3rdparty/catch/include/internal/catch_windows_h_proxy.h b/3rdparty/catch/include/internal/catch_windows_h_proxy.h new file mode 100644 index 00000000000..4f059b4a106 --- /dev/null +++ b/3rdparty/catch/include/internal/catch_windows_h_proxy.h @@ -0,0 +1,32 @@ +/* + * Created by Martin on 16/01/2017. + * + * Distributed under the Boost Software License, Version 1.0. (See accompanying + * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + +#ifndef TWOBLUECUBES_CATCH_WINDOWS_H_PROXY_H_INCLUDED +#define TWOBLUECUBES_CATCH_WINDOWS_H_PROXY_H_INCLUDED + +#ifdef CATCH_DEFINES_NOMINMAX +# define NOMINMAX +#endif +#ifdef CATCH_DEFINES_WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +#endif + +#ifdef __AFXDLL +#include <AfxWin.h> +#else +#include <windows.h> +#endif + +#ifdef CATCH_DEFINES_NOMINMAX +# undef NOMINMAX +#endif +#ifdef CATCH_DEFINES_WIN32_LEAN_AND_MEAN +# undef WIN32_LEAN_AND_MEAN +#endif + + +#endif // TWOBLUECUBES_CATCH_WINDOWS_H_PROXY_H_INCLUDED diff --git a/3rdparty/catch/include/internal/catch_xmlwriter.hpp b/3rdparty/catch/include/internal/catch_xmlwriter.hpp index 97890d2f830..e5fe1775eab 100644 --- a/3rdparty/catch/include/internal/catch_xmlwriter.hpp +++ b/3rdparty/catch/include/internal/catch_xmlwriter.hpp @@ -57,7 +57,7 @@ namespace Catch { default: // Escape control chars - based on contribution by @espenalb in PR #465 and // by @mrpi PR #588 - if ( ( c < '\x09' ) || ( c > '\x0D' && c < '\x20') || c=='\x7F' ) + if ( ( c >= 0 && c < '\x09' ) || ( c > '\x0D' && c < '\x20') || c=='\x7F' ) os << "&#x" << std::uppercase << std::hex << std::setfill('0') << std::setw(2) << static_cast<int>( c ) << ';'; else os << c; @@ -136,7 +136,7 @@ namespace Catch { XmlWriter& startElement( std::string const& name ) { ensureTagClosed(); newlineIfNecessary(); - stream() << m_indent << "<" << name; + stream() << m_indent << '<' << name; m_tags.push_back( name ); m_indent += " "; m_tagIsOpen = true; @@ -165,12 +165,12 @@ namespace Catch { XmlWriter& writeAttribute( std::string const& name, std::string const& attribute ) { if( !name.empty() && !attribute.empty() ) - stream() << " " << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << "\""; + stream() << ' ' << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << '"'; return *this; } XmlWriter& writeAttribute( std::string const& name, bool attribute ) { - stream() << " " << name << "=\"" << ( attribute ? "true" : "false" ) << "\""; + stream() << ' ' << name << "=\"" << ( attribute ? "true" : "false" ) << '"'; return *this; } @@ -202,7 +202,7 @@ namespace Catch { XmlWriter& writeBlankLine() { ensureTagClosed(); - stream() << "\n"; + stream() << '\n'; return *this; } @@ -227,7 +227,7 @@ namespace Catch { void newlineIfNecessary() { if( m_needsNewline ) { - stream() << "\n"; + stream() << '\n'; m_needsNewline = false; } } diff --git a/3rdparty/catch/include/reporters/catch_reporter_bases.hpp b/3rdparty/catch/include/reporters/catch_reporter_bases.hpp index cfc28f29d55..1469a9e18c6 100644 --- a/3rdparty/catch/include/reporters/catch_reporter_bases.hpp +++ b/3rdparty/catch/include/reporters/catch_reporter_bases.hpp @@ -108,12 +108,12 @@ namespace Catch { struct BySectionInfo { BySectionInfo( SectionInfo const& other ) : m_other( other ) {} - BySectionInfo( BySectionInfo const& other ) : m_other( other.m_other ) {} + BySectionInfo( BySectionInfo const& other ) : m_other( other.m_other ) {} bool operator() ( Ptr<SectionNode> const& node ) const { return node->stats.sectionInfo.lineInfo == m_other.lineInfo; } private: - void operator=( BySectionInfo const& ); + void operator=( BySectionInfo const& ); SectionInfo const& m_other; }; @@ -170,6 +170,12 @@ namespace Catch { assert( !m_sectionStack.empty() ); SectionNode& sectionNode = *m_sectionStack.back(); sectionNode.assertions.push_back( assertionStats ); + // AssertionResult holds a pointer to a temporary DecomposedExpression, + // which getExpandedExpression() calls to build the expression string. + // Our section stack copy of the assertionResult will likely outlive the + // temporary, so it must be expanded or discarded now to avoid calling + // a destroyed object later. + prepareExpandedExpression( sectionNode.assertions.back().assertionResult ); return true; } virtual void sectionEnded( SectionStats const& sectionStats ) CATCH_OVERRIDE { @@ -204,6 +210,13 @@ namespace Catch { virtual void skipTest( TestCaseInfo const& ) CATCH_OVERRIDE {} + virtual void prepareExpandedExpression( AssertionResult& result ) const { + if( result.isOk() ) + result.discardDecomposedExpression(); + else + result.expandDecomposedExpression(); + } + Ptr<IConfig const> m_config; std::ostream& stream; std::vector<AssertionStats> m_assertions; diff --git a/3rdparty/catch/include/reporters/catch_reporter_compact.hpp b/3rdparty/catch/include/reporters/catch_reporter_compact.hpp index a5a17297211..66db9078abe 100644 --- a/3rdparty/catch/include/reporters/catch_reporter_compact.hpp +++ b/3rdparty/catch/include/reporters/catch_reporter_compact.hpp @@ -34,7 +34,7 @@ namespace Catch { } virtual void noMatchingTestCases( std::string const& spec ) { - stream << "No test cases matched '" << spec << "'" << std::endl; + stream << "No test cases matched '" << spec << '\'' << std::endl; } virtual void assertionStarting( AssertionInfo const& ) { @@ -61,7 +61,7 @@ namespace Catch { virtual void testRunEnded( TestRunStats const& _testRunStats ) { printTotals( _testRunStats.totals ); - stream << "\n" << std::endl; + stream << '\n' << std::endl; StreamingReporterBase::testRunEnded( _testRunStats ); } @@ -161,26 +161,26 @@ namespace Catch { void printSourceInfo() const { Colour colourGuard( Colour::FileName ); - stream << result.getSourceInfo() << ":"; + stream << result.getSourceInfo() << ':'; } void printResultType( Colour::Code colour, std::string passOrFail ) const { if( !passOrFail.empty() ) { { Colour colourGuard( colour ); - stream << " " << passOrFail; + stream << ' ' << passOrFail; } - stream << ":"; + stream << ':'; } } void printIssue( std::string issue ) const { - stream << " " << issue; + stream << ' ' << issue; } void printExpressionWas() { if( result.hasExpression() ) { - stream << ";"; + stream << ';'; { Colour colour( dimColour() ); stream << " expression was:"; @@ -191,7 +191,7 @@ namespace Catch { void printOriginalExpression() const { if( result.hasExpression() ) { - stream << " " << result.getExpression(); + stream << ' ' << result.getExpression(); } } @@ -207,7 +207,7 @@ namespace Catch { void printMessage() { if ( itMessage != messages.end() ) { - stream << " '" << itMessage->message << "'"; + stream << " '" << itMessage->message << '\''; ++itMessage; } } @@ -222,13 +222,13 @@ namespace Catch { { Colour colourGuard( colour ); - stream << " with " << pluralise( N, "message" ) << ":"; + stream << " with " << pluralise( N, "message" ) << ':'; } for(; itMessage != itEnd; ) { // If this assertion is a warning ignore any INFO messages if( printInfoMessages || itMessage->type != ResultWas::Info ) { - stream << " '" << itMessage->message << "'"; + stream << " '" << itMessage->message << '\''; if ( ++itMessage != itEnd ) { Colour colourGuard( dimColour() ); stream << " and"; @@ -254,7 +254,7 @@ namespace Catch { // - green: Passed [both/all] N tests cases with M assertions. std::string bothOrAll( std::size_t count ) const { - return count == 1 ? "" : count == 2 ? "both " : "all " ; + return count == 1 ? std::string() : count == 2 ? "both " : "all " ; } void printTotals( const Totals& totals ) const { @@ -265,12 +265,12 @@ namespace Catch { Colour colour( Colour::ResultError ); const std::string qualify_assertions_failed = totals.assertions.failed == totals.assertions.total() ? - bothOrAll( totals.assertions.failed ) : ""; + bothOrAll( totals.assertions.failed ) : std::string(); stream << "Failed " << bothOrAll( totals.testCases.failed ) << pluralise( totals.testCases.failed, "test case" ) << ", " "failed " << qualify_assertions_failed << - pluralise( totals.assertions.failed, "assertion" ) << "."; + pluralise( totals.assertions.failed, "assertion" ) << '.'; } else if( totals.assertions.total() == 0 ) { stream << @@ -282,14 +282,14 @@ namespace Catch { Colour colour( Colour::ResultError ); stream << "Failed " << pluralise( totals.testCases.failed, "test case" ) << ", " - "failed " << pluralise( totals.assertions.failed, "assertion" ) << "."; + "failed " << pluralise( totals.assertions.failed, "assertion" ) << '.'; } else { Colour colour( Colour::ResultSuccess ); stream << "Passed " << bothOrAll( totals.testCases.passed ) << pluralise( totals.testCases.passed, "test case" ) << - " with " << pluralise( totals.assertions.passed, "assertion" ) << "."; + " with " << pluralise( totals.assertions.passed, "assertion" ) << '.'; } } }; diff --git a/3rdparty/catch/include/reporters/catch_reporter_console.hpp b/3rdparty/catch/include/reporters/catch_reporter_console.hpp index 5564d88514b..9303fb2e7ec 100644 --- a/3rdparty/catch/include/reporters/catch_reporter_console.hpp +++ b/3rdparty/catch/include/reporters/catch_reporter_console.hpp @@ -27,7 +27,7 @@ namespace Catch { } virtual void noMatchingTestCases( std::string const& spec ) CATCH_OVERRIDE { - stream << "No test cases matched '" << spec << "'" << std::endl; + stream << "No test cases matched '" << spec << '\'' << std::endl; } virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE { @@ -69,12 +69,12 @@ namespace Catch { } if( m_headerPrinted ) { if( m_config->showDurations() == ShowDurations::Always ) - stream << "Completed in " << _sectionStats.durationInSeconds << "s" << std::endl; + stream << "Completed in " << _sectionStats.durationInSeconds << 's' << std::endl; m_headerPrinted = false; } else { if( m_config->showDurations() == ShowDurations::Always ) - stream << _sectionStats.sectionInfo.name << " completed in " << _sectionStats.durationInSeconds << "s" << std::endl; + stream << _sectionStats.sectionInfo.name << " completed in " << _sectionStats.durationInSeconds << 's' << std::endl; } StreamingReporterBase::sectionEnded( _sectionStats ); } @@ -88,7 +88,7 @@ namespace Catch { printSummaryDivider(); stream << "Summary for group '" << _testGroupStats.groupInfo.name << "':\n"; printTotals( _testGroupStats.totals ); - stream << "\n" << std::endl; + stream << '\n' << std::endl; } StreamingReporterBase::testGroupEnded( _testGroupStats ); } @@ -180,13 +180,13 @@ namespace Catch { printSourceInfo(); if( stats.totals.assertions.total() > 0 ) { if( result.isOk() ) - stream << "\n"; + stream << '\n'; printResultType(); printOriginalExpression(); printReconstructedExpression(); } else { - stream << "\n"; + stream << '\n'; } printMessage(); } @@ -203,25 +203,25 @@ namespace Catch { Colour colourGuard( Colour::OriginalExpression ); stream << " "; stream << result.getExpressionInMacro(); - stream << "\n"; + stream << '\n'; } } void printReconstructedExpression() const { if( result.hasExpandedExpression() ) { stream << "with expansion:\n"; Colour colourGuard( Colour::ReconstructedExpression ); - stream << Text( result.getExpandedExpression(), TextAttributes().setIndent(2) ) << "\n"; + stream << Text( result.getExpandedExpression(), TextAttributes().setIndent(2) ) << '\n'; } } void printMessage() const { if( !messageLabel.empty() ) - stream << messageLabel << ":" << "\n"; + stream << messageLabel << ':' << '\n'; for( std::vector<MessageInfo>::const_iterator it = messages.begin(), itEnd = messages.end(); it != itEnd; ++it ) { // If this assertion is a warning ignore any INFO messages if( printInfoMessages || it->type != ResultWas::Info ) - stream << Text( it->message, TextAttributes().setIndent(2) ) << "\n"; + stream << Text( it->message, TextAttributes().setIndent(2) ) << '\n'; } } void printSourceInfo() const { @@ -253,7 +253,7 @@ namespace Catch { } } void lazyPrintRunInfo() { - stream << "\n" << getLineOfChars<'~'>() << "\n"; + stream << '\n' << getLineOfChars<'~'>() << '\n'; Colour colour( Colour::SecondaryText ); stream << currentTestRunInfo->name << " is a Catch v" << libraryVersion << " host application.\n" @@ -287,19 +287,19 @@ namespace Catch { SourceLineInfo lineInfo = m_sectionStack.front().lineInfo; if( !lineInfo.empty() ){ - stream << getLineOfChars<'-'>() << "\n"; + stream << getLineOfChars<'-'>() << '\n'; Colour colourGuard( Colour::FileName ); - stream << lineInfo << "\n"; + stream << lineInfo << '\n'; } - stream << getLineOfChars<'.'>() << "\n" << std::endl; + stream << getLineOfChars<'.'>() << '\n' << std::endl; } void printClosedHeader( std::string const& _name ) { printOpenHeader( _name ); - stream << getLineOfChars<'.'>() << "\n"; + stream << getLineOfChars<'.'>() << '\n'; } void printOpenHeader( std::string const& _name ) { - stream << getLineOfChars<'-'>() << "\n"; + stream << getLineOfChars<'-'>() << '\n'; { Colour colourGuard( Colour::Headers ); printHeaderString( _name ); @@ -316,7 +316,7 @@ namespace Catch { i = 0; stream << Text( _string, TextAttributes() .setIndent( indent+i) - .setInitialIndent( indent ) ) << "\n"; + .setInitialIndent( indent ) ) << '\n'; } struct SummaryColumn { @@ -331,9 +331,9 @@ namespace Catch { std::string row = oss.str(); for( std::vector<std::string>::iterator it = rows.begin(); it != rows.end(); ++it ) { while( it->size() < row.size() ) - *it = " " + *it; + *it = ' ' + *it; while( it->size() > row.size() ) - row = " " + row; + row = ' ' + row; } rows.push_back( row ); return *this; @@ -353,8 +353,8 @@ namespace Catch { stream << Colour( Colour::ResultSuccess ) << "All tests passed"; stream << " (" << pluralise( totals.assertions.passed, "assertion" ) << " in " - << pluralise( totals.testCases.passed, "test case" ) << ")" - << "\n"; + << pluralise( totals.testCases.passed, "test case" ) << ')' + << '\n'; } else { @@ -389,10 +389,10 @@ namespace Catch { else if( value != "0" ) { stream << Colour( Colour::LightGrey ) << " | "; stream << Colour( it->colour ) - << value << " " << it->label; + << value << ' ' << it->label; } } - stream << "\n"; + stream << '\n'; } static std::size_t makeRatio( std::size_t number, std::size_t total ) { @@ -428,10 +428,10 @@ namespace Catch { else { stream << Colour( Colour::Warning ) << std::string( CATCH_CONFIG_CONSOLE_WIDTH-1, '=' ); } - stream << "\n"; + stream << '\n'; } void printSummaryDivider() { - stream << getLineOfChars<'-'>() << "\n"; + stream << getLineOfChars<'-'>() << '\n'; } private: diff --git a/3rdparty/catch/include/reporters/catch_reporter_junit.hpp b/3rdparty/catch/include/reporters/catch_reporter_junit.hpp index e656882f579..91d3e541f38 100644 --- a/3rdparty/catch/include/reporters/catch_reporter_junit.hpp +++ b/3rdparty/catch/include/reporters/catch_reporter_junit.hpp @@ -18,6 +18,35 @@ namespace Catch { + namespace { + std::string getCurrentTimestamp() { + // Beware, this is not reentrant because of backward compatibility issues + // Also, UTC only, again because of backward compatibility (%z is C++11) + time_t rawtime; + std::time(&rawtime); + const size_t timeStampSize = sizeof("2017-01-16T17:06:45Z"); + +#ifdef CATCH_PLATFORM_WINDOWS + std::tm timeInfo = {}; + gmtime_s(&timeInfo, &rawtime); +#else + std::tm* timeInfo; + timeInfo = std::gmtime(&rawtime); +#endif + + char timeStamp[timeStampSize]; + const char * const fmt = "%Y-%m-%dT%H:%M:%SZ"; + +#ifdef CATCH_PLATFORM_WINDOWS + std::strftime(timeStamp, timeStampSize, fmt, &timeInfo); +#else + std::strftime(timeStamp, timeStampSize, fmt, timeInfo); +#endif + return std::string(timeStamp); + } + + } + class JunitReporter : public CumulativeReporterBase { public: JunitReporter( ReporterConfig const& _config ) @@ -82,7 +111,7 @@ namespace Catch { xml.writeAttribute( "time", "" ); else xml.writeAttribute( "time", suiteTime ); - xml.writeAttribute( "timestamp", "tbd" ); // !TBD + xml.writeAttribute( "timestamp", getCurrentTimestamp() ); // Write test cases for( TestGroupNode::ChildNodes::const_iterator @@ -117,7 +146,7 @@ namespace Catch { SectionNode const& sectionNode ) { std::string name = trim( sectionNode.stats.sectionInfo.name ); if( !rootName.empty() ) - name = rootName + "/" + name; + name = rootName + '/' + name; if( !sectionNode.assertions.empty() || !sectionNode.stdOut.empty() || @@ -195,14 +224,14 @@ namespace Catch { std::ostringstream oss; if( !result.getMessage().empty() ) - oss << result.getMessage() << "\n"; + oss << result.getMessage() << '\n'; for( std::vector<MessageInfo>::const_iterator it = stats.infoMessages.begin(), itEnd = stats.infoMessages.end(); it != itEnd; ++it ) if( it->type == ResultWas::Info ) - oss << it->message << "\n"; + oss << it->message << '\n'; oss << "at " << result.getSourceInfo(); xml.writeText( oss.str(), false ); diff --git a/3rdparty/catch/include/reporters/catch_reporter_multi.hpp b/3rdparty/catch/include/reporters/catch_reporter_multi.hpp index 7fc08f69934..0e06892fd1a 100644 --- a/3rdparty/catch/include/reporters/catch_reporter_multi.hpp +++ b/3rdparty/catch/include/reporters/catch_reporter_multi.hpp @@ -118,11 +118,11 @@ public: // IStreamingReporter ++it ) (*it)->skipTest( testInfo ); } - + virtual MultipleReporters* tryAsMulti() CATCH_OVERRIDE { return this; } - + }; Ptr<IStreamingReporter> addReporter( Ptr<IStreamingReporter> const& existingReporter, Ptr<IStreamingReporter> const& additionalReporter ) { diff --git a/3rdparty/catch/include/reporters/catch_reporter_xml.hpp b/3rdparty/catch/include/reporters/catch_reporter_xml.hpp index 153f0e7a4b1..c470ceb011c 100644 --- a/3rdparty/catch/include/reporters/catch_reporter_xml.hpp +++ b/3rdparty/catch/include/reporters/catch_reporter_xml.hpp @@ -20,6 +20,7 @@ namespace Catch { public: XmlReporter( ReporterConfig const& _config ) : StreamingReporterBase( _config ), + m_xml(_config.stream()), m_sectionDepth( 0 ) { m_reporterPrefs.shouldRedirectStdOut = true; @@ -39,7 +40,6 @@ namespace Catch { virtual void testRunStarting( TestRunInfo const& testInfo ) CATCH_OVERRIDE { StreamingReporterBase::testRunStarting( testInfo ); - m_xml.setStream( stream ); m_xml.startElement( "Catch" ); if( !m_config->name().empty() ) m_xml.writeAttribute( "name", m_config->name() ); @@ -96,7 +96,7 @@ namespace Catch { if( assertionResult.hasExpression() ) { m_xml.startElement( "Expression" ) .writeAttribute( "success", assertionResult.succeeded() ) - .writeAttribute( "type", assertionResult.getTestMacroName() ) + .writeAttribute( "type", assertionResult.getTestMacroName() ) .writeAttribute( "filename", assertionResult.getSourceInfo().file ) .writeAttribute( "line", assertionResult.getSourceInfo().line ); diff --git a/3rdparty/catch/projects/Benchmark/BenchMain.cpp b/3rdparty/catch/projects/Benchmark/BenchMain.cpp new file mode 100644 index 00000000000..32ef4ed9c23 --- /dev/null +++ b/3rdparty/catch/projects/Benchmark/BenchMain.cpp @@ -0,0 +1,9 @@ +/* + * Created by Martin on 16/01/2017. + * + * Distributed under the Boost Software License, Version 1.0. (See accompanying + * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + +#define CATCH_CONFIG_MAIN +#include "catch.hpp" diff --git a/3rdparty/catch/projects/Benchmark/StringificationBench.cpp b/3rdparty/catch/projects/Benchmark/StringificationBench.cpp new file mode 100644 index 00000000000..1c14939b407 --- /dev/null +++ b/3rdparty/catch/projects/Benchmark/StringificationBench.cpp @@ -0,0 +1,46 @@ +/* + * Created by Martin on 16/01/2017. + * + * Distributed under the Boost Software License, Version 1.0. (See accompanying + * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + +#include "catch.hpp" + +#include <vector> + +/////////////////////////////////////////////////////////////////////////////// +TEST_CASE("Successful tests -- REQUIRE", "[Success]") { + const size_t sz = 1 * 1024 * 1024; + + + std::vector<size_t> vec; vec.reserve(sz); + for (size_t i = 0; i < sz; ++i){ + vec.push_back(i); + REQUIRE(vec.back() == i); + } +} + +/////////////////////////////////////////////////////////////////////////////// +TEST_CASE("Successful tests -- CHECK", "[Success]") { + const size_t sz = 1 * 1024 * 1024; + + + std::vector<size_t> vec; vec.reserve(sz); + for (size_t i = 0; i < sz; ++i){ + vec.push_back(i); + CHECK(vec.back() == i); + } +} + +/////////////////////////////////////////////////////////////////////////////// +TEST_CASE("Unsuccessful tests -- CHECK", "[Failure]") { + const size_t sz = 1024 * 1024; + + + std::vector<size_t> vec; vec.reserve(sz); + for (size_t i = 0; i < sz; ++i){ + vec.push_back(i); + CHECK(vec.size() == i); + } +} diff --git a/3rdparty/catch/projects/Benchmark/readme.txt b/3rdparty/catch/projects/Benchmark/readme.txt new file mode 100644 index 00000000000..c4d2fabd921 --- /dev/null +++ b/3rdparty/catch/projects/Benchmark/readme.txt @@ -0,0 +1,4 @@ +This is very much a work in progress. +The past results are standardized to a developer's machine, +the benchmarking script is basic and there are only 3 benchmarks, +but this should get better in time. For now, at least there is something to go by. diff --git a/3rdparty/catch/projects/Benchmark/results/2017-01-14T21-53-49-e3659cdddd43ba4df9e4846630be6a6a7bd85a07.result b/3rdparty/catch/projects/Benchmark/results/2017-01-14T21-53-49-e3659cdddd43ba4df9e4846630be6a6a7bd85a07.result new file mode 100644 index 00000000000..4b6fc6590ee --- /dev/null +++ b/3rdparty/catch/projects/Benchmark/results/2017-01-14T21-53-49-e3659cdddd43ba4df9e4846630be6a6a7bd85a07.result @@ -0,0 +1,3 @@ +Successful tests -- CHECK: median: 3.38116 (s), stddev: 0.11567366292001534 (s) +Successful tests -- REQUIRE: median: 3.479955 (s), stddev: 0.16295972890734556 (s) +Unsuccessful tests -- CHECK: median: 1.966895 (s), stddev: 0.06323488524716572 (s) diff --git a/3rdparty/catch/projects/Benchmark/results/2017-01-14T21-59-08-a1e9b841ff500b2f39ccfd4193ae450cb653da05.result b/3rdparty/catch/projects/Benchmark/results/2017-01-14T21-59-08-a1e9b841ff500b2f39ccfd4193ae450cb653da05.result new file mode 100644 index 00000000000..98c84601780 --- /dev/null +++ b/3rdparty/catch/projects/Benchmark/results/2017-01-14T21-59-08-a1e9b841ff500b2f39ccfd4193ae450cb653da05.result @@ -0,0 +1,3 @@ +Successful tests -- CHECK: median: 1.30312 (s), stddev: 0.08759818557862176 (s) +Successful tests -- REQUIRE: median: 1.341535 (s), stddev: 0.1479193390143576 (s) +Unsuccessful tests -- CHECK: median: 1.967755 (s), stddev: 0.07921104121269959 (s) diff --git a/3rdparty/catch/projects/Benchmark/results/2017-01-15T09-35-14-3b98a0166f7b7196eba2ad518174d1a77165166d.result b/3rdparty/catch/projects/Benchmark/results/2017-01-15T09-35-14-3b98a0166f7b7196eba2ad518174d1a77165166d.result new file mode 100644 index 00000000000..fe6366b89d1 --- /dev/null +++ b/3rdparty/catch/projects/Benchmark/results/2017-01-15T09-35-14-3b98a0166f7b7196eba2ad518174d1a77165166d.result @@ -0,0 +1,3 @@ +Successful tests -- CHECK: median: 1.2982 (s), stddev: 0.019540648829214084 (s) +Successful tests -- REQUIRE: median: 1.30102 (s), stddev: 0.014758430547392974 (s) +Unsuccessful tests -- CHECK: median: 15.520199999999999 (s), stddev: 0.09536359426485094 (s) diff --git a/3rdparty/catch/projects/Benchmark/results/2017-01-29T22-08-36-60f8ebec49c5bc58d3604bf1a72cd3f7d129bf2e.result b/3rdparty/catch/projects/Benchmark/results/2017-01-29T22-08-36-60f8ebec49c5bc58d3604bf1a72cd3f7d129bf2e.result new file mode 100644 index 00000000000..c9b4d640b4e --- /dev/null +++ b/3rdparty/catch/projects/Benchmark/results/2017-01-29T22-08-36-60f8ebec49c5bc58d3604bf1a72cd3f7d129bf2e.result @@ -0,0 +1,3 @@ +Successful tests -- CHECK: median: 0.7689014999999999 (s), stddev: 0.02127512078801068 (s) +Successful tests -- REQUIRE: median: 0.772845 (s), stddev: 0.03011638381365052 (s) +Unsuccessful tests -- CHECK: median: 15.49 (s), stddev: 0.536088571143903 (s) diff --git a/3rdparty/catch/projects/Benchmark/results/2017-01-29T23-13-35-bcaa2f9646c5ce50758f8582307c99501a932e1a.result b/3rdparty/catch/projects/Benchmark/results/2017-01-29T23-13-35-bcaa2f9646c5ce50758f8582307c99501a932e1a.result new file mode 100644 index 00000000000..5b82330f9c0 --- /dev/null +++ b/3rdparty/catch/projects/Benchmark/results/2017-01-29T23-13-35-bcaa2f9646c5ce50758f8582307c99501a932e1a.result @@ -0,0 +1,3 @@ +Successful tests -- CHECK: median: 0.775769 (s), stddev: 0.014802129132136525 (s) +Successful tests -- REQUIRE: median: 0.785235 (s), stddev: 0.03532672836834896 (s) +Unsuccessful tests -- CHECK: median: 15.156600000000001 (s), stddev: 0.2832375673450742 (s) diff --git a/3rdparty/catch/projects/CMake/CMakeLists.txt b/3rdparty/catch/projects/CMake/CMakeLists.txt deleted file mode 100644 index f4fb704f1a6..00000000000 --- a/3rdparty/catch/projects/CMake/CMakeLists.txt +++ /dev/null @@ -1,68 +0,0 @@ -cmake_minimum_required(VERSION 2.8) - -project(Catch) - -# define some folders -get_filename_component(CATCH_DIR "${CMAKE_CURRENT_SOURCE_DIR}" PATH) -get_filename_component(CATCH_DIR "${CATCH_DIR}" PATH) -set(SELF_TEST_DIR ${CATCH_DIR}/projects/SelfTest) -if(USE_CPP11) - ## We can't turn this on by default, since it breaks on travis - message(STATUS "Enabling C++11") - set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}") -endif() - -# define the sources of the self test -set(SOURCES - ${SELF_TEST_DIR}/ApproxTests.cpp - ${SELF_TEST_DIR}/BDDTests.cpp - ${SELF_TEST_DIR}/ClassTests.cpp - ${SELF_TEST_DIR}/ConditionTests.cpp - ${SELF_TEST_DIR}/ExceptionTests.cpp - ${SELF_TEST_DIR}/GeneratorTests.cpp - ${SELF_TEST_DIR}/MessageTests.cpp - ${SELF_TEST_DIR}/MiscTests.cpp - ${SELF_TEST_DIR}/PartTrackerTests.cpp - ${SELF_TEST_DIR}/TestMain.cpp - ${SELF_TEST_DIR}/TrickyTests.cpp - ${SELF_TEST_DIR}/VariadicMacrosTests.cpp - ${SELF_TEST_DIR}/EnumToString.cpp - ${SELF_TEST_DIR}/ToStringPair.cpp - ${SELF_TEST_DIR}/ToStringVector.cpp - ${SELF_TEST_DIR}/ToStringWhich.cpp - ${SELF_TEST_DIR}/ToStringTuple.cpp - ${SELF_TEST_DIR}/CmdLineTests.cpp - ${SELF_TEST_DIR}/TagAliasTests.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_common.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_console_colour.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_debugger.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_capture.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_config.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_exception.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_generators.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_registry_hub.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_reporter.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_runner.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_interfaces_testcase.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_message.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_option.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_ptr.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_stream.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_streambuf.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_test_spec.cpp - ${SELF_TEST_DIR}/SurrogateCpps/catch_xmlwriter.cpp - ) - -# configure the executable -include_directories(${CATCH_DIR}/include) -add_executable(SelfTest ${SOURCES}) - -# configure unit tests via CTest -enable_testing() -add_test(NAME RunTests COMMAND SelfTest) - -add_test(NAME ListTests COMMAND SelfTest --list-tests) -set_tests_properties(ListTests PROPERTIES PASS_REGULAR_EXPRESSION "[0-9]+ test cases") - -add_test(NAME ListTags COMMAND SelfTest --list-tags) -set_tests_properties(ListTags PROPERTIES PASS_REGULAR_EXPRESSION "[0-9]+ tags") diff --git a/3rdparty/catch/projects/SelfTest/ApproxTests.cpp b/3rdparty/catch/projects/SelfTest/ApproxTests.cpp index 53656596c0a..6b7cf44a394 100644 --- a/3rdparty/catch/projects/SelfTest/ApproxTests.cpp +++ b/3rdparty/catch/projects/SelfTest/ApproxTests.cpp @@ -42,6 +42,36 @@ TEST_CASE /////////////////////////////////////////////////////////////////////////////// TEST_CASE ( + "Less-than inequalities with different epsilons", + "[Approx]" +) +{ + double d = 1.23; + + REQUIRE( d <= Approx( 1.24 ) ); + REQUIRE( d <= Approx( 1.23 ) ); + REQUIRE_FALSE( d <= Approx( 1.22 ) ); + REQUIRE( d <= Approx( 1.22 ).epsilon(0.1) ); +} + +/////////////////////////////////////////////////////////////////////////////// +TEST_CASE +( + "Greater-than inequalities with different epsilons", + "[Approx]" +) +{ + double d = 1.23; + + REQUIRE( d >= Approx( 1.22 ) ); + REQUIRE( d >= Approx( 1.23 ) ); + REQUIRE_FALSE( d >= Approx( 1.24 ) ); + REQUIRE( d >= Approx( 1.24 ).epsilon(0.1) ); +} + +/////////////////////////////////////////////////////////////////////////////// +TEST_CASE +( "Approximate comparisons with floats", "[Approx]" ) @@ -110,3 +140,48 @@ TEST_CASE( "Approximate PI", "[Approx][PI]" ) REQUIRE( divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) ); REQUIRE( divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) ); } + +//////////////////////////////////////////////////////////////////////////////// + +#if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) +class StrongDoubleTypedef +{ + double d_ = 0.0; + + public: + explicit StrongDoubleTypedef(double d) : d_(d) {} + explicit operator double() const { return d_; } +}; + +inline std::ostream& operator<<( std::ostream& os, StrongDoubleTypedef td ) { + return os << "StrongDoubleTypedef(" << static_cast<double>(td) << ")"; +} + +TEST_CASE +( + "Comparison with explicitly convertible types", + "[Approx]" +) +{ + StrongDoubleTypedef td(10.0); + + REQUIRE(td == Approx(10.0)); + REQUIRE(Approx(10.0) == td); + + REQUIRE(td != Approx(11.0)); + REQUIRE(Approx(11.0) != td); + + REQUIRE(td <= Approx(10.0)); + REQUIRE(td <= Approx(11.0)); + REQUIRE(Approx(10.0) <= td); + REQUIRE(Approx(9.0) <= td); + + REQUIRE(td >= Approx(9.0)); + REQUIRE(td >= Approx(10.0)); + REQUIRE(Approx(10.0) >= td); + REQUIRE(Approx(11.0) >= td); + +} +#endif + +//////////////////////////////////////////////////////////////////////////////// diff --git a/3rdparty/catch/projects/SelfTest/BDDTests.cpp b/3rdparty/catch/projects/SelfTest/BDDTests.cpp index 2c8bc2495b0..ed89bfbcf87 100644 --- a/3rdparty/catch/projects/SelfTest/BDDTests.cpp +++ b/3rdparty/catch/projects/SelfTest/BDDTests.cpp @@ -88,10 +88,10 @@ struct Fixture } SCENARIO_METHOD(Fixture, - "BDD tests requiring Fixtures to provide commonly-accessed data or methods", - "[bdd][fixtures]") { + "BDD tests requiring Fixtures to provide commonly-accessed data or methods", + "[bdd][fixtures]") { const int before(counter()); - GIVEN("No operations precede me") { + GIVEN("No operations precede me") { REQUIRE(before == 0); WHEN("We get the count") { const int after(counter()); diff --git a/3rdparty/catch/projects/SelfTest/Baselines/console.std.approved.txt b/3rdparty/catch/projects/SelfTest/Baselines/console.std.approved.txt index ee8d8072afa..ea2e10081c4 100644 --- a/3rdparty/catch/projects/SelfTest/Baselines/console.std.approved.txt +++ b/3rdparty/catch/projects/SelfTest/Baselines/console.std.approved.txt @@ -1,9 +1,49 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -CatchSelfTest is a <version> host application. +<exe-name> is a <version> host application. Run with -? for options ------------------------------------------------------------------------------- +'Not' checks that should fail +------------------------------------------------------------------------------- +ConditionTests.cpp:<line number> +............................................................................... + +ConditionTests.cpp:<line number>: FAILED: + CHECK( false != false ) + +ConditionTests.cpp:<line number>: FAILED: + CHECK( true != true ) + +ConditionTests.cpp:<line number>: FAILED: + CHECK( !true ) +with expansion: + false + +ConditionTests.cpp:<line number>: FAILED: + CHECK_FALSE( true ) + +ConditionTests.cpp:<line number>: FAILED: + CHECK( !trueValue ) +with expansion: + false + +ConditionTests.cpp:<line number>: FAILED: + CHECK_FALSE( trueValue ) +with expansion: + !true + +ConditionTests.cpp:<line number>: FAILED: + CHECK( !(1 == 1) ) +with expansion: + false + +ConditionTests.cpp:<line number>: FAILED: + CHECK_FALSE( 1 == 1 ) +with expansion: + !(1 == 1) + +------------------------------------------------------------------------------- A METHOD_AS_TEST_CASE based test run that fails ------------------------------------------------------------------------------- ClassTests.cpp:<line number> @@ -26,6 +66,97 @@ with expansion: 1 == 2 ------------------------------------------------------------------------------- +A couple of nested sections followed by a failure +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... + +MiscTests.cpp:<line number>: FAILED: +explicitly with message: + to infinity and beyond + +------------------------------------------------------------------------------- +A failing expression with a non streamable type is still captured +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... + +TrickyTests.cpp:<line number>: FAILED: + CHECK( &o1 == &o2 ) +with expansion: + 0x<hex digits> == 0x<hex digits> + +TrickyTests.cpp:<line number>: FAILED: + CHECK( o1 == o2 ) +with expansion: + {?} == {?} + +------------------------------------------------------------------------------- +An unchecked exception reports the line of the last assertion +------------------------------------------------------------------------------- +ExceptionTests.cpp:<line number> +............................................................................... + +ExceptionTests.cpp:<line number>: FAILED: + {Unknown expression after the reported line} +due to unexpected exception with message: + unexpected exception + +------------------------------------------------------------------------------- +Contains string matcher +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... + +MiscTests.cpp:<line number>: FAILED: + CHECK_THAT( testStringForMatching(), Contains( "not there" ) ) +with expansion: + "this string contains 'abc' as a substring" contains: "not there" + +------------------------------------------------------------------------------- +Custom exceptions can be translated when testing for nothrow +------------------------------------------------------------------------------- +ExceptionTests.cpp:<line number> +............................................................................... + +ExceptionTests.cpp:<line number>: FAILED: + REQUIRE_NOTHROW( throwCustom() ) +due to unexpected exception with message: + custom exception - not std + +------------------------------------------------------------------------------- +Custom exceptions can be translated when testing for throwing as something else +------------------------------------------------------------------------------- +ExceptionTests.cpp:<line number> +............................................................................... + +ExceptionTests.cpp:<line number>: FAILED: + REQUIRE_THROWS_AS( throwCustom() ) +due to unexpected exception with message: + custom exception - not std + +------------------------------------------------------------------------------- +Custom std-exceptions can be custom translated +------------------------------------------------------------------------------- +ExceptionTests.cpp:<line number> +............................................................................... + +ExceptionTests.cpp:<line number>: FAILED: +due to unexpected exception with message: + custom std exception + +------------------------------------------------------------------------------- +EndsWith string matcher +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... + +MiscTests.cpp:<line number>: FAILED: + CHECK_THAT( testStringForMatching(), EndsWith( "this" ) ) +with expansion: + "this string contains 'abc' as a substring" ends with: "this" + +------------------------------------------------------------------------------- Equality checks that should fail ------------------------------------------------------------------------------- ConditionTests.cpp:<line number> @@ -97,6 +228,100 @@ with expansion: 1.3 == Approx( 1.301 ) ------------------------------------------------------------------------------- +Equals string matcher +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... + +MiscTests.cpp:<line number>: FAILED: + CHECK_THAT( testStringForMatching(), Equals( "something else" ) ) +with expansion: + "this string contains 'abc' as a substring" equals: "something else" + +------------------------------------------------------------------------------- +Expected exceptions that don't throw or unexpected exceptions fail the test +------------------------------------------------------------------------------- +ExceptionTests.cpp:<line number> +............................................................................... + +ExceptionTests.cpp:<line number>: FAILED: + CHECK_THROWS_AS( thisThrows() ) +due to unexpected exception with message: + expected exception + +ExceptionTests.cpp:<line number>: FAILED: + CHECK_THROWS_AS( thisDoesntThrow() ) +because no exception was thrown where one was expected: + +ExceptionTests.cpp:<line number>: FAILED: + CHECK_NOTHROW( thisThrows() ) +due to unexpected exception with message: + expected exception + +------------------------------------------------------------------------------- +FAIL aborts the test +------------------------------------------------------------------------------- +MessageTests.cpp:<line number> +............................................................................... + +MessageTests.cpp:<line number>: FAILED: +explicitly with message: + This is a failure + +------------------------------------------------------------------------------- +FAIL does not require an argument +------------------------------------------------------------------------------- +MessageTests.cpp:<line number> +............................................................................... + +MessageTests.cpp:<line number>: FAILED: + +------------------------------------------------------------------------------- +INFO and WARN do not abort tests +------------------------------------------------------------------------------- +MessageTests.cpp:<line number> +............................................................................... + +MessageTests.cpp:<line number>: +warning: + this is a warning + +------------------------------------------------------------------------------- +INFO gets logged on failure +------------------------------------------------------------------------------- +MessageTests.cpp:<line number> +............................................................................... + +MessageTests.cpp:<line number>: FAILED: + REQUIRE( a == 1 ) +with expansion: + 2 == 1 +with messages: + this message should be logged + so should this + +------------------------------------------------------------------------------- +INFO gets logged on failure, even if captured before successful assertions +------------------------------------------------------------------------------- +MessageTests.cpp:<line number> +............................................................................... + +MessageTests.cpp:<line number>: FAILED: + CHECK( a == 1 ) +with expansion: + 2 == 1 +with messages: + this message may be logged later + this message should be logged + +MessageTests.cpp:<line number>: FAILED: + CHECK( a == 0 ) +with expansion: + 2 == 0 +with message: + and this, but later + +------------------------------------------------------------------------------- Inequality checks that should fail ------------------------------------------------------------------------------- ConditionTests.cpp:<line number> @@ -128,6 +353,60 @@ with expansion: 5 != 5 ------------------------------------------------------------------------------- +Matchers can be composed with both && and || - failing +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... + +MiscTests.cpp:<line number>: FAILED: + CHECK_THAT( testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) && Contains( "random" ) ) +with expansion: + "this string contains 'abc' as a substring" ( ( contains: "string" or + contains: "different" ) and contains: "random" ) + +------------------------------------------------------------------------------- +Matchers can be negated (Not) with the ! operator - failing +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... + +MiscTests.cpp:<line number>: FAILED: + CHECK_THAT( testStringForMatching(), !Contains( "substring" ) ) +with expansion: + "this string contains 'abc' as a substring" not contains: "substring" + +------------------------------------------------------------------------------- +Mismatching exception messages failing the test +------------------------------------------------------------------------------- +ExceptionTests.cpp:<line number> +............................................................................... + +ExceptionTests.cpp:<line number>: FAILED: + REQUIRE_THROWS_WITH( thisThrows(), "should fail" ) +with expansion: + expected exception + +------------------------------------------------------------------------------- +Nice descriptive name +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... + +MiscTests.cpp:<line number>: +warning: + This one ran + +------------------------------------------------------------------------------- +Non-std exceptions can be translated +------------------------------------------------------------------------------- +ExceptionTests.cpp:<line number> +............................................................................... + +ExceptionTests.cpp:<line number>: FAILED: +due to unexpected exception with message: + custom exception + +------------------------------------------------------------------------------- Ordering comparison checks that should fail ------------------------------------------------------------------------------- ConditionTests.cpp:<line number> @@ -229,89 +508,102 @@ with expansion: "hello" <= "a" ------------------------------------------------------------------------------- -'Not' checks that should fail +Output from all sections is reported + one ------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> +MessageTests.cpp:<line number> ............................................................................... -ConditionTests.cpp:<line number>: FAILED: - CHECK( false != false ) +MessageTests.cpp:<line number>: FAILED: +explicitly with message: + Message from section one -ConditionTests.cpp:<line number>: FAILED: - CHECK( true != true ) +------------------------------------------------------------------------------- +Output from all sections is reported + two +------------------------------------------------------------------------------- +MessageTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: FAILED: - CHECK( !true ) -with expansion: - false +MessageTests.cpp:<line number>: FAILED: +explicitly with message: + Message from section two -ConditionTests.cpp:<line number>: FAILED: - CHECK_FALSE( true ) +------------------------------------------------------------------------------- +Pointers can be converted to strings +------------------------------------------------------------------------------- +MessageTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: FAILED: - CHECK( !trueValue ) -with expansion: - false +MessageTests.cpp:<line number>: +warning: + actual address of p: 0x<hex digits> -ConditionTests.cpp:<line number>: FAILED: - CHECK_FALSE( trueValue ) -with expansion: - !true +MessageTests.cpp:<line number>: +warning: + toString(p): 0x<hex digits> -ConditionTests.cpp:<line number>: FAILED: - CHECK( !(1 == 1) ) -with expansion: - false +------------------------------------------------------------------------------- +SCOPED_INFO is reset for each loop +------------------------------------------------------------------------------- +MessageTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: FAILED: - CHECK_FALSE( 1 == 1 ) +MessageTests.cpp:<line number>: FAILED: + REQUIRE( i < 10 ) with expansion: - !(1 == 1) + 10 < 10 +with messages: + current counter 10 + i := 10 +A string sent directly to stdout +A string sent directly to stderr +Message from section one +Message from section two ------------------------------------------------------------------------------- -Expected exceptions that don't throw or unexpected exceptions fail the test +StartsWith string matcher ------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -ExceptionTests.cpp:<line number>: FAILED: - CHECK_THROWS_AS( thisThrows() ) -due to unexpected exception with message: - expected exception - -ExceptionTests.cpp:<line number>: FAILED: - CHECK_THROWS_AS( thisDoesntThrow() ) -because no exception was thrown where one was expected: - -ExceptionTests.cpp:<line number>: FAILED: - CHECK_NOTHROW( thisThrows() ) -due to unexpected exception with message: - expected exception +MiscTests.cpp:<line number>: FAILED: + CHECK_THAT( testStringForMatching(), StartsWith( "string" ) ) +with expansion: + "this string contains 'abc' as a substring" starts with: "string" +hello +hello ------------------------------------------------------------------------------- -When unchecked exceptions are thrown directly they are always failures +Tabs and newlines show in output ------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -ExceptionTests.cpp:<line number>: FAILED: -due to unexpected exception with message: - unexpected exception +MiscTests.cpp:<line number>: FAILED: + CHECK( s1 == s2 ) +with expansion: + "if ($b == 10) { + $a = 20; + }" + == + "if ($b == 10) { + $a = 20; + } + " ------------------------------------------------------------------------------- -An unchecked exception reports the line of the last assertion +Unexpected exceptions can be translated ------------------------------------------------------------------------------- ExceptionTests.cpp:<line number> ............................................................................... ExceptionTests.cpp:<line number>: FAILED: - {Unknown expression after the reported line} due to unexpected exception with message: - unexpected exception + 3.14 ------------------------------------------------------------------------------- -When unchecked exceptions are thrown from sections they are always failures - section name +When unchecked exceptions are thrown directly they are always failures ------------------------------------------------------------------------------- ExceptionTests.cpp:<line number> ............................................................................... @@ -321,7 +613,7 @@ due to unexpected exception with message: unexpected exception ------------------------------------------------------------------------------- -When unchecked exceptions are thrown from functions they are always failures +When unchecked exceptions are thrown during a CHECK the test should continue ------------------------------------------------------------------------------- ExceptionTests.cpp:<line number> ............................................................................... @@ -344,8 +636,7 @@ due to unexpected exception with message: expected exception ------------------------------------------------------------------------------- -When unchecked exceptions are thrown during a CHECK the test should abort and -fail +When unchecked exceptions are thrown from functions they are always failures ------------------------------------------------------------------------------- ExceptionTests.cpp:<line number> ............................................................................... @@ -356,168 +647,69 @@ due to unexpected exception with message: expected exception ------------------------------------------------------------------------------- -Non-std exceptions can be translated -------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> -............................................................................... - -ExceptionTests.cpp:<line number>: FAILED: -due to unexpected exception with message: - custom exception - -------------------------------------------------------------------------------- -Custom std-exceptions can be custom translated -------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> -............................................................................... - -ExceptionTests.cpp:<line number>: FAILED: -due to unexpected exception with message: - custom std exception - -------------------------------------------------------------------------------- -Custom exceptions can be translated when testing for nothrow -------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> -............................................................................... - -ExceptionTests.cpp:<line number>: FAILED: - REQUIRE_NOTHROW( throwCustom() ) -due to unexpected exception with message: - custom exception - not std - -------------------------------------------------------------------------------- -Custom exceptions can be translated when testing for throwing as something else -------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> -............................................................................... - -ExceptionTests.cpp:<line number>: FAILED: - REQUIRE_THROWS_AS( throwCustom() ) -due to unexpected exception with message: - custom exception - not std - -------------------------------------------------------------------------------- -Unexpected exceptions can be translated +When unchecked exceptions are thrown from sections they are always failures + section name ------------------------------------------------------------------------------- ExceptionTests.cpp:<line number> ............................................................................... ExceptionTests.cpp:<line number>: FAILED: due to unexpected exception with message: - 3.14 - -------------------------------------------------------------------------------- -Mismatching exception messages failing the test -------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> -............................................................................... - -ExceptionTests.cpp:<line number>: FAILED: - REQUIRE_THROWS_WITH( thisThrows(), "should fail" ) -with expansion: - expected exception + unexpected exception ------------------------------------------------------------------------------- -INFO and WARN do not abort tests +Where the LHS is not a simple value ------------------------------------------------------------------------------- -MessageTests.cpp:<line number> +TrickyTests.cpp:<line number> ............................................................................... -MessageTests.cpp:<line number>: +TrickyTests.cpp:<line number>: warning: - this is a warning + Uncomment the code in this test to check that it gives a sensible compiler + error ------------------------------------------------------------------------------- -INFO gets logged on failure +Where there is more to the expression after the RHS ------------------------------------------------------------------------------- -MessageTests.cpp:<line number> +TrickyTests.cpp:<line number> ............................................................................... -MessageTests.cpp:<line number>: FAILED: - REQUIRE( a == 1 ) -with expansion: - 2 == 1 -with messages: - this message should be logged - so should this +TrickyTests.cpp:<line number>: +warning: + Uncomment the code in this test to check that it gives a sensible compiler + error ------------------------------------------------------------------------------- -INFO gets logged on failure, even if captured before successful assertions +checkedElse, failing ------------------------------------------------------------------------------- -MessageTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -MessageTests.cpp:<line number>: FAILED: - CHECK( a == 1 ) +MiscTests.cpp:<line number>: FAILED: + CHECKED_ELSE( flag ) with expansion: - 2 == 1 -with messages: - this message may be logged later - this message should be logged + false -MessageTests.cpp:<line number>: FAILED: - CHECK( a == 0 ) +MiscTests.cpp:<line number>: FAILED: + REQUIRE( testCheckedElse( false ) ) with expansion: - 2 == 0 -with message: - and this, but later - -------------------------------------------------------------------------------- -FAIL aborts the test -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: FAILED: -explicitly with message: - This is a failure - -------------------------------------------------------------------------------- -FAIL does not require an argument -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: FAILED: - -------------------------------------------------------------------------------- -Output from all sections is reported - one -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: FAILED: -explicitly with message: - Message from section one + false ------------------------------------------------------------------------------- -Output from all sections is reported - two +checkedIf, failing ------------------------------------------------------------------------------- -MessageTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -MessageTests.cpp:<line number>: FAILED: -explicitly with message: - Message from section two - -Message from section one -Message from section two -------------------------------------------------------------------------------- -SCOPED_INFO is reset for each loop -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... +MiscTests.cpp:<line number>: FAILED: + CHECKED_IF( flag ) +with expansion: + false -MessageTests.cpp:<line number>: FAILED: - REQUIRE( i < 10 ) +MiscTests.cpp:<line number>: FAILED: + REQUIRE( testCheckedIf( false ) ) with expansion: - 10 < 10 -with messages: - current counter 10 - i := 10 + false ------------------------------------------------------------------------------- just failure @@ -530,45 +722,6 @@ explicitly with message: Previous info should not be seen ------------------------------------------------------------------------------- -sends information to INFO -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: FAILED: - REQUIRE( false ) -with messages: - hi - i := 7 - -------------------------------------------------------------------------------- -Pointers can be converted to strings -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: -warning: - actual address of p: 0x<hex digits> - -MessageTests.cpp:<line number>: -warning: - toString(p): 0x<hex digits> - -------------------------------------------------------------------------------- -more nested SECTION tests - s1 - s2 -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - REQUIRE( a == b ) -with expansion: - 1 == 2 - -------------------------------------------------------------------------------- looped SECTION tests s1 ------------------------------------------------------------------------------- @@ -628,39 +781,18 @@ with expansion: with message: Testing if fib[7] (21) is even -A string sent directly to stdout -A string sent directly to stderr ------------------------------------------------------------------------------- -checkedIf, failing -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECKED_IF( flag ) -with expansion: - false - -MiscTests.cpp:<line number>: FAILED: - REQUIRE( testCheckedIf( false ) ) -with expansion: - false - -------------------------------------------------------------------------------- -checkedElse, failing +more nested SECTION tests + s1 + s2 ------------------------------------------------------------------------------- MiscTests.cpp:<line number> ............................................................................... MiscTests.cpp:<line number>: FAILED: - CHECKED_ELSE( flag ) -with expansion: - false - -MiscTests.cpp:<line number>: FAILED: - REQUIRE( testCheckedElse( false ) ) + REQUIRE( a == b ) with expansion: - false + 1 == 2 ------------------------------------------------------------------------------- send a single char to INFO @@ -674,149 +806,16 @@ with message: 3 ------------------------------------------------------------------------------- -Contains string matcher -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK_THAT( testStringForMatching(), Contains( "not there" ) ) -with expansion: - "this string contains 'abc' as a substring" contains: "not there" - -------------------------------------------------------------------------------- -StartsWith string matcher -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK_THAT( testStringForMatching(), StartsWith( "string" ) ) -with expansion: - "this string contains 'abc' as a substring" starts with: "string" - -------------------------------------------------------------------------------- -EndsWith string matcher -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK_THAT( testStringForMatching(), EndsWith( "this" ) ) -with expansion: - "this string contains 'abc' as a substring" ends with: "this" - -------------------------------------------------------------------------------- -Equals string matcher -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK_THAT( testStringForMatching(), Equals( "something else" ) ) -with expansion: - "this string contains 'abc' as a substring" equals: "something else" - -------------------------------------------------------------------------------- -Matchers can be composed with both && and || - failing -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK_THAT( testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) && Contains( "random" ) ) -with expansion: - "this string contains 'abc' as a substring" ( ( contains: "string" or - contains: "different" ) and contains: "random" ) - -------------------------------------------------------------------------------- -Matchers can be negated (Not) with the ! operator - failing -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK_THAT( testStringForMatching(), !Contains( "substring" ) ) -with expansion: - "this string contains 'abc' as a substring" not contains: "substring" - -------------------------------------------------------------------------------- -Nice descriptive name -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -warning: - This one ran - -------------------------------------------------------------------------------- -A couple of nested sections followed by a failure -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: -explicitly with message: - to infinity and beyond - -------------------------------------------------------------------------------- -Tabs and newlines show in output -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK( s1 == s2 ) -with expansion: - "if ($b == 10) { - $a= 20; - }" - == - "if ($b == 10) { - $a = 20; - } - " - -hello -hello -------------------------------------------------------------------------------- -Where there is more to the expression after the RHS -------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> -............................................................................... - -TrickyTests.cpp:<line number>: -warning: - Uncomment the code in this test to check that it gives a sensible compiler - error - -------------------------------------------------------------------------------- -Where the LHS is not a simple value -------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> -............................................................................... - -TrickyTests.cpp:<line number>: -warning: - Uncomment the code in this test to check that it gives a sensible compiler - error - -------------------------------------------------------------------------------- -A failing expression with a non streamable type is still captured +sends information to INFO ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +MessageTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: FAILED: - CHECK( &o1 == &o2 ) -with expansion: - 0x<hex digits> == 0x<hex digits> - -TrickyTests.cpp:<line number>: FAILED: - CHECK( o1 == o2 ) -with expansion: - {?} == {?} +MessageTests.cpp:<line number>: FAILED: + REQUIRE( false ) +with messages: + hi + i := 7 ------------------------------------------------------------------------------- string literals of different sizes can be compared @@ -830,6 +829,6 @@ with expansion: "first" == "second" =============================================================================== -test cases: 169 | 125 passed | 42 failed | 2 failed as expected -assertions: 921 | 825 passed | 78 failed | 18 failed as expected +test cases: 157 | 113 passed | 42 failed | 2 failed as expected +assertions: 913 | 817 passed | 78 failed | 18 failed as expected diff --git a/3rdparty/catch/projects/SelfTest/Baselines/console.sw.approved.txt b/3rdparty/catch/projects/SelfTest/Baselines/console.sw.approved.txt index 3359a0fa2e9..2ea4dd0bd6e 100644 --- a/3rdparty/catch/projects/SelfTest/Baselines/console.sw.approved.txt +++ b/3rdparty/catch/projects/SelfTest/Baselines/console.sw.approved.txt @@ -1,291 +1,200 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -CatchSelfTest is a <version> host application. +<exe-name> is a <version> host application. Run with -? for options ------------------------------------------------------------------------------- -toString(enum) +# A test name that starts with a # ------------------------------------------------------------------------------- -EnumToString.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e0) == "0" ) -with expansion: - "0" == "0" - -EnumToString.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( Catch::toString(e1) == "1" ) -with expansion: - "1" == "1" +with message: + yay ------------------------------------------------------------------------------- -toString(enum w/operator<<) +'Not' checks that should fail ------------------------------------------------------------------------------- -EnumToString.cpp:<line number> +ConditionTests.cpp:<line number> ............................................................................... -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e0) == "E2{0}" ) -with expansion: - "E2{0}" == "E2{0}" - -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e1) == "E2{1}" ) -with expansion: - "E2{1}" == "E2{1}" +ConditionTests.cpp:<line number>: FAILED: + CHECK( false != false ) -------------------------------------------------------------------------------- -toString(enum class) -------------------------------------------------------------------------------- -EnumToString.cpp:<line number> -............................................................................... +ConditionTests.cpp:<line number>: FAILED: + CHECK( true != true ) -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e0) == "0" ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( !true ) with expansion: - "0" == "0" + false -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e1) == "1" ) -with expansion: - "1" == "1" +ConditionTests.cpp:<line number>: FAILED: + CHECK_FALSE( true ) -------------------------------------------------------------------------------- -toString(enum class w/operator<<) -------------------------------------------------------------------------------- -EnumToString.cpp:<line number> -............................................................................... +ConditionTests.cpp:<line number>: FAILED: + CHECK( !trueValue ) +with expansion: + false -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e0) == "E2/V0" ) +ConditionTests.cpp:<line number>: FAILED: + CHECK_FALSE( trueValue ) with expansion: - "E2/V0" == "E2/V0" + !true -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e1) == "E2/V1" ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( !(1 == 1) ) with expansion: - "E2/V1" == "E2/V1" + false -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e3) == "Unknown enum value 10" ) +ConditionTests.cpp:<line number>: FAILED: + CHECK_FALSE( 1 == 1 ) with expansion: - "Unknown enum value 10" - == - "Unknown enum value 10" + !(1 == 1) ------------------------------------------------------------------------------- -Some simple comparisons between doubles +'Not' checks that should succeed ------------------------------------------------------------------------------- -ApproxTests.cpp:<line number> +ConditionTests.cpp:<line number> ............................................................................... -ApproxTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE( d == Approx( 1.23 ) ) -with expansion: - 1.23 == Approx( 1.23 ) + REQUIRE( false == false ) -ApproxTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE( d != Approx( 1.22 ) ) -with expansion: - 1.23 != Approx( 1.22 ) + REQUIRE( true == true ) -ApproxTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE( d != Approx( 1.24 ) ) + REQUIRE( !false ) with expansion: - 1.23 != Approx( 1.24 ) + true -ApproxTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE( Approx( d ) == 1.23 ) -with expansion: - Approx( 1.23 ) == 1.23 + REQUIRE_FALSE( false ) -ApproxTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE( Approx( d ) != 1.22 ) + REQUIRE( !falseValue ) with expansion: - Approx( 1.23 ) != 1.22 + true -ApproxTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE( Approx( d ) != 1.24 ) + REQUIRE_FALSE( falseValue ) with expansion: - Approx( 1.23 ) != 1.24 - -------------------------------------------------------------------------------- -Approximate comparisons with different epsilons -------------------------------------------------------------------------------- -ApproxTests.cpp:<line number> -............................................................................... + !false -ApproxTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE( d != Approx( 1.231 ) ) + REQUIRE( !(1 == 2) ) with expansion: - 1.23 != Approx( 1.231 ) + true -ApproxTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE( d == Approx( 1.231 ).epsilon( 0.1 ) ) + REQUIRE_FALSE( 1 == 2 ) with expansion: - 1.23 == Approx( 1.231 ) + !(1 == 2) ------------------------------------------------------------------------------- -Approximate comparisons with floats +(unimplemented) static bools can be evaluated + compare to true ------------------------------------------------------------------------------- -ApproxTests.cpp:<line number> +TrickyTests.cpp:<line number> ............................................................................... -ApproxTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( 1.23f == Approx( 1.23f ) ) + REQUIRE( is_true<true>::value == true ) with expansion: - 1.23f == Approx( 1.2300000191 ) + true == true -ApproxTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( 0.0f == Approx( 0.0f ) ) + REQUIRE( true == is_true<true>::value ) with expansion: - 0.0f == Approx( 0.0 ) + true == true ------------------------------------------------------------------------------- -Approximate comparisons with ints +(unimplemented) static bools can be evaluated + compare to false ------------------------------------------------------------------------------- -ApproxTests.cpp:<line number> +TrickyTests.cpp:<line number> ............................................................................... -ApproxTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( 1 == Approx( 1 ) ) + REQUIRE( is_true<false>::value == false ) with expansion: - 1 == Approx( 1.0 ) + false == false -ApproxTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( 0 == Approx( 0 ) ) + REQUIRE( false == is_true<false>::value ) with expansion: - 0 == Approx( 0.0 ) + false == false ------------------------------------------------------------------------------- -Approximate comparisons with mixed numeric types +(unimplemented) static bools can be evaluated + negation ------------------------------------------------------------------------------- -ApproxTests.cpp:<line number> +TrickyTests.cpp:<line number> ............................................................................... -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( 1.0f == Approx( 1 ) ) -with expansion: - 1.0f == Approx( 1.0 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( 0 == Approx( dZero) ) -with expansion: - 0 == Approx( 0.0 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( 0 == Approx( dSmall ).epsilon( 0.001 ) ) -with expansion: - 0 == Approx( 0.00001 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( 1.234f == Approx( dMedium ) ) -with expansion: - 1.234f == Approx( 1.234 ) - -ApproxTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( dMedium == Approx( 1.234f ) ) + REQUIRE( !is_true<false>::value ) with expansion: - 1.234 == Approx( 1.2339999676 ) + true ------------------------------------------------------------------------------- -Use a custom approx +(unimplemented) static bools can be evaluated + double negation ------------------------------------------------------------------------------- -ApproxTests.cpp:<line number> +TrickyTests.cpp:<line number> ............................................................................... -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( d == approx( 1.23 ) ) -with expansion: - 1.23 == Approx( 1.23 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( d == approx( 1.22 ) ) -with expansion: - 1.23 == Approx( 1.22 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( d == approx( 1.24 ) ) -with expansion: - 1.23 == Approx( 1.24 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( d != approx( 1.25 ) ) -with expansion: - 1.23 != Approx( 1.25 ) - -ApproxTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( approx( d ) == 1.23 ) + REQUIRE( !!is_true<true>::value ) with expansion: - Approx( 1.23 ) == 1.23 + true -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( approx( d ) == 1.22 ) -with expansion: - Approx( 1.23 ) == 1.22 +------------------------------------------------------------------------------- +(unimplemented) static bools can be evaluated + direct +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... -ApproxTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( approx( d ) == 1.24 ) + REQUIRE( is_true<true>::value ) with expansion: - Approx( 1.23 ) == 1.24 + true -ApproxTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( approx( d ) != 1.25 ) + REQUIRE_FALSE( is_true<false>::value ) with expansion: - Approx( 1.23 ) != 1.25 + !false ------------------------------------------------------------------------------- -Approximate PI +A METHOD_AS_TEST_CASE based test run that fails ------------------------------------------------------------------------------- -ApproxTests.cpp:<line number> +ClassTests.cpp:<line number> ............................................................................... -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) ) -with expansion: - 3.1428571429 == Approx( 3.141 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) ) +ClassTests.cpp:<line number>: FAILED: + REQUIRE( s == "world" ) with expansion: - 3.1428571429 != Approx( 3.141 ) + "hello" == "world" ------------------------------------------------------------------------------- A METHOD_AS_TEST_CASE based test run that succeeds @@ -300,15 +209,15 @@ with expansion: "hello" == "hello" ------------------------------------------------------------------------------- -A METHOD_AS_TEST_CASE based test run that fails +A TEST_CASE_METHOD based test run that fails ------------------------------------------------------------------------------- ClassTests.cpp:<line number> ............................................................................... ClassTests.cpp:<line number>: FAILED: - REQUIRE( s == "world" ) + REQUIRE( m_a == 2 ) with expansion: - "hello" == "world" + 1 == 2 ------------------------------------------------------------------------------- A TEST_CASE_METHOD based test run that succeeds @@ -323,446 +232,393 @@ with expansion: 1 == 1 ------------------------------------------------------------------------------- -A TEST_CASE_METHOD based test run that fails +A couple of nested sections followed by a failure + Outer + Inner ------------------------------------------------------------------------------- -ClassTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -ClassTests.cpp:<line number>: FAILED: - REQUIRE( m_a == 2 ) -with expansion: - 1 == 2 +MiscTests.cpp:<line number>: +PASSED: +with message: + that's not flying - that's failing in style ------------------------------------------------------------------------------- -Equality checks that should succeed +A couple of nested sections followed by a failure ------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.int_seven == 7 ) -with expansion: - 7 == 7 +MiscTests.cpp:<line number>: FAILED: +explicitly with message: + to infinity and beyond -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.float_nine_point_one == Approx( 9.1f ) ) -with expansion: - 9.1f == Approx( 9.1000003815 ) +------------------------------------------------------------------------------- +A failing expression with a non streamable type is still captured +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.double_pi == Approx( 3.1415926535 ) ) +TrickyTests.cpp:<line number>: FAILED: + CHECK( &o1 == &o2 ) with expansion: - 3.1415926535 == Approx( 3.1415926535 ) + 0x<hex digits> == 0x<hex digits> -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.str_hello == "hello" ) +TrickyTests.cpp:<line number>: FAILED: + CHECK( o1 == o2 ) with expansion: - "hello" == "hello" + {?} == {?} -ConditionTests.cpp:<line number>: +------------------------------------------------------------------------------- +AllOf matcher +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... + +MiscTests.cpp:<line number>: PASSED: - REQUIRE( "hello" == data.str_hello ) + CHECK_THAT( testStringForMatching(), AllOf( Catch::Contains( "string" ), Catch::Contains( "abc" ) ) ) with expansion: - "hello" == "hello" + "this string contains 'abc' as a substring" ( contains: "string" and + contains: "abc" ) -ConditionTests.cpp:<line number>: +------------------------------------------------------------------------------- +An expression with side-effects should only be evaluated once +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... + +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( data.str_hello.size() == 5 ) + REQUIRE( i++ == 7 ) with expansion: - 5 == 5 + 7 == 7 -ConditionTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( x == Approx( 1.3 ) ) + REQUIRE( i++ == 8 ) with expansion: - 1.3 == Approx( 1.3 ) + 8 == 8 ------------------------------------------------------------------------------- -Equality checks that should fail +An unchecked exception reports the line of the last assertion ------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> +ExceptionTests.cpp:<line number> ............................................................................... -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven == 6 ) -with expansion: - 7 == 6 +ExceptionTests.cpp:<line number>: +PASSED: + CHECK( 1 == 1 ) -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven == 8 ) -with expansion: - 7 == 8 +ExceptionTests.cpp:<line number>: FAILED: + {Unknown expression after the reported line} +due to unexpected exception with message: + unexpected exception -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven == 0 ) -with expansion: - 7 == 0 +------------------------------------------------------------------------------- +Anonymous test case 1 +------------------------------------------------------------------------------- +VariadicMacrosTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.float_nine_point_one == Approx( 9.11f ) ) -with expansion: - 9.1f == Approx( 9.1099996567 ) +VariadicMacrosTests.cpp:<line number>: +PASSED: +with message: + anonymous test case -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.float_nine_point_one == Approx( 9.0f ) ) -with expansion: - 9.1f == Approx( 9.0 ) +------------------------------------------------------------------------------- +AnyOf matcher +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.float_nine_point_one == Approx( 1 ) ) +MiscTests.cpp:<line number>: +PASSED: + CHECK_THAT( testStringForMatching(), AnyOf( Catch::Contains( "string" ), Catch::Contains( "not there" ) ) ) with expansion: - 9.1f == Approx( 1.0 ) + "this string contains 'abc' as a substring" ( contains: "string" or contains: + "not there" ) -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.float_nine_point_one == Approx( 0 ) ) +MiscTests.cpp:<line number>: +PASSED: + CHECK_THAT( testStringForMatching(), AnyOf( Catch::Contains( "not there" ), Catch::Contains( "string" ) ) ) with expansion: - 9.1f == Approx( 0.0 ) + "this string contains 'abc' as a substring" ( contains: "not there" or + contains: "string" ) -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.double_pi == Approx( 3.1415 ) ) -with expansion: - 3.1415926535 == Approx( 3.1415 ) +------------------------------------------------------------------------------- +Approximate PI +------------------------------------------------------------------------------- +ApproxTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.str_hello == "goodbye" ) +ApproxTests.cpp:<line number>: +PASSED: + REQUIRE( divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) ) with expansion: - "hello" == "goodbye" + 3.1428571429 == Approx( 3.141 ) -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.str_hello == "hell" ) +ApproxTests.cpp:<line number>: +PASSED: + REQUIRE( divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) ) with expansion: - "hello" == "hell" + 3.1428571429 != Approx( 3.141 ) -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.str_hello == "hello1" ) -with expansion: - "hello" == "hello1" +------------------------------------------------------------------------------- +Approximate comparisons with different epsilons +------------------------------------------------------------------------------- +ApproxTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.str_hello.size() == 6 ) +ApproxTests.cpp:<line number>: +PASSED: + REQUIRE( d != Approx( 1.231 ) ) with expansion: - 5 == 6 + 1.23 != Approx( 1.231 ) -ConditionTests.cpp:<line number>: FAILED: - CHECK( x == Approx( 1.301 ) ) +ApproxTests.cpp:<line number>: +PASSED: + REQUIRE( d == Approx( 1.231 ).epsilon( 0.1 ) ) with expansion: - 1.3 == Approx( 1.301 ) + 1.23 == Approx( 1.231 ) ------------------------------------------------------------------------------- -Inequality checks that should succeed +Approximate comparisons with floats ------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> +ApproxTests.cpp:<line number> ............................................................................... -ConditionTests.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( data.int_seven != 6 ) + REQUIRE( 1.23f == Approx( 1.23f ) ) with expansion: - 7 != 6 + 1.23f == Approx( 1.2300000191 ) -ConditionTests.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( data.int_seven != 8 ) + REQUIRE( 0.0f == Approx( 0.0f ) ) with expansion: - 7 != 8 + 0.0f == Approx( 0.0 ) -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.float_nine_point_one != Approx( 9.11f ) ) -with expansion: - 9.1f != Approx( 9.1099996567 ) +------------------------------------------------------------------------------- +Approximate comparisons with ints +------------------------------------------------------------------------------- +ApproxTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( data.float_nine_point_one != Approx( 9.0f ) ) + REQUIRE( 1 == Approx( 1 ) ) with expansion: - 9.1f != Approx( 9.0 ) + 1 == Approx( 1.0 ) -ConditionTests.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( data.float_nine_point_one != Approx( 1 ) ) + REQUIRE( 0 == Approx( 0 ) ) with expansion: - 9.1f != Approx( 1.0 ) + 0 == Approx( 0.0 ) -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.float_nine_point_one != Approx( 0 ) ) -with expansion: - 9.1f != Approx( 0.0 ) +------------------------------------------------------------------------------- +Approximate comparisons with mixed numeric types +------------------------------------------------------------------------------- +ApproxTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( data.double_pi != Approx( 3.1415 ) ) + REQUIRE( 1.0f == Approx( 1 ) ) with expansion: - 3.1415926535 != Approx( 3.1415 ) + 1.0f == Approx( 1.0 ) -ConditionTests.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( data.str_hello != "goodbye" ) + REQUIRE( 0 == Approx( dZero) ) with expansion: - "hello" != "goodbye" + 0 == Approx( 0.0 ) -ConditionTests.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( data.str_hello != "hell" ) + REQUIRE( 0 == Approx( dSmall ).epsilon( 0.001 ) ) with expansion: - "hello" != "hell" + 0 == Approx( 0.00001 ) -ConditionTests.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( data.str_hello != "hello1" ) + REQUIRE( 1.234f == Approx( dMedium ) ) with expansion: - "hello" != "hello1" + 1.234f == Approx( 1.234 ) -ConditionTests.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( data.str_hello.size() != 6 ) + REQUIRE( dMedium == Approx( 1.234f ) ) with expansion: - 5 != 6 + 1.234 == Approx( 1.2339999676 ) ------------------------------------------------------------------------------- -Inequality checks that should fail +Assertions then sections ------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> +TrickyTests.cpp:<line number> ............................................................................... -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven != 7 ) +TrickyTests.cpp:<line number>: +PASSED: + REQUIRE( Catch::alwaysTrue() ) with expansion: - 7 != 7 + true -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.float_nine_point_one != Approx( 9.1f ) ) -with expansion: - 9.1f != Approx( 9.1000003815 ) +------------------------------------------------------------------------------- +Assertions then sections + A section +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.double_pi != Approx( 3.1415926535 ) ) +TrickyTests.cpp:<line number>: +PASSED: + REQUIRE( Catch::alwaysTrue() ) with expansion: - 3.1415926535 != Approx( 3.1415926535 ) + true -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.str_hello != "hello" ) -with expansion: - "hello" != "hello" +------------------------------------------------------------------------------- +Assertions then sections + A section + Another section +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.str_hello.size() != 5 ) +TrickyTests.cpp:<line number>: +PASSED: + REQUIRE( Catch::alwaysTrue() ) with expansion: - 5 != 5 + true ------------------------------------------------------------------------------- -Ordering comparison checks that should succeed +Assertions then sections ------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> +TrickyTests.cpp:<line number> ............................................................................... -ConditionTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( data.int_seven < 8 ) + REQUIRE( Catch::alwaysTrue() ) with expansion: - 7 < 8 + true -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.int_seven > 6 ) -with expansion: - 7 > 6 +------------------------------------------------------------------------------- +Assertions then sections + A section +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( data.int_seven > 0 ) + REQUIRE( Catch::alwaysTrue() ) with expansion: - 7 > 0 + true -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.int_seven > -1 ) -with expansion: - 7 > -1 +------------------------------------------------------------------------------- +Assertions then sections + A section + Another other section +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( data.int_seven >= 7 ) + REQUIRE( Catch::alwaysTrue() ) with expansion: - 7 >= 7 + true -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.int_seven >= 6 ) -with expansion: - 7 >= 6 +------------------------------------------------------------------------------- +Comparing function pointers +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( data.int_seven <= 7 ) + REQUIRE( a ) with expansion: - 7 <= 7 + true -ConditionTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( data.int_seven <= 8 ) + REQUIRE( a == &foo ) with expansion: - 7 <= 8 + 0x<hex digits> == 0x<hex digits> -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.float_nine_point_one > 9 ) -with expansion: - 9.1f > 9 +------------------------------------------------------------------------------- +Comparing member function pointers +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( data.float_nine_point_one < 10 ) + CHECK( m == &S::f ) with expansion: - 9.1f < 10 + 0x<hex digits> + == + 0x<hex digits> + +------------------------------------------------------------------------------- +Comparisons between ints where one side is computed +------------------------------------------------------------------------------- +ConditionTests.cpp:<line number> +............................................................................... ConditionTests.cpp:<line number>: PASSED: - REQUIRE( data.float_nine_point_one < 9.2 ) + CHECK( 54 == 6*9 ) with expansion: - 9.1f < 9.2 + 54 == 54 + +------------------------------------------------------------------------------- +Comparisons between unsigned ints and negative signed ints match c++ standard +behaviour +------------------------------------------------------------------------------- +ConditionTests.cpp:<line number> +............................................................................... ConditionTests.cpp:<line number>: PASSED: - REQUIRE( data.str_hello <= "hello" ) + CHECK( ( -1 > 2u ) ) with expansion: - "hello" <= "hello" + true ConditionTests.cpp:<line number>: PASSED: - REQUIRE( data.str_hello >= "hello" ) + CHECK( -1 > 2u ) with expansion: - "hello" >= "hello" + -1 > 2 ConditionTests.cpp:<line number>: PASSED: - REQUIRE( data.str_hello < "hellp" ) + CHECK( ( 2u < -1 ) ) with expansion: - "hello" < "hellp" + true ConditionTests.cpp:<line number>: PASSED: - REQUIRE( data.str_hello < "zebra" ) + CHECK( 2u < -1 ) with expansion: - "hello" < "zebra" + 2 < -1 ConditionTests.cpp:<line number>: PASSED: - REQUIRE( data.str_hello > "hellm" ) + CHECK( ( minInt > 2u ) ) with expansion: - "hello" > "hellm" + true ConditionTests.cpp:<line number>: PASSED: - REQUIRE( data.str_hello > "a" ) -with expansion: - "hello" > "a" - -------------------------------------------------------------------------------- -Ordering comparison checks that should fail -------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> -............................................................................... - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven > 7 ) -with expansion: - 7 > 7 - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven < 7 ) -with expansion: - 7 < 7 - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven > 8 ) -with expansion: - 7 > 8 - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven < 6 ) -with expansion: - 7 < 6 - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven < 0 ) -with expansion: - 7 < 0 - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven < -1 ) -with expansion: - 7 < -1 - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven >= 8 ) -with expansion: - 7 >= 8 - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven <= 6 ) -with expansion: - 7 <= 6 - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.float_nine_point_one < 9 ) -with expansion: - 9.1f < 9 - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.float_nine_point_one > 10 ) -with expansion: - 9.1f > 10 - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.float_nine_point_one > 9.2 ) -with expansion: - 9.1f > 9.2 - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.str_hello > "hello" ) -with expansion: - "hello" > "hello" - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.str_hello < "hello" ) -with expansion: - "hello" < "hello" - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.str_hello > "hellp" ) -with expansion: - "hello" > "hellp" - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.str_hello > "z" ) -with expansion: - "hello" > "z" - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.str_hello < "hellm" ) -with expansion: - "hello" < "hellm" - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.str_hello < "a" ) -with expansion: - "hello" < "a" - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.str_hello >= "z" ) -with expansion: - "hello" >= "z" - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.str_hello <= "a" ) + CHECK( minInt > 2u ) with expansion: - "hello" <= "a" + -2147483648 > 2 ------------------------------------------------------------------------------- Comparisons with int literals don't warn when mixing signed/ unsigned @@ -851,492 +707,368 @@ with expansion: 4 ------------------------------------------------------------------------------- -comparisons between int variables +Contains string matcher ------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( long_var == unsigned_char_var ) -with expansion: - 1 == 1 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( long_var == unsigned_short_var ) +MiscTests.cpp:<line number>: FAILED: + CHECK_THAT( testStringForMatching(), Contains( "not there" ) ) with expansion: - 1 == 1 + "this string contains 'abc' as a substring" contains: "not there" -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( long_var == unsigned_int_var ) -with expansion: - 1 == 1 +------------------------------------------------------------------------------- +Custom exceptions can be translated when testing for nothrow +------------------------------------------------------------------------------- +ExceptionTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( long_var == unsigned_long_var ) -with expansion: - 1 == 1 +ExceptionTests.cpp:<line number>: FAILED: + REQUIRE_NOTHROW( throwCustom() ) +due to unexpected exception with message: + custom exception - not std ------------------------------------------------------------------------------- -comparisons between const int variables +Custom exceptions can be translated when testing for throwing as something else ------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> +ExceptionTests.cpp:<line number> ............................................................................... -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( unsigned_char_var == 1 ) -with expansion: - 1 == 1 +ExceptionTests.cpp:<line number>: FAILED: + REQUIRE_THROWS_AS( throwCustom() ) +due to unexpected exception with message: + custom exception - not std -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( unsigned_short_var == 1 ) -with expansion: - 1 == 1 +------------------------------------------------------------------------------- +Custom std-exceptions can be custom translated +------------------------------------------------------------------------------- +ExceptionTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( unsigned_int_var == 1 ) -with expansion: - 1 == 1 +ExceptionTests.cpp:<line number>: FAILED: +due to unexpected exception with message: + custom std exception -ConditionTests.cpp:<line number>: +------------------------------------------------------------------------------- +Demonstrate that a non-const == is not used +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... + +TrickyTests.cpp:<line number>: PASSED: - REQUIRE( unsigned_long_var == 1 ) + REQUIRE( t == 1u ) with expansion: - 1 == 1 + {?} == 1 ------------------------------------------------------------------------------- -Comparisons between unsigned ints and negative signed ints match c++ standard -behaviour +EndsWith string matcher ------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -ConditionTests.cpp:<line number>: -PASSED: - CHECK( ( -1 > 2u ) ) +MiscTests.cpp:<line number>: FAILED: + CHECK_THAT( testStringForMatching(), EndsWith( "this" ) ) with expansion: - true + "this string contains 'abc' as a substring" ends with: "this" -ConditionTests.cpp:<line number>: -PASSED: - CHECK( -1 > 2u ) -with expansion: - -1 > 2 +------------------------------------------------------------------------------- +Equality checks that should fail +------------------------------------------------------------------------------- +ConditionTests.cpp:<line number> +............................................................................... -ConditionTests.cpp:<line number>: -PASSED: - CHECK( ( 2u < -1 ) ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.int_seven == 6 ) with expansion: - true + 7 == 6 -ConditionTests.cpp:<line number>: -PASSED: - CHECK( 2u < -1 ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.int_seven == 8 ) with expansion: - 2 < -1 + 7 == 8 -ConditionTests.cpp:<line number>: -PASSED: - CHECK( ( minInt > 2u ) ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.int_seven == 0 ) with expansion: - true + 7 == 0 -ConditionTests.cpp:<line number>: -PASSED: - CHECK( minInt > 2u ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.float_nine_point_one == Approx( 9.11f ) ) with expansion: - -2147483648 > 2 - -------------------------------------------------------------------------------- -Comparisons between ints where one side is computed -------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> -............................................................................... + 9.1f == Approx( 9.1099996567 ) -ConditionTests.cpp:<line number>: -PASSED: - CHECK( 54 == 6*9 ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.float_nine_point_one == Approx( 9.0f ) ) with expansion: - 54 == 54 - -------------------------------------------------------------------------------- -Pointers can be compared to null -------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> -............................................................................... + 9.1f == Approx( 9.0 ) -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( p == nullptr ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.float_nine_point_one == Approx( 1 ) ) with expansion: - NULL == nullptr + 9.1f == Approx( 1.0 ) -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( p == pNULL ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.float_nine_point_one == Approx( 0 ) ) with expansion: - NULL == NULL + 9.1f == Approx( 0.0 ) -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( p != nullptr ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.double_pi == Approx( 3.1415 ) ) with expansion: - 0x<hex digits> != nullptr + 3.1415926535 == Approx( 3.1415 ) -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( cp != nullptr ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.str_hello == "goodbye" ) with expansion: - 0x<hex digits> != nullptr + "hello" == "goodbye" -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( cpc != nullptr ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.str_hello == "hell" ) with expansion: - 0x<hex digits> != nullptr + "hello" == "hell" -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( returnsNull() == nullptr ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.str_hello == "hello1" ) with expansion: - {null string} == nullptr + "hello" == "hello1" -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( returnsConstNull() == nullptr ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.str_hello.size() == 6 ) with expansion: - {null string} == nullptr + 5 == 6 -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( nullptr != p ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( x == Approx( 1.301 ) ) with expansion: - nullptr != 0x<hex digits> + 1.3 == Approx( 1.301 ) ------------------------------------------------------------------------------- -'Not' checks that should succeed +Equality checks that should succeed ------------------------------------------------------------------------------- ConditionTests.cpp:<line number> ............................................................................... ConditionTests.cpp:<line number>: PASSED: - REQUIRE( false == false ) - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( true == true ) + REQUIRE( data.int_seven == 7 ) +with expansion: + 7 == 7 ConditionTests.cpp:<line number>: PASSED: - REQUIRE( !false ) + REQUIRE( data.float_nine_point_one == Approx( 9.1f ) ) with expansion: - true + 9.1f == Approx( 9.1000003815 ) ConditionTests.cpp:<line number>: PASSED: - REQUIRE_FALSE( false ) + REQUIRE( data.double_pi == Approx( 3.1415926535 ) ) +with expansion: + 3.1415926535 == Approx( 3.1415926535 ) ConditionTests.cpp:<line number>: PASSED: - REQUIRE( !falseValue ) + REQUIRE( data.str_hello == "hello" ) with expansion: - true + "hello" == "hello" ConditionTests.cpp:<line number>: PASSED: - REQUIRE_FALSE( falseValue ) + REQUIRE( "hello" == data.str_hello ) with expansion: - !false + "hello" == "hello" ConditionTests.cpp:<line number>: PASSED: - REQUIRE( !(1 == 2) ) + REQUIRE( data.str_hello.size() == 5 ) with expansion: - true + 5 == 5 ConditionTests.cpp:<line number>: PASSED: - REQUIRE_FALSE( 1 == 2 ) + REQUIRE( x == Approx( 1.3 ) ) with expansion: - !(1 == 2) + 1.3 == Approx( 1.3 ) ------------------------------------------------------------------------------- -'Not' checks that should fail +Equals ------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -ConditionTests.cpp:<line number>: FAILED: - CHECK( false != false ) - -ConditionTests.cpp:<line number>: FAILED: - CHECK( true != true ) - -ConditionTests.cpp:<line number>: FAILED: - CHECK( !true ) -with expansion: - false - -ConditionTests.cpp:<line number>: FAILED: - CHECK_FALSE( true ) - -ConditionTests.cpp:<line number>: FAILED: - CHECK( !trueValue ) -with expansion: - false - -ConditionTests.cpp:<line number>: FAILED: - CHECK_FALSE( trueValue ) -with expansion: - !true - -ConditionTests.cpp:<line number>: FAILED: - CHECK( !(1 == 1) ) -with expansion: - false - -ConditionTests.cpp:<line number>: FAILED: - CHECK_FALSE( 1 == 1 ) +MiscTests.cpp:<line number>: +PASSED: + CHECK_THAT( testStringForMatching(), Equals( "this string contains 'abc' as a substring" ) ) with expansion: - !(1 == 1) + "this string contains 'abc' as a substring" equals: "this string contains + 'abc' as a substring" ------------------------------------------------------------------------------- -When checked exceptions are thrown they can be expected or unexpected +Equals string matcher ------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -ExceptionTests.cpp:<line number>: -PASSED: - REQUIRE_THROWS_AS( thisThrows() ) - -ExceptionTests.cpp:<line number>: -PASSED: - REQUIRE_NOTHROW( thisDoesntThrow() ) - -ExceptionTests.cpp:<line number>: -PASSED: - REQUIRE_THROWS( thisThrows() ) +MiscTests.cpp:<line number>: FAILED: + CHECK_THAT( testStringForMatching(), Equals( "something else" ) ) +with expansion: + "this string contains 'abc' as a substring" equals: "something else" ------------------------------------------------------------------------------- -Expected exceptions that don't throw or unexpected exceptions fail the test +Equals string matcher, with NULL ------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -ExceptionTests.cpp:<line number>: FAILED: - CHECK_THROWS_AS( thisThrows() ) -due to unexpected exception with message: - expected exception - -ExceptionTests.cpp:<line number>: FAILED: - CHECK_THROWS_AS( thisDoesntThrow() ) -because no exception was thrown where one was expected: - -ExceptionTests.cpp:<line number>: FAILED: - CHECK_NOTHROW( thisThrows() ) -due to unexpected exception with message: - expected exception +MiscTests.cpp:<line number>: +PASSED: + REQUIRE_THAT( "", Equals(0) ) +with expansion: + "" equals: "" ------------------------------------------------------------------------------- -When unchecked exceptions are thrown directly they are always failures +Exception messages can be tested for + exact match ------------------------------------------------------------------------------- ExceptionTests.cpp:<line number> ............................................................................... -ExceptionTests.cpp:<line number>: FAILED: -due to unexpected exception with message: - unexpected exception +ExceptionTests.cpp:<line number>: +PASSED: + REQUIRE_THROWS_WITH( thisThrows(), "expected exception" ) ------------------------------------------------------------------------------- -An unchecked exception reports the line of the last assertion +Exception messages can be tested for + different case ------------------------------------------------------------------------------- ExceptionTests.cpp:<line number> ............................................................................... ExceptionTests.cpp:<line number>: PASSED: - CHECK( 1 == 1 ) - -ExceptionTests.cpp:<line number>: FAILED: - {Unknown expression after the reported line} -due to unexpected exception with message: - unexpected exception + REQUIRE_THROWS_WITH( thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No ) ) ------------------------------------------------------------------------------- -When unchecked exceptions are thrown from sections they are always failures - section name +Exception messages can be tested for + wildcarded ------------------------------------------------------------------------------- ExceptionTests.cpp:<line number> ............................................................................... -ExceptionTests.cpp:<line number>: FAILED: -due to unexpected exception with message: - unexpected exception - -------------------------------------------------------------------------------- -When unchecked exceptions are thrown from functions they are always failures -------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> -............................................................................... +ExceptionTests.cpp:<line number>: +PASSED: + REQUIRE_THROWS_WITH( thisThrows(), StartsWith( "expected" ) ) -ExceptionTests.cpp:<line number>: FAILED: - CHECK( thisThrows() == 0 ) -due to unexpected exception with message: - expected exception +ExceptionTests.cpp:<line number>: +PASSED: + REQUIRE_THROWS_WITH( thisThrows(), EndsWith( "exception" ) ) -------------------------------------------------------------------------------- -When unchecked exceptions are thrown during a REQUIRE the test should abort -fail -------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> -............................................................................... +ExceptionTests.cpp:<line number>: +PASSED: + REQUIRE_THROWS_WITH( thisThrows(), Contains( "except" ) ) -ExceptionTests.cpp:<line number>: FAILED: - REQUIRE( thisThrows() == 0 ) -due to unexpected exception with message: - expected exception +ExceptionTests.cpp:<line number>: +PASSED: + REQUIRE_THROWS_WITH( thisThrows(), Contains( "exCept", Catch::CaseSensitive::No ) ) ------------------------------------------------------------------------------- -When unchecked exceptions are thrown during a CHECK the test should abort and -fail +Expected exceptions that don't throw or unexpected exceptions fail the test ------------------------------------------------------------------------------- ExceptionTests.cpp:<line number> ............................................................................... ExceptionTests.cpp:<line number>: FAILED: - CHECK( thisThrows() == 0 ) + CHECK_THROWS_AS( thisThrows() ) due to unexpected exception with message: expected exception -------------------------------------------------------------------------------- -Non-std exceptions can be translated -------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> -............................................................................... - ExceptionTests.cpp:<line number>: FAILED: -due to unexpected exception with message: - custom exception - -------------------------------------------------------------------------------- -Custom std-exceptions can be custom translated -------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> -............................................................................... - -ExceptionTests.cpp:<line number>: FAILED: -due to unexpected exception with message: - custom std exception - -------------------------------------------------------------------------------- -Custom exceptions can be translated when testing for nothrow -------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> -............................................................................... + CHECK_THROWS_AS( thisDoesntThrow() ) +because no exception was thrown where one was expected: ExceptionTests.cpp:<line number>: FAILED: - REQUIRE_NOTHROW( throwCustom() ) + CHECK_NOTHROW( thisThrows() ) due to unexpected exception with message: - custom exception - not std + expected exception ------------------------------------------------------------------------------- -Custom exceptions can be translated when testing for throwing as something else +FAIL aborts the test ------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> +MessageTests.cpp:<line number> ............................................................................... -ExceptionTests.cpp:<line number>: FAILED: - REQUIRE_THROWS_AS( throwCustom() ) -due to unexpected exception with message: - custom exception - not std +MessageTests.cpp:<line number>: FAILED: +explicitly with message: + This is a failure ------------------------------------------------------------------------------- -Unexpected exceptions can be translated +FAIL does not require an argument ------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> +MessageTests.cpp:<line number> ............................................................................... -ExceptionTests.cpp:<line number>: FAILED: -due to unexpected exception with message: - 3.14 +MessageTests.cpp:<line number>: FAILED: ------------------------------------------------------------------------------- -NotImplemented exception +Factorials are computed ------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -ExceptionTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - REQUIRE_THROWS( thisFunctionNotImplemented( 7 ) ) + REQUIRE( Factorial(0) == 1 ) +with expansion: + 1 == 1 -------------------------------------------------------------------------------- -Exception messages can be tested for - exact match -------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> -............................................................................... +MiscTests.cpp:<line number>: +PASSED: + REQUIRE( Factorial(1) == 1 ) +with expansion: + 1 == 1 -ExceptionTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - REQUIRE_THROWS_WITH( thisThrows(), "expected exception" ) + REQUIRE( Factorial(2) == 2 ) +with expansion: + 2 == 2 -------------------------------------------------------------------------------- -Exception messages can be tested for - different case -------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> -............................................................................... +MiscTests.cpp:<line number>: +PASSED: + REQUIRE( Factorial(3) == 6 ) +with expansion: + 6 == 6 -ExceptionTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - REQUIRE_THROWS_WITH( thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No ) ) + REQUIRE( Factorial(10) == 3628800 ) +with expansion: + 3628800 (0x<hex digits>) == 3628800 (0x<hex digits>) ------------------------------------------------------------------------------- -Exception messages can be tested for - wildcarded +Generator over a range of pairs ------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> +GeneratorTests.cpp:<line number> ............................................................................... -ExceptionTests.cpp:<line number>: -PASSED: - REQUIRE_THROWS_WITH( thisThrows(), StartsWith( "expected" ) ) - -ExceptionTests.cpp:<line number>: -PASSED: - REQUIRE_THROWS_WITH( thisThrows(), EndsWith( "exception" ) ) - -ExceptionTests.cpp:<line number>: -PASSED: - REQUIRE_THROWS_WITH( thisThrows(), Contains( "except" ) ) - -ExceptionTests.cpp:<line number>: +GeneratorTests.cpp:<line number>: PASSED: - REQUIRE_THROWS_WITH( thisThrows(), Contains( "exCept", Catch::CaseSensitive::No ) ) + CATCH_REQUIRE( i->first == i->second-1 ) +with expansion: + 0 == 0 ------------------------------------------------------------------------------- -Mismatching exception messages failing the test +Generator over a range of pairs ------------------------------------------------------------------------------- -ExceptionTests.cpp:<line number> +GeneratorTests.cpp:<line number> ............................................................................... -ExceptionTests.cpp:<line number>: +GeneratorTests.cpp:<line number>: PASSED: - REQUIRE_THROWS_WITH( thisThrows(), "expected exception" ) - -ExceptionTests.cpp:<line number>: FAILED: - REQUIRE_THROWS_WITH( thisThrows(), "should fail" ) + CATCH_REQUIRE( i->first == i->second-1 ) with expansion: - expected exception + 2 == 2 ------------------------------------------------------------------------------- Generators over two ranges @@ -2635,28 +2367,34 @@ with expansion: 214 == 214 ------------------------------------------------------------------------------- -Generator over a range of pairs +Greater-than inequalities with different epsilons ------------------------------------------------------------------------------- -GeneratorTests.cpp:<line number> +ApproxTests.cpp:<line number> ............................................................................... -GeneratorTests.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - CATCH_REQUIRE( i->first == i->second-1 ) + REQUIRE( d >= Approx( 1.22 ) ) with expansion: - 0 == 0 + 1.23 >= Approx( 1.22 ) -------------------------------------------------------------------------------- -Generator over a range of pairs -------------------------------------------------------------------------------- -GeneratorTests.cpp:<line number> -............................................................................... +ApproxTests.cpp:<line number>: +PASSED: + REQUIRE( d >= Approx( 1.23 ) ) +with expansion: + 1.23 >= Approx( 1.23 ) -GeneratorTests.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - CATCH_REQUIRE( i->first == i->second-1 ) + REQUIRE_FALSE( d >= Approx( 1.24 ) ) with expansion: - 2 == 2 + !(1.23 >= Approx( 1.24 )) + +ApproxTests.cpp:<line number>: +PASSED: + REQUIRE( d >= Approx( 1.24 ).epsilon(0.1) ) +with expansion: + 1.23 >= Approx( 1.24 ) ------------------------------------------------------------------------------- INFO and WARN do not abort tests @@ -2670,17 +2408,6 @@ warning: this is a warning ------------------------------------------------------------------------------- -SUCCEED counts as a test pass -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: -PASSED: -with message: - this is a success - -------------------------------------------------------------------------------- INFO gets logged on failure ------------------------------------------------------------------------------- MessageTests.cpp:<line number> @@ -2731,1726 +2458,137 @@ with message: but not this ------------------------------------------------------------------------------- -FAIL aborts the test -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: FAILED: -explicitly with message: - This is a failure - -------------------------------------------------------------------------------- -FAIL does not require an argument -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: FAILED: - -------------------------------------------------------------------------------- -SUCCESS does not require an argument -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: -PASSED: - -------------------------------------------------------------------------------- -Output from all sections is reported - one -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: FAILED: -explicitly with message: - Message from section one - -------------------------------------------------------------------------------- -Output from all sections is reported - two -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: FAILED: -explicitly with message: - Message from section two - -Message from section one -------------------------------------------------------------------------------- -Standard output from all sections is reported - one -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - - -No assertions in section 'one' - -Message from section two -------------------------------------------------------------------------------- -Standard output from all sections is reported - two -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - - -No assertions in section 'two' - -------------------------------------------------------------------------------- -SCOPED_INFO is reset for each loop -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: -PASSED: - REQUIRE( i < 10 ) -with expansion: - 0 < 10 -with messages: - current counter 0 - i := 0 - -MessageTests.cpp:<line number>: -PASSED: - REQUIRE( i < 10 ) -with expansion: - 1 < 10 -with messages: - current counter 1 - i := 1 - -MessageTests.cpp:<line number>: -PASSED: - REQUIRE( i < 10 ) -with expansion: - 2 < 10 -with messages: - current counter 2 - i := 2 - -MessageTests.cpp:<line number>: -PASSED: - REQUIRE( i < 10 ) -with expansion: - 3 < 10 -with messages: - current counter 3 - i := 3 - -MessageTests.cpp:<line number>: -PASSED: - REQUIRE( i < 10 ) -with expansion: - 4 < 10 -with messages: - current counter 4 - i := 4 - -MessageTests.cpp:<line number>: -PASSED: - REQUIRE( i < 10 ) -with expansion: - 5 < 10 -with messages: - current counter 5 - i := 5 - -MessageTests.cpp:<line number>: -PASSED: - REQUIRE( i < 10 ) -with expansion: - 6 < 10 -with messages: - current counter 6 - i := 6 - -MessageTests.cpp:<line number>: -PASSED: - REQUIRE( i < 10 ) -with expansion: - 7 < 10 -with messages: - current counter 7 - i := 7 - -MessageTests.cpp:<line number>: -PASSED: - REQUIRE( i < 10 ) -with expansion: - 8 < 10 -with messages: - current counter 8 - i := 8 - -MessageTests.cpp:<line number>: -PASSED: - REQUIRE( i < 10 ) -with expansion: - 9 < 10 -with messages: - current counter 9 - i := 9 - -MessageTests.cpp:<line number>: FAILED: - REQUIRE( i < 10 ) -with expansion: - 10 < 10 -with messages: - current counter 10 - i := 10 - -------------------------------------------------------------------------------- -The NO_FAIL macro reports a failure but does not fail the test -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: -FAILED - but was ok: - CHECK_NOFAIL( 1 == 2 ) - -------------------------------------------------------------------------------- -just failure -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: FAILED: -explicitly with message: - Previous info should not be seen - -------------------------------------------------------------------------------- -sends information to INFO -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: FAILED: - REQUIRE( false ) -with messages: - hi - i := 7 - -------------------------------------------------------------------------------- -Pointers can be converted to strings -------------------------------------------------------------------------------- -MessageTests.cpp:<line number> -............................................................................... - -MessageTests.cpp:<line number>: -warning: - actual address of p: 0x<hex digits> - -MessageTests.cpp:<line number>: -warning: - toString(p): 0x<hex digits> - -------------------------------------------------------------------------------- -random SECTION tests - s1 -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( a != b ) -with expansion: - 1 != 2 - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( b != a ) -with expansion: - 2 != 1 - -------------------------------------------------------------------------------- -random SECTION tests - s2 -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( a != b ) -with expansion: - 1 != 2 - -------------------------------------------------------------------------------- -nested SECTION tests - s1 -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( a != b ) -with expansion: - 1 != 2 - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( b != a ) -with expansion: - 2 != 1 - -------------------------------------------------------------------------------- -nested SECTION tests - s1 - s2 -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( a != b ) -with expansion: - 1 != 2 - -------------------------------------------------------------------------------- -more nested SECTION tests - s1 - s2 -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - REQUIRE( a == b ) -with expansion: - 1 == 2 - -------------------------------------------------------------------------------- -more nested SECTION tests - s1 - s3 -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( a != b ) -with expansion: - 1 != 2 - -------------------------------------------------------------------------------- -more nested SECTION tests - s1 - s4 -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( a < b ) -with expansion: - 1 < 2 - -------------------------------------------------------------------------------- -even more nested SECTION tests - c - d (leaf) -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - -------------------------------------------------------------------------------- -even more nested SECTION tests - c - e (leaf) -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - -------------------------------------------------------------------------------- -even more nested SECTION tests - f (leaf) -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - -------------------------------------------------------------------------------- -looped SECTION tests - s1 -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK( b > a ) -with expansion: - 0 > 1 - -------------------------------------------------------------------------------- -looped tests -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK( ( fib[i] % 2 ) == 0 ) -with expansion: - 1 == 0 -with message: - Testing if fib[0] (1) is even - -MiscTests.cpp:<line number>: FAILED: - CHECK( ( fib[i] % 2 ) == 0 ) -with expansion: - 1 == 0 -with message: - Testing if fib[1] (1) is even - -MiscTests.cpp:<line number>: -PASSED: - CHECK( ( fib[i] % 2 ) == 0 ) -with expansion: - 0 == 0 -with message: - Testing if fib[2] (2) is even - -MiscTests.cpp:<line number>: FAILED: - CHECK( ( fib[i] % 2 ) == 0 ) -with expansion: - 1 == 0 -with message: - Testing if fib[3] (3) is even - -MiscTests.cpp:<line number>: FAILED: - CHECK( ( fib[i] % 2 ) == 0 ) -with expansion: - 1 == 0 -with message: - Testing if fib[4] (5) is even - -MiscTests.cpp:<line number>: -PASSED: - CHECK( ( fib[i] % 2 ) == 0 ) -with expansion: - 0 == 0 -with message: - Testing if fib[5] (8) is even - -MiscTests.cpp:<line number>: FAILED: - CHECK( ( fib[i] % 2 ) == 0 ) -with expansion: - 1 == 0 -with message: - Testing if fib[6] (13) is even - -MiscTests.cpp:<line number>: FAILED: - CHECK( ( fib[i] % 2 ) == 0 ) -with expansion: - 1 == 0 -with message: - Testing if fib[7] (21) is even - -A string sent directly to stdout -A string sent directly to stderr -------------------------------------------------------------------------------- -null strings -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( makeString( false ) != static_cast<char*>(nullptr) ) -with expansion: - "valid string" != {null string} - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( makeString( true ) == static_cast<char*>(nullptr) ) -with expansion: - {null string} == {null string} - -------------------------------------------------------------------------------- -checkedIf -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - CHECKED_IF( flag ) -with expansion: - true - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( testCheckedIf( true ) ) -with expansion: - true - -------------------------------------------------------------------------------- -checkedIf, failing -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECKED_IF( flag ) -with expansion: - false - -MiscTests.cpp:<line number>: FAILED: - REQUIRE( testCheckedIf( false ) ) -with expansion: - false - -------------------------------------------------------------------------------- -checkedElse -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - CHECKED_ELSE( flag ) -with expansion: - true - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( testCheckedElse( true ) ) -with expansion: - true - -------------------------------------------------------------------------------- -checkedElse, failing -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECKED_ELSE( flag ) -with expansion: - false - -MiscTests.cpp:<line number>: FAILED: - REQUIRE( testCheckedElse( false ) ) -with expansion: - false - -------------------------------------------------------------------------------- -xmlentitycheck - embedded xml -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - -------------------------------------------------------------------------------- -xmlentitycheck - encoded chars -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - -------------------------------------------------------------------------------- -send a single char to INFO -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - REQUIRE( false ) -with message: - 3 - -------------------------------------------------------------------------------- -atomic if -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( x == 0 ) -with expansion: - 0 == 0 - -------------------------------------------------------------------------------- -String matchers -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE_THAT( testStringForMatching(), Contains( "string" ) ) -with expansion: - "this string contains 'abc' as a substring" contains: "string" - -MiscTests.cpp:<line number>: -PASSED: - CHECK_THAT( testStringForMatching(), Contains( "abc" ) ) -with expansion: - "this string contains 'abc' as a substring" contains: "abc" - -MiscTests.cpp:<line number>: -PASSED: - CHECK_THAT( testStringForMatching(), StartsWith( "this" ) ) -with expansion: - "this string contains 'abc' as a substring" starts with: "this" - -MiscTests.cpp:<line number>: -PASSED: - CHECK_THAT( testStringForMatching(), EndsWith( "substring" ) ) -with expansion: - "this string contains 'abc' as a substring" ends with: "substring" - -------------------------------------------------------------------------------- -Contains string matcher -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK_THAT( testStringForMatching(), Contains( "not there" ) ) -with expansion: - "this string contains 'abc' as a substring" contains: "not there" - -------------------------------------------------------------------------------- -StartsWith string matcher -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK_THAT( testStringForMatching(), StartsWith( "string" ) ) -with expansion: - "this string contains 'abc' as a substring" starts with: "string" - -------------------------------------------------------------------------------- -EndsWith string matcher -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK_THAT( testStringForMatching(), EndsWith( "this" ) ) -with expansion: - "this string contains 'abc' as a substring" ends with: "this" - -------------------------------------------------------------------------------- -Equals string matcher -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK_THAT( testStringForMatching(), Equals( "something else" ) ) -with expansion: - "this string contains 'abc' as a substring" equals: "something else" - -------------------------------------------------------------------------------- -Equals string matcher, with NULL -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE_THAT( "", Equals(nullptr) ) -with expansion: - "" equals: "" - -------------------------------------------------------------------------------- -AllOf matcher -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - CHECK_THAT( testStringForMatching(), AllOf( Catch::Contains( "string" ), Catch::Contains( "abc" ) ) ) -with expansion: - "this string contains 'abc' as a substring" ( contains: "string" and - contains: "abc" ) - -------------------------------------------------------------------------------- -AnyOf matcher -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - CHECK_THAT( testStringForMatching(), AnyOf( Catch::Contains( "string" ), Catch::Contains( "not there" ) ) ) -with expansion: - "this string contains 'abc' as a substring" ( contains: "string" or contains: - "not there" ) - -MiscTests.cpp:<line number>: -PASSED: - CHECK_THAT( testStringForMatching(), AnyOf( Catch::Contains( "not there" ), Catch::Contains( "string" ) ) ) -with expansion: - "this string contains 'abc' as a substring" ( contains: "not there" or - contains: "string" ) - -------------------------------------------------------------------------------- -Equals -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - CHECK_THAT( testStringForMatching(), Equals( "this string contains 'abc' as a substring" ) ) -with expansion: - "this string contains 'abc' as a substring" equals: "this string contains - 'abc' as a substring" - -------------------------------------------------------------------------------- -Matchers can be (AllOf) composed with the && operator -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - CHECK_THAT( testStringForMatching(), Contains( "string" ) && Contains( "abc" ) && Contains( "substring" ) && Contains( "contains" ) ) -with expansion: - "this string contains 'abc' as a substring" ( contains: "string" and - contains: "abc" and contains: "substring" and contains: "contains" ) - -------------------------------------------------------------------------------- -Matchers can be (AnyOf) composed with the || operator -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - CHECK_THAT( testStringForMatching(), Contains( "string" ) || Contains( "different" ) || Contains( "random" ) ) -with expansion: - "this string contains 'abc' as a substring" ( contains: "string" or contains: - "different" or contains: "random" ) - -MiscTests.cpp:<line number>: -PASSED: - CHECK_THAT( testStringForMatching2(), Contains( "string" ) || Contains( "different" ) || Contains( "random" ) ) -with expansion: - "some completely different text that contains one common word" ( contains: - "string" or contains: "different" or contains: "random" ) - -------------------------------------------------------------------------------- -Matchers can be composed with both && and || -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - CHECK_THAT( testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) && Contains( "substring" ) ) -with expansion: - "this string contains 'abc' as a substring" ( ( contains: "string" or - contains: "different" ) and contains: "substring" ) - -------------------------------------------------------------------------------- -Matchers can be composed with both && and || - failing -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK_THAT( testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) && Contains( "random" ) ) -with expansion: - "this string contains 'abc' as a substring" ( ( contains: "string" or - contains: "different" ) and contains: "random" ) - -------------------------------------------------------------------------------- -Matchers can be negated (Not) with the ! operator -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - CHECK_THAT( testStringForMatching(), !Contains( "different" ) ) -with expansion: - "this string contains 'abc' as a substring" not contains: "different" - -------------------------------------------------------------------------------- -Matchers can be negated (Not) with the ! operator - failing -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK_THAT( testStringForMatching(), !Contains( "substring" ) ) -with expansion: - "this string contains 'abc' as a substring" not contains: "substring" - -------------------------------------------------------------------------------- -Factorials are computed -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( Factorial(0) == 1 ) -with expansion: - 1 == 1 - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( Factorial(1) == 1 ) -with expansion: - 1 == 1 - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( Factorial(2) == 2 ) -with expansion: - 2 == 2 - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( Factorial(3) == 6 ) -with expansion: - 6 == 6 - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( Factorial(10) == 3628800 ) -with expansion: - 3628800 (0x<hex digits>) == 3628800 (0x<hex digits>) - -------------------------------------------------------------------------------- -Nice descriptive name -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -warning: - This one ran - -------------------------------------------------------------------------------- -vectors can be sized and resized -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.size() == 5 ) -with expansion: - 5 == 5 - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.capacity() >= 5 ) -with expansion: - 5 >= 5 - -------------------------------------------------------------------------------- -vectors can be sized and resized - resizing bigger changes size and capacity -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.size() == 10 ) -with expansion: - 10 == 10 - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.capacity() >= 10 ) -with expansion: - 10 >= 10 - -------------------------------------------------------------------------------- -vectors can be sized and resized -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.size() == 5 ) -with expansion: - 5 == 5 - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.capacity() >= 5 ) -with expansion: - 5 >= 5 - -------------------------------------------------------------------------------- -vectors can be sized and resized - resizing smaller changes size but not capacity -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.size() == 0 ) -with expansion: - 0 == 0 - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.capacity() >= 5 ) -with expansion: - 5 >= 5 - -------------------------------------------------------------------------------- -vectors can be sized and resized - resizing smaller changes size but not capacity - We can use the 'swap trick' to reset the capacity -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.capacity() == 0 ) -with expansion: - 0 == 0 - -------------------------------------------------------------------------------- -vectors can be sized and resized -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.size() == 5 ) -with expansion: - 5 == 5 - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.capacity() >= 5 ) -with expansion: - 5 >= 5 - -------------------------------------------------------------------------------- -vectors can be sized and resized - reserving bigger changes capacity but not size -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.size() == 5 ) -with expansion: - 5 == 5 - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.capacity() >= 10 ) -with expansion: - 10 >= 10 - -------------------------------------------------------------------------------- -vectors can be sized and resized -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.size() == 5 ) -with expansion: - 5 == 5 - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.capacity() >= 5 ) -with expansion: - 5 >= 5 - -------------------------------------------------------------------------------- -vectors can be sized and resized - reserving smaller does not change size or capacity -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.size() == 5 ) -with expansion: - 5 == 5 - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( v.capacity() >= 5 ) -with expansion: - 5 >= 5 - -------------------------------------------------------------------------------- -A couple of nested sections followed by a failure - Outer - Inner -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: -with message: - that's not flying - that's failing in style - -------------------------------------------------------------------------------- -A couple of nested sections followed by a failure -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: -explicitly with message: - to infinity and beyond - -------------------------------------------------------------------------------- -not allowed -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - -------------------------------------------------------------------------------- -Tabs and newlines show in output -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: FAILED: - CHECK( s1 == s2 ) -with expansion: - "if ($b == 10) { - $a= 20; - }" - == - "if ($b == 10) { - $a = 20; - } - " - -------------------------------------------------------------------------------- -toString on const wchar_t const pointer returns the string contents -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - CHECK( result == "\"wide load\"" ) -with expansion: - ""wide load"" == ""wide load"" - -------------------------------------------------------------------------------- -toString on const wchar_t pointer returns the string contents -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - CHECK( result == "\"wide load\"" ) -with expansion: - ""wide load"" == ""wide load"" - -------------------------------------------------------------------------------- -toString on wchar_t const pointer returns the string contents -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - CHECK( result == "\"wide load\"" ) -with expansion: - ""wide load"" == ""wide load"" - -------------------------------------------------------------------------------- -toString on wchar_t returns the string contents -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - CHECK( result == "\"wide load\"" ) -with expansion: - ""wide load"" == ""wide load"" - -------------------------------------------------------------------------------- -XmlEncode - normal string -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( encode( "normal string" ) == "normal string" ) -with expansion: - "normal string" == "normal string" - -------------------------------------------------------------------------------- -XmlEncode - empty string -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( encode( "" ) == "" ) -with expansion: - "" == "" - -------------------------------------------------------------------------------- -XmlEncode - string with ampersand -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( encode( "smith & jones" ) == "smith & jones" ) -with expansion: - "smith & jones" == "smith & jones" - -------------------------------------------------------------------------------- -XmlEncode - string with less-than -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( encode( "smith < jones" ) == "smith < jones" ) -with expansion: - "smith < jones" == "smith < jones" - -------------------------------------------------------------------------------- -XmlEncode - string with greater-than -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( encode( "smith > jones" ) == "smith > jones" ) -with expansion: - "smith > jones" == "smith > jones" - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( encode( "smith ]]> jones" ) == "smith ]]> jones" ) -with expansion: - "smith ]]> jones" - == - "smith ]]> jones" - -------------------------------------------------------------------------------- -XmlEncode - string with quotes -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( encode( stringWithQuotes ) == stringWithQuotes ) -with expansion: - "don't "quote" me on that" - == - "don't "quote" me on that" - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( encode( stringWithQuotes, Catch::XmlEncode::ForAttributes ) == "don't "quote" me on that" ) -with expansion: - "don't "quote" me on that" - == - "don't "quote" me on that" - -------------------------------------------------------------------------------- -XmlEncode - string with control char (1) -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( encode( "[\x01]" ) == "[]" ) -with expansion: - "[]" == "[]" - -------------------------------------------------------------------------------- -XmlEncode - string with control char (x7F) -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( encode( "[\x7F]" ) == "[]" ) -with expansion: - "[]" == "[]" - -------------------------------------------------------------------------------- -long long -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: - REQUIRE( l == std::numeric_limits<long long>::max() ) -with expansion: - 9223372036854775807 (0x<hex digits>) - == - 9223372036854775807 (0x<hex digits>) - -------------------------------------------------------------------------------- -This test 'should' fail but doesn't -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: -with message: - oops! - -------------------------------------------------------------------------------- -# A test name that starts with a # -------------------------------------------------------------------------------- -MiscTests.cpp:<line number> -............................................................................... - -MiscTests.cpp:<line number>: -PASSED: -with message: - yay - -------------------------------------------------------------------------------- -Process can be configured on command line - default - no arguments -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) - -TestMain.cpp:<line number>: -PASSED: - CHECK( config.shouldDebugBreak == false ) -with expansion: - false == false - -TestMain.cpp:<line number>: -PASSED: - CHECK( config.abortAfter == -1 ) -with expansion: - -1 == -1 - -TestMain.cpp:<line number>: -PASSED: - CHECK( config.noThrow == false ) -with expansion: - false == false - -TestMain.cpp:<line number>: -PASSED: - CHECK( config.reporterNames.empty() ) -with expansion: - true - -------------------------------------------------------------------------------- -Process can be configured on command line - test lists - 1 test -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) - -TestMain.cpp:<line number>: -PASSED: - REQUIRE( cfg.testSpec().matches( fakeTestCase( "notIncluded" ) ) == false ) -with expansion: - false == false - -TestMain.cpp:<line number>: -PASSED: - REQUIRE( cfg.testSpec().matches( fakeTestCase( "test1" ) ) ) -with expansion: - true - -------------------------------------------------------------------------------- -Process can be configured on command line - test lists - Specify one test case exclusion using exclude: -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) - -TestMain.cpp:<line number>: -PASSED: - REQUIRE( cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false ) -with expansion: - false == false - -TestMain.cpp:<line number>: -PASSED: - REQUIRE( cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) ) ) -with expansion: - true - -------------------------------------------------------------------------------- -Process can be configured on command line - test lists - Specify one test case exclusion using ~ -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) - -TestMain.cpp:<line number>: -PASSED: - REQUIRE( cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false ) -with expansion: - false == false - -TestMain.cpp:<line number>: -PASSED: - REQUIRE( cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) ) ) -with expansion: - true - -------------------------------------------------------------------------------- -Process can be configured on command line - reporter - -r/console -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) - -TestMain.cpp:<line number>: -PASSED: - REQUIRE( config.reporterNames[0] == "console" ) -with expansion: - "console" == "console" - -------------------------------------------------------------------------------- -Process can be configured on command line - reporter - -r/xml -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) - -TestMain.cpp:<line number>: -PASSED: - REQUIRE( config.reporterNames[0] == "xml" ) -with expansion: - "xml" == "xml" - -------------------------------------------------------------------------------- -Process can be configured on command line - reporter - -r xml and junit +Inequality checks that should fail ------------------------------------------------------------------------------- -TestMain.cpp:<line number> +ConditionTests.cpp:<line number> ............................................................................... -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) - -TestMain.cpp:<line number>: -PASSED: - REQUIRE( config.reporterNames.size() == 2 ) -with expansion: - 2 == 2 - -TestMain.cpp:<line number>: -PASSED: - REQUIRE( config.reporterNames[0] == "xml" ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.int_seven != 7 ) with expansion: - "xml" == "xml" + 7 != 7 -TestMain.cpp:<line number>: -PASSED: - REQUIRE( config.reporterNames[1] == "junit" ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.float_nine_point_one != Approx( 9.1f ) ) with expansion: - "junit" == "junit" - -------------------------------------------------------------------------------- -Process can be configured on command line - reporter - --reporter/junit -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + 9.1f != Approx( 9.1000003815 ) -TestMain.cpp:<line number>: -PASSED: - REQUIRE( config.reporterNames[0] == "junit" ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.double_pi != Approx( 3.1415926535 ) ) with expansion: - "junit" == "junit" - -------------------------------------------------------------------------------- -Process can be configured on command line - debugger - -b -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + 3.1415926535 != Approx( 3.1415926535 ) -TestMain.cpp:<line number>: -PASSED: - REQUIRE( config.shouldDebugBreak == true ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.str_hello != "hello" ) with expansion: - true == true - -------------------------------------------------------------------------------- -Process can be configured on command line - debugger - --break -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + "hello" != "hello" -TestMain.cpp:<line number>: -PASSED: - REQUIRE( config.shouldDebugBreak ) +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.str_hello.size() != 5 ) with expansion: - true + 5 != 5 ------------------------------------------------------------------------------- -Process can be configured on command line - abort - -a aborts after first failure +Inequality checks that should succeed ------------------------------------------------------------------------------- -TestMain.cpp:<line number> +ConditionTests.cpp:<line number> ............................................................................... -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) - -TestMain.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE( config.abortAfter == 1 ) + REQUIRE( data.int_seven != 6 ) with expansion: - 1 == 1 - -------------------------------------------------------------------------------- -Process can be configured on command line - abort - -x 2 aborts after two failures -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + 7 != 6 -TestMain.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE( config.abortAfter == 2 ) + REQUIRE( data.int_seven != 8 ) with expansion: - 2 == 2 - -------------------------------------------------------------------------------- -Process can be configured on command line - abort - -x must be greater than zero -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... + 7 != 8 -TestMain.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE_THAT( parseIntoConfigAndReturnError( argv, config ), Contains( "greater than zero" ) ) + REQUIRE( data.float_nine_point_one != Approx( 9.11f ) ) with expansion: - "Value after -x or --abortAfter must be greater than zero - - while parsing: (-x, --abortx <no. failures>)" contains: "greater than zero" - -------------------------------------------------------------------------------- -Process can be configured on command line - abort - -x must be numeric -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... + 9.1f != Approx( 9.1099996567 ) -TestMain.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE_THAT( parseIntoConfigAndReturnError( argv, config ), Contains( "-x" ) ) + REQUIRE( data.float_nine_point_one != Approx( 9.0f ) ) with expansion: - "Unable to convert oops to destination type - - while parsing: (-x, --abortx <no. failures>)" contains: "-x" - -------------------------------------------------------------------------------- -Process can be configured on command line - nothrow - -e -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + 9.1f != Approx( 9.0 ) -TestMain.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE( config.noThrow == true ) + REQUIRE( data.float_nine_point_one != Approx( 1 ) ) with expansion: - true == true - -------------------------------------------------------------------------------- -Process can be configured on command line - nothrow - --nothrow -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + 9.1f != Approx( 1.0 ) -TestMain.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE( config.noThrow == true ) + REQUIRE( data.float_nine_point_one != Approx( 0 ) ) with expansion: - true == true - -------------------------------------------------------------------------------- -Process can be configured on command line - output filename - -o filename -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + 9.1f != Approx( 0.0 ) -TestMain.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE( config.outputFilename == "filename.ext" ) + REQUIRE( data.double_pi != Approx( 3.1415 ) ) with expansion: - "filename.ext" == "filename.ext" - -------------------------------------------------------------------------------- -Process can be configured on command line - output filename - --out -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + 3.1415926535 != Approx( 3.1415 ) -TestMain.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - REQUIRE( config.outputFilename == "filename.ext" ) + REQUIRE( data.str_hello != "goodbye" ) with expansion: - "filename.ext" == "filename.ext" - -------------------------------------------------------------------------------- -Process can be configured on command line - combinations - Single character flags can be combined -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + "hello" != "goodbye" -TestMain.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - CHECK( config.abortAfter == 1 ) + REQUIRE( data.str_hello != "hell" ) with expansion: - 1 == 1 + "hello" != "hell" -TestMain.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - CHECK( config.shouldDebugBreak ) + REQUIRE( data.str_hello != "hello1" ) with expansion: - true + "hello" != "hello1" -TestMain.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - CHECK( config.noThrow == true ) + REQUIRE( data.str_hello.size() != 6 ) with expansion: - true == true + 5 != 6 ------------------------------------------------------------------------------- -Process can be configured on command line - use-colour - without option +Less-than inequalities with different epsilons ------------------------------------------------------------------------------- -TestMain.cpp:<line number> +ApproxTests.cpp:<line number> ............................................................................... -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) - -TestMain.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( config.useColour == UseColour::Auto ) + REQUIRE( d <= Approx( 1.24 ) ) with expansion: - 0 == 0 - -------------------------------------------------------------------------------- -Process can be configured on command line - use-colour - auto -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + 1.23 <= Approx( 1.24 ) -TestMain.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( config.useColour == UseColour::Auto ) + REQUIRE( d <= Approx( 1.23 ) ) with expansion: - 0 == 0 - -------------------------------------------------------------------------------- -Process can be configured on command line - use-colour - yes -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... + 1.23 <= Approx( 1.23 ) -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) - -TestMain.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( config.useColour == UseColour::Yes ) + REQUIRE_FALSE( d <= Approx( 1.22 ) ) with expansion: - 1 == 1 + !(1.23 <= Approx( 1.22 )) -------------------------------------------------------------------------------- -Process can be configured on command line - use-colour - no -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK_NOTHROW( parseIntoConfig( argv, config ) ) - -TestMain.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( config.useColour == UseColour::No ) + REQUIRE( d <= Approx( 1.22 ).epsilon(0.1) ) with expansion: - 2 == 2 - -------------------------------------------------------------------------------- -Process can be configured on command line - use-colour - error -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - REQUIRE_THROWS_WITH( parseIntoConfig( argv, config ), Contains( "colour mode must be one of" ) ) + 1.23 <= Approx( 1.22 ) ------------------------------------------------------------------------------- Long strings can be wrapped @@ -4794,13 +2932,9 @@ TestMain.cpp:<line number> TestMain.cpp:<line number>: PASSED: - CHECK( Text( "abcdef\n", TextAttributes().setWidth( 10 ) ).toString() == "abcdef\n" ) + CHECK( Text( "abcdef\n", TextAttributes().setWidth( 10 ) ).toString() == "abcdef" ) with expansion: - "abcdef - " - == - "abcdef - " + "abcdef" == "abcdef" TestMain.cpp:<line number>: PASSED: @@ -4810,13 +2944,19 @@ with expansion: TestMain.cpp:<line number>: PASSED: - CHECK( Text( "abcdef\n", TextAttributes().setWidth( 6 ) ).toString() == "abcdef\n" ) + CHECK( Text( "abcdef\n", TextAttributes().setWidth( 6 ) ).toString() == "abcdef" ) with expansion: - "abcdef - " + "abcdef" == "abcdef" + +TestMain.cpp:<line number>: +PASSED: + CHECK( Text( "abcdef\n", TextAttributes().setWidth( 5 ) ).toString() == "abcd-\nef" ) +with expansion: + "abcd- + ef" == - "abcdef - " + "abcd- + ef" ------------------------------------------------------------------------------- Long strings can be wrapped @@ -4886,181 +3026,107 @@ with expansion: ------------------------------------------------------------------------------- Long strings can be wrapped - With tabs + With wrap-before/ after characters + No wrapping ------------------------------------------------------------------------------- TestMain.cpp:<line number> ............................................................................... TestMain.cpp:<line number>: PASSED: - CHECK( Text( testString, TextAttributes().setWidth( 15 ) ).toString() == "one two three\n four\n five\n six" ) + CHECK( Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString ) with expansion: - "one two three - four - five - six" + "one,two(three) <here>" == - "one two three - four - five - six" - -------------------------------------------------------------------------------- -replaceInPlace - replace single char -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK( replaceInPlace( letters, "b", "z" ) ) -with expansion: - true + "one,two(three) <here>" TestMain.cpp:<line number>: PASSED: - CHECK( letters == "azcdefcg" ) + CHECK( Text( testString, TextAttributes().setWidth( 24 ) ).toString() == testString ) with expansion: - "azcdefcg" == "azcdefcg" - -------------------------------------------------------------------------------- -replaceInPlace - replace two chars -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK( replaceInPlace( letters, "c", "z" ) ) -with expansion: - true - -TestMain.cpp:<line number>: -PASSED: - CHECK( letters == "abzdefzg" ) -with expansion: - "abzdefzg" == "abzdefzg" - -------------------------------------------------------------------------------- -replaceInPlace - replace first char -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK( replaceInPlace( letters, "a", "z" ) ) -with expansion: - true - -TestMain.cpp:<line number>: -PASSED: - CHECK( letters == "zbcdefcg" ) -with expansion: - "zbcdefcg" == "zbcdefcg" - -------------------------------------------------------------------------------- -replaceInPlace - replace last char -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK( replaceInPlace( letters, "g", "z" ) ) -with expansion: - true - -TestMain.cpp:<line number>: -PASSED: - CHECK( letters == "abcdefcz" ) -with expansion: - "abcdefcz" == "abcdefcz" - -------------------------------------------------------------------------------- -replaceInPlace - replace all chars -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... - -TestMain.cpp:<line number>: -PASSED: - CHECK( replaceInPlace( letters, letters, "replaced" ) ) -with expansion: - true - -TestMain.cpp:<line number>: -PASSED: - CHECK( letters == "replaced" ) -with expansion: - "replaced" == "replaced" + "one,two(three) <here>" + == + "one,two(three) <here>" ------------------------------------------------------------------------------- -replaceInPlace - replace no chars +Long strings can be wrapped + With wrap-before/ after characters + Wrap before ------------------------------------------------------------------------------- TestMain.cpp:<line number> ............................................................................... TestMain.cpp:<line number>: PASSED: - CHECK_FALSE( replaceInPlace( letters, "x", "z" ) ) -with expansion: - !false - -TestMain.cpp:<line number>: -PASSED: - CHECK( letters == letters ) + CHECK( Text( testString, TextAttributes().setWidth( 11 ) ).toString() == "one,two\n(three)\n<here>" ) with expansion: - "abcdefcg" == "abcdefcg" + "one,two + (three) + <here>" + == + "one,two + (three) + <here>" ------------------------------------------------------------------------------- -replaceInPlace - escape ' +Long strings can be wrapped + With wrap-before/ after characters + Wrap after ------------------------------------------------------------------------------- TestMain.cpp:<line number> ............................................................................... TestMain.cpp:<line number>: PASSED: - CHECK( replaceInPlace( s, "'", "|'" ) ) + CHECK( Text( testString, TextAttributes().setWidth( 6 ) ).toString() == "one,\ntwo\n(thre-\ne)\n<here>" ) with expansion: - true - -TestMain.cpp:<line number>: -PASSED: - CHECK( s == "didn|'t" ) -with expansion: - "didn|'t" == "didn|'t" - -hello -hello -------------------------------------------------------------------------------- -Text can be formatted using the Text class -------------------------------------------------------------------------------- -TestMain.cpp:<line number> -............................................................................... + "one, + two + (thre- + e) + <here>" + == + "one, + two + (thre- + e) + <here>" TestMain.cpp:<line number>: PASSED: - CHECK( Text( "hi there" ).toString() == "hi there" ) + CHECK( Text( testString, TextAttributes().setWidth( 5 ) ).toString() == "one,\ntwo\n(thr-\nee)\n<her-\ne>" ) with expansion: - "hi there" == "hi there" + "one, + two + (thr- + ee) + <her- + e>" + == + "one, + two + (thr- + ee) + <her- + e>" TestMain.cpp:<line number>: PASSED: - CHECK( Text( "hi there", narrow ).toString() == "hi\nthere" ) + CHECK( Text( testString, TextAttributes().setWidth( 4 ) ).toString() == "one,\ntwo\n(th-\nree)\n<he-\nre>" ) with expansion: - "hi - there" + "one, + two + (th- + ree) + <he- + re>" == - "hi - there" + "one, + two + (th- + ree) + <he- + re>" ------------------------------------------------------------------------------- Long text is truncted @@ -6086,83 +4152,154 @@ with message: was called ------------------------------------------------------------------------------- -Parsing a std::pair +Matchers can be (AllOf) composed with the && operator ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - REQUIRE( (std::pair<int, int>( 1, 2 )) == aNicePair ) + CHECK_THAT( testStringForMatching(), Contains( "string" ) && Contains( "abc" ) && Contains( "substring" ) && Contains( "contains" ) ) with expansion: - std::pair( 1, 2 ) == std::pair( 1, 2 ) + "this string contains 'abc' as a substring" ( contains: "string" and + contains: "abc" and contains: "substring" and contains: "contains" ) ------------------------------------------------------------------------------- -Where there is more to the expression after the RHS +Matchers can be (AnyOf) composed with the || operator ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: -warning: - Uncomment the code in this test to check that it gives a sensible compiler - error +MiscTests.cpp:<line number>: +PASSED: + CHECK_THAT( testStringForMatching(), Contains( "string" ) || Contains( "different" ) || Contains( "random" ) ) +with expansion: + "this string contains 'abc' as a substring" ( contains: "string" or contains: + "different" or contains: "random" ) + +MiscTests.cpp:<line number>: +PASSED: + CHECK_THAT( testStringForMatching2(), Contains( "string" ) || Contains( "different" ) || Contains( "random" ) ) +with expansion: + "some completely different text that contains one common word" ( contains: + "string" or contains: "different" or contains: "random" ) ------------------------------------------------------------------------------- -Where the LHS is not a simple value +Matchers can be composed with both && and || ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: -warning: - Uncomment the code in this test to check that it gives a sensible compiler - error +MiscTests.cpp:<line number>: +PASSED: + CHECK_THAT( testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) && Contains( "substring" ) ) +with expansion: + "this string contains 'abc' as a substring" ( ( contains: "string" or + contains: "different" ) and contains: "substring" ) ------------------------------------------------------------------------------- -A failing expression with a non streamable type is still captured +Matchers can be composed with both && and || - failing ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: FAILED: - CHECK( &o1 == &o2 ) +MiscTests.cpp:<line number>: FAILED: + CHECK_THAT( testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) && Contains( "random" ) ) with expansion: - 0x<hex digits> == 0x<hex digits> + "this string contains 'abc' as a substring" ( ( contains: "string" or + contains: "different" ) and contains: "random" ) -TrickyTests.cpp:<line number>: FAILED: - CHECK( o1 == o2 ) +------------------------------------------------------------------------------- +Matchers can be negated (Not) with the ! operator +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... + +MiscTests.cpp:<line number>: +PASSED: + CHECK_THAT( testStringForMatching(), !Contains( "different" ) ) with expansion: - {?} == {?} + "this string contains 'abc' as a substring" not contains: "different" ------------------------------------------------------------------------------- -string literals of different sizes can be compared +Matchers can be negated (Not) with the ! operator - failing ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: FAILED: - REQUIRE( std::string( "first" ) == "second" ) +MiscTests.cpp:<line number>: FAILED: + CHECK_THAT( testStringForMatching(), !Contains( "substring" ) ) with expansion: - "first" == "second" + "this string contains 'abc' as a substring" not contains: "substring" ------------------------------------------------------------------------------- -An expression with side-effects should only be evaluated once +Mismatching exception messages failing the test +------------------------------------------------------------------------------- +ExceptionTests.cpp:<line number> +............................................................................... + +ExceptionTests.cpp:<line number>: +PASSED: + REQUIRE_THROWS_WITH( thisThrows(), "expected exception" ) + +ExceptionTests.cpp:<line number>: FAILED: + REQUIRE_THROWS_WITH( thisThrows(), "should fail" ) +with expansion: + expected exception + +------------------------------------------------------------------------------- +Nice descriptive name +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... + +MiscTests.cpp:<line number>: +warning: + This one ran + +------------------------------------------------------------------------------- +Non-std exceptions can be translated +------------------------------------------------------------------------------- +ExceptionTests.cpp:<line number> +............................................................................... + +ExceptionTests.cpp:<line number>: FAILED: +due to unexpected exception with message: + custom exception + +------------------------------------------------------------------------------- +NotImplemented exception +------------------------------------------------------------------------------- +ExceptionTests.cpp:<line number> +............................................................................... + +ExceptionTests.cpp:<line number>: +PASSED: + REQUIRE_THROWS( thisFunctionNotImplemented( 7 ) ) + +------------------------------------------------------------------------------- +Objects that evaluated in boolean contexts can be checked ------------------------------------------------------------------------------- TrickyTests.cpp:<line number> ............................................................................... TrickyTests.cpp:<line number>: PASSED: - REQUIRE( i++ == 7 ) + CHECK( True ) with expansion: - 7 == 7 + true TrickyTests.cpp:<line number>: PASSED: - REQUIRE( i++ == 8 ) + CHECK( !False ) with expansion: - 8 == 8 + true + +TrickyTests.cpp:<line number>: +PASSED: + CHECK_FALSE( False ) +with expansion: + !false ------------------------------------------------------------------------------- Operators at different namespace levels not hijacked by Koenig lookup @@ -6177,411 +4314,2370 @@ with expansion: 3221225472 (0x<hex digits>) == {?} ------------------------------------------------------------------------------- -Demonstrate that a non-const == is not used +Ordering comparison checks that should fail ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +ConditionTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.int_seven > 7 ) +with expansion: + 7 > 7 + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.int_seven < 7 ) +with expansion: + 7 < 7 + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.int_seven > 8 ) +with expansion: + 7 > 8 + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.int_seven < 6 ) +with expansion: + 7 < 6 + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.int_seven < 0 ) +with expansion: + 7 < 0 + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.int_seven < -1 ) +with expansion: + 7 < -1 + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.int_seven >= 8 ) +with expansion: + 7 >= 8 + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.int_seven <= 6 ) +with expansion: + 7 <= 6 + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.float_nine_point_one < 9 ) +with expansion: + 9.1f < 9 + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.float_nine_point_one > 10 ) +with expansion: + 9.1f > 10 + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.float_nine_point_one > 9.2 ) +with expansion: + 9.1f > 9.2 + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.str_hello > "hello" ) +with expansion: + "hello" > "hello" + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.str_hello < "hello" ) +with expansion: + "hello" < "hello" + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.str_hello > "hellp" ) +with expansion: + "hello" > "hellp" + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.str_hello > "z" ) +with expansion: + "hello" > "z" + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.str_hello < "hellm" ) +with expansion: + "hello" < "hellm" + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.str_hello < "a" ) +with expansion: + "hello" < "a" + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.str_hello >= "z" ) +with expansion: + "hello" >= "z" + +ConditionTests.cpp:<line number>: FAILED: + CHECK( data.str_hello <= "a" ) +with expansion: + "hello" <= "a" + +------------------------------------------------------------------------------- +Ordering comparison checks that should succeed +------------------------------------------------------------------------------- +ConditionTests.cpp:<line number> +............................................................................... + +ConditionTests.cpp:<line number>: PASSED: - REQUIRE( t == 1u ) + REQUIRE( data.int_seven < 8 ) with expansion: - {?} == 1 + 7 < 8 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.int_seven > 6 ) +with expansion: + 7 > 6 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.int_seven > 0 ) +with expansion: + 7 > 0 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.int_seven > -1 ) +with expansion: + 7 > -1 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.int_seven >= 7 ) +with expansion: + 7 >= 7 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.int_seven >= 6 ) +with expansion: + 7 >= 6 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.int_seven <= 7 ) +with expansion: + 7 <= 7 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.int_seven <= 8 ) +with expansion: + 7 <= 8 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.float_nine_point_one > 9 ) +with expansion: + 9.1f > 9 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.float_nine_point_one < 10 ) +with expansion: + 9.1f < 10 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.float_nine_point_one < 9.2 ) +with expansion: + 9.1f < 9.2 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.str_hello <= "hello" ) +with expansion: + "hello" <= "hello" + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.str_hello >= "hello" ) +with expansion: + "hello" >= "hello" + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.str_hello < "hellp" ) +with expansion: + "hello" < "hellp" + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.str_hello < "zebra" ) +with expansion: + "hello" < "zebra" + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.str_hello > "hellm" ) +with expansion: + "hello" > "hellm" + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( data.str_hello > "a" ) +with expansion: + "hello" > "a" ------------------------------------------------------------------------------- -Test enum bit values +Output from all sections is reported + one ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +MessageTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +MessageTests.cpp:<line number>: FAILED: +explicitly with message: + Message from section one + +------------------------------------------------------------------------------- +Output from all sections is reported + two +------------------------------------------------------------------------------- +MessageTests.cpp:<line number> +............................................................................... + +MessageTests.cpp:<line number>: FAILED: +explicitly with message: + Message from section two + +------------------------------------------------------------------------------- +Parse test names and tags + Empty test spec should have no filters +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: PASSED: - REQUIRE( 0x<hex digits> == bit30and31 ) + CHECK( spec.hasFilters() == false ) with expansion: - 3221225472 (0x<hex digits>) == 3221225472 + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false ------------------------------------------------------------------------------- -boolean member +Parse test names and tags + Test spec from empty string should have no filters ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +CmdLineTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches(tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: PASSED: - REQUIRE( obj.prop != nullptr ) + CHECK( spec.matches( tcB ) == false ) with expansion: - 0x<hex digits> != nullptr + false == false ------------------------------------------------------------------------------- -(unimplemented) static bools can be evaluated - compare to true +Parse test names and tags + Test spec from just a comma should have no filters ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +CmdLineTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +CmdLineTests.cpp:<line number>: PASSED: - REQUIRE( is_true<true>::value == true ) + CHECK( spec.hasFilters() == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + Test spec from name should have one filter +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) with expansion: true == true -TrickyTests.cpp:<line number>: +CmdLineTests.cpp:<line number>: PASSED: - REQUIRE( true == is_true<true>::value ) + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == true ) with expansion: true == true ------------------------------------------------------------------------------- -(unimplemented) static bools can be evaluated - compare to false +Parse test names and tags + Test spec from quoted name should have one filter ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +CmdLineTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +CmdLineTests.cpp:<line number>: PASSED: - REQUIRE( is_true<false>::value == false ) + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) with expansion: false == false -TrickyTests.cpp:<line number>: +CmdLineTests.cpp:<line number>: PASSED: - REQUIRE( false == is_true<false>::value ) + CHECK( spec.matches( tcB ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Test spec from name should have one filter +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == false ) with expansion: false == false ------------------------------------------------------------------------------- -(unimplemented) static bools can be evaluated - negation +Parse test names and tags + Wildcard at the start ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +CmdLineTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +CmdLineTests.cpp:<line number>: PASSED: - REQUIRE( !is_true<false>::value ) + CHECK( spec.hasFilters() == true ) with expansion: - true + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( parseTestSpec( "*a" ).matches( tcA ) == true ) +with expansion: + true == true ------------------------------------------------------------------------------- -(unimplemented) static bools can be evaluated - double negation +Parse test names and tags + Wildcard at the end ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +CmdLineTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +CmdLineTests.cpp:<line number>: PASSED: - REQUIRE( !!is_true<true>::value ) + CHECK( spec.hasFilters() == true ) with expansion: - true + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( parseTestSpec( "a*" ).matches( tcA ) == true ) +with expansion: + true == true ------------------------------------------------------------------------------- -(unimplemented) static bools can be evaluated - direct +Parse test names and tags + Wildcard at both ends ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +CmdLineTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +CmdLineTests.cpp:<line number>: PASSED: - REQUIRE( is_true<true>::value ) + CHECK( spec.hasFilters() == true ) with expansion: - true + true == true -TrickyTests.cpp:<line number>: +CmdLineTests.cpp:<line number>: PASSED: - REQUIRE_FALSE( is_true<false>::value ) + CHECK( spec.matches( tcA ) == false ) with expansion: - !false + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( parseTestSpec( "*a*" ).matches( tcA ) == true ) +with expansion: + true == true ------------------------------------------------------------------------------- -Objects that evaluated in boolean contexts can be checked +Parse test names and tags + Redundant wildcard at the start ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +CmdLineTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +CmdLineTests.cpp:<line number>: PASSED: - CHECK( True ) + CHECK( spec.hasFilters() == true ) with expansion: - true + true == true -TrickyTests.cpp:<line number>: +CmdLineTests.cpp:<line number>: PASSED: - CHECK( !False ) + CHECK( spec.matches( tcA ) == true ) with expansion: - true + true == true -TrickyTests.cpp:<line number>: +CmdLineTests.cpp:<line number>: PASSED: - CHECK_FALSE( False ) + CHECK( spec.matches( tcB ) == false ) with expansion: - !false + false == false ------------------------------------------------------------------------------- -Assertions then sections +Parse test names and tags + Redundant wildcard at the end ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +CmdLineTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +CmdLineTests.cpp:<line number>: PASSED: - REQUIRE( Catch::alwaysTrue() ) + CHECK( spec.hasFilters() == true ) with expansion: - true + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false ------------------------------------------------------------------------------- -Assertions then sections - A section +Parse test names and tags + Redundant wildcard at both ends +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + Wildcard at both ends, redundant at start +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Just wildcard +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Single tag +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + Single tag, two matches +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Two tags +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Two tags, spare separated +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + Wildcarded name and tag +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + Single tag exclusion +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + One tag exclusion and one tag inclusion +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + One tag exclusion and one wldcarded name inclusion +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + One tag exclusion, using exclude:, and one wldcarded name inclusion +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + name exclusion +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parse test names and tags + wildcarded name exclusion +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + wildcarded name exclusion with tag inclusion +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + wildcarded name exclusion, using exclude:, with tag inclusion +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + two wildcarded names +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + empty tag +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + empty quoted name +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == false ) +with expansion: + false == false + +------------------------------------------------------------------------------- +Parse test names and tags + quoted string followed by tag exclusion +------------------------------------------------------------------------------- +CmdLineTests.cpp:<line number> +............................................................................... + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.hasFilters() == true ) +with expansion: + true == true + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcA ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcB ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcC ) == false ) +with expansion: + false == false + +CmdLineTests.cpp:<line number>: +PASSED: + CHECK( spec.matches( tcD ) == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Parsing a std::pair ------------------------------------------------------------------------------- TrickyTests.cpp:<line number> ............................................................................... TrickyTests.cpp:<line number>: PASSED: - REQUIRE( Catch::alwaysTrue() ) + REQUIRE( (std::pair<int, int>( 1, 2 )) == aNicePair ) +with expansion: + std::pair( 1, 2 ) == std::pair( 1, 2 ) + +------------------------------------------------------------------------------- +Pointers can be compared to null +------------------------------------------------------------------------------- +ConditionTests.cpp:<line number> +............................................................................... + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( p == 0 ) +with expansion: + NULL == 0 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( p == pNULL ) +with expansion: + NULL == NULL + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( p != 0 ) +with expansion: + 0x<hex digits> != 0 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( cp != 0 ) +with expansion: + 0x<hex digits> != 0 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( cpc != 0 ) +with expansion: + 0x<hex digits> != 0 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( returnsNull() == 0 ) +with expansion: + {null string} == 0 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( returnsConstNull() == 0 ) +with expansion: + {null string} == 0 + +ConditionTests.cpp:<line number>: +PASSED: + REQUIRE( 0 != p ) +with expansion: + 0 != 0x<hex digits> + +------------------------------------------------------------------------------- +Pointers can be converted to strings +------------------------------------------------------------------------------- +MessageTests.cpp:<line number> +............................................................................... + +MessageTests.cpp:<line number>: +warning: + actual address of p: 0x<hex digits> + +MessageTests.cpp:<line number>: +warning: + toString(p): 0x<hex digits> + +------------------------------------------------------------------------------- +Process can be configured on command line + default - no arguments +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... + +TestMain.cpp:<line number>: +PASSED: + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + CHECK( config.shouldDebugBreak == false ) +with expansion: + false == false + +TestMain.cpp:<line number>: +PASSED: + CHECK( config.abortAfter == -1 ) +with expansion: + -1 == -1 + +TestMain.cpp:<line number>: +PASSED: + CHECK( config.noThrow == false ) +with expansion: + false == false + +TestMain.cpp:<line number>: +PASSED: + CHECK( config.reporterNames.empty() ) with expansion: true ------------------------------------------------------------------------------- -Assertions then sections - A section - Another section +Process can be configured on command line + test lists + 1 test ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +TestMain.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - REQUIRE( Catch::alwaysTrue() ) + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( cfg.testSpec().matches( fakeTestCase( "notIncluded" ) ) == false ) +with expansion: + false == false + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( cfg.testSpec().matches( fakeTestCase( "test1" ) ) ) with expansion: true ------------------------------------------------------------------------------- -Assertions then sections +Process can be configured on command line + test lists + Specify one test case exclusion using exclude: ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +TestMain.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - REQUIRE( Catch::alwaysTrue() ) + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false ) +with expansion: + false == false + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) ) ) with expansion: true ------------------------------------------------------------------------------- -Assertions then sections - A section +Process can be configured on command line + test lists + Specify one test case exclusion using ~ ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +TestMain.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - REQUIRE( Catch::alwaysTrue() ) + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false ) +with expansion: + false == false + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) ) ) with expansion: true ------------------------------------------------------------------------------- -Assertions then sections - A section - Another other section +Process can be configured on command line + reporter + -r/console ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +TestMain.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - REQUIRE( Catch::alwaysTrue() ) + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.reporterNames[0] == "console" ) +with expansion: + "console" == "console" + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + -r/xml +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... + +TestMain.cpp:<line number>: +PASSED: + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.reporterNames[0] == "xml" ) +with expansion: + "xml" == "xml" + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + -r xml and junit +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... + +TestMain.cpp:<line number>: +PASSED: + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.reporterNames.size() == 2 ) +with expansion: + 2 == 2 + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.reporterNames[0] == "xml" ) +with expansion: + "xml" == "xml" + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.reporterNames[1] == "junit" ) +with expansion: + "junit" == "junit" + +------------------------------------------------------------------------------- +Process can be configured on command line + reporter + --reporter/junit +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... + +TestMain.cpp:<line number>: +PASSED: + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.reporterNames[0] == "junit" ) +with expansion: + "junit" == "junit" + +------------------------------------------------------------------------------- +Process can be configured on command line + debugger + -b +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... + +TestMain.cpp:<line number>: +PASSED: + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.shouldDebugBreak == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Process can be configured on command line + debugger + --break +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... + +TestMain.cpp:<line number>: +PASSED: + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.shouldDebugBreak ) with expansion: true ------------------------------------------------------------------------------- -non streamable - with conv. op +Process can be configured on command line + abort + -a aborts after first failure ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +TestMain.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - REQUIRE( s == "7" ) + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.abortAfter == 1 ) with expansion: - "7" == "7" + 1 == 1 ------------------------------------------------------------------------------- -Comparing function pointers +Process can be configured on command line + abort + -x 2 aborts after two failures ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +TestMain.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - REQUIRE( a ) + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.abortAfter == 2 ) +with expansion: + 2 == 2 + +------------------------------------------------------------------------------- +Process can be configured on command line + abort + -x must be greater than zero +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... + +TestMain.cpp:<line number>: +PASSED: + REQUIRE_THAT( parseIntoConfigAndReturnError( argv, config ), Contains( "greater than zero" ) ) +with expansion: + "Value after -x or --abortAfter must be greater than zero + - while parsing: (-x, --abortx <no. failures>)" contains: "greater than zero" + +------------------------------------------------------------------------------- +Process can be configured on command line + abort + -x must be numeric +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... + +TestMain.cpp:<line number>: +PASSED: + REQUIRE_THAT( parseIntoConfigAndReturnError( argv, config ), Contains( "-x" ) ) +with expansion: + "Unable to convert oops to destination type + - while parsing: (-x, --abortx <no. failures>)" contains: "-x" + +------------------------------------------------------------------------------- +Process can be configured on command line + nothrow + -e +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... + +TestMain.cpp:<line number>: +PASSED: + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.noThrow == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Process can be configured on command line + nothrow + --nothrow +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... + +TestMain.cpp:<line number>: +PASSED: + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.noThrow == true ) +with expansion: + true == true + +------------------------------------------------------------------------------- +Process can be configured on command line + output filename + -o filename +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... + +TestMain.cpp:<line number>: +PASSED: + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.outputFilename == "filename.ext" ) +with expansion: + "filename.ext" == "filename.ext" + +------------------------------------------------------------------------------- +Process can be configured on command line + output filename + --out +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... + +TestMain.cpp:<line number>: +PASSED: + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.outputFilename == "filename.ext" ) +with expansion: + "filename.ext" == "filename.ext" + +------------------------------------------------------------------------------- +Process can be configured on command line + combinations + Single character flags can be combined +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... + +TestMain.cpp:<line number>: +PASSED: + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + CHECK( config.abortAfter == 1 ) +with expansion: + 1 == 1 + +TestMain.cpp:<line number>: +PASSED: + CHECK( config.shouldDebugBreak ) with expansion: true -TrickyTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - REQUIRE( a == &foo ) + CHECK( config.noThrow == true ) with expansion: - 0x<hex digits> == 0x<hex digits> + true == true ------------------------------------------------------------------------------- -Comparing member function pointers +Process can be configured on command line + use-colour + without option ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +TestMain.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - CHECK( m == &S::f ) + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.useColour == UseColour::Auto ) with expansion: - 0x<hex digits> - == - 0x<hex digits> + 0 == 0 ------------------------------------------------------------------------------- -pointer to class +Process can be configured on command line + use-colour + auto ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +TestMain.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - REQUIRE( p == 0 ) + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.useColour == UseColour::Auto ) with expansion: - NULL == 0 + 0 == 0 ------------------------------------------------------------------------------- -null_ptr +Process can be configured on command line + use-colour + yes ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +TestMain.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - REQUIRE( ptr.get() == nullptr ) + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.useColour == UseColour::Yes ) with expansion: - NULL == nullptr + 1 == 1 ------------------------------------------------------------------------------- -X/level/0/a +Process can be configured on command line + use-colour + no ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +TestMain.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: + CHECK_NOTHROW( parseIntoConfig( argv, config ) ) + +TestMain.cpp:<line number>: +PASSED: + REQUIRE( config.useColour == UseColour::No ) +with expansion: + 2 == 2 ------------------------------------------------------------------------------- -X/level/0/b +Process can be configured on command line + use-colour + error ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +TestMain.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: + REQUIRE_THROWS_WITH( parseIntoConfig( argv, config ), Contains( "colour mode must be one of" ) ) ------------------------------------------------------------------------------- -X/level/1/a +SCOPED_INFO is reset for each loop ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +MessageTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +MessageTests.cpp:<line number>: PASSED: + REQUIRE( i < 10 ) +with expansion: + 0 < 10 +with messages: + current counter 0 + i := 0 + +MessageTests.cpp:<line number>: +PASSED: + REQUIRE( i < 10 ) +with expansion: + 1 < 10 +with messages: + current counter 1 + i := 1 + +MessageTests.cpp:<line number>: +PASSED: + REQUIRE( i < 10 ) +with expansion: + 2 < 10 +with messages: + current counter 2 + i := 2 + +MessageTests.cpp:<line number>: +PASSED: + REQUIRE( i < 10 ) +with expansion: + 3 < 10 +with messages: + current counter 3 + i := 3 + +MessageTests.cpp:<line number>: +PASSED: + REQUIRE( i < 10 ) +with expansion: + 4 < 10 +with messages: + current counter 4 + i := 4 + +MessageTests.cpp:<line number>: +PASSED: + REQUIRE( i < 10 ) +with expansion: + 5 < 10 +with messages: + current counter 5 + i := 5 + +MessageTests.cpp:<line number>: +PASSED: + REQUIRE( i < 10 ) +with expansion: + 6 < 10 +with messages: + current counter 6 + i := 6 + +MessageTests.cpp:<line number>: +PASSED: + REQUIRE( i < 10 ) +with expansion: + 7 < 10 +with messages: + current counter 7 + i := 7 + +MessageTests.cpp:<line number>: +PASSED: + REQUIRE( i < 10 ) +with expansion: + 8 < 10 +with messages: + current counter 8 + i := 8 + +MessageTests.cpp:<line number>: +PASSED: + REQUIRE( i < 10 ) +with expansion: + 9 < 10 +with messages: + current counter 9 + i := 9 + +MessageTests.cpp:<line number>: FAILED: + REQUIRE( i < 10 ) +with expansion: + 10 < 10 +with messages: + current counter 10 + i := 10 ------------------------------------------------------------------------------- -X/level/1/b +SUCCEED counts as a test pass ------------------------------------------------------------------------------- -TrickyTests.cpp:<line number> +MessageTests.cpp:<line number> ............................................................................... -TrickyTests.cpp:<line number>: +MessageTests.cpp:<line number>: PASSED: +with message: + this is a success ------------------------------------------------------------------------------- -toString( has_toString ) +SUCCESS does not require an argument ------------------------------------------------------------------------------- -ToStringWhich.cpp:<line number> +MessageTests.cpp:<line number> ............................................................................... -ToStringWhich.cpp:<line number>: +MessageTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString( item ) == "toString( has_toString )" ) + +------------------------------------------------------------------------------- +Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or + methods + Given: No operations precede me +------------------------------------------------------------------------------- +BDDTests.cpp:<line number> +............................................................................... + +BDDTests.cpp:<line number>: +PASSED: + REQUIRE( before == 0 ) with expansion: - "toString( has_toString )" - == - "toString( has_toString )" + 0 == 0 ------------------------------------------------------------------------------- -toString( has_maker ) +Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or + methods + Given: No operations precede me + When: We get the count + Then: Subsequently values are higher ------------------------------------------------------------------------------- -ToStringWhich.cpp:<line number> +BDDTests.cpp:<line number> ............................................................................... -ToStringWhich.cpp:<line number>: +BDDTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString( item ) == "StringMaker<has_maker>" ) + REQUIRE( after > before ) with expansion: - "StringMaker<has_maker>" - == - "StringMaker<has_maker>" + 1 > 0 ------------------------------------------------------------------------------- -toString( has_maker_and_toString ) +Scenario: Do that thing with the thing + Given: This stuff exists + When: I do this + Then: it should do this ------------------------------------------------------------------------------- -ToStringWhich.cpp:<line number> +BDDTests.cpp:<line number> ............................................................................... -ToStringWhich.cpp:<line number>: +BDDTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString( item ) == "toString( has_maker_and_toString )" ) + REQUIRE( itDoesThis() ) with expansion: - "toString( has_maker_and_toString )" - == - "toString( has_maker_and_toString )" + true ------------------------------------------------------------------------------- -toString( vectors<has_toString ) +Scenario: Do that thing with the thing + Given: This stuff exists + When: I do this + Then: it should do this + And: do that ------------------------------------------------------------------------------- -ToStringWhich.cpp:<line number> +BDDTests.cpp:<line number> ............................................................................... -ToStringWhich.cpp:<line number>: +BDDTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString( v ) == "{ {?} }" ) + REQUIRE( itDoesThat() ) with expansion: - "{ {?} }" == "{ {?} }" + true ------------------------------------------------------------------------------- -toString( vectors<has_maker ) +Scenario: This is a really long scenario name to see how the list command deals + with wrapping + Given: A section name that is so long that it cannot fit in a single + console width + When: The test headers are printed as part of the normal running of the + scenario + Then: The, deliberately very long and overly verbose (you see what I did + there?) section names must wrap, along with an indent ------------------------------------------------------------------------------- -ToStringWhich.cpp:<line number> +BDDTests.cpp:<line number> ............................................................................... -ToStringWhich.cpp:<line number>: +BDDTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker> }" ) +with message: + boo! + +------------------------------------------------------------------------------- +Scenario: Vector resizing affects size and capacity + Given: an empty vector +------------------------------------------------------------------------------- +BDDTests.cpp:<line number> +............................................................................... + +BDDTests.cpp:<line number>: +PASSED: + REQUIRE( v.size() == 0 ) with expansion: - "{ StringMaker<has_maker> }" + 0 == 0 + +------------------------------------------------------------------------------- +Scenario: Vector resizing affects size and capacity + Given: an empty vector + When: it is made larger + Then: the size and capacity go up +------------------------------------------------------------------------------- +BDDTests.cpp:<line number> +............................................................................... + +BDDTests.cpp:<line number>: +PASSED: + REQUIRE( v.size() == 10 ) +with expansion: + 10 == 10 + +BDDTests.cpp:<line number>: +PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +Scenario: Vector resizing affects size and capacity + Given: an empty vector + When: it is made larger + Then: the size and capacity go up + And when: it is made smaller again + Then: the size goes down but the capacity stays the same +------------------------------------------------------------------------------- +BDDTests.cpp:<line number> +............................................................................... + +BDDTests.cpp:<line number>: +PASSED: + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +BDDTests.cpp:<line number>: +PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +------------------------------------------------------------------------------- +Scenario: Vector resizing affects size and capacity + Given: an empty vector +------------------------------------------------------------------------------- +BDDTests.cpp:<line number> +............................................................................... + +BDDTests.cpp:<line number>: +PASSED: + REQUIRE( v.size() == 0 ) +with expansion: + 0 == 0 + +------------------------------------------------------------------------------- +Scenario: Vector resizing affects size and capacity + Given: an empty vector + When: we reserve more space + Then: The capacity is increased but the size remains the same +------------------------------------------------------------------------------- +BDDTests.cpp:<line number> +............................................................................... + +BDDTests.cpp:<line number>: +PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 + +BDDTests.cpp:<line number>: +PASSED: + REQUIRE( v.size() == 0 ) +with expansion: + 0 == 0 + +A string sent directly to stdout +A string sent directly to stderr +------------------------------------------------------------------------------- +Some simple comparisons between doubles +------------------------------------------------------------------------------- +ApproxTests.cpp:<line number> +............................................................................... + +ApproxTests.cpp:<line number>: +PASSED: + REQUIRE( d == Approx( 1.23 ) ) +with expansion: + 1.23 == Approx( 1.23 ) + +ApproxTests.cpp:<line number>: +PASSED: + REQUIRE( d != Approx( 1.22 ) ) +with expansion: + 1.23 != Approx( 1.22 ) + +ApproxTests.cpp:<line number>: +PASSED: + REQUIRE( d != Approx( 1.24 ) ) +with expansion: + 1.23 != Approx( 1.24 ) + +ApproxTests.cpp:<line number>: +PASSED: + REQUIRE( Approx( d ) == 1.23 ) +with expansion: + Approx( 1.23 ) == 1.23 + +ApproxTests.cpp:<line number>: +PASSED: + REQUIRE( Approx( d ) != 1.22 ) +with expansion: + Approx( 1.23 ) != 1.22 + +ApproxTests.cpp:<line number>: +PASSED: + REQUIRE( Approx( d ) != 1.24 ) +with expansion: + Approx( 1.23 ) != 1.24 + +Message from section one +------------------------------------------------------------------------------- +Standard output from all sections is reported + one +------------------------------------------------------------------------------- +MessageTests.cpp:<line number> +............................................................................... + + +No assertions in section 'one' + +Message from section two +------------------------------------------------------------------------------- +Standard output from all sections is reported + two +------------------------------------------------------------------------------- +MessageTests.cpp:<line number> +............................................................................... + + +No assertions in section 'two' + +------------------------------------------------------------------------------- +StartsWith string matcher +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... + +MiscTests.cpp:<line number>: FAILED: + CHECK_THAT( testStringForMatching(), StartsWith( "string" ) ) +with expansion: + "this string contains 'abc' as a substring" starts with: "string" + +------------------------------------------------------------------------------- +String matchers +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... + +MiscTests.cpp:<line number>: +PASSED: + REQUIRE_THAT( testStringForMatching(), Contains( "string" ) ) +with expansion: + "this string contains 'abc' as a substring" contains: "string" + +MiscTests.cpp:<line number>: +PASSED: + CHECK_THAT( testStringForMatching(), Contains( "abc" ) ) +with expansion: + "this string contains 'abc' as a substring" contains: "abc" + +MiscTests.cpp:<line number>: +PASSED: + CHECK_THAT( testStringForMatching(), StartsWith( "this" ) ) +with expansion: + "this string contains 'abc' as a substring" starts with: "this" + +MiscTests.cpp:<line number>: +PASSED: + CHECK_THAT( testStringForMatching(), EndsWith( "substring" ) ) +with expansion: + "this string contains 'abc' as a substring" ends with: "substring" + +hello +hello +------------------------------------------------------------------------------- +Tabs and newlines show in output +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... + +MiscTests.cpp:<line number>: FAILED: + CHECK( s1 == s2 ) +with expansion: + "if ($b == 10) { + $a = 20; + }" == - "{ StringMaker<has_maker> }" + "if ($b == 10) { + $a = 20; + } + " ------------------------------------------------------------------------------- -toString( vectors<has_maker_and_toString ) +Tag alias can be registered against tag patterns + The same tag alias can only be registered once ------------------------------------------------------------------------------- -ToStringWhich.cpp:<line number> +TagAliasTests.cpp:<line number> ............................................................................... -ToStringWhich.cpp:<line number>: +TagAliasTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker_and_toString> }" ) + CHECK_THAT( what, Contains( "[@zzz]" ) ) with expansion: - "{ StringMaker<has_maker_and_toString> }" + "error: tag alias, "[@zzz]" already registered. + First seen at file:2 + Redefined at file:10" contains: "[@zzz]" + +TagAliasTests.cpp:<line number>: +PASSED: + CHECK_THAT( what, Contains( "file" ) ) +with expansion: + "error: tag alias, "[@zzz]" already registered. + First seen at file:2 + Redefined at file:10" contains: "file" + +TagAliasTests.cpp:<line number>: +PASSED: + CHECK_THAT( what, Contains( "2" ) ) +with expansion: + "error: tag alias, "[@zzz]" already registered. + First seen at file:2 + Redefined at file:10" contains: "2" + +TagAliasTests.cpp:<line number>: +PASSED: + CHECK_THAT( what, Contains( "10" ) ) +with expansion: + "error: tag alias, "[@zzz]" already registered. + First seen at file:2 + Redefined at file:10" contains: "10" + +------------------------------------------------------------------------------- +Tag alias can be registered against tag patterns + Tag aliases must be of the form [@name] +------------------------------------------------------------------------------- +TagAliasTests.cpp:<line number> +............................................................................... + +TagAliasTests.cpp:<line number>: +PASSED: + CHECK_THROWS( registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) ) + +TagAliasTests.cpp:<line number>: +PASSED: + CHECK_THROWS( registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) ) + +TagAliasTests.cpp:<line number>: +PASSED: + CHECK_THROWS( registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) ) + +TagAliasTests.cpp:<line number>: +PASSED: + CHECK_THROWS( registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) ) + +------------------------------------------------------------------------------- +Test case with one argument +------------------------------------------------------------------------------- +VariadicMacrosTests.cpp:<line number> +............................................................................... + +VariadicMacrosTests.cpp:<line number>: +PASSED: +with message: + no assertions + +------------------------------------------------------------------------------- +Test enum bit values +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... + +TrickyTests.cpp:<line number>: +PASSED: + REQUIRE( 0x<hex digits> == bit30and31 ) +with expansion: + 3221225472 (0x<hex digits>) == 3221225472 + +------------------------------------------------------------------------------- +Text can be formatted using the Text class +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... + +TestMain.cpp:<line number>: +PASSED: + CHECK( Text( "hi there" ).toString() == "hi there" ) +with expansion: + "hi there" == "hi there" + +TestMain.cpp:<line number>: +PASSED: + CHECK( Text( "hi there", narrow ).toString() == "hi\nthere" ) +with expansion: + "hi + there" == - "{ StringMaker<has_maker_and_toString> }" + "hi + there" + +------------------------------------------------------------------------------- +The NO_FAIL macro reports a failure but does not fail the test +------------------------------------------------------------------------------- +MessageTests.cpp:<line number> +............................................................................... + +MessageTests.cpp:<line number>: +FAILED - but was ok: + CHECK_NOFAIL( 1 == 2 ) + +------------------------------------------------------------------------------- +This test 'should' fail but doesn't +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... + +MiscTests.cpp:<line number>: +PASSED: +with message: + oops! ------------------------------------------------------------------------------- Tracker @@ -7582,1539 +7678,1353 @@ with expansion: true ------------------------------------------------------------------------------- -std::pair<int,std::string> -> toString +Unexpected exceptions can be translated ------------------------------------------------------------------------------- -ToStringPair.cpp:<line number> +ExceptionTests.cpp:<line number> ............................................................................... -ToStringPair.cpp:<line number>: -PASSED: - REQUIRE( Catch::toString( value ) == "{ 34, \"xyzzy\" }" ) -with expansion: - "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" +ExceptionTests.cpp:<line number>: FAILED: +due to unexpected exception with message: + 3.14 ------------------------------------------------------------------------------- -std::pair<int,const std::string> -> toString +Use a custom approx ------------------------------------------------------------------------------- -ToStringPair.cpp:<line number> +ApproxTests.cpp:<line number> ............................................................................... -ToStringPair.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString(value) == "{ 34, \"xyzzy\" }" ) + REQUIRE( d == approx( 1.23 ) ) with expansion: - "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" - -------------------------------------------------------------------------------- -std::vector<std::pair<std::string,int> > -> toString -------------------------------------------------------------------------------- -ToStringPair.cpp:<line number> -............................................................................... + 1.23 == Approx( 1.23 ) -ToStringPair.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString( pr ) == "{ { \"green\", 55 } }" ) + REQUIRE( d == approx( 1.22 ) ) with expansion: - "{ { "green", 55 } }" - == - "{ { "green", 55 } }" - -------------------------------------------------------------------------------- -pair<pair<int,const char *,pair<std::string,int> > -> toString -------------------------------------------------------------------------------- -ToStringPair.cpp:<line number> -............................................................................... + 1.23 == Approx( 1.22 ) -ToStringPair.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" ) + REQUIRE( d == approx( 1.24 ) ) with expansion: - "{ { 42, "Arthur" }, { "Ford", 24 } }" - == - "{ { 42, "Arthur" }, { "Ford", 24 } }" - -------------------------------------------------------------------------------- -vector<int> -> toString -------------------------------------------------------------------------------- -ToStringVector.cpp:<line number> -............................................................................... + 1.23 == Approx( 1.24 ) -ToStringVector.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString(vv) == "{ }" ) + REQUIRE( d != approx( 1.25 ) ) with expansion: - "{ }" == "{ }" + 1.23 != Approx( 1.25 ) -ToStringVector.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString(vv) == "{ 42 }" ) + REQUIRE( approx( d ) == 1.23 ) with expansion: - "{ 42 }" == "{ 42 }" + Approx( 1.23 ) == 1.23 -ToStringVector.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString(vv) == "{ 42, 250 }" ) + REQUIRE( approx( d ) == 1.22 ) with expansion: - "{ 42, 250 }" == "{ 42, 250 }" - -------------------------------------------------------------------------------- -vector<string> -> toString -------------------------------------------------------------------------------- -ToStringVector.cpp:<line number> -............................................................................... + Approx( 1.23 ) == 1.22 -ToStringVector.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString(vv) == "{ }" ) + REQUIRE( approx( d ) == 1.24 ) with expansion: - "{ }" == "{ }" + Approx( 1.23 ) == 1.24 -ToStringVector.cpp:<line number>: +ApproxTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString(vv) == "{ \"hello\" }" ) + REQUIRE( approx( d ) != 1.25 ) with expansion: - "{ "hello" }" == "{ "hello" }" + Approx( 1.23 ) != 1.25 -ToStringVector.cpp:<line number>: +------------------------------------------------------------------------------- +Variadic macros + Section with one argument +------------------------------------------------------------------------------- +VariadicMacrosTests.cpp:<line number> +............................................................................... + +VariadicMacrosTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString(vv) == "{ \"hello\", \"world\" }" ) -with expansion: - "{ "hello", "world" }" - == - "{ "hello", "world" }" +with message: + no assertions ------------------------------------------------------------------------------- -vector<int,allocator> -> toString +When checked exceptions are thrown they can be expected or unexpected ------------------------------------------------------------------------------- -ToStringVector.cpp:<line number> +ExceptionTests.cpp:<line number> ............................................................................... -ToStringVector.cpp:<line number>: +ExceptionTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString(vv) == "{ }" ) -with expansion: - "{ }" == "{ }" + REQUIRE_THROWS_AS( thisThrows() ) -ToStringVector.cpp:<line number>: +ExceptionTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString(vv) == "{ 42 }" ) -with expansion: - "{ 42 }" == "{ 42 }" + REQUIRE_NOTHROW( thisDoesntThrow() ) -ToStringVector.cpp:<line number>: +ExceptionTests.cpp:<line number>: PASSED: - REQUIRE( Catch::toString(vv) == "{ 42, 250 }" ) -with expansion: - "{ 42, 250 }" == "{ 42, 250 }" + REQUIRE_THROWS( thisThrows() ) ------------------------------------------------------------------------------- -vec<vec<string,alloc>> -> toString +When unchecked exceptions are thrown directly they are always failures ------------------------------------------------------------------------------- -ToStringVector.cpp:<line number> +ExceptionTests.cpp:<line number> ............................................................................... -ToStringVector.cpp:<line number>: -PASSED: - REQUIRE( Catch::toString(v) == "{ }" ) -with expansion: - "{ }" == "{ }" - -ToStringVector.cpp:<line number>: -PASSED: - REQUIRE( Catch::toString(v) == "{ { \"hello\" }, { \"world\" } }" ) -with expansion: - "{ { "hello" }, { "world" } }" - == - "{ { "hello" }, { "world" } }" +ExceptionTests.cpp:<line number>: FAILED: +due to unexpected exception with message: + unexpected exception ------------------------------------------------------------------------------- -Parse test names and tags - Empty test spec should have no filters +When unchecked exceptions are thrown during a CHECK the test should continue ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +ExceptionTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == false ) -with expansion: - false == false +ExceptionTests.cpp:<line number>: FAILED: + CHECK( thisThrows() == 0 ) +due to unexpected exception with message: + expected exception -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +When unchecked exceptions are thrown during a REQUIRE the test should abort +fail +------------------------------------------------------------------------------- +ExceptionTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == false ) -with expansion: - false == false +ExceptionTests.cpp:<line number>: FAILED: + REQUIRE( thisThrows() == 0 ) +due to unexpected exception with message: + expected exception ------------------------------------------------------------------------------- -Parse test names and tags - Test spec from empty string should have no filters +When unchecked exceptions are thrown from functions they are always failures ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +ExceptionTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == false ) -with expansion: - false == false +ExceptionTests.cpp:<line number>: FAILED: + CHECK( thisThrows() == 0 ) +due to unexpected exception with message: + expected exception -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches(tcA ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +When unchecked exceptions are thrown from sections they are always failures + section name +------------------------------------------------------------------------------- +ExceptionTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == false ) -with expansion: - false == false +ExceptionTests.cpp:<line number>: FAILED: +due to unexpected exception with message: + unexpected exception ------------------------------------------------------------------------------- -Parse test names and tags - Test spec from just a comma should have no filters +Where the LHS is not a simple value ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +TrickyTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == false ) -with expansion: - false == false +TrickyTests.cpp:<line number>: +warning: + Uncomment the code in this test to check that it gives a sensible compiler + error -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +Where there is more to the expression after the RHS +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == false ) -with expansion: - false == false +TrickyTests.cpp:<line number>: +warning: + Uncomment the code in this test to check that it gives a sensible compiler + error ------------------------------------------------------------------------------- -Parse test names and tags - Test spec from name should have one filter +X/level/0/a ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +TrickyTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +X/level/0/b +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcB ) == true ) -with expansion: - true == true ------------------------------------------------------------------------------- -Parse test names and tags - Test spec from quoted name should have one filter +X/level/1/a ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +TrickyTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +X/level/1/b +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcB ) == true ) -with expansion: - true == true ------------------------------------------------------------------------------- -Parse test names and tags - Test spec from name should have one filter +XmlEncode + normal string ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true - -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcA ) == false ) + REQUIRE( encode( "normal string" ) == "normal string" ) with expansion: - false == false + "normal string" == "normal string" -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == true ) -with expansion: - true == true +------------------------------------------------------------------------------- +XmlEncode + empty string +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcC ) == false ) + REQUIRE( encode( "" ) == "" ) with expansion: - false == false + "" == "" ------------------------------------------------------------------------------- -Parse test names and tags - Wildcard at the start +XmlEncode + string with ampersand ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.hasFilters() == true ) + REQUIRE( encode( "smith & jones" ) == "smith & jones" ) with expansion: - true == true + "smith & jones" == "smith & jones" -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +XmlEncode + string with less-than +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcB ) == false ) + REQUIRE( encode( "smith < jones" ) == "smith < jones" ) with expansion: - false == false + "smith < jones" == "smith < jones" -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcC ) == true ) -with expansion: - true == true +------------------------------------------------------------------------------- +XmlEncode + string with greater-than +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcD ) == false ) + REQUIRE( encode( "smith > jones" ) == "smith > jones" ) with expansion: - false == false + "smith > jones" == "smith > jones" -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( parseTestSpec( "*a" ).matches( tcA ) == true ) + REQUIRE( encode( "smith ]]> jones" ) == "smith ]]> jones" ) with expansion: - true == true + "smith ]]> jones" + == + "smith ]]> jones" ------------------------------------------------------------------------------- -Parse test names and tags - Wildcard at the end +XmlEncode + string with quotes ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.hasFilters() == true ) + REQUIRE( encode( stringWithQuotes ) == stringWithQuotes ) with expansion: - true == true + "don't "quote" me on that" + == + "don't "quote" me on that" -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcA ) == false ) + REQUIRE( encode( stringWithQuotes, Catch::XmlEncode::ForAttributes ) == "don't "quote" me on that" ) with expansion: - false == false + "don't "quote" me on that" + == + "don't "quote" me on that" -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +XmlEncode + string with control char (1) +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcC ) == true ) + REQUIRE( encode( "[\x01]" ) == "[]" ) with expansion: - true == true + "[]" == "[]" -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcD ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +XmlEncode + string with control char (x7F) +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( parseTestSpec( "a*" ).matches( tcA ) == true ) + REQUIRE( encode( "[\x7F]" ) == "[]" ) with expansion: - true == true + "[]" == "[]" ------------------------------------------------------------------------------- -Parse test names and tags - Wildcard at both ends +atomic if ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.hasFilters() == true ) + REQUIRE( x == 0 ) with expansion: - true == true + 0 == 0 -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +boolean member +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcB ) == false ) + REQUIRE( obj.prop != 0 ) with expansion: - false == false + 0x<hex digits> != 0 -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcC ) == true ) -with expansion: - true == true +------------------------------------------------------------------------------- +checkedElse +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcD ) == true ) + CHECKED_ELSE( flag ) with expansion: - true == true + true -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( parseTestSpec( "*a*" ).matches( tcA ) == true ) + REQUIRE( testCheckedElse( true ) ) with expansion: - true == true + true ------------------------------------------------------------------------------- -Parse test names and tags - Redundant wildcard at the start +checkedElse, failing ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true - -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == true ) +MiscTests.cpp:<line number>: FAILED: + CHECKED_ELSE( flag ) with expansion: - true == true + false -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == false ) +MiscTests.cpp:<line number>: FAILED: + REQUIRE( testCheckedElse( false ) ) with expansion: - false == false + false ------------------------------------------------------------------------------- -Parse test names and tags - Redundant wildcard at the end +checkedIf ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true - -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcA ) == true ) + CHECKED_IF( flag ) with expansion: - true == true + true -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcB ) == false ) + REQUIRE( testCheckedIf( true ) ) with expansion: - false == false + true ------------------------------------------------------------------------------- -Parse test names and tags - Redundant wildcard at both ends +checkedIf, failing ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true - -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == true ) +MiscTests.cpp:<line number>: FAILED: + CHECKED_IF( flag ) with expansion: - true == true + false -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == false ) +MiscTests.cpp:<line number>: FAILED: + REQUIRE( testCheckedIf( false ) ) with expansion: - false == false + false ------------------------------------------------------------------------------- -Parse test names and tags - Wildcard at both ends, redundant at start +comparisons between const int variables ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +ConditionTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true - -CmdLineTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcA ) == false ) + REQUIRE( unsigned_char_var == 1 ) with expansion: - false == false + 1 == 1 -CmdLineTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcB ) == false ) + REQUIRE( unsigned_short_var == 1 ) with expansion: - false == false + 1 == 1 -CmdLineTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcC ) == true ) + REQUIRE( unsigned_int_var == 1 ) with expansion: - true == true + 1 == 1 -CmdLineTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcD ) == true ) + REQUIRE( unsigned_long_var == 1 ) with expansion: - true == true + 1 == 1 ------------------------------------------------------------------------------- -Parse test names and tags - Just wildcard +comparisons between int variables ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +ConditionTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true - -CmdLineTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcA ) == true ) + REQUIRE( long_var == unsigned_char_var ) with expansion: - true == true + 1 == 1 -CmdLineTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcB ) == true ) + REQUIRE( long_var == unsigned_short_var ) with expansion: - true == true + 1 == 1 -CmdLineTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcC ) == true ) + REQUIRE( long_var == unsigned_int_var ) with expansion: - true == true + 1 == 1 -CmdLineTests.cpp:<line number>: +ConditionTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcD ) == true ) + REQUIRE( long_var == unsigned_long_var ) with expansion: - true == true + 1 == 1 ------------------------------------------------------------------------------- -Parse test names and tags - Single tag +even more nested SECTION tests + c + d (leaf) ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true - -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == false ) -with expansion: - false == false - -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == true ) -with expansion: - true == true - -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcC ) == false ) -with expansion: - false == false ------------------------------------------------------------------------------- -Parse test names and tags - Single tag, two matches +even more nested SECTION tests + c + e (leaf) ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true - -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcA ) == false ) -with expansion: - false == false -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == true ) -with expansion: - true == true +------------------------------------------------------------------------------- +even more nested SECTION tests + f (leaf) +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcC ) == true ) -with expansion: - true == true ------------------------------------------------------------------------------- -Parse test names and tags - Two tags +just failure ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MessageTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true - -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == false ) -with expansion: - false == false +MessageTests.cpp:<line number>: FAILED: +explicitly with message: + Previous info should not be seen -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +looped SECTION tests + s1 +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcC ) == true ) +MiscTests.cpp:<line number>: FAILED: + CHECK( b > a ) with expansion: - true == true + 0 > 1 ------------------------------------------------------------------------------- -Parse test names and tags - Two tags, spare separated +looped tests ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true - -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == false ) +MiscTests.cpp:<line number>: FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) with expansion: - false == false + 1 == 0 +with message: + Testing if fib[0] (1) is even -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == false ) +MiscTests.cpp:<line number>: FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) with expansion: - false == false + 1 == 0 +with message: + Testing if fib[1] (1) is even -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcC ) == true ) + CHECK( ( fib[i] % 2 ) == 0 ) with expansion: - true == true - -------------------------------------------------------------------------------- -Parse test names and tags - Wildcarded name and tag -------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> -............................................................................... + 0 == 0 +with message: + Testing if fib[2] (2) is even -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) +MiscTests.cpp:<line number>: FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) with expansion: - true == true + 1 == 0 +with message: + Testing if fib[3] (3) is even -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == false ) +MiscTests.cpp:<line number>: FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) with expansion: - false == false + 1 == 0 +with message: + Testing if fib[4] (5) is even -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcB ) == false ) + CHECK( ( fib[i] % 2 ) == 0 ) with expansion: - false == false + 0 == 0 +with message: + Testing if fib[5] (8) is even -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcC ) == true ) +MiscTests.cpp:<line number>: FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) with expansion: - true == true + 1 == 0 +with message: + Testing if fib[6] (13) is even -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcD ) == false ) +MiscTests.cpp:<line number>: FAILED: + CHECK( ( fib[i] % 2 ) == 0 ) with expansion: - false == false + 1 == 0 +with message: + Testing if fib[7] (21) is even ------------------------------------------------------------------------------- -Parse test names and tags - Single tag exclusion +more nested SECTION tests + s1 + s2 ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true - -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == true ) +MiscTests.cpp:<line number>: FAILED: + REQUIRE( a == b ) with expansion: - true == true + 1 == 2 -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +more nested SECTION tests + s1 + s3 +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcC ) == true ) + REQUIRE( a != b ) with expansion: - true == true + 1 != 2 ------------------------------------------------------------------------------- -Parse test names and tags - One tag exclusion and one tag inclusion +more nested SECTION tests + s1 + s4 ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.hasFilters() == true ) + REQUIRE( a < b ) with expansion: - true == true + 1 < 2 -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +nested SECTION tests + s1 +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcB ) == true ) + REQUIRE( a != b ) with expansion: - true == true + 1 != 2 -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcC ) == false ) + REQUIRE( b != a ) with expansion: - false == false + 2 != 1 ------------------------------------------------------------------------------- -Parse test names and tags - One tag exclusion and one wldcarded name inclusion +nested SECTION tests + s1 + s2 ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.hasFilters() == true ) + REQUIRE( a != b ) with expansion: - true == true + 1 != 2 -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +non streamable - with conv. op +------------------------------------------------------------------------------- +TrickyTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcB ) == false ) + REQUIRE( s == "7" ) with expansion: - false == false + "7" == "7" -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcC ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +not allowed +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcD ) == true ) -with expansion: - true == true ------------------------------------------------------------------------------- -Parse test names and tags - One tag exclusion, using exclude:, and one wldcarded name inclusion +null strings ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true - -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcA ) == false ) + REQUIRE( makeString( false ) != static_cast<char*>(0) ) with expansion: - false == false + "valid string" != {null string} -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcB ) == false ) + REQUIRE( makeString( true ) == static_cast<char*>(0) ) with expansion: - false == false + {null string} == {null string} -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcC ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +pair<pair<int,const char *,pair<std::string,int> > -> toString +------------------------------------------------------------------------------- +ToStringPair.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +ToStringPair.cpp:<line number>: PASSED: - CHECK( spec.matches( tcD ) == true ) + REQUIRE( Catch::toString( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" ) with expansion: - true == true + "{ { 42, "Arthur" }, { "Ford", 24 } }" + == + "{ { 42, "Arthur" }, { "Ford", 24 } }" ------------------------------------------------------------------------------- -Parse test names and tags - name exclusion +pointer to class ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +TrickyTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true - -CmdLineTests.cpp:<line number>: +TrickyTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcA ) == true ) + REQUIRE( p == 0 ) with expansion: - true == true + NULL == 0 -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +random SECTION tests + s1 +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcC ) == true ) + REQUIRE( a != b ) with expansion: - true == true + 1 != 2 -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcD ) == true ) + REQUIRE( b != a ) with expansion: - true == true + 2 != 1 ------------------------------------------------------------------------------- -Parse test names and tags - wildcarded name exclusion +random SECTION tests + s2 ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) -with expansion: - true == true - -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcA ) == true ) + REQUIRE( a != b ) with expansion: - true == true + 1 != 2 -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == true ) -with expansion: - true == true +------------------------------------------------------------------------------- +replaceInPlace + replace single char +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - CHECK( spec.matches( tcC ) == false ) + CHECK( replaceInPlace( letters, "b", "z" ) ) with expansion: - false == false + true -CmdLineTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - CHECK( spec.matches( tcD ) == false ) + CHECK( letters == "azcdefcg" ) with expansion: - false == false + "azcdefcg" == "azcdefcg" ------------------------------------------------------------------------------- -Parse test names and tags - wildcarded name exclusion with tag inclusion +replaceInPlace + replace two chars ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +TestMain.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - CHECK( spec.hasFilters() == true ) + CHECK( replaceInPlace( letters, "c", "z" ) ) with expansion: - true == true + true -CmdLineTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - CHECK( spec.matches( tcA ) == true ) + CHECK( letters == "abzdefzg" ) with expansion: - true == true + "abzdefzg" == "abzdefzg" -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == true ) -with expansion: - true == true +------------------------------------------------------------------------------- +replaceInPlace + replace first char +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - CHECK( spec.matches( tcC ) == true ) + CHECK( replaceInPlace( letters, "a", "z" ) ) with expansion: - true == true + true -CmdLineTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - CHECK( spec.matches( tcD ) == false ) + CHECK( letters == "zbcdefcg" ) with expansion: - false == false + "zbcdefcg" == "zbcdefcg" ------------------------------------------------------------------------------- -Parse test names and tags - wildcarded name exclusion, using exclude:, with tag inclusion +replaceInPlace + replace last char ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +TestMain.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - CHECK( spec.hasFilters() == true ) + CHECK( replaceInPlace( letters, "g", "z" ) ) with expansion: - true == true + true -CmdLineTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - CHECK( spec.matches( tcA ) == true ) + CHECK( letters == "abcdefcz" ) with expansion: - true == true + "abcdefcz" == "abcdefcz" -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == true ) -with expansion: - true == true +------------------------------------------------------------------------------- +replaceInPlace + replace all chars +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - CHECK( spec.matches( tcC ) == true ) + CHECK( replaceInPlace( letters, letters, "replaced" ) ) with expansion: - true == true + true -CmdLineTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - CHECK( spec.matches( tcD ) == false ) + CHECK( letters == "replaced" ) with expansion: - false == false + "replaced" == "replaced" ------------------------------------------------------------------------------- -Parse test names and tags - two wildcarded names +replaceInPlace + replace no chars ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +TestMain.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - CHECK( spec.hasFilters() == true ) + CHECK_FALSE( replaceInPlace( letters, "x", "z" ) ) with expansion: - true == true + !false -CmdLineTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - CHECK( spec.matches( tcA ) == false ) + CHECK( letters == letters ) with expansion: - false == false + "abcdefcg" == "abcdefcg" -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +replaceInPlace + escape ' +------------------------------------------------------------------------------- +TestMain.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - CHECK( spec.matches( tcC ) == true ) + CHECK( replaceInPlace( s, "'", "|'" ) ) with expansion: - true == true + true -CmdLineTests.cpp:<line number>: +TestMain.cpp:<line number>: PASSED: - CHECK( spec.matches( tcD ) == false ) + CHECK( s == "didn|'t" ) with expansion: - false == false + "didn|'t" == "didn|'t" ------------------------------------------------------------------------------- -Parse test names and tags - empty tag +send a single char to INFO ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == false ) -with expansion: - false == false - -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == false ) -with expansion: - false == false - -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcB ) == false ) -with expansion: - false == false +MiscTests.cpp:<line number>: FAILED: + REQUIRE( false ) +with message: + 3 -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcC ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +sends information to INFO +------------------------------------------------------------------------------- +MessageTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcD ) == false ) -with expansion: - false == false +MessageTests.cpp:<line number>: FAILED: + REQUIRE( false ) +with messages: + hi + i := 7 ------------------------------------------------------------------------------- -Parse test names and tags - empty quoted name +std::pair<int,const std::string> -> toString ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +ToStringPair.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: +ToStringPair.cpp:<line number>: PASSED: - CHECK( spec.hasFilters() == false ) + REQUIRE( Catch::toString(value) == "{ 34, \"xyzzy\" }" ) with expansion: - false == false + "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +std::pair<int,std::string> -> toString +------------------------------------------------------------------------------- +ToStringPair.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +ToStringPair.cpp:<line number>: PASSED: - CHECK( spec.matches( tcB ) == false ) + REQUIRE( Catch::toString( value ) == "{ 34, \"xyzzy\" }" ) with expansion: - false == false + "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcC ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +std::vector<std::pair<std::string,int> > -> toString +------------------------------------------------------------------------------- +ToStringPair.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +ToStringPair.cpp:<line number>: PASSED: - CHECK( spec.matches( tcD ) == false ) + REQUIRE( Catch::toString( pr ) == "{ { \"green\", 55 } }" ) with expansion: - false == false + "{ { "green", 55 } }" + == + "{ { "green", 55 } }" ------------------------------------------------------------------------------- -Parse test names and tags - quoted string followed by tag exclusion +string literals of different sizes can be compared ------------------------------------------------------------------------------- -CmdLineTests.cpp:<line number> +TrickyTests.cpp:<line number> ............................................................................... -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.hasFilters() == true ) +TrickyTests.cpp:<line number>: FAILED: + REQUIRE( std::string( "first" ) == "second" ) with expansion: - true == true + "first" == "second" -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcA ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +toString on const wchar_t const pointer returns the string contents +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcB ) == false ) + CHECK( result == "\"wide load\"" ) with expansion: - false == false + ""wide load"" == ""wide load"" -CmdLineTests.cpp:<line number>: -PASSED: - CHECK( spec.matches( tcC ) == false ) -with expansion: - false == false +------------------------------------------------------------------------------- +toString on const wchar_t pointer returns the string contents +------------------------------------------------------------------------------- +MiscTests.cpp:<line number> +............................................................................... -CmdLineTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( spec.matches( tcD ) == true ) + CHECK( result == "\"wide load\"" ) with expansion: - true == true + ""wide load"" == ""wide load"" ------------------------------------------------------------------------------- -tuple<> +toString on wchar_t const pointer returns the string contents ------------------------------------------------------------------------------- -ToStringTuple.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -ToStringTuple.cpp:<line number>: -PASSED: - CHECK( "{ }" == Catch::toString(type{}) ) -with expansion: - "{ }" == "{ }" - -ToStringTuple.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( "{ }" == Catch::toString(value) ) + CHECK( result == "\"wide load\"" ) with expansion: - "{ }" == "{ }" + ""wide load"" == ""wide load"" ------------------------------------------------------------------------------- -tuple<int> +toString on wchar_t returns the string contents ------------------------------------------------------------------------------- -ToStringTuple.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -ToStringTuple.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( "{ 0 }" == Catch::toString(type{0}) ) + CHECK( result == "\"wide load\"" ) with expansion: - "{ 0 }" == "{ 0 }" + ""wide load"" == ""wide load"" ------------------------------------------------------------------------------- -tuple<float,int> +toString( has_maker ) ------------------------------------------------------------------------------- -ToStringTuple.cpp:<line number> +ToStringWhich.cpp:<line number> ............................................................................... -ToStringTuple.cpp:<line number>: -PASSED: - CHECK( "1.2f" == Catch::toString(float(1.2)) ) -with expansion: - "1.2f" == "1.2f" - -ToStringTuple.cpp:<line number>: +ToStringWhich.cpp:<line number>: PASSED: - CHECK( "{ 1.2f, 0 }" == Catch::toString(type{1.2,0}) ) + REQUIRE( Catch::toString( item ) == "StringMaker<has_maker>" ) with expansion: - "{ 1.2f, 0 }" == "{ 1.2f, 0 }" + "StringMaker<has_maker>" + == + "StringMaker<has_maker>" ------------------------------------------------------------------------------- -tuple<string,string> +toString( has_maker_and_toString ) ------------------------------------------------------------------------------- -ToStringTuple.cpp:<line number> +ToStringWhich.cpp:<line number> ............................................................................... -ToStringTuple.cpp:<line number>: +ToStringWhich.cpp:<line number>: PASSED: - CHECK( "{ \"hello\", \"world\" }" == Catch::toString(type{"hello","world"}) ) + REQUIRE( Catch::toString( item ) == "toString( has_maker_and_toString )" ) with expansion: - "{ "hello", "world" }" + "toString( has_maker_and_toString )" == - "{ "hello", "world" }" + "toString( has_maker_and_toString )" ------------------------------------------------------------------------------- -tuple<tuple<int>,tuple<>,float> +toString( has_toString ) ------------------------------------------------------------------------------- -ToStringTuple.cpp:<line number> +ToStringWhich.cpp:<line number> ............................................................................... -ToStringTuple.cpp:<line number>: +ToStringWhich.cpp:<line number>: PASSED: - CHECK( "{ { 42 }, { }, 1.2f }" == Catch::toString(value) ) + REQUIRE( Catch::toString( item ) == "toString( has_toString )" ) with expansion: - "{ { 42 }, { }, 1.2f }" + "toString( has_toString )" == - "{ { 42 }, { }, 1.2f }" + "toString( has_toString )" ------------------------------------------------------------------------------- -tuple<nullptr,int,const char *> +toString( vectors<has_maker ) ------------------------------------------------------------------------------- -ToStringTuple.cpp:<line number> +ToStringWhich.cpp:<line number> ............................................................................... -ToStringTuple.cpp:<line number>: +ToStringWhich.cpp:<line number>: PASSED: - CHECK( "{ nullptr, 42, \"Catch me\" }" == Catch::toString(value) ) + REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker> }" ) with expansion: - "{ nullptr, 42, "Catch me" }" + "{ StringMaker<has_maker> }" == - "{ nullptr, 42, "Catch me" }" + "{ StringMaker<has_maker> }" ------------------------------------------------------------------------------- -Tag alias can be registered against tag patterns - The same tag alias can only be registered once +toString(enum w/operator<<) ------------------------------------------------------------------------------- -TagAliasTests.cpp:<line number> +EnumToString.cpp:<line number> ............................................................................... -TagAliasTests.cpp:<line number>: +EnumToString.cpp:<line number>: PASSED: - CHECK_THAT( what, Contains( "[@zzz]" ) ) + CHECK( Catch::toString(e0) == "E2{0}" ) with expansion: - "error: tag alias, "[@zzz]" already registered. - First seen at file:2 - Redefined at file:10" contains: " - [@zzz]" + "E2{0}" == "E2{0}" -TagAliasTests.cpp:<line number>: +EnumToString.cpp:<line number>: PASSED: - CHECK_THAT( what, Contains( "file" ) ) + CHECK( Catch::toString(e1) == "E2{1}" ) with expansion: - "error: tag alias, "[@zzz]" already registered. - First seen at file:2 - Redefined at file:10" contains: - "file" + "E2{1}" == "E2{1}" -TagAliasTests.cpp:<line number>: +------------------------------------------------------------------------------- +toString(enum) +------------------------------------------------------------------------------- +EnumToString.cpp:<line number> +............................................................................... + +EnumToString.cpp:<line number>: PASSED: - CHECK_THAT( what, Contains( "2" ) ) + CHECK( Catch::toString(e0) == "0" ) with expansion: - "error: tag alias, "[@zzz]" already registered. - First seen at file:2 - Redefined at file:10" contains: - "2" + "0" == "0" -TagAliasTests.cpp:<line number>: +EnumToString.cpp:<line number>: PASSED: - CHECK_THAT( what, Contains( "10" ) ) + CHECK( Catch::toString(e1) == "1" ) with expansion: - "error: tag alias, "[@zzz]" already registered. - First seen at file:2 - Redefined at file:10" contains: - "10" + "1" == "1" ------------------------------------------------------------------------------- -Tag alias can be registered against tag patterns - Tag aliases must be of the form [@name] +vector<int> -> toString ------------------------------------------------------------------------------- -TagAliasTests.cpp:<line number> +ToStringVector.cpp:<line number> ............................................................................... -TagAliasTests.cpp:<line number>: -PASSED: - CHECK_THROWS( registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) ) - -TagAliasTests.cpp:<line number>: +ToStringVector.cpp:<line number>: PASSED: - CHECK_THROWS( registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) ) + REQUIRE( Catch::toString(vv) == "{ }" ) +with expansion: + "{ }" == "{ }" -TagAliasTests.cpp:<line number>: +ToStringVector.cpp:<line number>: PASSED: - CHECK_THROWS( registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) ) + REQUIRE( Catch::toString(vv) == "{ 42 }" ) +with expansion: + "{ 42 }" == "{ 42 }" -TagAliasTests.cpp:<line number>: +ToStringVector.cpp:<line number>: PASSED: - CHECK_THROWS( registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) ) + REQUIRE( Catch::toString(vv) == "{ 42, 250 }" ) +with expansion: + "{ 42, 250 }" == "{ 42, 250 }" ------------------------------------------------------------------------------- -Anonymous test case 1 +vector<string> -> toString ------------------------------------------------------------------------------- -VariadicMacrosTests.cpp:<line number> +ToStringVector.cpp:<line number> ............................................................................... -VariadicMacrosTests.cpp:<line number>: +ToStringVector.cpp:<line number>: PASSED: -with message: - anonymous test case + REQUIRE( Catch::toString(vv) == "{ }" ) +with expansion: + "{ }" == "{ }" + +ToStringVector.cpp:<line number>: +PASSED: + REQUIRE( Catch::toString(vv) == "{ \"hello\" }" ) +with expansion: + "{ "hello" }" == "{ "hello" }" + +ToStringVector.cpp:<line number>: +PASSED: + REQUIRE( Catch::toString(vv) == "{ \"hello\", \"world\" }" ) +with expansion: + "{ "hello", "world" }" + == + "{ "hello", "world" }" ------------------------------------------------------------------------------- -Test case with one argument +vectors can be sized and resized ------------------------------------------------------------------------------- -VariadicMacrosTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -VariadicMacrosTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: -with message: - no assertions + REQUIRE( v.size() == 5 ) +with expansion: + 5 == 5 + +MiscTests.cpp:<line number>: +PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 ------------------------------------------------------------------------------- -Variadic macros - Section with one argument +vectors can be sized and resized + resizing bigger changes size and capacity ------------------------------------------------------------------------------- -VariadicMacrosTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -VariadicMacrosTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: -with message: - no assertions + REQUIRE( v.size() == 10 ) +with expansion: + 10 == 10 + +MiscTests.cpp:<line number>: +PASSED: + REQUIRE( v.capacity() >= 10 ) +with expansion: + 10 >= 10 ------------------------------------------------------------------------------- -Scenario: Do that thing with the thing - Given: This stuff exists - When: I do this - Then: it should do this +vectors can be sized and resized ------------------------------------------------------------------------------- -BDDTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -BDDTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - REQUIRE( itDoesThis() ) + REQUIRE( v.size() == 5 ) with expansion: - true + 5 == 5 + +MiscTests.cpp:<line number>: +PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 ------------------------------------------------------------------------------- -Scenario: Do that thing with the thing - Given: This stuff exists - When: I do this - Then: it should do this - And: do that +vectors can be sized and resized + resizing smaller changes size but not capacity ------------------------------------------------------------------------------- -BDDTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -BDDTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - REQUIRE( itDoesThat() ) + REQUIRE( v.size() == 0 ) with expansion: - true + 0 == 0 + +MiscTests.cpp:<line number>: +PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 ------------------------------------------------------------------------------- -Scenario: Vector resizing affects size and capacity - Given: an empty vector +vectors can be sized and resized + resizing smaller changes size but not capacity + We can use the 'swap trick' to reset the capacity ------------------------------------------------------------------------------- -BDDTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -BDDTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - REQUIRE( v.size() == 0 ) + REQUIRE( v.capacity() == 0 ) with expansion: 0 == 0 ------------------------------------------------------------------------------- -Scenario: Vector resizing affects size and capacity - Given: an empty vector - When: it is made larger - Then: the size and capacity go up +vectors can be sized and resized ------------------------------------------------------------------------------- -BDDTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -BDDTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - REQUIRE( v.size() == 10 ) + REQUIRE( v.size() == 5 ) with expansion: - 10 == 10 + 5 == 5 -BDDTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - REQUIRE( v.capacity() >= 10 ) + REQUIRE( v.capacity() >= 5 ) with expansion: - 10 >= 10 + 5 >= 5 ------------------------------------------------------------------------------- -Scenario: Vector resizing affects size and capacity - Given: an empty vector - When: it is made larger - Then: the size and capacity go up - And when: it is made smaller again - Then: the size goes down but the capacity stays the same +vectors can be sized and resized + reserving bigger changes capacity but not size ------------------------------------------------------------------------------- -BDDTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -BDDTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: REQUIRE( v.size() == 5 ) with expansion: 5 == 5 -BDDTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: REQUIRE( v.capacity() >= 10 ) with expansion: 10 >= 10 ------------------------------------------------------------------------------- -Scenario: Vector resizing affects size and capacity - Given: an empty vector +vectors can be sized and resized ------------------------------------------------------------------------------- -BDDTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -BDDTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - REQUIRE( v.size() == 0 ) + REQUIRE( v.size() == 5 ) with expansion: - 0 == 0 + 5 == 5 + +MiscTests.cpp:<line number>: +PASSED: + REQUIRE( v.capacity() >= 5 ) +with expansion: + 5 >= 5 ------------------------------------------------------------------------------- -Scenario: Vector resizing affects size and capacity - Given: an empty vector - When: we reserve more space - Then: The capacity is increased but the size remains the same +vectors can be sized and resized + reserving smaller does not change size or capacity ------------------------------------------------------------------------------- -BDDTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -BDDTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - REQUIRE( v.capacity() >= 10 ) + REQUIRE( v.size() == 5 ) with expansion: - 10 >= 10 + 5 == 5 -BDDTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - REQUIRE( v.size() == 0 ) + REQUIRE( v.capacity() >= 5 ) with expansion: - 0 == 0 - -------------------------------------------------------------------------------- -Scenario: This is a really long scenario name to see how the list command deals - with wrapping - Given: A section name that is so long that it cannot fit in a single - console width - When: The test headers are printed as part of the normal running of the - scenario - Then: The, deliberately very long and overly verbose (you see what I did - there?) section names must wrap, along with an indent -------------------------------------------------------------------------------- -BDDTests.cpp:<line number> -............................................................................... - -BDDTests.cpp:<line number>: -PASSED: -with message: - boo! + 5 >= 5 ------------------------------------------------------------------------------- -Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or - methods - Given: No operations precede me +xmlentitycheck + embedded xml ------------------------------------------------------------------------------- -BDDTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -BDDTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - REQUIRE( before == 0 ) -with expansion: - 0 == 0 ------------------------------------------------------------------------------- -Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or - methods - Given: No operations precede me - When: We get the count - Then: Subsequently values are higher +xmlentitycheck + encoded chars ------------------------------------------------------------------------------- -BDDTests.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -BDDTests.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - REQUIRE( after > before ) -with expansion: - 1 > 0 =============================================================================== -test cases: 169 | 124 passed | 43 failed | 2 failed as expected -assertions: 923 | 825 passed | 80 failed | 18 failed as expected +test cases: 157 | 112 passed | 43 failed | 2 failed as expected +assertions: 915 | 817 passed | 80 failed | 18 failed as expected diff --git a/3rdparty/catch/projects/SelfTest/Baselines/console.swa4.approved.txt b/3rdparty/catch/projects/SelfTest/Baselines/console.swa4.approved.txt index 76af9f5523e..ee0f5d313f5 100644 --- a/3rdparty/catch/projects/SelfTest/Baselines/console.swa4.approved.txt +++ b/3rdparty/catch/projects/SelfTest/Baselines/console.swa4.approved.txt @@ -1,615 +1,40 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -CatchSelfTest is a <version> host application. +<exe-name> is a <version> host application. Run with -? for options ------------------------------------------------------------------------------- -toString(enum) +# A test name that starts with a # ------------------------------------------------------------------------------- -EnumToString.cpp:<line number> +MiscTests.cpp:<line number> ............................................................................... -EnumToString.cpp:<line number>: +MiscTests.cpp:<line number>: PASSED: - CHECK( Catch::toString(e0) == "0" ) -with expansion: - "0" == "0" - -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e1) == "1" ) -with expansion: - "1" == "1" - -------------------------------------------------------------------------------- -toString(enum w/operator<<) -------------------------------------------------------------------------------- -EnumToString.cpp:<line number> -............................................................................... - -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e0) == "E2{0}" ) -with expansion: - "E2{0}" == "E2{0}" - -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e1) == "E2{1}" ) -with expansion: - "E2{1}" == "E2{1}" - -------------------------------------------------------------------------------- -toString(enum class) -------------------------------------------------------------------------------- -EnumToString.cpp:<line number> -............................................................................... - -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e0) == "0" ) -with expansion: - "0" == "0" - -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e1) == "1" ) -with expansion: - "1" == "1" - -------------------------------------------------------------------------------- -toString(enum class w/operator<<) -------------------------------------------------------------------------------- -EnumToString.cpp:<line number> -............................................................................... - -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e0) == "E2/V0" ) -with expansion: - "E2/V0" == "E2/V0" - -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e1) == "E2/V1" ) -with expansion: - "E2/V1" == "E2/V1" - -EnumToString.cpp:<line number>: -PASSED: - CHECK( Catch::toString(e3) == "Unknown enum value 10" ) -with expansion: - "Unknown enum value 10" - == - "Unknown enum value 10" - -------------------------------------------------------------------------------- -Some simple comparisons between doubles -------------------------------------------------------------------------------- -ApproxTests.cpp:<line number> -............................................................................... - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( d == Approx( 1.23 ) ) -with expansion: - 1.23 == Approx( 1.23 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( d != Approx( 1.22 ) ) -with expansion: - 1.23 != Approx( 1.22 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( d != Approx( 1.24 ) ) -with expansion: - 1.23 != Approx( 1.24 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( Approx( d ) == 1.23 ) -with expansion: - Approx( 1.23 ) == 1.23 - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( Approx( d ) != 1.22 ) -with expansion: - Approx( 1.23 ) != 1.22 - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( Approx( d ) != 1.24 ) -with expansion: - Approx( 1.23 ) != 1.24 - -------------------------------------------------------------------------------- -Approximate comparisons with different epsilons -------------------------------------------------------------------------------- -ApproxTests.cpp:<line number> -............................................................................... - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( d != Approx( 1.231 ) ) -with expansion: - 1.23 != Approx( 1.231 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( d == Approx( 1.231 ).epsilon( 0.1 ) ) -with expansion: - 1.23 == Approx( 1.231 ) - -------------------------------------------------------------------------------- -Approximate comparisons with floats -------------------------------------------------------------------------------- -ApproxTests.cpp:<line number> -............................................................................... - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( 1.23f == Approx( 1.23f ) ) -with expansion: - 1.23f == Approx( 1.2300000191 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( 0.0f == Approx( 0.0f ) ) -with expansion: - 0.0f == Approx( 0.0 ) - -------------------------------------------------------------------------------- -Approximate comparisons with ints -------------------------------------------------------------------------------- -ApproxTests.cpp:<line number> -............................................................................... - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( 1 == Approx( 1 ) ) -with expansion: - 1 == Approx( 1.0 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( 0 == Approx( 0 ) ) -with expansion: - 0 == Approx( 0.0 ) - -------------------------------------------------------------------------------- -Approximate comparisons with mixed numeric types -------------------------------------------------------------------------------- -ApproxTests.cpp:<line number> -............................................................................... - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( 1.0f == Approx( 1 ) ) -with expansion: - 1.0f == Approx( 1.0 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( 0 == Approx( dZero) ) -with expansion: - 0 == Approx( 0.0 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( 0 == Approx( dSmall ).epsilon( 0.001 ) ) -with expansion: - 0 == Approx( 0.00001 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( 1.234f == Approx( dMedium ) ) -with expansion: - 1.234f == Approx( 1.234 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( dMedium == Approx( 1.234f ) ) -with expansion: - 1.234 == Approx( 1.2339999676 ) - -------------------------------------------------------------------------------- -Use a custom approx -------------------------------------------------------------------------------- -ApproxTests.cpp:<line number> -............................................................................... - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( d == approx( 1.23 ) ) -with expansion: - 1.23 == Approx( 1.23 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( d == approx( 1.22 ) ) -with expansion: - 1.23 == Approx( 1.22 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( d == approx( 1.24 ) ) -with expansion: - 1.23 == Approx( 1.24 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( d != approx( 1.25 ) ) -with expansion: - 1.23 != Approx( 1.25 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( approx( d ) == 1.23 ) -with expansion: - Approx( 1.23 ) == 1.23 - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( approx( d ) == 1.22 ) -with expansion: - Approx( 1.23 ) == 1.22 - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( approx( d ) == 1.24 ) -with expansion: - Approx( 1.23 ) == 1.24 - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( approx( d ) != 1.25 ) -with expansion: - Approx( 1.23 ) != 1.25 +with message: + yay ------------------------------------------------------------------------------- -Approximate PI -------------------------------------------------------------------------------- -ApproxTests.cpp:<line number> -............................................................................... - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) ) -with expansion: - 3.1428571429 == Approx( 3.141 ) - -ApproxTests.cpp:<line number>: -PASSED: - REQUIRE( divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) ) -with expansion: - 3.1428571429 != Approx( 3.141 ) - -------------------------------------------------------------------------------- -A METHOD_AS_TEST_CASE based test run that succeeds -------------------------------------------------------------------------------- -ClassTests.cpp:<line number> -............................................................................... - -ClassTests.cpp:<line number>: -PASSED: - REQUIRE( s == "hello" ) -with expansion: - "hello" == "hello" - -------------------------------------------------------------------------------- -A METHOD_AS_TEST_CASE based test run that fails -------------------------------------------------------------------------------- -ClassTests.cpp:<line number> -............................................................................... - -ClassTests.cpp:<line number>: FAILED: - REQUIRE( s == "world" ) -with expansion: - "hello" == "world" - -------------------------------------------------------------------------------- -A TEST_CASE_METHOD based test run that succeeds -------------------------------------------------------------------------------- -ClassTests.cpp:<line number> -............................................................................... - -ClassTests.cpp:<line number>: -PASSED: - REQUIRE( m_a == 1 ) -with expansion: - 1 == 1 - -------------------------------------------------------------------------------- -A TEST_CASE_METHOD based test run that fails -------------------------------------------------------------------------------- -ClassTests.cpp:<line number> -............................................................................... - -ClassTests.cpp:<line number>: FAILED: - REQUIRE( m_a == 2 ) -with expansion: - 1 == 2 - -------------------------------------------------------------------------------- -Equality checks that should succeed -------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> -............................................................................... - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.int_seven == 7 ) -with expansion: - 7 == 7 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.float_nine_point_one == Approx( 9.1f ) ) -with expansion: - 9.1f == Approx( 9.1000003815 ) - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.double_pi == Approx( 3.1415926535 ) ) -with expansion: - 3.1415926535 == Approx( 3.1415926535 ) - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.str_hello == "hello" ) -with expansion: - "hello" == "hello" - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( "hello" == data.str_hello ) -with expansion: - "hello" == "hello" - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.str_hello.size() == 5 ) -with expansion: - 5 == 5 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( x == Approx( 1.3 ) ) -with expansion: - 1.3 == Approx( 1.3 ) - -------------------------------------------------------------------------------- -Equality checks that should fail +'Not' checks that should fail ------------------------------------------------------------------------------- ConditionTests.cpp:<line number> ............................................................................... ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven == 6 ) -with expansion: - 7 == 6 + CHECK( false != false ) ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven == 8 ) -with expansion: - 7 == 8 - -------------------------------------------------------------------------------- -Inequality checks that should succeed -------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> -............................................................................... - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.int_seven != 6 ) -with expansion: - 7 != 6 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.int_seven != 8 ) -with expansion: - 7 != 8 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.float_nine_point_one != Approx( 9.11f ) ) -with expansion: - 9.1f != Approx( 9.1099996567 ) - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.float_nine_point_one != Approx( 9.0f ) ) -with expansion: - 9.1f != Approx( 9.0 ) - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.float_nine_point_one != Approx( 1 ) ) -with expansion: - 9.1f != Approx( 1.0 ) - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.float_nine_point_one != Approx( 0 ) ) -with expansion: - 9.1f != Approx( 0.0 ) - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.double_pi != Approx( 3.1415 ) ) -with expansion: - 3.1415926535 != Approx( 3.1415 ) - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.str_hello != "goodbye" ) -with expansion: - "hello" != "goodbye" - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.str_hello != "hell" ) -with expansion: - "hello" != "hell" - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.str_hello != "hello1" ) -with expansion: - "hello" != "hello1" - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.str_hello.size() != 6 ) -with expansion: - 5 != 6 - -------------------------------------------------------------------------------- -Inequality checks that should fail -------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> -............................................................................... + CHECK( true != true ) ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven != 7 ) + CHECK( !true ) with expansion: - 7 != 7 + false ConditionTests.cpp:<line number>: FAILED: - CHECK( data.float_nine_point_one != Approx( 9.1f ) ) -with expansion: - 9.1f != Approx( 9.1000003815 ) - -------------------------------------------------------------------------------- -Ordering comparison checks that should succeed -------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> -............................................................................... - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.int_seven < 8 ) -with expansion: - 7 < 8 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.int_seven > 6 ) -with expansion: - 7 > 6 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.int_seven > 0 ) -with expansion: - 7 > 0 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.int_seven > -1 ) -with expansion: - 7 > -1 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.int_seven >= 7 ) -with expansion: - 7 >= 7 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.int_seven >= 6 ) -with expansion: - 7 >= 6 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.int_seven <= 7 ) -with expansion: - 7 <= 7 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.int_seven <= 8 ) -with expansion: - 7 <= 8 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.float_nine_point_one > 9 ) -with expansion: - 9.1f > 9 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.float_nine_point_one < 10 ) -with expansion: - 9.1f < 10 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.float_nine_point_one < 9.2 ) -with expansion: - 9.1f < 9.2 - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.str_hello <= "hello" ) -with expansion: - "hello" <= "hello" - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.str_hello >= "hello" ) -with expansion: - "hello" >= "hello" - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.str_hello < "hellp" ) -with expansion: - "hello" < "hellp" - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.str_hello < "zebra" ) -with expansion: - "hello" < "zebra" - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.str_hello > "hellm" ) -with expansion: - "hello" > "hellm" - -ConditionTests.cpp:<line number>: -PASSED: - REQUIRE( data.str_hello > "a" ) -with expansion: - "hello" > "a" - -------------------------------------------------------------------------------- -Ordering comparison checks that should fail -------------------------------------------------------------------------------- -ConditionTests.cpp:<line number> -............................................................................... - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven > 7 ) -with expansion: - 7 > 7 - -ConditionTests.cpp:<line number>: FAILED: - CHECK( data.int_seven < 7 ) -with expansion: - 7 < 7 + CHECK_FALSE( true ) =============================================================================== -test cases: 21 | 16 passed | 3 failed | 2 failed as expected -assertions: 81 | 73 passed | 4 failed | 4 failed as expected +test cases: 2 | 1 passed | 1 failed +assertions: 5 | 1 passed | 4 failed diff --git a/3rdparty/catch/projects/SelfTest/Baselines/junit.sw.approved.txt b/3rdparty/catch/projects/SelfTest/Baselines/junit.sw.approved.txt index 3fd998f052a..55ee56c922c 100644 --- a/3rdparty/catch/projects/SelfTest/Baselines/junit.sw.approved.txt +++ b/3rdparty/catch/projects/SelfTest/Baselines/junit.sw.approved.txt @@ -1,30 +1,119 @@ <?xml version="1.1" encoding="UTF-8"?> <testsuites> - <testsuite name="CatchSelfTest" errors="13" failures="68" tests="924" hostname="tbd" time="{duration}" timestamp="tbd"> - <testcase classname="global" name="toString(enum)" time="{duration}"/> - <testcase classname="global" name="toString(enum w/operator<<)" time="{duration}"/> - <testcase classname="global" name="toString(enum class)" time="{duration}"/> - <testcase classname="global" name="toString(enum class w/operator<<)" time="{duration}"/> - <testcase classname="global" name="Some simple comparisons between doubles" time="{duration}"/> - <testcase classname="global" name="Approximate comparisons with different epsilons" time="{duration}"/> - <testcase classname="global" name="Approximate comparisons with floats" time="{duration}"/> - <testcase classname="global" name="Approximate comparisons with ints" time="{duration}"/> - <testcase classname="global" name="Approximate comparisons with mixed numeric types" time="{duration}"/> - <testcase classname="global" name="Use a custom approx" time="{duration}"/> - <testcase classname="global" name="Approximate PI" time="{duration}"/> - <testcase classname="TestClass" name="A METHOD_AS_TEST_CASE based test run that succeeds" time="{duration}"/> + <testsuite name="<exe-name>" errors="13" failures="68" tests="916" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}"> + <testcase classname="global" name="# A test name that starts with a #" time="{duration}"/> + <testcase classname="global" name="'Not' checks that should fail" time="{duration}"> + <failure message="false != false" type="CHECK"> +ConditionTests.cpp:<line number> + </failure> + <failure message="true != true" type="CHECK"> +ConditionTests.cpp:<line number> + </failure> + <failure message="false" type="CHECK"> +ConditionTests.cpp:<line number> + </failure> + <failure message="!true" type="CHECK_FALSE"> +ConditionTests.cpp:<line number> + </failure> + <failure message="false" type="CHECK"> +ConditionTests.cpp:<line number> + </failure> + <failure message="!true" type="CHECK_FALSE"> +ConditionTests.cpp:<line number> + </failure> + <failure message="false" type="CHECK"> +ConditionTests.cpp:<line number> + </failure> + <failure message="!(1 == 1)" type="CHECK_FALSE"> +ConditionTests.cpp:<line number> + </failure> + </testcase> + <testcase classname="global" name="'Not' checks that should succeed" time="{duration}"/> + <testcase classname="(unimplemented) static bools can be evaluated" name="compare to true" time="{duration}"/> + <testcase classname="(unimplemented) static bools can be evaluated" name="compare to false" time="{duration}"/> + <testcase classname="(unimplemented) static bools can be evaluated" name="negation" time="{duration}"/> + <testcase classname="(unimplemented) static bools can be evaluated" name="double negation" time="{duration}"/> + <testcase classname="(unimplemented) static bools can be evaluated" name="direct" time="{duration}"/> <testcase classname="TestClass" name="A METHOD_AS_TEST_CASE based test run that fails" time="{duration}"> <failure message=""hello" == "world"" type="REQUIRE"> ClassTests.cpp:<line number> </failure> </testcase> - <testcase classname="Fixture" name="A TEST_CASE_METHOD based test run that succeeds" time="{duration}"/> + <testcase classname="TestClass" name="A METHOD_AS_TEST_CASE based test run that succeeds" time="{duration}"/> <testcase classname="Fixture" name="A TEST_CASE_METHOD based test run that fails" time="{duration}"> <failure message="1 == 2" type="REQUIRE"> ClassTests.cpp:<line number> </failure> </testcase> - <testcase classname="global" name="Equality checks that should succeed" time="{duration}"/> + <testcase classname="Fixture" name="A TEST_CASE_METHOD based test run that succeeds" time="{duration}"/> + <testcase classname="A couple of nested sections followed by a failure" name="root" time="{duration}"> + <failure type="FAIL"> +to infinity and beyond +MiscTests.cpp:<line number> + </failure> + </testcase> + <testcase classname="A couple of nested sections followed by a failure" name="Outer/Inner" time="{duration}"/> + <testcase classname="global" name="A failing expression with a non streamable type is still captured" time="{duration}"> + <failure message="0x<hex digits> == 0x<hex digits>" type="CHECK"> +TrickyTests.cpp:<line number> + </failure> + <failure message="{?} == {?}" type="CHECK"> +TrickyTests.cpp:<line number> + </failure> + </testcase> + <testcase classname="global" name="AllOf matcher" time="{duration}"/> + <testcase classname="global" name="An expression with side-effects should only be evaluated once" time="{duration}"/> + <testcase classname="global" name="An unchecked exception reports the line of the last assertion" time="{duration}"> + <error message="{Unknown expression after the reported line}"> +unexpected exception +ExceptionTests.cpp:<line number> + </error> + </testcase> + <testcase classname="global" name="Anonymous test case 1" time="{duration}"/> + <testcase classname="global" name="AnyOf matcher" time="{duration}"/> + <testcase classname="global" name="Approximate PI" time="{duration}"/> + <testcase classname="global" name="Approximate comparisons with different epsilons" time="{duration}"/> + <testcase classname="global" name="Approximate comparisons with floats" time="{duration}"/> + <testcase classname="global" name="Approximate comparisons with ints" time="{duration}"/> + <testcase classname="global" name="Approximate comparisons with mixed numeric types" time="{duration}"/> + <testcase classname="Assertions then sections" name="root" time="{duration}"/> + <testcase classname="Assertions then sections" name="A section" time="{duration}"/> + <testcase classname="Assertions then sections" name="A section/Another section" time="{duration}"/> + <testcase classname="Assertions then sections" name="A section/Another other section" time="{duration}"/> + <testcase classname="global" name="Comparing function pointers" time="{duration}"/> + <testcase classname="global" name="Comparing member function pointers" time="{duration}"/> + <testcase classname="global" name="Comparisons between ints where one side is computed" time="{duration}"/> + <testcase classname="global" name="Comparisons between unsigned ints and negative signed ints match c++ standard behaviour" time="{duration}"/> + <testcase classname="global" name="Comparisons with int literals don't warn when mixing signed/ unsigned" time="{duration}"/> + <testcase classname="global" name="Contains string matcher" time="{duration}"> + <failure message=""this string contains 'abc' as a substring" contains: "not there"" type="CHECK_THAT"> +MiscTests.cpp:<line number> + </failure> + </testcase> + <testcase classname="global" name="Custom exceptions can be translated when testing for nothrow" time="{duration}"> + <error message="throwCustom()" type="REQUIRE_NOTHROW"> +custom exception - not std +ExceptionTests.cpp:<line number> + </error> + </testcase> + <testcase classname="global" name="Custom exceptions can be translated when testing for throwing as something else" time="{duration}"> + <error message="throwCustom()" type="REQUIRE_THROWS_AS"> +custom exception - not std +ExceptionTests.cpp:<line number> + </error> + </testcase> + <testcase classname="global" name="Custom std-exceptions can be custom translated" time="{duration}"> + <error type="TEST_CASE"> +custom std exception +ExceptionTests.cpp:<line number> + </error> + </testcase> + <testcase classname="global" name="Demonstrate that a non-const == is not used" time="{duration}"/> + <testcase classname="global" name="EndsWith string matcher" time="{duration}"> + <failure message=""this string contains 'abc' as a substring" ends with: "this"" type="CHECK_THAT"> +MiscTests.cpp:<line number> + </failure> + </testcase> <testcase classname="global" name="Equality checks that should fail" time="{duration}"> <failure message="7 == 6" type="CHECK"> ConditionTests.cpp:<line number> @@ -66,7 +155,63 @@ ConditionTests.cpp:<line number> ConditionTests.cpp:<line number> </failure> </testcase> - <testcase classname="global" name="Inequality checks that should succeed" time="{duration}"/> + <testcase classname="global" name="Equality checks that should succeed" time="{duration}"/> + <testcase classname="global" name="Equals" time="{duration}"/> + <testcase classname="global" name="Equals string matcher" time="{duration}"> + <failure message=""this string contains 'abc' as a substring" equals: "something else"" type="CHECK_THAT"> +MiscTests.cpp:<line number> + </failure> + </testcase> + <testcase classname="global" name="Equals string matcher, with NULL" time="{duration}"/> + <testcase classname="Exception messages can be tested for" name="exact match" time="{duration}"/> + <testcase classname="Exception messages can be tested for" name="different case" time="{duration}"/> + <testcase classname="Exception messages can be tested for" name="wildcarded" time="{duration}"/> + <testcase classname="global" name="Expected exceptions that don't throw or unexpected exceptions fail the test" time="{duration}"> + <error message="thisThrows()" type="CHECK_THROWS_AS"> +expected exception +ExceptionTests.cpp:<line number> + </error> + <failure message="thisDoesntThrow()" type="CHECK_THROWS_AS"> +ExceptionTests.cpp:<line number> + </failure> + <error message="thisThrows()" type="CHECK_NOTHROW"> +expected exception +ExceptionTests.cpp:<line number> + </error> + </testcase> + <testcase classname="global" name="FAIL aborts the test" time="{duration}"> + <failure type="FAIL"> +This is a failure +MessageTests.cpp:<line number> + </failure> + </testcase> + <testcase classname="global" name="FAIL does not require an argument" time="{duration}"> + <failure type="FAIL"> +MessageTests.cpp:<line number> + </failure> + </testcase> + <testcase classname="global" name="Factorials are computed" time="{duration}"/> + <testcase classname="global" name="Generator over a range of pairs" time="{duration}"/> + <testcase classname="global" name="Generators over two ranges" time="{duration}"/> + <testcase classname="global" name="Greater-than inequalities with different epsilons" time="{duration}"/> + <testcase classname="global" name="INFO and WARN do not abort tests" time="{duration}"/> + <testcase classname="global" name="INFO gets logged on failure" time="{duration}"> + <failure message="2 == 1" type="REQUIRE"> +this message should be logged +so should this +MessageTests.cpp:<line number> + </failure> + </testcase> + <testcase classname="global" name="INFO gets logged on failure, even if captured before successful assertions" time="{duration}"> + <failure message="2 == 1" type="CHECK"> +this message should be logged +MessageTests.cpp:<line number> + </failure> + <failure message="2 == 0" type="CHECK"> +and this, but later +MessageTests.cpp:<line number> + </failure> + </testcase> <testcase classname="global" name="Inequality checks that should fail" time="{duration}"> <failure message="7 != 7" type="CHECK"> ConditionTests.cpp:<line number> @@ -84,7 +229,53 @@ ConditionTests.cpp:<line number> ConditionTests.cpp:<line number> </failure> </testcase> - <testcase classname="global" name="Ordering comparison checks that should succeed" time="{duration}"/> + <testcase classname="global" name="Inequality checks that should succeed" time="{duration}"/> + <testcase classname="global" name="Less-than inequalities with different epsilons" time="{duration}"/> + <testcase classname="Long strings can be wrapped" name="plain string/No wrapping" time="{duration}"/> + <testcase classname="Long strings can be wrapped" name="plain string/Wrapped once" time="{duration}"/> + <testcase classname="Long strings can be wrapped" name="plain string/Wrapped twice" time="{duration}"/> + <testcase classname="Long strings can be wrapped" name="plain string/Wrapped three times" time="{duration}"/> + <testcase classname="Long strings can be wrapped" name="plain string/Short wrap" time="{duration}"/> + <testcase classname="Long strings can be wrapped" name="plain string/As container" time="{duration}"/> + <testcase classname="Long strings can be wrapped" name="plain string/Indent first line differently" time="{duration}"/> + <testcase classname="Long strings can be wrapped" name="With newlines/No wrapping" time="{duration}"/> + <testcase classname="Long strings can be wrapped" name="With newlines/Trailing newline" time="{duration}"/> + <testcase classname="Long strings can be wrapped" name="With newlines/Wrapped once" time="{duration}"/> + <testcase classname="Long strings can be wrapped" name="With newlines/Wrapped twice" time="{duration}"/> + <testcase classname="Long strings can be wrapped" name="With wrap-before/ after characters/No wrapping" time="{duration}"/> + <testcase classname="Long strings can be wrapped" name="With wrap-before/ after characters/Wrap before" time="{duration}"/> + <testcase classname="Long strings can be wrapped" name="With wrap-before/ after characters/Wrap after" time="{duration}"/> + <testcase classname="global" name="Long text is truncted" time="{duration}"/> + <testcase classname="global" name="ManuallyRegistered" time="{duration}"/> + <testcase classname="global" name="Matchers can be (AllOf) composed with the && operator" time="{duration}"/> + <testcase classname="global" name="Matchers can be (AnyOf) composed with the || operator" time="{duration}"/> + <testcase classname="global" name="Matchers can be composed with both && and ||" time="{duration}"/> + <testcase classname="global" name="Matchers can be composed with both && and || - failing" time="{duration}"> + <failure message=""this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "random" )" type="CHECK_THAT"> +MiscTests.cpp:<line number> + </failure> + </testcase> + <testcase classname="global" name="Matchers can be negated (Not) with the ! operator" time="{duration}"/> + <testcase classname="global" name="Matchers can be negated (Not) with the ! operator - failing" time="{duration}"> + <failure message=""this string contains 'abc' as a substring" not contains: "substring"" type="CHECK_THAT"> +MiscTests.cpp:<line number> + </failure> + </testcase> + <testcase classname="global" name="Mismatching exception messages failing the test" time="{duration}"> + <failure message="expected exception" type="REQUIRE_THROWS_WITH"> +ExceptionTests.cpp:<line number> + </failure> + </testcase> + <testcase classname="global" name="Nice descriptive name" time="{duration}"/> + <testcase classname="global" name="Non-std exceptions can be translated" time="{duration}"> + <error type="TEST_CASE"> +custom exception +ExceptionTests.cpp:<line number> + </error> + </testcase> + <testcase classname="global" name="NotImplemented exception" time="{duration}"/> + <testcase classname="global" name="Objects that evaluated in boolean contexts can be checked" time="{duration}"/> + <testcase classname="global" name="Operators at different namespace levels not hijacked by Koenig lookup" time="{duration}"/> <testcase classname="global" name="Ordering comparison checks that should fail" time="{duration}"> <failure message="7 > 7" type="CHECK"> ConditionTests.cpp:<line number> @@ -144,72 +335,174 @@ ConditionTests.cpp:<line number> ConditionTests.cpp:<line number> </failure> </testcase> - <testcase classname="global" name="Comparisons with int literals don't warn when mixing signed/ unsigned" time="{duration}"/> - <testcase classname="global" name="comparisons between int variables" time="{duration}"/> - <testcase classname="global" name="comparisons between const int variables" time="{duration}"/> - <testcase classname="global" name="Comparisons between unsigned ints and negative signed ints match c++ standard behaviour" time="{duration}"/> - <testcase classname="global" name="Comparisons between ints where one side is computed" time="{duration}"/> - <testcase classname="global" name="Pointers can be compared to null" time="{duration}"/> - <testcase classname="global" name="'Not' checks that should succeed" time="{duration}"/> - <testcase classname="global" name="'Not' checks that should fail" time="{duration}"> - <failure message="false != false" type="CHECK"> -ConditionTests.cpp:<line number> - </failure> - <failure message="true != true" type="CHECK"> -ConditionTests.cpp:<line number> - </failure> - <failure message="false" type="CHECK"> -ConditionTests.cpp:<line number> - </failure> - <failure message="!true" type="CHECK_FALSE"> -ConditionTests.cpp:<line number> - </failure> - <failure message="false" type="CHECK"> -ConditionTests.cpp:<line number> + <testcase classname="global" name="Ordering comparison checks that should succeed" time="{duration}"/> + <testcase classname="Output from all sections is reported" name="one" time="{duration}"> + <failure type="FAIL"> +Message from section one +MessageTests.cpp:<line number> </failure> - <failure message="!true" type="CHECK_FALSE"> -ConditionTests.cpp:<line number> + </testcase> + <testcase classname="Output from all sections is reported" name="two" time="{duration}"> + <failure type="FAIL"> +Message from section two +MessageTests.cpp:<line number> </failure> - <failure message="false" type="CHECK"> -ConditionTests.cpp:<line number> + </testcase> + <testcase classname="Parse test names and tags" name="Empty test spec should have no filters" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Test spec from empty string should have no filters" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Test spec from just a comma should have no filters" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Test spec from name should have one filter" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Test spec from quoted name should have one filter" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Test spec from name should have one filter" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Wildcard at the start" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Wildcard at the end" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Wildcard at both ends" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Redundant wildcard at the start" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Redundant wildcard at the end" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Redundant wildcard at both ends" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Wildcard at both ends, redundant at start" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Just wildcard" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Single tag" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Single tag, two matches" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Two tags" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Two tags, spare separated" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Wildcarded name and tag" time="{duration}"/> + <testcase classname="Parse test names and tags" name="Single tag exclusion" time="{duration}"/> + <testcase classname="Parse test names and tags" name="One tag exclusion and one tag inclusion" time="{duration}"/> + <testcase classname="Parse test names and tags" name="One tag exclusion and one wldcarded name inclusion" time="{duration}"/> + <testcase classname="Parse test names and tags" name="One tag exclusion, using exclude:, and one wldcarded name inclusion" time="{duration}"/> + <testcase classname="Parse test names and tags" name="name exclusion" time="{duration}"/> + <testcase classname="Parse test names and tags" name="wildcarded name exclusion" time="{duration}"/> + <testcase classname="Parse test names and tags" name="wildcarded name exclusion with tag inclusion" time="{duration}"/> + <testcase classname="Parse test names and tags" name="wildcarded name exclusion, using exclude:, with tag inclusion" time="{duration}"/> + <testcase classname="Parse test names and tags" name="two wildcarded names" time="{duration}"/> + <testcase classname="Parse test names and tags" name="empty tag" time="{duration}"/> + <testcase classname="Parse test names and tags" name="empty quoted name" time="{duration}"/> + <testcase classname="Parse test names and tags" name="quoted string followed by tag exclusion" time="{duration}"/> + <testcase classname="global" name="Parsing a std::pair" time="{duration}"/> + <testcase classname="global" name="Pointers can be compared to null" time="{duration}"/> + <testcase classname="global" name="Pointers can be converted to strings" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="default - no arguments" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="test lists/1 test" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="test lists/Specify one test case exclusion using exclude:" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="test lists/Specify one test case exclusion using ~" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="reporter/-r/console" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="reporter/-r/xml" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="reporter/-r xml and junit" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="reporter/--reporter/junit" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="debugger/-b" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="debugger/--break" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="abort/-a aborts after first failure" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="abort/-x 2 aborts after two failures" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="abort/-x must be greater than zero" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="abort/-x must be numeric" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="nothrow/-e" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="nothrow/--nothrow" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="output filename/-o filename" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="output filename/--out" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="combinations/Single character flags can be combined" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="use-colour/without option" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="use-colour/auto" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="use-colour/yes" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="use-colour/no" time="{duration}"/> + <testcase classname="Process can be configured on command line" name="use-colour/error" time="{duration}"/> + <testcase classname="global" name="SCOPED_INFO is reset for each loop" time="{duration}"> + <failure message="10 < 10" type="REQUIRE"> +current counter 10 +i := 10 +MessageTests.cpp:<line number> </failure> - <failure message="!(1 == 1)" type="CHECK_FALSE"> -ConditionTests.cpp:<line number> + </testcase> + <testcase classname="global" name="SUCCEED counts as a test pass" time="{duration}"/> + <testcase classname="global" name="SUCCESS does not require an argument" time="{duration}"/> + <testcase classname="Fixture" name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods/Given: No operations precede me" time="{duration}"/> + <testcase classname="Fixture" name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods/Given: No operations precede me/When: We get the count/Then: Subsequently values are higher" time="{duration}"/> + <testcase classname="Scenario: Do that thing with the thing" name="Given: This stuff exists/When: I do this/Then: it should do this" time="{duration}"/> + <testcase classname="Scenario: Do that thing with the thing" name="Given: This stuff exists/When: I do this/Then: it should do this/And: do that" time="{duration}"/> + <testcase classname="Scenario: This is a really long scenario name to see how the list command deals with wrapping" name="Given: A section name that is so long that it cannot fit in a single console width/When: The test headers are printed as part of the normal running of the scenario/Then: The, deliberately very long and overly verbose (you see what I did there?) section names must wrap, along with an indent" time="{duration}"/> + <testcase classname="Scenario: Vector resizing affects size and capacity" name="Given: an empty vector" time="{duration}"/> + <testcase classname="Scenario: Vector resizing affects size and capacity" name="Given: an empty vector/When: it is made larger/Then: the size and capacity go up" time="{duration}"/> + <testcase classname="Scenario: Vector resizing affects size and capacity" name="Given: an empty vector/When: it is made larger/Then: the size and capacity go up/And when: it is made smaller again/Then: the size goes down but the capacity stays the same" time="{duration}"/> + <testcase classname="Scenario: Vector resizing affects size and capacity" name="Given: an empty vector/When: we reserve more space/Then: The capacity is increased but the size remains the same" time="{duration}"/> + <testcase classname="global" name="Sends stuff to stdout and stderr" time="{duration}"> + <system-out> +A string sent directly to stdout + </system-out> + <system-err> +A string sent directly to stderr + </system-err> + </testcase> + <testcase classname="global" name="Some simple comparisons between doubles" time="{duration}"/> + <testcase classname="Standard output from all sections is reported" name="two" time="{duration}"> + <system-out> +Message from section one +Message from section two + </system-out> + </testcase> + <testcase classname="global" name="StartsWith string matcher" time="{duration}"> + <failure message=""this string contains 'abc' as a substring" starts with: "string"" type="CHECK_THAT"> +MiscTests.cpp:<line number> </failure> </testcase> - <testcase classname="global" name="When checked exceptions are thrown they can be expected or unexpected" time="{duration}"/> - <testcase classname="global" name="Expected exceptions that don't throw or unexpected exceptions fail the test" time="{duration}"> - <error message="thisThrows()" type="CHECK_THROWS_AS"> -expected exception -ExceptionTests.cpp:<line number> - </error> - <failure message="thisDoesntThrow()" type="CHECK_THROWS_AS"> -ExceptionTests.cpp:<line number> + <testcase classname="global" name="String matchers" time="{duration}"/> + <testcase classname="global" name="Strings can be rendered with colour" time="{duration}"> + <system-out> +hello +hello + </system-out> + </testcase> + <testcase classname="global" name="Tabs and newlines show in output" time="{duration}"> + <failure message=""if ($b == 10) { + $a = 20; +}" +== +"if ($b == 10) { + $a = 20; +} +"" type="CHECK"> +MiscTests.cpp:<line number> </failure> - <error message="thisThrows()" type="CHECK_NOTHROW"> -expected exception -ExceptionTests.cpp:<line number> - </error> </testcase> - <testcase classname="global" name="When unchecked exceptions are thrown directly they are always failures" time="{duration}"> + <testcase classname="Tag alias can be registered against tag patterns" name="The same tag alias can only be registered once" time="{duration}"/> + <testcase classname="Tag alias can be registered against tag patterns" name="Tag aliases must be of the form [@name]" time="{duration}"/> + <testcase classname="global" name="Test case with one argument" time="{duration}"/> + <testcase classname="global" name="Test enum bit values" time="{duration}"/> + <testcase classname="global" name="Text can be formatted using the Text class" time="{duration}"/> + <testcase classname="global" name="The NO_FAIL macro reports a failure but does not fail the test" time="{duration}"/> + <testcase classname="global" name="This test 'should' fail but doesn't" time="{duration}"/> + <testcase classname="Tracker" name="root" time="{duration}"/> + <testcase classname="Tracker" name="successfully close one section" time="{duration}"/> + <testcase classname="Tracker" name="fail one section" time="{duration}"/> + <testcase classname="Tracker" name="fail one section/re-enter after failed section" time="{duration}"/> + <testcase classname="Tracker" name="fail one section/re-enter after failed section and find next section" time="{duration}"/> + <testcase classname="Tracker" name="successfully close one section, then find another" time="{duration}"/> + <testcase classname="Tracker" name="successfully close one section, then find another/Re-enter - skips S1 and enters S2" time="{duration}"/> + <testcase classname="Tracker" name="successfully close one section, then find another/Re-enter - skips S1 and enters S2/Successfully close S2" time="{duration}"/> + <testcase classname="Tracker" name="successfully close one section, then find another/Re-enter - skips S1 and enters S2/fail S2" time="{duration}"/> + <testcase classname="Tracker" name="open a nested section" time="{duration}"/> + <testcase classname="Tracker" name="start a generator" time="{duration}"/> + <testcase classname="Tracker" name="start a generator/close outer section" time="{duration}"/> + <testcase classname="Tracker" name="start a generator/close outer section/Re-enter for second generation" time="{duration}"/> + <testcase classname="Tracker" name="start a generator/Start a new inner section" time="{duration}"/> + <testcase classname="Tracker" name="start a generator/Start a new inner section/Re-enter for second generation" time="{duration}"/> + <testcase classname="Tracker" name="start a generator/Fail an inner section" time="{duration}"/> + <testcase classname="Tracker" name="start a generator/Fail an inner section/Re-enter for second generation" time="{duration}"/> + <testcase classname="global" name="Unexpected exceptions can be translated" time="{duration}"> <error type="TEST_CASE"> -unexpected exception -ExceptionTests.cpp:<line number> - </error> - </testcase> - <testcase classname="global" name="An unchecked exception reports the line of the last assertion" time="{duration}"> - <error message="{Unknown expression after the reported line}"> -unexpected exception +3.14 ExceptionTests.cpp:<line number> </error> </testcase> - <testcase classname="When unchecked exceptions are thrown from sections they are always failures" name="section name" time="{duration}"> + <testcase classname="global" name="Use a custom approx" time="{duration}"/> + <testcase classname="Variadic macros" name="Section with one argument" time="{duration}"/> + <testcase classname="global" name="When checked exceptions are thrown they can be expected or unexpected" time="{duration}"/> + <testcase classname="global" name="When unchecked exceptions are thrown directly they are always failures" time="{duration}"> <error type="TEST_CASE"> unexpected exception ExceptionTests.cpp:<line number> </error> </testcase> - <testcase classname="global" name="When unchecked exceptions are thrown from functions they are always failures" time="{duration}"> + <testcase classname="global" name="When unchecked exceptions are thrown during a CHECK the test should continue" time="{duration}"> <error message="thisThrows() == 0" type="CHECK"> expected exception ExceptionTests.cpp:<line number> @@ -221,138 +514,63 @@ expected exception ExceptionTests.cpp:<line number> </error> </testcase> - <testcase classname="global" name="When unchecked exceptions are thrown during a CHECK the test should abort and fail" time="{duration}"> + <testcase classname="global" name="When unchecked exceptions are thrown from functions they are always failures" time="{duration}"> <error message="thisThrows() == 0" type="CHECK"> expected exception ExceptionTests.cpp:<line number> </error> </testcase> - <testcase classname="global" name="Non-std exceptions can be translated" time="{duration}"> - <error type="TEST_CASE"> -custom exception -ExceptionTests.cpp:<line number> - </error> - </testcase> - <testcase classname="global" name="Custom std-exceptions can be custom translated" time="{duration}"> - <error type="TEST_CASE"> -custom std exception -ExceptionTests.cpp:<line number> - </error> - </testcase> - <testcase classname="global" name="Custom exceptions can be translated when testing for nothrow" time="{duration}"> - <error message="throwCustom()" type="REQUIRE_NOTHROW"> -custom exception - not std -ExceptionTests.cpp:<line number> - </error> - </testcase> - <testcase classname="global" name="Custom exceptions can be translated when testing for throwing as something else" time="{duration}"> - <error message="throwCustom()" type="REQUIRE_THROWS_AS"> -custom exception - not std -ExceptionTests.cpp:<line number> - </error> - </testcase> - <testcase classname="global" name="Unexpected exceptions can be translated" time="{duration}"> + <testcase classname="When unchecked exceptions are thrown from sections they are always failures" name="section name" time="{duration}"> <error type="TEST_CASE"> -3.14 +unexpected exception ExceptionTests.cpp:<line number> </error> </testcase> - <testcase classname="global" name="NotImplemented exception" time="{duration}"/> - <testcase classname="Exception messages can be tested for" name="exact match" time="{duration}"/> - <testcase classname="Exception messages can be tested for" name="different case" time="{duration}"/> - <testcase classname="Exception messages can be tested for" name="wildcarded" time="{duration}"/> - <testcase classname="global" name="Mismatching exception messages failing the test" time="{duration}"> - <failure message="expected exception" type="REQUIRE_THROWS_WITH"> -ExceptionTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="global" name="Generators over two ranges" time="{duration}"/> - <testcase classname="global" name="Generator over a range of pairs" time="{duration}"/> - <testcase classname="global" name="INFO and WARN do not abort tests" time="{duration}"/> - <testcase classname="global" name="SUCCEED counts as a test pass" time="{duration}"/> - <testcase classname="global" name="INFO gets logged on failure" time="{duration}"> - <failure message="2 == 1" type="REQUIRE"> -this message should be logged -so should this -MessageTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="global" name="INFO gets logged on failure, even if captured before successful assertions" time="{duration}"> - <failure message="2 == 1" type="CHECK"> -this message should be logged -MessageTests.cpp:<line number> - </failure> - <failure message="2 == 0" type="CHECK"> -and this, but later -MessageTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="global" name="FAIL aborts the test" time="{duration}"> - <failure type="FAIL"> -This is a failure -MessageTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="global" name="FAIL does not require an argument" time="{duration}"> - <failure type="FAIL"> -MessageTests.cpp:<line number> + <testcase classname="global" name="Where the LHS is not a simple value" time="{duration}"/> + <testcase classname="global" name="Where there is more to the expression after the RHS" time="{duration}"/> + <testcase classname="global" name="X/level/0/a" time="{duration}"/> + <testcase classname="global" name="X/level/0/b" time="{duration}"/> + <testcase classname="global" name="X/level/1/a" time="{duration}"/> + <testcase classname="global" name="X/level/1/b" time="{duration}"/> + <testcase classname="XmlEncode" name="normal string" time="{duration}"/> + <testcase classname="XmlEncode" name="empty string" time="{duration}"/> + <testcase classname="XmlEncode" name="string with ampersand" time="{duration}"/> + <testcase classname="XmlEncode" name="string with less-than" time="{duration}"/> + <testcase classname="XmlEncode" name="string with greater-than" time="{duration}"/> + <testcase classname="XmlEncode" name="string with quotes" time="{duration}"/> + <testcase classname="XmlEncode" name="string with control char (1)" time="{duration}"/> + <testcase classname="XmlEncode" name="string with control char (x7F)" time="{duration}"/> + <testcase classname="global" name="atomic if" time="{duration}"/> + <testcase classname="global" name="boolean member" time="{duration}"/> + <testcase classname="global" name="checkedElse" time="{duration}"/> + <testcase classname="global" name="checkedElse, failing" time="{duration}"> + <failure message="false" type="CHECKED_ELSE"> +MiscTests.cpp:<line number> </failure> - </testcase> - <testcase classname="global" name="SUCCESS does not require an argument" time="{duration}"/> - <testcase classname="Output from all sections is reported" name="one" time="{duration}"> - <failure type="FAIL"> -Message from section one -MessageTests.cpp:<line number> + <failure message="false" type="REQUIRE"> +MiscTests.cpp:<line number> </failure> </testcase> - <testcase classname="Output from all sections is reported" name="two" time="{duration}"> - <failure type="FAIL"> -Message from section two -MessageTests.cpp:<line number> + <testcase classname="global" name="checkedIf" time="{duration}"/> + <testcase classname="global" name="checkedIf, failing" time="{duration}"> + <failure message="false" type="CHECKED_IF"> +MiscTests.cpp:<line number> </failure> - </testcase> - <testcase classname="Standard output from all sections is reported" name="two" time="{duration}"> - <system-out> -Message from section one -Message from section two - </system-out> - </testcase> - <testcase classname="global" name="SCOPED_INFO is reset for each loop" time="{duration}"> - <failure message="10 < 10" type="REQUIRE"> -current counter 10 -i := 10 -MessageTests.cpp:<line number> + <failure message="false" type="REQUIRE"> +MiscTests.cpp:<line number> </failure> </testcase> - <testcase classname="global" name="The NO_FAIL macro reports a failure but does not fail the test" time="{duration}"/> + <testcase classname="global" name="comparisons between const int variables" time="{duration}"/> + <testcase classname="global" name="comparisons between int variables" time="{duration}"/> + <testcase classname="even more nested SECTION tests" name="c/d (leaf)" time="{duration}"/> + <testcase classname="even more nested SECTION tests" name="c/e (leaf)" time="{duration}"/> + <testcase classname="even more nested SECTION tests" name="f (leaf)" time="{duration}"/> <testcase classname="global" name="just failure" time="{duration}"> <failure type="FAIL"> Previous info should not be seen MessageTests.cpp:<line number> </failure> </testcase> - <testcase classname="global" name="sends information to INFO" time="{duration}"> - <failure message="false" type="REQUIRE"> -hi -i := 7 -MessageTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="global" name="Pointers can be converted to strings" time="{duration}"/> - <testcase classname="random SECTION tests" name="s1" time="{duration}"/> - <testcase classname="random SECTION tests" name="s2" time="{duration}"/> - <testcase classname="nested SECTION tests" name="s1" time="{duration}"/> - <testcase classname="nested SECTION tests" name="s1/s2" time="{duration}"/> - <testcase classname="more nested SECTION tests" name="s2/s1" time="{duration}"> - <failure message="1 == 2" type="REQUIRE"> -MiscTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="more nested SECTION tests" name="s1/s3" time="{duration}"/> - <testcase classname="more nested SECTION tests" name="s1/s4" time="{duration}"/> - <testcase classname="even more nested SECTION tests" name="c/d (leaf)" time="{duration}"/> - <testcase classname="even more nested SECTION tests" name="c/e (leaf)" time="{duration}"/> - <testcase classname="even more nested SECTION tests" name="f (leaf)" time="{duration}"/> <testcase classname="looped SECTION tests" name="s1" time="{duration}"> <failure message="0 > 1" type="CHECK"> MiscTests.cpp:<line number> @@ -384,160 +602,22 @@ Testing if fib[7] (21) is even MiscTests.cpp:<line number> </failure> </testcase> - <testcase classname="global" name="Sends stuff to stdout and stderr" time="{duration}"> - <system-out> -A string sent directly to stdout - </system-out> - <system-err> -A string sent directly to stderr - </system-err> - </testcase> - <testcase classname="global" name="null strings" time="{duration}"/> - <testcase classname="global" name="checkedIf" time="{duration}"/> - <testcase classname="global" name="checkedIf, failing" time="{duration}"> - <failure message="false" type="CHECKED_IF"> -MiscTests.cpp:<line number> - </failure> - <failure message="false" type="REQUIRE"> -MiscTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="global" name="checkedElse" time="{duration}"/> - <testcase classname="global" name="checkedElse, failing" time="{duration}"> - <failure message="false" type="CHECKED_ELSE"> -MiscTests.cpp:<line number> - </failure> - <failure message="false" type="REQUIRE"> -MiscTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="xmlentitycheck" name="embedded xml" time="{duration}"/> - <testcase classname="xmlentitycheck" name="encoded chars" time="{duration}"/> - <testcase classname="global" name="send a single char to INFO" time="{duration}"> - <failure message="false" type="REQUIRE"> -3 -MiscTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="global" name="atomic if" time="{duration}"/> - <testcase classname="global" name="String matchers" time="{duration}"/> - <testcase classname="global" name="Contains string matcher" time="{duration}"> - <failure message=""this string contains 'abc' as a substring" contains: "not there"" type="CHECK_THAT"> -MiscTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="global" name="StartsWith string matcher" time="{duration}"> - <failure message=""this string contains 'abc' as a substring" starts with: "string"" type="CHECK_THAT"> -MiscTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="global" name="EndsWith string matcher" time="{duration}"> - <failure message=""this string contains 'abc' as a substring" ends with: "this"" type="CHECK_THAT"> -MiscTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="global" name="Equals string matcher" time="{duration}"> - <failure message=""this string contains 'abc' as a substring" equals: "something else"" type="CHECK_THAT"> -MiscTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="global" name="Equals string matcher, with NULL" time="{duration}"/> - <testcase classname="global" name="AllOf matcher" time="{duration}"/> - <testcase classname="global" name="AnyOf matcher" time="{duration}"/> - <testcase classname="global" name="Equals" time="{duration}"/> - <testcase classname="global" name="Matchers can be (AllOf) composed with the && operator" time="{duration}"/> - <testcase classname="global" name="Matchers can be (AnyOf) composed with the || operator" time="{duration}"/> - <testcase classname="global" name="Matchers can be composed with both && and ||" time="{duration}"/> - <testcase classname="global" name="Matchers can be composed with both && and || - failing" time="{duration}"> - <failure message=""this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "random" )" type="CHECK_THAT"> -MiscTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="global" name="Matchers can be negated (Not) with the ! operator" time="{duration}"/> - <testcase classname="global" name="Matchers can be negated (Not) with the ! operator - failing" time="{duration}"> - <failure message=""this string contains 'abc' as a substring" not contains: "substring"" type="CHECK_THAT"> -MiscTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="global" name="Factorials are computed" time="{duration}"/> - <testcase classname="global" name="Nice descriptive name" time="{duration}"/> - <testcase classname="vectors can be sized and resized" name="root" time="{duration}"/> - <testcase classname="vectors can be sized and resized" name="resizing bigger changes size and capacity" time="{duration}"/> - <testcase classname="vectors can be sized and resized" name="resizing smaller changes size but not capacity" time="{duration}"/> - <testcase classname="vectors can be sized and resized" name="resizing smaller changes size but not capacity/We can use the 'swap trick' to reset the capacity" time="{duration}"/> - <testcase classname="vectors can be sized and resized" name="reserving bigger changes capacity but not size" time="{duration}"/> - <testcase classname="vectors can be sized and resized" name="reserving smaller does not change size or capacity" time="{duration}"/> - <testcase classname="A couple of nested sections followed by a failure" name="root" time="{duration}"> - <failure type="FAIL"> -to infinity and beyond + <testcase classname="more nested SECTION tests" name="s2/s1" time="{duration}"> + <failure message="1 == 2" type="REQUIRE"> MiscTests.cpp:<line number> </failure> </testcase> - <testcase classname="A couple of nested sections followed by a failure" name="Outer/Inner" time="{duration}"/> + <testcase classname="more nested SECTION tests" name="s1/s3" time="{duration}"/> + <testcase classname="more nested SECTION tests" name="s1/s4" time="{duration}"/> + <testcase classname="nested SECTION tests" name="s1" time="{duration}"/> + <testcase classname="nested SECTION tests" name="s1/s2" time="{duration}"/> + <testcase classname="global" name="non streamable - with conv. op" time="{duration}"/> <testcase classname="global" name="not allowed" time="{duration}"/> - <testcase classname="global" name="Tabs and newlines show in output" time="{duration}"> - <failure message=""if ($b == 10) { - $a = 20; -}" -== -"if ($b == 10) { - $a = 20; -} -"" type="CHECK"> -MiscTests.cpp:<line number> - </failure> - </testcase> - <testcase classname="global" name="toString on const wchar_t const pointer returns the string contents" time="{duration}"/> - <testcase classname="global" name="toString on const wchar_t pointer returns the string contents" time="{duration}"/> - <testcase classname="global" name="toString on wchar_t const pointer returns the string contents" time="{duration}"/> - <testcase classname="global" name="toString on wchar_t returns the string contents" time="{duration}"/> - <testcase classname="XmlEncode" name="normal string" time="{duration}"/> - <testcase classname="XmlEncode" name="empty string" time="{duration}"/> - <testcase classname="XmlEncode" name="string with ampersand" time="{duration}"/> - <testcase classname="XmlEncode" name="string with less-than" time="{duration}"/> - <testcase classname="XmlEncode" name="string with greater-than" time="{duration}"/> - <testcase classname="XmlEncode" name="string with quotes" time="{duration}"/> - <testcase classname="XmlEncode" name="string with control char (1)" time="{duration}"/> - <testcase classname="XmlEncode" name="string with control char (x7F)" time="{duration}"/> - <testcase classname="global" name="long long" time="{duration}"/> - <testcase classname="global" name="This test 'should' fail but doesn't" time="{duration}"/> - <testcase classname="global" name="# A test name that starts with a #" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="default - no arguments" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="test lists/1 test" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="test lists/Specify one test case exclusion using exclude:" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="test lists/Specify one test case exclusion using ~" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="reporter/-r/console" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="reporter/-r/xml" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="reporter/-r xml and junit" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="reporter/--reporter/junit" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="debugger/-b" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="debugger/--break" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="abort/-a aborts after first failure" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="abort/-x 2 aborts after two failures" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="abort/-x must be greater than zero" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="abort/-x must be numeric" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="nothrow/-e" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="nothrow/--nothrow" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="output filename/-o filename" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="output filename/--out" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="combinations/Single character flags can be combined" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="use-colour/without option" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="use-colour/auto" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="use-colour/yes" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="use-colour/no" time="{duration}"/> - <testcase classname="Process can be configured on command line" name="use-colour/error" time="{duration}"/> - <testcase classname="Long strings can be wrapped" name="plain string/No wrapping" time="{duration}"/> - <testcase classname="Long strings can be wrapped" name="plain string/Wrapped once" time="{duration}"/> - <testcase classname="Long strings can be wrapped" name="plain string/Wrapped twice" time="{duration}"/> - <testcase classname="Long strings can be wrapped" name="plain string/Wrapped three times" time="{duration}"/> - <testcase classname="Long strings can be wrapped" name="plain string/Short wrap" time="{duration}"/> - <testcase classname="Long strings can be wrapped" name="plain string/As container" time="{duration}"/> - <testcase classname="Long strings can be wrapped" name="plain string/Indent first line differently" time="{duration}"/> - <testcase classname="Long strings can be wrapped" name="With newlines/No wrapping" time="{duration}"/> - <testcase classname="Long strings can be wrapped" name="With newlines/Trailing newline" time="{duration}"/> - <testcase classname="Long strings can be wrapped" name="With newlines/Wrapped once" time="{duration}"/> - <testcase classname="Long strings can be wrapped" name="With newlines/Wrapped twice" time="{duration}"/> - <testcase classname="Long strings can be wrapped" name="With tabs" time="{duration}"/> + <testcase classname="global" name="null strings" time="{duration}"/> + <testcase classname="global" name="pair<pair<int,const char *,pair<std::string,int> > -> toString" time="{duration}"/> + <testcase classname="global" name="pointer to class" time="{duration}"/> + <testcase classname="random SECTION tests" name="s1" time="{duration}"/> + <testcase classname="random SECTION tests" name="s2" time="{duration}"/> <testcase classname="replaceInPlace" name="replace single char" time="{duration}"/> <testcase classname="replaceInPlace" name="replace two chars" time="{duration}"/> <testcase classname="replaceInPlace" name="replace first char" time="{duration}"/> @@ -545,141 +625,51 @@ MiscTests.cpp:<line number> <testcase classname="replaceInPlace" name="replace all chars" time="{duration}"/> <testcase classname="replaceInPlace" name="replace no chars" time="{duration}"/> <testcase classname="replaceInPlace" name="escape '" time="{duration}"/> - <testcase classname="global" name="Strings can be rendered with colour" time="{duration}"> - <system-out> -hello -hello - </system-out> - </testcase> - <testcase classname="global" name="Text can be formatted using the Text class" time="{duration}"/> - <testcase classname="global" name="Long text is truncted" time="{duration}"/> - <testcase classname="global" name="ManuallyRegistered" time="{duration}"/> - <testcase classname="global" name="Parsing a std::pair" time="{duration}"/> - <testcase classname="global" name="Where there is more to the expression after the RHS" time="{duration}"/> - <testcase classname="global" name="Where the LHS is not a simple value" time="{duration}"/> - <testcase classname="global" name="A failing expression with a non streamable type is still captured" time="{duration}"> - <failure message="0x<hex digits> == 0x<hex digits>" type="CHECK"> -TrickyTests.cpp:<line number> + <testcase classname="global" name="send a single char to INFO" time="{duration}"> + <failure message="false" type="REQUIRE"> +3 +MiscTests.cpp:<line number> </failure> - <failure message="{?} == {?}" type="CHECK"> -TrickyTests.cpp:<line number> + </testcase> + <testcase classname="global" name="sends information to INFO" time="{duration}"> + <failure message="false" type="REQUIRE"> +hi +i := 7 +MessageTests.cpp:<line number> </failure> </testcase> + <testcase classname="global" name="std::pair<int,const std::string> -> toString" time="{duration}"/> + <testcase classname="global" name="std::pair<int,std::string> -> toString" time="{duration}"/> + <testcase classname="global" name="std::vector<std::pair<std::string,int> > -> toString" time="{duration}"/> <testcase classname="global" name="string literals of different sizes can be compared" time="{duration}"> <failure message=""first" == "second"" type="REQUIRE"> TrickyTests.cpp:<line number> </failure> </testcase> - <testcase classname="global" name="An expression with side-effects should only be evaluated once" time="{duration}"/> - <testcase classname="global" name="Operators at different namespace levels not hijacked by Koenig lookup" time="{duration}"/> - <testcase classname="global" name="Demonstrate that a non-const == is not used" time="{duration}"/> - <testcase classname="global" name="Test enum bit values" time="{duration}"/> - <testcase classname="global" name="boolean member" time="{duration}"/> - <testcase classname="(unimplemented) static bools can be evaluated" name="compare to true" time="{duration}"/> - <testcase classname="(unimplemented) static bools can be evaluated" name="compare to false" time="{duration}"/> - <testcase classname="(unimplemented) static bools can be evaluated" name="negation" time="{duration}"/> - <testcase classname="(unimplemented) static bools can be evaluated" name="double negation" time="{duration}"/> - <testcase classname="(unimplemented) static bools can be evaluated" name="direct" time="{duration}"/> - <testcase classname="global" name="Objects that evaluated in boolean contexts can be checked" time="{duration}"/> - <testcase classname="Assertions then sections" name="root" time="{duration}"/> - <testcase classname="Assertions then sections" name="A section" time="{duration}"/> - <testcase classname="Assertions then sections" name="A section/Another section" time="{duration}"/> - <testcase classname="Assertions then sections" name="A section/Another other section" time="{duration}"/> - <testcase classname="global" name="non streamable - with conv. op" time="{duration}"/> - <testcase classname="global" name="Comparing function pointers" time="{duration}"/> - <testcase classname="global" name="Comparing member function pointers" time="{duration}"/> - <testcase classname="global" name="pointer to class" time="{duration}"/> - <testcase classname="global" name="null_ptr" time="{duration}"/> - <testcase classname="global" name="X/level/0/a" time="{duration}"/> - <testcase classname="global" name="X/level/0/b" time="{duration}"/> - <testcase classname="global" name="X/level/1/a" time="{duration}"/> - <testcase classname="global" name="X/level/1/b" time="{duration}"/> - <testcase classname="global" name="toString( has_toString )" time="{duration}"/> + <testcase classname="global" name="toString on const wchar_t const pointer returns the string contents" time="{duration}"/> + <testcase classname="global" name="toString on const wchar_t pointer returns the string contents" time="{duration}"/> + <testcase classname="global" name="toString on wchar_t const pointer returns the string contents" time="{duration}"/> + <testcase classname="global" name="toString on wchar_t returns the string contents" time="{duration}"/> <testcase classname="global" name="toString( has_maker )" time="{duration}"/> <testcase classname="global" name="toString( has_maker_and_toString )" time="{duration}"/> - <testcase classname="global" name="toString( vectors<has_toString )" time="{duration}"/> + <testcase classname="global" name="toString( has_toString )" time="{duration}"/> <testcase classname="global" name="toString( vectors<has_maker )" time="{duration}"/> - <testcase classname="global" name="toString( vectors<has_maker_and_toString )" time="{duration}"/> - <testcase classname="Tracker" name="root" time="{duration}"/> - <testcase classname="Tracker" name="successfully close one section" time="{duration}"/> - <testcase classname="Tracker" name="fail one section" time="{duration}"/> - <testcase classname="Tracker" name="fail one section/re-enter after failed section" time="{duration}"/> - <testcase classname="Tracker" name="fail one section/re-enter after failed section and find next section" time="{duration}"/> - <testcase classname="Tracker" name="successfully close one section, then find another" time="{duration}"/> - <testcase classname="Tracker" name="successfully close one section, then find another/Re-enter - skips S1 and enters S2" time="{duration}"/> - <testcase classname="Tracker" name="successfully close one section, then find another/Re-enter - skips S1 and enters S2/Successfully close S2" time="{duration}"/> - <testcase classname="Tracker" name="successfully close one section, then find another/Re-enter - skips S1 and enters S2/fail S2" time="{duration}"/> - <testcase classname="Tracker" name="open a nested section" time="{duration}"/> - <testcase classname="Tracker" name="start a generator" time="{duration}"/> - <testcase classname="Tracker" name="start a generator/close outer section" time="{duration}"/> - <testcase classname="Tracker" name="start a generator/close outer section/Re-enter for second generation" time="{duration}"/> - <testcase classname="Tracker" name="start a generator/Start a new inner section" time="{duration}"/> - <testcase classname="Tracker" name="start a generator/Start a new inner section/Re-enter for second generation" time="{duration}"/> - <testcase classname="Tracker" name="start a generator/Fail an inner section" time="{duration}"/> - <testcase classname="Tracker" name="start a generator/Fail an inner section/Re-enter for second generation" time="{duration}"/> - <testcase classname="global" name="std::pair<int,std::string> -> toString" time="{duration}"/> - <testcase classname="global" name="std::pair<int,const std::string> -> toString" time="{duration}"/> - <testcase classname="global" name="std::vector<std::pair<std::string,int> > -> toString" time="{duration}"/> - <testcase classname="global" name="pair<pair<int,const char *,pair<std::string,int> > -> toString" time="{duration}"/> + <testcase classname="global" name="toString(enum w/operator<<)" time="{duration}"/> + <testcase classname="global" name="toString(enum)" time="{duration}"/> <testcase classname="global" name="vector<int> -> toString" time="{duration}"/> <testcase classname="global" name="vector<string> -> toString" time="{duration}"/> - <testcase classname="global" name="vector<int,allocator> -> toString" time="{duration}"/> - <testcase classname="global" name="vec<vec<string,alloc>> -> toString" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Empty test spec should have no filters" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Test spec from empty string should have no filters" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Test spec from just a comma should have no filters" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Test spec from name should have one filter" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Test spec from quoted name should have one filter" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Test spec from name should have one filter" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Wildcard at the start" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Wildcard at the end" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Wildcard at both ends" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Redundant wildcard at the start" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Redundant wildcard at the end" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Redundant wildcard at both ends" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Wildcard at both ends, redundant at start" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Just wildcard" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Single tag" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Single tag, two matches" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Two tags" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Two tags, spare separated" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Wildcarded name and tag" time="{duration}"/> - <testcase classname="Parse test names and tags" name="Single tag exclusion" time="{duration}"/> - <testcase classname="Parse test names and tags" name="One tag exclusion and one tag inclusion" time="{duration}"/> - <testcase classname="Parse test names and tags" name="One tag exclusion and one wldcarded name inclusion" time="{duration}"/> - <testcase classname="Parse test names and tags" name="One tag exclusion, using exclude:, and one wldcarded name inclusion" time="{duration}"/> - <testcase classname="Parse test names and tags" name="name exclusion" time="{duration}"/> - <testcase classname="Parse test names and tags" name="wildcarded name exclusion" time="{duration}"/> - <testcase classname="Parse test names and tags" name="wildcarded name exclusion with tag inclusion" time="{duration}"/> - <testcase classname="Parse test names and tags" name="wildcarded name exclusion, using exclude:, with tag inclusion" time="{duration}"/> - <testcase classname="Parse test names and tags" name="two wildcarded names" time="{duration}"/> - <testcase classname="Parse test names and tags" name="empty tag" time="{duration}"/> - <testcase classname="Parse test names and tags" name="empty quoted name" time="{duration}"/> - <testcase classname="Parse test names and tags" name="quoted string followed by tag exclusion" time="{duration}"/> - <testcase classname="global" name="tuple<>" time="{duration}"/> - <testcase classname="global" name="tuple<int>" time="{duration}"/> - <testcase classname="global" name="tuple<float,int>" time="{duration}"/> - <testcase classname="global" name="tuple<string,string>" time="{duration}"/> - <testcase classname="global" name="tuple<tuple<int>,tuple<>,float>" time="{duration}"/> - <testcase classname="global" name="tuple<nullptr,int,const char *>" time="{duration}"/> - <testcase classname="Tag alias can be registered against tag patterns" name="The same tag alias can only be registered once" time="{duration}"/> - <testcase classname="Tag alias can be registered against tag patterns" name="Tag aliases must be of the form [@name]" time="{duration}"/> - <testcase classname="global" name="Anonymous test case 1" time="{duration}"/> - <testcase classname="global" name="Test case with one argument" time="{duration}"/> - <testcase classname="Variadic macros" name="Section with one argument" time="{duration}"/> - <testcase classname="Scenario: Do that thing with the thing" name="Given: This stuff exists/When: I do this/Then: it should do this" time="{duration}"/> - <testcase classname="Scenario: Do that thing with the thing" name="Given: This stuff exists/When: I do this/Then: it should do this/And: do that" time="{duration}"/> - <testcase classname="Scenario: Vector resizing affects size and capacity" name="Given: an empty vector" time="{duration}"/> - <testcase classname="Scenario: Vector resizing affects size and capacity" name="Given: an empty vector/When: it is made larger/Then: the size and capacity go up" time="{duration}"/> - <testcase classname="Scenario: Vector resizing affects size and capacity" name="Given: an empty vector/When: it is made larger/Then: the size and capacity go up/And when: it is made smaller again/Then: the size goes down but the capacity stays the same" time="{duration}"/> - <testcase classname="Scenario: Vector resizing affects size and capacity" name="Given: an empty vector/When: we reserve more space/Then: The capacity is increased but the size remains the same" time="{duration}"/> - <testcase classname="Scenario: This is a really long scenario name to see how the list command deals with wrapping" name="Given: A section name that is so long that it cannot fit in a single console width/When: The test headers are printed as part of the normal running of the scenario/Then: The, deliberately very long and overly verbose (you see what I did there?) section names must wrap, along with an indent" time="{duration}"/> - <testcase classname="Fixture" name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods/Given: No operations precede me" time="{duration}"/> - <testcase classname="Fixture" name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods/Given: No operations precede me/When: We get the count/Then: Subsequently values are higher" time="{duration}"/> + <testcase classname="vectors can be sized and resized" name="root" time="{duration}"/> + <testcase classname="vectors can be sized and resized" name="resizing bigger changes size and capacity" time="{duration}"/> + <testcase classname="vectors can be sized and resized" name="resizing smaller changes size but not capacity" time="{duration}"/> + <testcase classname="vectors can be sized and resized" name="resizing smaller changes size but not capacity/We can use the 'swap trick' to reset the capacity" time="{duration}"/> + <testcase classname="vectors can be sized and resized" name="reserving bigger changes capacity but not size" time="{duration}"/> + <testcase classname="vectors can be sized and resized" name="reserving smaller does not change size or capacity" time="{duration}"/> + <testcase classname="xmlentitycheck" name="embedded xml" time="{duration}"/> + <testcase classname="xmlentitycheck" name="encoded chars" time="{duration}"/> <system-out> +A string sent directly to stdout Message from section one Message from section two -A string sent directly to stdout hello hello </system-out> diff --git a/3rdparty/catch/projects/SelfTest/Baselines/xml.sw.approved.txt b/3rdparty/catch/projects/SelfTest/Baselines/xml.sw.approved.txt index ed730bbdbde..dc192152a1a 100644 --- a/3rdparty/catch/projects/SelfTest/Baselines/xml.sw.approved.txt +++ b/3rdparty/catch/projects/SelfTest/Baselines/xml.sw.approved.txt @@ -1,331 +1,238 @@ <?xml version="1.1" encoding="UTF-8"?> -<Catch name="CatchSelfTest"> - <Group name="CatchSelfTest"> - <TestCase name="toString(enum)"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" > - <Original> - Catch::toString(e0) == "0" - </Original> - <Expanded> - "0" == "0" - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" > - <Original> - Catch::toString(e1) == "1" - </Original> - <Expanded> - "1" == "1" - </Expanded> - </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="toString(enum w/operator<<)"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" > - <Original> - Catch::toString(e0) == "E2{0}" - </Original> - <Expanded> - "E2{0}" == "E2{0}" - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" > - <Original> - Catch::toString(e1) == "E2{1}" - </Original> - <Expanded> - "E2{1}" == "E2{1}" - </Expanded> - </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="toString(enum class)"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" > - <Original> - Catch::toString(e0) == "0" - </Original> - <Expanded> - "0" == "0" - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" > - <Original> - Catch::toString(e1) == "1" - </Original> - <Expanded> - "1" == "1" - </Expanded> - </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="toString(enum class w/operator<<)"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" > - <Original> - Catch::toString(e0) == "E2/V0" - </Original> - <Expanded> - "E2/V0" == "E2/V0" - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" > - <Original> - Catch::toString(e1) == "E2/V1" - </Original> - <Expanded> - "E2/V1" == "E2/V1" - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" > - <Original> - Catch::toString(e3) == "Unknown enum value 10" - </Original> - <Expanded> - "Unknown enum value 10" -== -"Unknown enum value 10" - </Expanded> - </Expression> +<Catch name="<exe-name>"> + <Group name="<exe-name>"> + <TestCase name="# A test name that starts with a #"> <OverallResult success="true"/> </TestCase> - <TestCase name="Some simple comparisons between doubles"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <TestCase name="'Not' checks that should fail"> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - d == Approx( 1.23 ) + false != false </Original> <Expanded> - 1.23 == Approx( 1.23 ) + false != false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - d != Approx( 1.22 ) + true != true </Original> <Expanded> - 1.23 != Approx( 1.22 ) + true != true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - d != Approx( 1.24 ) + !true </Original> <Expanded> - 1.23 != Approx( 1.24 ) + false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <Expression success="false" type="CHECK_FALSE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - Approx( d ) == 1.23 + !true </Original> <Expanded> - Approx( 1.23 ) == 1.23 + !true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - Approx( d ) != 1.22 + !trueValue </Original> <Expanded> - Approx( 1.23 ) != 1.22 + false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <Expression success="false" type="CHECK_FALSE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - Approx( d ) != 1.24 + !trueValue </Original> <Expanded> - Approx( 1.23 ) != 1.24 + !true </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Approximate comparisons with different epsilons"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - d != Approx( 1.231 ) + !(1 == 1) </Original> <Expanded> - 1.23 != Approx( 1.231 ) + false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <Expression success="false" type="CHECK_FALSE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - d == Approx( 1.231 ).epsilon( 0.1 ) + !1 == 1 </Original> <Expanded> - 1.23 == Approx( 1.231 ) + !(1 == 1) </Expanded> </Expression> - <OverallResult success="true"/> + <OverallResult success="false"/> </TestCase> - <TestCase name="Approximate comparisons with floats"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > - <Original> - 1.23f == Approx( 1.23f ) - </Original> - <Expanded> - 1.23f == Approx( 1.2300000191 ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <TestCase name="'Not' checks that should succeed"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - 0.0f == Approx( 0.0f ) + false == false </Original> <Expanded> - 0.0f == Approx( 0.0 ) + false == false </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Approximate comparisons with ints"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - 1 == Approx( 1 ) + true == true </Original> <Expanded> - 1 == Approx( 1.0 ) + true == true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - 0 == Approx( 0 ) + !false </Original> <Expanded> - 0 == Approx( 0.0 ) + true </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Approximate comparisons with mixed numeric types"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <Expression success="true" type="REQUIRE_FALSE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - 1.0f == Approx( 1 ) + !false </Original> <Expanded> - 1.0f == Approx( 1.0 ) + !false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - 0 == Approx( dZero) + !falseValue </Original> <Expanded> - 0 == Approx( 0.0 ) + true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <Expression success="true" type="REQUIRE_FALSE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - 0 == Approx( dSmall ).epsilon( 0.001 ) + !falseValue </Original> <Expanded> - 0 == Approx( 0.00001 ) + !false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - 1.234f == Approx( dMedium ) + !(1 == 2) </Original> <Expanded> - 1.234f == Approx( 1.234 ) + true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <Expression success="true" type="REQUIRE_FALSE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - dMedium == Approx( 1.234f ) + !1 == 2 </Original> <Expanded> - 1.234 == Approx( 1.2339999676 ) + !(1 == 2) </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="Use a custom approx"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > - <Original> - d == approx( 1.23 ) - </Original> - <Expanded> - 1.23 == Approx( 1.23 ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > - <Original> - d == approx( 1.22 ) - </Original> - <Expanded> - 1.23 == Approx( 1.22 ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > - <Original> - d == approx( 1.24 ) - </Original> - <Expanded> - 1.23 == Approx( 1.24 ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > - <Original> - d != approx( 1.25 ) - </Original> - <Expanded> - 1.23 != Approx( 1.25 ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > - <Original> - approx( d ) == 1.23 - </Original> - <Expanded> - Approx( 1.23 ) == 1.23 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > - <Original> - approx( d ) == 1.22 - </Original> - <Expanded> - Approx( 1.23 ) == 1.22 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > - <Original> - approx( d ) == 1.24 - </Original> - <Expanded> - Approx( 1.23 ) == 1.24 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > - <Original> - approx( d ) != 1.25 - </Original> - <Expanded> - Approx( 1.23 ) != 1.25 - </Expanded> - </Expression> + <TestCase name="(unimplemented) static bools can be evaluated"> + <Section name="compare to true"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + is_true<true>::value == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + true == is_true<true>::value + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Section name="compare to false"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + is_true<false>::value == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + false == is_true<false>::value + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Section name="negation"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + !is_true<false>::value + </Original> + <Expanded> + true + </Expanded> + </Expression> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <Section name="double negation"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + !!is_true<true>::value + </Original> + <Expanded> + true + </Expanded> + </Expression> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <Section name="direct"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + is_true<true>::value + </Original> + <Expanded> + true + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE_FALSE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + !is_true<false>::value + </Original> + <Expanded> + !false + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> <OverallResult success="true"/> </TestCase> - <TestCase name="Approximate PI"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > - <Original> - divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) - </Original> - <Expanded> - 3.1428571429 == Approx( 3.141 ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" > + <TestCase name="A METHOD_AS_TEST_CASE based test run that fails"> + <Expression success="false" type="REQUIRE" filename="projects/<exe-name>/ClassTests.cpp" > <Original> - divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) + s == "world" </Original> <Expanded> - 3.1428571429 != Approx( 3.141 ) + "hello" == "world" </Expanded> </Expression> - <OverallResult success="true"/> + <OverallResult success="false"/> </TestCase> <TestCase name="A METHOD_AS_TEST_CASE based test run that succeeds"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ClassTests.cpp" > <Original> s == "hello" </Original> @@ -335,19 +242,19 @@ </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="A METHOD_AS_TEST_CASE based test run that fails"> - <Expression success="false" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" > + <TestCase name="A TEST_CASE_METHOD based test run that fails"> + <Expression success="false" type="REQUIRE" filename="projects/<exe-name>/ClassTests.cpp" > <Original> - s == "world" + m_a == 2 </Original> <Expanded> - "hello" == "world" + 1 == 2 </Expanded> </Expression> <OverallResult success="false"/> </TestCase> <TestCase name="A TEST_CASE_METHOD based test run that succeeds"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ClassTests.cpp" > <Original> m_a == 1 </Original> @@ -357,613 +264,392 @@ </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="A TEST_CASE_METHOD based test run that fails"> - <Expression success="false" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" > - <Original> - m_a == 2 - </Original> - <Expanded> - 1 == 2 - </Expanded> - </Expression> + <TestCase name="A couple of nested sections followed by a failure"> + <Section name="Outer"> + <Section name="Inner"> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <Failure> + to infinity and beyond + </Failure> <OverallResult success="false"/> </TestCase> - <TestCase name="Equality checks that should succeed"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.int_seven == 7 - </Original> - <Expanded> - 7 == 7 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.float_nine_point_one == Approx( 9.1f ) - </Original> - <Expanded> - 9.1f == Approx( 9.1000003815 ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.double_pi == Approx( 3.1415926535 ) - </Original> - <Expanded> - 3.1415926535 == Approx( 3.1415926535 ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.str_hello == "hello" - </Original> - <Expanded> - "hello" == "hello" - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <TestCase name="A failing expression with a non streamable type is still captured"> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/TrickyTests.cpp" > <Original> - "hello" == data.str_hello + &o1 == &o2 </Original> <Expanded> - "hello" == "hello" + 0x<hex digits> == 0x<hex digits> </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/TrickyTests.cpp" > <Original> - data.str_hello.size() == 5 + o1 == o2 </Original> <Expanded> - 5 == 5 + {?} == {?} </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <OverallResult success="false"/> + </TestCase> + <TestCase name="AllOf matcher"> + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - x == Approx( 1.3 ) + testStringForMatching(), AllOf( Catch::Contains( "string" ), Catch::Contains( "abc" ) ) </Original> <Expanded> - 1.3 == Approx( 1.3 ) + "this string contains 'abc' as a substring" ( contains: "string" and contains: "abc" ) </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="Equality checks that should fail"> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.int_seven == 6 - </Original> - <Expanded> - 7 == 6 - </Expanded> - </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.int_seven == 8 - </Original> - <Expanded> - 7 == 8 - </Expanded> - </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.int_seven == 0 - </Original> - <Expanded> - 7 == 0 - </Expanded> - </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.float_nine_point_one == Approx( 9.11f ) - </Original> - <Expanded> - 9.1f == Approx( 9.1099996567 ) - </Expanded> - </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.float_nine_point_one == Approx( 9.0f ) - </Original> - <Expanded> - 9.1f == Approx( 9.0 ) - </Expanded> - </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.float_nine_point_one == Approx( 1 ) - </Original> - <Expanded> - 9.1f == Approx( 1.0 ) - </Expanded> - </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.float_nine_point_one == Approx( 0 ) - </Original> - <Expanded> - 9.1f == Approx( 0.0 ) - </Expanded> - </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.double_pi == Approx( 3.1415 ) - </Original> - <Expanded> - 3.1415926535 == Approx( 3.1415 ) - </Expanded> - </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.str_hello == "goodbye" - </Original> - <Expanded> - "hello" == "goodbye" - </Expanded> - </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.str_hello == "hell" - </Original> - <Expanded> - "hello" == "hell" - </Expanded> - </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.str_hello == "hello1" - </Original> - <Expanded> - "hello" == "hello1" - </Expanded> - </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.str_hello.size() == 6 - </Original> - <Expanded> - 5 == 6 - </Expanded> - </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - x == Approx( 1.301 ) - </Original> - <Expanded> - 1.3 == Approx( 1.301 ) - </Expanded> - </Expression> + <TestCase name="An empty test with no assertions"> <OverallResult success="true"/> </TestCase> - <TestCase name="Inequality checks that should succeed"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.int_seven != 6 - </Original> - <Expanded> - 7 != 6 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.int_seven != 8 - </Original> - <Expanded> - 7 != 8 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.float_nine_point_one != Approx( 9.11f ) - </Original> - <Expanded> - 9.1f != Approx( 9.1099996567 ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.float_nine_point_one != Approx( 9.0f ) - </Original> - <Expanded> - 9.1f != Approx( 9.0 ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.float_nine_point_one != Approx( 1 ) - </Original> - <Expanded> - 9.1f != Approx( 1.0 ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.float_nine_point_one != Approx( 0 ) - </Original> - <Expanded> - 9.1f != Approx( 0.0 ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.double_pi != Approx( 3.1415 ) - </Original> - <Expanded> - 3.1415926535 != Approx( 3.1415 ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.str_hello != "goodbye" - </Original> - <Expanded> - "hello" != "goodbye" - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.str_hello != "hell" - </Original> - <Expanded> - "hello" != "hell" - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <TestCase name="An expression with side-effects should only be evaluated once"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > <Original> - data.str_hello != "hello1" + i++ == 7 </Original> <Expanded> - "hello" != "hello1" + 7 == 7 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > <Original> - data.str_hello.size() != 6 + i++ == 8 </Original> <Expanded> - 5 != 6 + 8 == 8 </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="Inequality checks that should fail"> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.int_seven != 7 - </Original> - <Expanded> - 7 != 7 - </Expanded> - </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.float_nine_point_one != Approx( 9.1f ) - </Original> - <Expanded> - 9.1f != Approx( 9.1000003815 ) - </Expanded> - </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.double_pi != Approx( 3.1415926535 ) - </Original> - <Expanded> - 3.1415926535 != Approx( 3.1415926535 ) - </Expanded> - </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <TestCase name="An unchecked exception reports the line of the last assertion"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> - data.str_hello != "hello" + 1 == 1 </Original> <Expanded> - "hello" != "hello" + 1 == 1 </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="false" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> - data.str_hello.size() != 5 + {Unknown expression after the reported line} </Original> <Expanded> - 5 != 5 + {Unknown expression after the reported line} </Expanded> + <Exception filename="projects/<exe-name>/ExceptionTests.cpp" > + unexpected exception + </Exception> </Expression> + <OverallResult success="false"/> + </TestCase> + <TestCase name="Anonymous test case 1"> <OverallResult success="true"/> </TestCase> - <TestCase name="Ordering comparison checks that should succeed"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.int_seven < 8 - </Original> - <Expanded> - 7 < 8 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.int_seven > 6 - </Original> - <Expanded> - 7 > 6 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.int_seven > 0 - </Original> - <Expanded> - 7 > 0 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.int_seven > -1 - </Original> - <Expanded> - 7 > -1 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.int_seven >= 7 - </Original> - <Expanded> - 7 >= 7 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.int_seven >= 6 - </Original> - <Expanded> - 7 >= 6 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.int_seven <= 7 - </Original> - <Expanded> - 7 <= 7 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.int_seven <= 8 - </Original> - <Expanded> - 7 <= 8 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - data.float_nine_point_one > 9 - </Original> - <Expanded> - 9.1f > 9 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <TestCase name="AnyOf matcher"> + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - data.float_nine_point_one < 10 + testStringForMatching(), AnyOf( Catch::Contains( "string" ), Catch::Contains( "not there" ) ) </Original> <Expanded> - 9.1f < 10 + "this string contains 'abc' as a substring" ( contains: "string" or contains: "not there" ) </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - data.float_nine_point_one < 9.2 + testStringForMatching(), AnyOf( Catch::Contains( "not there" ), Catch::Contains( "string" ) ) </Original> <Expanded> - 9.1f < 9.2 + "this string contains 'abc' as a substring" ( contains: "not there" or contains: "string" ) </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="Approximate PI"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - data.str_hello <= "hello" + divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 ) </Original> <Expanded> - "hello" <= "hello" + 3.1428571429 == Approx( 3.141 ) </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - data.str_hello >= "hello" + divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 ) </Original> <Expanded> - "hello" >= "hello" + 3.1428571429 != Approx( 3.141 ) </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="Approximate comparisons with different epsilons"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - data.str_hello < "hellp" + d != Approx( 1.231 ) </Original> <Expanded> - "hello" < "hellp" + 1.23 != Approx( 1.231 ) </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - data.str_hello < "zebra" + d == Approx( 1.231 ).epsilon( 0.1 ) </Original> <Expanded> - "hello" < "zebra" + 1.23 == Approx( 1.231 ) </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="Approximate comparisons with floats"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - data.str_hello > "hellm" + 1.23f == Approx( 1.23f ) </Original> <Expanded> - "hello" > "hellm" + 1.23f == Approx( 1.2300000191 ) </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - data.str_hello > "a" + 0.0f == Approx( 0.0f ) </Original> <Expanded> - "hello" > "a" + 0.0f == Approx( 0.0 ) </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="Ordering comparison checks that should fail"> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <TestCase name="Approximate comparisons with ints"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - data.int_seven > 7 + 1 == Approx( 1 ) </Original> <Expanded> - 7 > 7 + 1 == Approx( 1.0 ) </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - data.int_seven < 7 + 0 == Approx( 0 ) </Original> <Expanded> - 7 < 7 + 0 == Approx( 0.0 ) </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="Approximate comparisons with mixed numeric types"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - data.int_seven > 8 + 1.0f == Approx( 1 ) </Original> <Expanded> - 7 > 8 + 1.0f == Approx( 1.0 ) </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - data.int_seven < 6 + 0 == Approx( dZero) </Original> <Expanded> - 7 < 6 + 0 == Approx( 0.0 ) </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - data.int_seven < 0 + 0 == Approx( dSmall ).epsilon( 0.001 ) </Original> <Expanded> - 7 < 0 + 0 == Approx( 0.00001 ) </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - data.int_seven < -1 + 1.234f == Approx( dMedium ) </Original> <Expanded> - 7 < -1 + 1.234f == Approx( 1.234 ) </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - data.int_seven >= 8 + dMedium == Approx( 1.234f ) </Original> <Expanded> - 7 >= 8 + 1.234 == Approx( 1.2339999676 ) </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="Assertions then sections"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > <Original> - data.int_seven <= 6 + Catch::alwaysTrue() </Original> <Expanded> - 7 <= 6 + true </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Section name="A section"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + Catch::alwaysTrue() + </Original> + <Expanded> + true + </Expanded> + </Expression> + <Section name="Another section"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + Catch::alwaysTrue() + </Original> + <Expanded> + true + </Expanded> + </Expression> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > <Original> - data.float_nine_point_one < 9 + Catch::alwaysTrue() </Original> <Expanded> - 9.1f < 9 + true </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Section name="A section"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + Catch::alwaysTrue() + </Original> + <Expanded> + true + </Expanded> + </Expression> + <Section name="Another other section"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + Catch::alwaysTrue() + </Original> + <Expanded> + true + </Expanded> + </Expression> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResult success="true"/> + </TestCase> + <TestCase name="Comparing function pointers"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > <Original> - data.float_nine_point_one > 10 + a </Original> <Expanded> - 9.1f > 10 + true </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > <Original> - data.float_nine_point_one > 9.2 + a == &foo </Original> <Expanded> - 9.1f > 9.2 + 0x<hex digits> == 0x<hex digits> </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="Comparing member function pointers"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TrickyTests.cpp" > <Original> - data.str_hello > "hello" + m == &S::f </Original> <Expanded> - "hello" > "hello" + 0x<hex digits> +== +0x<hex digits> </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="Comparisons between ints where one side is computed"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - data.str_hello < "hello" + 54 == 6*9 </Original> <Expanded> - "hello" < "hello" + 54 == 54 </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="Comparisons between unsigned ints and negative signed ints match c++ standard behaviour"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - data.str_hello > "hellp" + ( -1 > 2u ) </Original> <Expanded> - "hello" > "hellp" + true </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - data.str_hello > "z" + -1 > 2u </Original> <Expanded> - "hello" > "z" + -1 > 2 </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - data.str_hello < "hellm" + ( 2u < -1 ) </Original> <Expanded> - "hello" < "hellm" + true </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - data.str_hello < "a" + 2u < -1 </Original> <Expanded> - "hello" < "a" + 2 < -1 </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - data.str_hello >= "z" + ( minInt > 2u ) </Original> <Expanded> - "hello" >= "z" + true </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - data.str_hello <= "a" + minInt > 2u </Original> <Expanded> - "hello" <= "a" + -2147483648 > 2 </Expanded> </Expression> - <OverallResult success="false"/> + <OverallResult success="true"/> </TestCase> <TestCase name="Comparisons with int literals don't warn when mixing signed/ unsigned"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> i == 1 </Original> @@ -971,7 +657,7 @@ 1 == 1 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> ui == 2 </Original> @@ -979,7 +665,7 @@ 2 == 2 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> l == 3 </Original> @@ -987,7 +673,7 @@ 3 == 3 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> ul == 4 </Original> @@ -995,7 +681,7 @@ 4 == 4 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> c == 5 </Original> @@ -1003,7 +689,7 @@ 5 == 5 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> uc == 6 </Original> @@ -1011,7 +697,7 @@ 6 == 6 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> 1 == i </Original> @@ -1019,7 +705,7 @@ 1 == 1 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> 2 == ui </Original> @@ -1027,7 +713,7 @@ 2 == 2 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> 3 == l </Original> @@ -1035,7 +721,7 @@ 3 == 3 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> 4 == ul </Original> @@ -1043,7 +729,7 @@ 4 == 4 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> 5 == c </Original> @@ -1051,7 +737,7 @@ 5 == 5 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> 6 == uc </Original> @@ -1059,7 +745,7 @@ 6 == 6 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> (std::numeric_limits<unsigned long>::max)() > ul </Original> @@ -1071,541 +757,275 @@ </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="comparisons between int variables"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - long_var == unsigned_char_var - </Original> - <Expanded> - 1 == 1 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - long_var == unsigned_short_var - </Original> - <Expanded> - 1 == 1 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - long_var == unsigned_int_var - </Original> - <Expanded> - 1 == 1 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <TestCase name="Contains string matcher"> + <Expression success="false" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - long_var == unsigned_long_var + testStringForMatching(), Contains( "not there" ) </Original> <Expanded> - 1 == 1 + "this string contains 'abc' as a substring" contains: "not there" </Expanded> </Expression> - <OverallResult success="true"/> + <OverallResult success="false"/> </TestCase> - <TestCase name="comparisons between const int variables"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - unsigned_char_var == 1 - </Original> - <Expanded> - 1 == 1 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - unsigned_short_var == 1 - </Original> - <Expanded> - 1 == 1 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - unsigned_int_var == 1 - </Original> - <Expanded> - 1 == 1 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <TestCase name="Custom exceptions can be translated when testing for nothrow"> + <Expression success="false" type="REQUIRE_NOTHROW" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> - unsigned_long_var == 1 + throwCustom() </Original> <Expanded> - 1 == 1 + throwCustom() </Expanded> + <Exception filename="projects/<exe-name>/ExceptionTests.cpp" > + custom exception - not std + </Exception> </Expression> - <OverallResult success="true"/> + <OverallResult success="false"/> </TestCase> - <TestCase name="Comparisons between unsigned ints and negative signed ints match c++ standard behaviour"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - ( -1 > 2u ) - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - -1 > 2u - </Original> - <Expanded> - -1 > 2 - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - ( 2u < -1 ) - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - 2u < -1 - </Original> - <Expanded> - 2 < -1 - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - ( minInt > 2u ) - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <TestCase name="Custom exceptions can be translated when testing for throwing as something else"> + <Expression success="false" type="REQUIRE_THROWS_AS" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> - minInt > 2u + throwCustom() </Original> <Expanded> - -2147483648 > 2 + throwCustom() </Expanded> + <Exception filename="projects/<exe-name>/ExceptionTests.cpp" > + custom exception - not std + </Exception> </Expression> - <OverallResult success="true"/> + <OverallResult success="false"/> </TestCase> - <TestCase name="Comparisons between ints where one side is computed"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - 54 == 6*9 - </Original> - <Expanded> - 54 == 54 - </Expanded> - </Expression> - <OverallResult success="true"/> + <TestCase name="Custom std-exceptions can be custom translated"> + <Exception filename="projects/<exe-name>/ExceptionTests.cpp" > + custom std exception + </Exception> + <OverallResult success="false"/> </TestCase> - <TestCase name="Pointers can be compared to null"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - p == nullptr - </Original> - <Expanded> - NULL == nullptr - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - p == pNULL - </Original> - <Expanded> - NULL == NULL - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - p != nullptr - </Original> - <Expanded> - 0x<hex digits> != nullptr - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - cp != nullptr - </Original> - <Expanded> - 0x<hex digits> != nullptr - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - cpc != nullptr - </Original> - <Expanded> - 0x<hex digits> != nullptr - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - returnsNull() == nullptr - </Original> - <Expanded> - {null string} == nullptr - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - returnsConstNull() == nullptr - </Original> - <Expanded> - {null string} == nullptr - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <TestCase name="Demonstrate that a non-const == is not used"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > <Original> - nullptr != p + t == 1u </Original> <Expanded> - nullptr != 0x<hex digits> + {?} == 1 </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="'Not' checks that should succeed"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - false == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - true == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - !false - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - !false - </Original> - <Expanded> - !false - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > - <Original> - !falseValue - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/ConditionTests.cpp" > + <TestCase name="EndsWith string matcher"> + <Expression success="false" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - !falseValue + testStringForMatching(), EndsWith( "this" ) </Original> <Expanded> - !false + "this string contains 'abc' as a substring" ends with: "this" </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" > + <OverallResult success="false"/> + </TestCase> + <TestCase name="Equality checks that should fail"> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - !(1 == 2) + data.int_seven == 6 </Original> <Expanded> - true + 7 == 6 </Expanded> </Expression> - <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - !1 == 2 + data.int_seven == 8 </Original> <Expanded> - !(1 == 2) + 7 == 8 </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="'Not' checks that should fail"> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - false != false + data.int_seven == 0 </Original> <Expanded> - false != false + 7 == 0 </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - true != true + data.float_nine_point_one == Approx( 9.11f ) </Original> <Expanded> - true != true + 9.1f == Approx( 9.1099996567 ) </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - !true + data.float_nine_point_one == Approx( 9.0f ) </Original> <Expanded> - false + 9.1f == Approx( 9.0 ) </Expanded> </Expression> - <Expression success="false" type="CHECK_FALSE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - !true + data.float_nine_point_one == Approx( 1 ) </Original> <Expanded> - !true + 9.1f == Approx( 1.0 ) </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - !trueValue + data.float_nine_point_one == Approx( 0 ) </Original> <Expanded> - false + 9.1f == Approx( 0.0 ) </Expanded> </Expression> - <Expression success="false" type="CHECK_FALSE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - !trueValue + data.double_pi == Approx( 3.1415 ) </Original> <Expanded> - !true + 3.1415926535 == Approx( 3.1415 ) </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - !(1 == 1) + data.str_hello == "goodbye" </Original> <Expanded> - false + "hello" == "goodbye" </Expanded> </Expression> - <Expression success="false" type="CHECK_FALSE" filename="projects/SelfTest/ConditionTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - !1 == 1 + data.str_hello == "hell" </Original> <Expanded> - !(1 == 1) + "hello" == "hell" </Expanded> </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="When checked exceptions are thrown they can be expected or unexpected"> - <Expression success="true" type="REQUIRE_THROWS_AS" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - thisThrows() + data.str_hello == "hello1" </Original> <Expanded> - thisThrows() + "hello" == "hello1" </Expanded> </Expression> - <Expression success="true" type="REQUIRE_NOTHROW" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - thisDoesntThrow() + data.str_hello.size() == 6 </Original> <Expanded> - thisDoesntThrow() + 5 == 6 </Expanded> </Expression> - <Expression success="true" type="REQUIRE_THROWS" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - thisThrows() + x == Approx( 1.301 ) </Original> <Expanded> - thisThrows() + 1.3 == Approx( 1.301 ) </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="Expected exceptions that don't throw or unexpected exceptions fail the test"> - <Expression success="false" type="CHECK_THROWS_AS" filename="projects/SelfTest/ExceptionTests.cpp" > - <Original> - thisThrows() - </Original> - <Expanded> - thisThrows() - </Expanded> - <Exception filename="projects/SelfTest/ExceptionTests.cpp" > - expected exception - </Exception> - </Expression> - <Expression success="false" type="CHECK_THROWS_AS" filename="projects/SelfTest/ExceptionTests.cpp" > + <TestCase name="Equality checks that should succeed"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - thisDoesntThrow() + data.int_seven == 7 </Original> <Expanded> - thisDoesntThrow() + 7 == 7 </Expanded> </Expression> - <Expression success="false" type="CHECK_NOTHROW" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - thisThrows() + data.float_nine_point_one == Approx( 9.1f ) </Original> <Expanded> - thisThrows() + 9.1f == Approx( 9.1000003815 ) </Expanded> - <Exception filename="projects/SelfTest/ExceptionTests.cpp" > - expected exception - </Exception> </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="When unchecked exceptions are thrown directly they are always failures"> - <Exception filename="projects/SelfTest/ExceptionTests.cpp" > - unexpected exception - </Exception> - <OverallResult success="false"/> - </TestCase> - <TestCase name="An unchecked exception reports the line of the last assertion"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - 1 == 1 + data.double_pi == Approx( 3.1415926535 ) </Original> <Expanded> - 1 == 1 + 3.1415926535 == Approx( 3.1415926535 ) </Expanded> </Expression> - <Expression success="false" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - {Unknown expression after the reported line} + data.str_hello == "hello" </Original> <Expanded> - {Unknown expression after the reported line} + "hello" == "hello" </Expanded> - <Exception filename="projects/SelfTest/ExceptionTests.cpp" > - unexpected exception - </Exception> </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="When unchecked exceptions are thrown from sections they are always failures"> - <Section name="section name"> - <Exception filename="projects/SelfTest/ExceptionTests.cpp" > - unexpected exception - </Exception> - <OverallResults successes="0" failures="1" expectedFailures="0"/> - </Section> - <OverallResult success="false"/> - </TestCase> - <TestCase name="When unchecked exceptions are thrown from functions they are always failures"> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - thisThrows() == 0 + "hello" == data.str_hello </Original> <Expanded> - thisThrows() == 0 + "hello" == "hello" </Expanded> - <Exception filename="projects/SelfTest/ExceptionTests.cpp" > - expected exception - </Exception> </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="When unchecked exceptions are thrown during a REQUIRE the test should abort fail"> - <Expression success="false" type="REQUIRE" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - thisThrows() == 0 + data.str_hello.size() == 5 </Original> <Expanded> - thisThrows() == 0 + 5 == 5 </Expanded> - <Exception filename="projects/SelfTest/ExceptionTests.cpp" > - expected exception - </Exception> </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="When unchecked exceptions are thrown during a CHECK the test should abort and fail"> - <Expression success="false" type="CHECK" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - thisThrows() == 0 + x == Approx( 1.3 ) </Original> <Expanded> - thisThrows() == 0 + 1.3 == Approx( 1.3 ) </Expanded> - <Exception filename="projects/SelfTest/ExceptionTests.cpp" > - expected exception - </Exception> </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="When unchecked exceptions are thrown, but caught, they do not affect the test"> <OverallResult success="true"/> </TestCase> - <TestCase name="Non-std exceptions can be translated"> - <Exception filename="projects/SelfTest/ExceptionTests.cpp" > - custom exception - </Exception> - <OverallResult success="false"/> - </TestCase> - <TestCase name="Custom std-exceptions can be custom translated"> - <Exception filename="projects/SelfTest/ExceptionTests.cpp" > - custom std exception - </Exception> - <OverallResult success="false"/> - </TestCase> - <TestCase name="Custom exceptions can be translated when testing for nothrow"> - <Expression success="false" type="REQUIRE_NOTHROW" filename="projects/SelfTest/ExceptionTests.cpp" > + <TestCase name="Equals"> + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - throwCustom() + testStringForMatching(), Equals( "this string contains 'abc' as a substring" ) </Original> <Expanded> - throwCustom() + "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring" </Expanded> - <Exception filename="projects/SelfTest/ExceptionTests.cpp" > - custom exception - not std - </Exception> </Expression> - <OverallResult success="false"/> + <OverallResult success="true"/> </TestCase> - <TestCase name="Custom exceptions can be translated when testing for throwing as something else"> - <Expression success="false" type="REQUIRE_THROWS_AS" filename="projects/SelfTest/ExceptionTests.cpp" > + <TestCase name="Equals string matcher"> + <Expression success="false" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - throwCustom() + testStringForMatching(), Equals( "something else" ) </Original> <Expanded> - throwCustom() + "this string contains 'abc' as a substring" equals: "something else" </Expanded> - <Exception filename="projects/SelfTest/ExceptionTests.cpp" > - custom exception - not std - </Exception> </Expression> <OverallResult success="false"/> </TestCase> - <TestCase name="Unexpected exceptions can be translated"> - <Exception filename="projects/SelfTest/ExceptionTests.cpp" > - 3.14 - </Exception> - <OverallResult success="false"/> - </TestCase> - <TestCase name="NotImplemented exception"> - <Expression success="true" type="REQUIRE_THROWS" filename="projects/SelfTest/ExceptionTests.cpp" > + <TestCase name="Equals string matcher, with NULL"> + <Expression success="true" type="REQUIRE_THAT" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - thisFunctionNotImplemented( 7 ) + "", Equals(0) </Original> <Expanded> - thisFunctionNotImplemented( 7 ) + "" equals: "" </Expanded> </Expression> <OverallResult success="true"/> </TestCase> <TestCase name="Exception messages can be tested for"> <Section name="exact match"> - <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> thisThrows(), "expected exception" </Original> @@ -1616,7 +1036,7 @@ <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> <Section name="different case"> - <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No ) </Original> @@ -1627,7 +1047,7 @@ <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> <Section name="wildcarded"> - <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> thisThrows(), StartsWith( "expected" ) </Original> @@ -1635,7 +1055,7 @@ thisThrows(), StartsWith( "expected" ) </Expanded> </Expression> - <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> thisThrows(), EndsWith( "exception" ) </Original> @@ -1643,7 +1063,7 @@ thisThrows(), EndsWith( "exception" ) </Expanded> </Expression> - <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> thisThrows(), Contains( "except" ) </Original> @@ -1651,7 +1071,7 @@ thisThrows(), Contains( "except" ) </Expanded> </Expression> - <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> thisThrows(), Contains( "exCept", Catch::CaseSensitive::No ) </Original> @@ -1663,27 +1083,113 @@ </Section> <OverallResult success="true"/> </TestCase> - <TestCase name="Mismatching exception messages failing the test"> - <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" > + <TestCase name="Expected exceptions that don't throw or unexpected exceptions fail the test"> + <Expression success="false" type="CHECK_THROWS_AS" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> - thisThrows(), "expected exception" + thisThrows() </Original> <Expanded> - thisThrows(), "expected exception" + thisThrows() </Expanded> + <Exception filename="projects/<exe-name>/ExceptionTests.cpp" > + expected exception + </Exception> </Expression> - <Expression success="false" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" > + <Expression success="false" type="CHECK_THROWS_AS" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> - thisThrows(), "should fail" + thisDoesntThrow() </Original> <Expanded> - expected exception + thisDoesntThrow() </Expanded> </Expression> + <Expression success="false" type="CHECK_NOTHROW" filename="projects/<exe-name>/ExceptionTests.cpp" > + <Original> + thisThrows() + </Original> + <Expanded> + thisThrows() + </Expanded> + <Exception filename="projects/<exe-name>/ExceptionTests.cpp" > + expected exception + </Exception> + </Expression> + <OverallResult success="false"/> + </TestCase> + <TestCase name="FAIL aborts the test"> + <Failure> + This is a failure + </Failure> + <OverallResult success="false"/> + </TestCase> + <TestCase name="FAIL does not require an argument"> + <Failure/> <OverallResult success="false"/> </TestCase> + <TestCase name="Factorials are computed"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + Factorial(0) == 1 + </Original> + <Expanded> + 1 == 1 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + Factorial(1) == 1 + </Original> + <Expanded> + 1 == 1 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + Factorial(2) == 2 + </Original> + <Expanded> + 2 == 2 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + Factorial(3) == 6 + </Original> + <Expanded> + 6 == 6 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + Factorial(10) == 3628800 + </Original> + <Expanded> + 3628800 (0x<hex digits>) == 3628800 (0x<hex digits>) + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="Generator over a range of pairs"> + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > + <Original> + i->first == i->second-1 + </Original> + <Expanded> + 0 == 0 + </Expanded> + </Expression> + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > + <Original> + i->first == i->second-1 + </Original> + <Expanded> + 2 == 2 + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> <TestCase name="Generators over two ranges"> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1691,7 +1197,7 @@ 2 == 2 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1699,7 +1205,7 @@ 200 == 200 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1707,7 +1213,7 @@ 4 == 4 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1715,7 +1221,7 @@ 200 == 200 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1723,7 +1229,7 @@ 6 == 6 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1731,7 +1237,7 @@ 200 == 200 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1739,7 +1245,7 @@ 8 == 8 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1747,7 +1253,7 @@ 200 == 200 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1755,7 +1261,7 @@ 10 == 10 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1763,7 +1269,7 @@ 200 == 200 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1771,7 +1277,7 @@ 30 == 30 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1779,7 +1285,7 @@ 200 == 200 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1787,7 +1293,7 @@ 40 == 40 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1795,7 +1301,7 @@ 200 == 200 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1803,7 +1309,7 @@ 42 == 42 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1811,7 +1317,7 @@ 200 == 200 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1819,7 +1325,7 @@ 72 == 72 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1827,7 +1333,7 @@ 200 == 200 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1835,7 +1341,7 @@ 2 == 2 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1843,7 +1349,7 @@ 202 == 202 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1851,7 +1357,7 @@ 4 == 4 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1859,7 +1365,7 @@ 202 == 202 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1867,7 +1373,7 @@ 6 == 6 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1875,7 +1381,7 @@ 202 == 202 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1883,7 +1389,7 @@ 8 == 8 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1891,7 +1397,7 @@ 202 == 202 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1899,7 +1405,7 @@ 10 == 10 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1907,7 +1413,7 @@ 202 == 202 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1915,7 +1421,7 @@ 30 == 30 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1923,7 +1429,7 @@ 202 == 202 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1931,7 +1437,7 @@ 40 == 40 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1939,7 +1445,7 @@ 202 == 202 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1947,7 +1453,7 @@ 42 == 42 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1955,7 +1461,7 @@ 202 == 202 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1963,7 +1469,7 @@ 72 == 72 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1971,7 +1477,7 @@ 202 == 202 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1979,7 +1485,7 @@ 2 == 2 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -1987,7 +1493,7 @@ 204 == 204 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -1995,7 +1501,7 @@ 4 == 4 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2003,7 +1509,7 @@ 204 == 204 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2011,7 +1517,7 @@ 6 == 6 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2019,7 +1525,7 @@ 204 == 204 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2027,7 +1533,7 @@ 8 == 8 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2035,7 +1541,7 @@ 204 == 204 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2043,7 +1549,7 @@ 10 == 10 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2051,7 +1557,7 @@ 204 == 204 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2059,7 +1565,7 @@ 30 == 30 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2067,7 +1573,7 @@ 204 == 204 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2075,7 +1581,7 @@ 40 == 40 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2083,7 +1589,7 @@ 204 == 204 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2091,7 +1597,7 @@ 42 == 42 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2099,7 +1605,7 @@ 204 == 204 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2107,7 +1613,7 @@ 72 == 72 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2115,7 +1621,7 @@ 204 == 204 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2123,7 +1629,7 @@ 2 == 2 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2131,7 +1637,7 @@ 206 == 206 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2139,7 +1645,7 @@ 4 == 4 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2147,7 +1653,7 @@ 206 == 206 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2155,7 +1661,7 @@ 6 == 6 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2163,7 +1669,7 @@ 206 == 206 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2171,7 +1677,7 @@ 8 == 8 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2179,7 +1685,7 @@ 206 == 206 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2187,7 +1693,7 @@ 10 == 10 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2195,7 +1701,7 @@ 206 == 206 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2203,7 +1709,7 @@ 30 == 30 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2211,7 +1717,7 @@ 206 == 206 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2219,7 +1725,7 @@ 40 == 40 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2227,7 +1733,7 @@ 206 == 206 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2235,7 +1741,7 @@ 42 == 42 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2243,7 +1749,7 @@ 206 == 206 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2251,7 +1757,7 @@ 72 == 72 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2259,7 +1765,7 @@ 206 == 206 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2267,7 +1773,7 @@ 2 == 2 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2275,7 +1781,7 @@ 208 == 208 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2283,7 +1789,7 @@ 4 == 4 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2291,7 +1797,7 @@ 208 == 208 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2299,7 +1805,7 @@ 6 == 6 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2307,7 +1813,7 @@ 208 == 208 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2315,7 +1821,7 @@ 8 == 8 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2323,7 +1829,7 @@ 208 == 208 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2331,7 +1837,7 @@ 10 == 10 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2339,7 +1845,7 @@ 208 == 208 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2347,7 +1853,7 @@ 30 == 30 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2355,7 +1861,7 @@ 208 == 208 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2363,7 +1869,7 @@ 40 == 40 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2371,7 +1877,7 @@ 208 == 208 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2379,7 +1885,7 @@ 42 == 42 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2387,7 +1893,7 @@ 208 == 208 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2395,7 +1901,7 @@ 72 == 72 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2403,7 +1909,7 @@ 208 == 208 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2411,7 +1917,7 @@ 2 == 2 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2419,7 +1925,7 @@ 210 == 210 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2427,7 +1933,7 @@ 4 == 4 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2435,7 +1941,7 @@ 210 == 210 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2443,7 +1949,7 @@ 6 == 6 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2451,7 +1957,7 @@ 210 == 210 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2459,7 +1965,7 @@ 8 == 8 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2467,7 +1973,7 @@ 210 == 210 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2475,7 +1981,7 @@ 10 == 10 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2483,7 +1989,7 @@ 210 == 210 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2491,7 +1997,7 @@ 30 == 30 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2499,7 +2005,7 @@ 210 == 210 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2507,7 +2013,7 @@ 40 == 40 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2515,7 +2021,7 @@ 210 == 210 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2523,7 +2029,7 @@ 42 == 42 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2531,7 +2037,7 @@ 210 == 210 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2539,7 +2045,7 @@ 72 == 72 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2547,7 +2053,7 @@ 210 == 210 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2555,7 +2061,7 @@ 2 == 2 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2563,7 +2069,7 @@ 212 == 212 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2571,7 +2077,7 @@ 4 == 4 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2579,7 +2085,7 @@ 212 == 212 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2587,7 +2093,7 @@ 6 == 6 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2595,7 +2101,7 @@ 212 == 212 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2603,7 +2109,7 @@ 8 == 8 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2611,7 +2117,7 @@ 212 == 212 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2619,7 +2125,7 @@ 10 == 10 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2627,7 +2133,7 @@ 212 == 212 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2635,7 +2141,7 @@ 30 == 30 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2643,7 +2149,7 @@ 212 == 212 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2651,7 +2157,7 @@ 40 == 40 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2659,7 +2165,7 @@ 212 == 212 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2667,7 +2173,7 @@ 42 == 42 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2675,7 +2181,7 @@ 212 == 212 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2683,7 +2189,7 @@ 72 == 72 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2691,7 +2197,7 @@ 212 == 212 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2699,7 +2205,7 @@ 2 == 2 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2707,7 +2213,7 @@ 214 == 214 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2715,7 +2221,7 @@ 4 == 4 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2723,7 +2229,7 @@ 214 == 214 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2731,7 +2237,7 @@ 6 == 6 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2739,7 +2245,7 @@ 214 == 214 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2747,7 +2253,7 @@ 8 == 8 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2755,7 +2261,7 @@ 214 == 214 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2763,7 +2269,7 @@ 10 == 10 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2771,7 +2277,7 @@ 214 == 214 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2779,7 +2285,7 @@ 30 == 30 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2787,7 +2293,7 @@ 214 == 214 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2795,7 +2301,7 @@ 40 == 40 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2803,7 +2309,7 @@ 214 == 214 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2811,7 +2317,7 @@ 42 == 42 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2819,7 +2325,7 @@ 214 == 214 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( i, 2 ) == i*2 </Original> @@ -2827,7 +2333,7 @@ 72 == 72 </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="CATCH_REQUIRE" filename="projects/<exe-name>/GeneratorTests.cpp" > <Original> multiply( j, 2 ) == j*2 </Original> @@ -2837,21 +2343,37 @@ </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="Generator over a range of pairs"> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <TestCase name="Greater-than inequalities with different epsilons"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - i->first == i->second-1 + d >= Approx( 1.22 ) </Original> <Expanded> - 0 == 0 + 1.23 >= Approx( 1.22 ) </Expanded> </Expression> - <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - i->first == i->second-1 + d >= Approx( 1.23 ) </Original> <Expanded> - 2 == 2 + 1.23 >= Approx( 1.23 ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE_FALSE" filename="projects/<exe-name>/ApproxTests.cpp" > + <Original> + !d >= Approx( 1.24 ) + </Original> + <Expanded> + !(1.23 >= Approx( 1.24 )) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > + <Original> + d >= Approx( 1.24 ).epsilon(0.1) + </Original> + <Expanded> + 1.23 >= Approx( 1.24 ) </Expanded> </Expression> <OverallResult success="true"/> @@ -2865,9 +2387,6 @@ </Warning> <OverallResult success="true"/> </TestCase> - <TestCase name="SUCCEED counts as a test pass"> - <OverallResult success="true"/> - </TestCase> <TestCase name="INFO gets logged on failure"> <Info> this message should be logged @@ -2875,7 +2394,7 @@ <Info> so should this </Info> - <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" > + <Expression success="false" type="REQUIRE" filename="projects/<exe-name>/MessageTests.cpp" > <Original> a == 1 </Original> @@ -2886,7 +2405,7 @@ <OverallResult success="false"/> </TestCase> <TestCase name="INFO gets logged on failure, even if captured before successful assertions"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/MessageTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/MessageTests.cpp" > <Original> a == 2 </Original> @@ -2897,7 +2416,7 @@ <Info> this message should be logged </Info> - <Expression success="false" type="CHECK" filename="projects/SelfTest/MessageTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/MessageTests.cpp" > <Original> a == 1 </Original> @@ -2908,7 +2427,7 @@ <Info> and this, but later </Info> - <Expression success="false" type="CHECK" filename="projects/SelfTest/MessageTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/MessageTests.cpp" > <Original> a == 0 </Original> @@ -2916,7 +2435,7 @@ 2 == 0 </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/MessageTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/MessageTests.cpp" > <Original> a == 2 </Original> @@ -2926,1762 +2445,179 @@ </Expression> <OverallResult success="false"/> </TestCase> - <TestCase name="FAIL aborts the test"> - <Failure> - This is a failure - </Failure> - <OverallResult success="false"/> - </TestCase> - <TestCase name="FAIL does not require an argument"> - <Failure/> - <OverallResult success="false"/> - </TestCase> - <TestCase name="SUCCESS does not require an argument"> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Output from all sections is reported"> - <Section name="one"> - <Failure> - Message from section one - </Failure> - <OverallResults successes="0" failures="1" expectedFailures="0"/> - </Section> - <Section name="two"> - <Failure> - Message from section two - </Failure> - <OverallResults successes="0" failures="1" expectedFailures="0"/> - </Section> - <OverallResult success="false"/> - </TestCase> - <TestCase name="Standard output from all sections is reported"> - <Section name="one"> - <OverallResults successes="0" failures="1" expectedFailures="0"/> - </Section> - <Section name="two"> - <OverallResults successes="0" failures="1" expectedFailures="0"/> - </Section> - <OverallResult success="false"/> - </TestCase> - <TestCase name="SCOPED_INFO is reset for each loop"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" > - <Original> - i < 10 - </Original> - <Expanded> - 0 < 10 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" > - <Original> - i < 10 - </Original> - <Expanded> - 1 < 10 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" > - <Original> - i < 10 - </Original> - <Expanded> - 2 < 10 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" > - <Original> - i < 10 - </Original> - <Expanded> - 3 < 10 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" > - <Original> - i < 10 - </Original> - <Expanded> - 4 < 10 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" > - <Original> - i < 10 - </Original> - <Expanded> - 5 < 10 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" > - <Original> - i < 10 - </Original> - <Expanded> - 6 < 10 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" > - <Original> - i < 10 - </Original> - <Expanded> - 7 < 10 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" > - <Original> - i < 10 - </Original> - <Expanded> - 8 < 10 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" > - <Original> - i < 10 - </Original> - <Expanded> - 9 < 10 - </Expanded> - </Expression> - <Info> - current counter 10 - </Info> - <Info> - i := 10 - </Info> - <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" > - <Original> - i < 10 - </Original> - <Expanded> - 10 < 10 - </Expanded> - </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="The NO_FAIL macro reports a failure but does not fail the test"> - <Expression success="false" type="CHECK_NOFAIL" filename="projects/SelfTest/MessageTests.cpp" > - <Original> - 1 == 2 - </Original> - <Expanded> - 1 == 2 - </Expanded> - </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="just info"> - <OverallResult success="true"/> - </TestCase> - <TestCase name="just failure"> - <Failure> - Previous info should not be seen - </Failure> - <OverallResult success="false"/> - </TestCase> - <TestCase name="sends information to INFO"> - <Info> - hi - </Info> - <Info> - i := 7 - </Info> - <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" > - <Original> - false - </Original> - <Expanded> - false - </Expanded> - </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="Pointers can be converted to strings"> - <Warning> - actual address of p: 0x<hex digits> - </Warning> - <Warning> - toString(p): 0x<hex digits> - </Warning> - <OverallResult success="true"/> - </TestCase> - <TestCase name="random SECTION tests"> - <Section name="s1" description="doesn't equal"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - a != b - </Original> - <Expanded> - 1 != 2 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - b != a - </Original> - <Expanded> - 2 != 1 - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="s2" description="not equal"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - a != b - </Original> - <Expanded> - 1 != 2 - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResult success="true"/> - </TestCase> - <TestCase name="nested SECTION tests"> - <Section name="s1" description="doesn't equal"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - a != b - </Original> - <Expanded> - 1 != 2 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - b != a - </Original> - <Expanded> - 2 != 1 - </Expanded> - </Expression> - <Section name="s2" description="not equal"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - a != b - </Original> - <Expanded> - 1 != 2 - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="3" failures="0" expectedFailures="0"/> - </Section> - <OverallResult success="true"/> - </TestCase> - <TestCase name="more nested SECTION tests"> - <Section name="s1" description="doesn't equal"> - <Section name="s2" description="equal"> - <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - a == b - </Original> - <Expanded> - 1 == 2 - </Expanded> - </Expression> - <OverallResults successes="0" failures="1" expectedFailures="0"/> - </Section> - <OverallResults successes="0" failures="1" expectedFailures="0"/> - </Section> - <Section name="s1" description="doesn't equal"> - <Section name="s3" description="not equal"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - a != b - </Original> - <Expanded> - 1 != 2 - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <Section name="s1" description="doesn't equal"> - <Section name="s4" description="less than"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - a < b - </Original> - <Expanded> - 1 < 2 - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResult success="false"/> - </TestCase> - <TestCase name="even more nested SECTION tests"> - <Section name="c"> - <Section name="d (leaf)"> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <Section name="c"> - <Section name="e (leaf)"> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <Section name="f (leaf)"> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResult success="true"/> - </TestCase> - <TestCase name="looped SECTION tests"> - <Section name="s1" description="b is currently: 0"> - <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - b > a - </Original> - <Expanded> - 0 > 1 - </Expanded> - </Expression> - <OverallResults successes="0" failures="1" expectedFailures="0"/> - </Section> - <OverallResult success="false"/> - </TestCase> - <TestCase name="looped tests"> - <Info> - Testing if fib[0] (1) is even - </Info> - <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - ( fib[i] % 2 ) == 0 - </Original> - <Expanded> - 1 == 0 - </Expanded> - </Expression> - <Info> - Testing if fib[1] (1) is even - </Info> - <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - ( fib[i] % 2 ) == 0 - </Original> - <Expanded> - 1 == 0 - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - ( fib[i] % 2 ) == 0 - </Original> - <Expanded> - 0 == 0 - </Expanded> - </Expression> - <Info> - Testing if fib[3] (3) is even - </Info> - <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - ( fib[i] % 2 ) == 0 - </Original> - <Expanded> - 1 == 0 - </Expanded> - </Expression> - <Info> - Testing if fib[4] (5) is even - </Info> - <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - ( fib[i] % 2 ) == 0 - </Original> - <Expanded> - 1 == 0 - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - ( fib[i] % 2 ) == 0 - </Original> - <Expanded> - 0 == 0 - </Expanded> - </Expression> - <Info> - Testing if fib[6] (13) is even - </Info> - <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - ( fib[i] % 2 ) == 0 - </Original> - <Expanded> - 1 == 0 - </Expanded> - </Expression> - <Info> - Testing if fib[7] (21) is even - </Info> - <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - ( fib[i] % 2 ) == 0 - </Original> - <Expanded> - 1 == 0 - </Expanded> - </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="Sends stuff to stdout and stderr"> - <OverallResult success="true"/> - </TestCase> - <TestCase name="null strings"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - makeString( false ) != static_cast<char*>(nullptr) - </Original> - <Expanded> - "valid string" != {null string} - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - makeString( true ) == static_cast<char*>(nullptr) - </Original> - <Expanded> - {null string} == {null string} - </Expanded> - </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="checkedIf"> - <Expression success="true" type="CHECKED_IF" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - flag - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testCheckedIf( true ) - </Original> - <Expanded> - true - </Expanded> - </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="checkedIf, failing"> - <Expression success="false" type="CHECKED_IF" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - flag - </Original> - <Expanded> - false - </Expanded> - </Expression> - <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testCheckedIf( false ) - </Original> - <Expanded> - false - </Expanded> - </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="checkedElse"> - <Expression success="true" type="CHECKED_ELSE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - flag - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testCheckedElse( true ) - </Original> - <Expanded> - true - </Expanded> - </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="checkedElse, failing"> - <Expression success="false" type="CHECKED_ELSE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - flag - </Original> - <Expanded> - false - </Expanded> - </Expression> - <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testCheckedElse( false ) - </Original> - <Expanded> - false - </Expanded> - </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="xmlentitycheck"> - <Section name="embedded xml" description="<test>it should be possible to embed xml characters, such as <, " or &, or even whole <xml>documents</xml> within an attribute</test>"> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <Section name="encoded chars" description="these should all be encoded: &&&"""<<<&"<<&""> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResult success="true"/> - </TestCase> - <TestCase name="send a single char to INFO"> - <Info> - 3 - </Info> - <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - false - </Original> - <Expanded> - false - </Expanded> - </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="atomic if"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - x == 0 - </Original> - <Expanded> - 0 == 0 - </Expanded> - </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="String matchers"> - <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testStringForMatching(), Contains( "string" ) - </Original> - <Expanded> - "this string contains 'abc' as a substring" contains: "string" - </Expanded> - </Expression> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testStringForMatching(), Contains( "abc" ) - </Original> - <Expanded> - "this string contains 'abc' as a substring" contains: "abc" - </Expanded> - </Expression> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testStringForMatching(), StartsWith( "this" ) - </Original> - <Expanded> - "this string contains 'abc' as a substring" starts with: "this" - </Expanded> - </Expression> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testStringForMatching(), EndsWith( "substring" ) - </Original> - <Expanded> - "this string contains 'abc' as a substring" ends with: "substring" - </Expanded> - </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Contains string matcher"> - <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testStringForMatching(), Contains( "not there" ) - </Original> - <Expanded> - "this string contains 'abc' as a substring" contains: "not there" - </Expanded> - </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="StartsWith string matcher"> - <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testStringForMatching(), StartsWith( "string" ) - </Original> - <Expanded> - "this string contains 'abc' as a substring" starts with: "string" - </Expanded> - </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="EndsWith string matcher"> - <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testStringForMatching(), EndsWith( "this" ) - </Original> - <Expanded> - "this string contains 'abc' as a substring" ends with: "this" - </Expanded> - </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="Equals string matcher"> - <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testStringForMatching(), Equals( "something else" ) - </Original> - <Expanded> - "this string contains 'abc' as a substring" equals: "something else" - </Expanded> - </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="Equals string matcher, with NULL"> - <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - "", Equals(nullptr) - </Original> - <Expanded> - "" equals: "" - </Expanded> - </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="AllOf matcher"> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testStringForMatching(), AllOf( Catch::Contains( "string" ), Catch::Contains( "abc" ) ) - </Original> - <Expanded> - "this string contains 'abc' as a substring" ( contains: "string" and contains: "abc" ) - </Expanded> - </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="AnyOf matcher"> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testStringForMatching(), AnyOf( Catch::Contains( "string" ), Catch::Contains( "not there" ) ) - </Original> - <Expanded> - "this string contains 'abc' as a substring" ( contains: "string" or contains: "not there" ) - </Expanded> - </Expression> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testStringForMatching(), AnyOf( Catch::Contains( "not there" ), Catch::Contains( "string" ) ) - </Original> - <Expanded> - "this string contains 'abc' as a substring" ( contains: "not there" or contains: "string" ) - </Expanded> - </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Equals"> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testStringForMatching(), Equals( "this string contains 'abc' as a substring" ) - </Original> - <Expanded> - "this string contains 'abc' as a substring" equals: "this string contains 'abc' as a substring" - </Expanded> - </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Matchers can be (AllOf) composed with the && operator"> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testStringForMatching(), Contains( "string" ) && Contains( "abc" ) && Contains( "substring" ) && Contains( "contains" ) - </Original> - <Expanded> - "this string contains 'abc' as a substring" ( contains: "string" and contains: "abc" and contains: "substring" and contains: "contains" ) - </Expanded> - </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Matchers can be (AnyOf) composed with the || operator"> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > + <TestCase name="Inequality checks that should fail"> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - testStringForMatching(), Contains( "string" ) || Contains( "different" ) || Contains( "random" ) + data.int_seven != 7 </Original> <Expanded> - "this string contains 'abc' as a substring" ( contains: "string" or contains: "different" or contains: "random" ) + 7 != 7 </Expanded> </Expression> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - testStringForMatching2(), Contains( "string" ) || Contains( "different" ) || Contains( "random" ) + data.float_nine_point_one != Approx( 9.1f ) </Original> <Expanded> - "some completely different text that contains one common word" ( contains: "string" or contains: "different" or contains: "random" ) + 9.1f != Approx( 9.1000003815 ) </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Matchers can be composed with both && and ||"> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) && Contains( "substring" ) + data.double_pi != Approx( 3.1415926535 ) </Original> <Expanded> - "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "substring" ) + 3.1415926535 != Approx( 3.1415926535 ) </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Matchers can be composed with both && and || - failing"> - <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) && Contains( "random" ) + data.str_hello != "hello" </Original> <Expanded> - "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "random" ) + "hello" != "hello" </Expanded> </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="Matchers can be negated (Not) with the ! operator"> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - testStringForMatching(), !Contains( "different" ) + data.str_hello.size() != 5 </Original> <Expanded> - "this string contains 'abc' as a substring" not contains: "different" + 5 != 5 </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="Matchers can be negated (Not) with the ! operator - failing"> - <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - testStringForMatching(), !Contains( "substring" ) - </Original> - <Expanded> - "this string contains 'abc' as a substring" not contains: "substring" - </Expanded> - </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="Factorials are computed"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - Factorial(0) == 1 - </Original> - <Expanded> - 1 == 1 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - Factorial(1) == 1 - </Original> - <Expanded> - 1 == 1 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - Factorial(2) == 2 - </Original> - <Expanded> - 2 == 2 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > + <TestCase name="Inequality checks that should succeed"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - Factorial(3) == 6 + data.int_seven != 6 </Original> <Expanded> - 6 == 6 + 7 != 6 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - Factorial(10) == 3628800 + data.int_seven != 8 </Original> <Expanded> - 3628800 (0x<hex digits>) == 3628800 (0x<hex digits>) + 7 != 8 </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="An empty test with no assertions"> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Nice descriptive name"> - <Warning> - This one ran - </Warning> - <OverallResult success="true"/> - </TestCase> - <TestCase name="first tag"> - <OverallResult success="true"/> - </TestCase> - <TestCase name="second tag"> - <OverallResult success="true"/> - </TestCase> - <TestCase name="vectors can be sized and resized"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - v.size() == 5 + data.float_nine_point_one != Approx( 9.11f ) </Original> <Expanded> - 5 == 5 + 9.1f != Approx( 9.1099996567 ) </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - v.capacity() >= 5 + data.float_nine_point_one != Approx( 9.0f ) </Original> <Expanded> - 5 >= 5 + 9.1f != Approx( 9.0 ) </Expanded> </Expression> - <Section name="resizing bigger changes size and capacity"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - v.size() == 10 - </Original> - <Expanded> - 10 == 10 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - v.capacity() >= 10 - </Original> - <Expanded> - 10 >= 10 - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - v.size() == 5 + data.float_nine_point_one != Approx( 1 ) </Original> <Expanded> - 5 == 5 + 9.1f != Approx( 1.0 ) </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - v.capacity() >= 5 + data.float_nine_point_one != Approx( 0 ) </Original> <Expanded> - 5 >= 5 + 9.1f != Approx( 0.0 ) </Expanded> </Expression> - <Section name="resizing smaller changes size but not capacity"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - v.size() == 0 - </Original> - <Expanded> - 0 == 0 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - v.capacity() >= 5 - </Original> - <Expanded> - 5 >= 5 - </Expanded> - </Expression> - <Section name="We can use the 'swap trick' to reset the capacity"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - v.capacity() == 0 - </Original> - <Expanded> - 0 == 0 - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="3" failures="0" expectedFailures="0"/> - </Section> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - v.size() == 5 + data.double_pi != Approx( 3.1415 ) </Original> <Expanded> - 5 == 5 + 3.1415926535 != Approx( 3.1415 ) </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - v.capacity() >= 5 - </Original> - <Expanded> - 5 >= 5 - </Expanded> - </Expression> - <Section name="reserving bigger changes capacity but not size"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - v.size() == 5 - </Original> - <Expanded> - 5 == 5 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - v.capacity() >= 10 - </Original> - <Expanded> - 10 >= 10 - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - v.size() == 5 + data.str_hello != "goodbye" </Original> <Expanded> - 5 == 5 + "hello" != "goodbye" </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - v.capacity() >= 5 + data.str_hello != "hell" </Original> <Expanded> - 5 >= 5 + "hello" != "hell" </Expanded> </Expression> - <Section name="reserving smaller does not change size or capacity"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - v.size() == 5 - </Original> - <Expanded> - 5 == 5 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - v.capacity() >= 5 - </Original> - <Expanded> - 5 >= 5 - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResult success="true"/> - </TestCase> - <TestCase name="A couple of nested sections followed by a failure"> - <Section name="Outer"> - <Section name="Inner"> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <Failure> - to infinity and beyond - </Failure> - <OverallResult success="false"/> - </TestCase> - <TestCase name="not allowed"> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Tabs and newlines show in output"> - <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - s1 == s2 + data.str_hello != "hello1" </Original> <Expanded> - "if ($b == 10) { - $a = 20; -}" -== -"if ($b == 10) { - $a = 20; -} -" + "hello" != "hello1" </Expanded> </Expression> - <OverallResult success="false"/> - </TestCase> - <TestCase name="toString on const wchar_t const pointer returns the string contents"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - result == "\"wide load\"" + data.str_hello.size() != 6 </Original> <Expanded> - ""wide load"" == ""wide load"" + 5 != 6 </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="toString on const wchar_t pointer returns the string contents"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" > + <TestCase name="Less-than inequalities with different epsilons"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - result == "\"wide load\"" + d <= Approx( 1.24 ) </Original> <Expanded> - ""wide load"" == ""wide load"" + 1.23 <= Approx( 1.24 ) </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="toString on wchar_t const pointer returns the string contents"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - result == "\"wide load\"" + d <= Approx( 1.23 ) </Original> <Expanded> - ""wide load"" == ""wide load"" + 1.23 <= Approx( 1.23 ) </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="toString on wchar_t returns the string contents"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="true" type="REQUIRE_FALSE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - result == "\"wide load\"" + !d <= Approx( 1.22 ) </Original> <Expanded> - ""wide load"" == ""wide load"" + !(1.23 <= Approx( 1.22 )) </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="XmlEncode"> - <Section name="normal string"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - encode( "normal string" ) == "normal string" - </Original> - <Expanded> - "normal string" == "normal string" - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <Section name="empty string"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - encode( "" ) == "" - </Original> - <Expanded> - "" == "" - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <Section name="string with ampersand"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - encode( "smith & jones" ) == "smith &amp; jones" - </Original> - <Expanded> - "smith &amp; jones" == "smith &amp; jones" - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <Section name="string with less-than"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - encode( "smith < jones" ) == "smith &lt; jones" - </Original> - <Expanded> - "smith &lt; jones" == "smith &lt; jones" - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <Section name="string with greater-than"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - encode( "smith > jones" ) == "smith > jones" - </Original> - <Expanded> - "smith > jones" == "smith > jones" - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - encode( "smith ]]> jones" ) == "smith ]]&gt; jones" - </Original> - <Expanded> - "smith ]]&gt; jones" -== -"smith ]]&gt; jones" - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="string with quotes"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - encode( stringWithQuotes ) == stringWithQuotes - </Original> - <Expanded> - "don't "quote" me on that" -== -"don't "quote" me on that" - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - encode( stringWithQuotes, Catch::XmlEncode::ForAttributes ) == "don't &quot;quote&quot; me on that" - </Original> - <Expanded> - "don't &quot;quote&quot; me on that" -== -"don't &quot;quote&quot; me on that" - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="string with control char (1)"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - encode( "[\x01]" ) == "[&#x01;]" - </Original> - <Expanded> - "[&#x01;]" == "[&#x01;]" - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <Section name="string with control char (x7F)"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > - <Original> - encode( "[\x7F]" ) == "[&#x7F;]" - </Original> - <Expanded> - "[&#x7F;]" == "[&#x7F;]" - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResult success="true"/> - </TestCase> - <TestCase name="long long"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - l == std::numeric_limits<long long>::max() + d <= Approx( 1.22 ).epsilon(0.1) </Original> <Expanded> - 9223372036854775807 (0x<hex digits>) -== -9223372036854775807 (0x<hex digits>) + 1.23 <= Approx( 1.22 ) </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="This test 'should' fail but doesn't"> - <OverallResult success="false"/> - </TestCase> - <TestCase name="# A test name that starts with a #"> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Process can be configured on command line"> - <Section name="default - no arguments"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.shouldDebugBreak == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.abortAfter == -1 - </Original> - <Expanded> - -1 == -1 - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.noThrow == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.reporterNames.empty() - </Original> - <Expanded> - true - </Expanded> - </Expression> - <OverallResults successes="5" failures="0" expectedFailures="0"/> - </Section> - <Section name="test lists"> - <Section name="1 test" description="Specify one test case using"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - cfg.testSpec().matches( fakeTestCase( "notIncluded" ) ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - cfg.testSpec().matches( fakeTestCase( "test1" ) ) - </Original> - <Expanded> - true - </Expanded> - </Expression> - <OverallResults successes="3" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="3" failures="0" expectedFailures="0"/> - </Section> - <Section name="test lists"> - <Section name="Specify one test case exclusion using exclude:"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) ) - </Original> - <Expanded> - true - </Expanded> - </Expression> - <OverallResults successes="3" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="3" failures="0" expectedFailures="0"/> - </Section> - <Section name="test lists"> - <Section name="Specify one test case exclusion using ~"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) ) - </Original> - <Expanded> - true - </Expanded> - </Expression> - <OverallResults successes="3" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="3" failures="0" expectedFailures="0"/> - </Section> - <Section name="reporter"> - <Section name="-r/console"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.reporterNames[0] == "console" - </Original> - <Expanded> - "console" == "console" - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="reporter"> - <Section name="-r/xml"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.reporterNames[0] == "xml" - </Original> - <Expanded> - "xml" == "xml" - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="reporter"> - <Section name="-r xml and junit"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.reporterNames.size() == 2 - </Original> - <Expanded> - 2 == 2 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.reporterNames[0] == "xml" - </Original> - <Expanded> - "xml" == "xml" - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.reporterNames[1] == "junit" - </Original> - <Expanded> - "junit" == "junit" - </Expanded> - </Expression> - <OverallResults successes="4" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="4" failures="0" expectedFailures="0"/> - </Section> - <Section name="reporter"> - <Section name="--reporter/junit"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.reporterNames[0] == "junit" - </Original> - <Expanded> - "junit" == "junit" - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="debugger"> - <Section name="-b"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.shouldDebugBreak == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="debugger"> - <Section name="--break"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.shouldDebugBreak - </Original> - <Expanded> - true - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="abort"> - <Section name="-a aborts after first failure"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.abortAfter == 1 - </Original> - <Expanded> - 1 == 1 - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="abort"> - <Section name="-x 2 aborts after two failures"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.abortAfter == 2 - </Original> - <Expanded> - 2 == 2 - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="abort"> - <Section name="-x must be greater than zero"> - <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfigAndReturnError( argv, config ), Contains( "greater than zero" ) - </Original> - <Expanded> - "Value after -x or --abortAfter must be greater than zero -- while parsing: (-x, --abortx <no. failures>)" contains: "greater than zero" - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <Section name="abort"> - <Section name="-x must be numeric"> - <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfigAndReturnError( argv, config ), Contains( "-x" ) - </Original> - <Expanded> - "Unable to convert oops to destination type -- while parsing: (-x, --abortx <no. failures>)" contains: "-x" - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <Section name="nothrow"> - <Section name="-e"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.noThrow == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="nothrow"> - <Section name="--nothrow"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.noThrow == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="output filename"> - <Section name="-o filename"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.outputFilename == "filename.ext" - </Original> - <Expanded> - "filename.ext" == "filename.ext" - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="output filename"> - <Section name="--out"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.outputFilename == "filename.ext" - </Original> - <Expanded> - "filename.ext" == "filename.ext" - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="combinations"> - <Section name="Single character flags can be combined"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.abortAfter == 1 - </Original> - <Expanded> - 1 == 1 - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.shouldDebugBreak - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.noThrow == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <OverallResults successes="4" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="4" failures="0" expectedFailures="0"/> - </Section> - <Section name="use-colour"> - <Section name="without option"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.useColour == UseColour::Auto - </Original> - <Expanded> - 0 == 0 - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="use-colour"> - <Section name="auto"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.useColour == UseColour::Auto - </Original> - <Expanded> - 0 == 0 - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="use-colour"> - <Section name="yes"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.useColour == UseColour::Yes - </Original> - <Expanded> - 1 == 1 - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="use-colour"> - <Section name="no"> - <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ) - </Original> - <Expanded> - parseIntoConfig( argv, config ) - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - config.useColour == UseColour::No - </Original> - <Expanded> - 2 == 2 - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="use-colour"> - <Section name="error"> - <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/TestMain.cpp" > - <Original> - parseIntoConfig( argv, config ), Contains( "colour mode must be one of" ) - </Original> - <Expanded> - parseIntoConfig( argv, config ), Contains( "colour mode must be one of" ) - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResult success="true"/> - </TestCase> <TestCase name="Long strings can be wrapped"> <Section name="plain string"> <Section name="No wrapping"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString </Original> @@ -4691,7 +2627,7 @@ "one two three four" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 18 ) ).toString() == testString </Original> @@ -4707,7 +2643,7 @@ </Section> <Section name="plain string"> <Section name="Wrapped once"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 17 ) ).toString() == "one two three\nfour" </Original> @@ -4719,7 +2655,7 @@ four" four" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 16 ) ).toString() == "one two three\nfour" </Original> @@ -4731,7 +2667,7 @@ four" four" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 14 ) ).toString() == "one two three\nfour" </Original> @@ -4743,7 +2679,7 @@ four" four" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 13 ) ).toString() == "one two three\nfour" </Original> @@ -4755,7 +2691,7 @@ four" four" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 12 ) ).toString() == "one two\nthree four" </Original> @@ -4773,7 +2709,7 @@ three four" </Section> <Section name="plain string"> <Section name="Wrapped twice"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 9 ) ).toString() == "one two\nthree\nfour" </Original> @@ -4787,7 +2723,7 @@ three four" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 8 ) ).toString() == "one two\nthree\nfour" </Original> @@ -4801,7 +2737,7 @@ three four" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 7 ) ).toString() == "one two\nthree\nfour" </Original> @@ -4821,7 +2757,7 @@ four" </Section> <Section name="plain string"> <Section name="Wrapped three times"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 6 ) ).toString() == "one\ntwo\nthree\nfour" </Original> @@ -4837,7 +2773,7 @@ three four" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 5 ) ).toString() == "one\ntwo\nthree\nfour" </Original> @@ -4859,7 +2795,7 @@ four" </Section> <Section name="plain string"> <Section name="Short wrap"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( "abcdef", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndef" </Original> @@ -4871,7 +2807,7 @@ def" def" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( "abcdefg", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndefg" </Original> @@ -4883,7 +2819,7 @@ defg" defg" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( "abcdefgh", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndef-\ngh" </Original> @@ -4897,7 +2833,7 @@ def- gh" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 4 ) ).toString() == "one\ntwo\nthr-\nee\nfour" </Original> @@ -4915,7 +2851,7 @@ ee four" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 3 ) ).toString() == "one\ntwo\nth-\nree\nfo-\nur" </Original> @@ -4941,7 +2877,7 @@ ur" </Section> <Section name="plain string"> <Section name="As container"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > <Original> text.size() == 4 </Original> @@ -4949,7 +2885,7 @@ ur" 4 == 4 </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> text[0] == "one" </Original> @@ -4957,7 +2893,7 @@ ur" "one" == "one" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> text[1] == "two" </Original> @@ -4965,7 +2901,7 @@ ur" "two" == "two" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> text[2] == "three" </Original> @@ -4973,7 +2909,7 @@ ur" "three" == "three" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> text[3] == "four" </Original> @@ -4987,7 +2923,7 @@ ur" </Section> <Section name="plain string"> <Section name="Indent first line differently"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> text.toString() == " one two\n three\n four" </Original> @@ -5007,7 +2943,7 @@ ur" </Section> <Section name="With newlines"> <Section name="No wrapping"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString </Original> @@ -5019,7 +2955,7 @@ three four" three four" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 18 ) ).toString() == testString </Original> @@ -5031,7 +2967,7 @@ three four" three four" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 10 ) ).toString() == testString </Original> @@ -5049,19 +2985,15 @@ three four" </Section> <Section name="With newlines"> <Section name="Trailing newline"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - Text( "abcdef\n", TextAttributes().setWidth( 10 ) ).toString() == "abcdef\n" + Text( "abcdef\n", TextAttributes().setWidth( 10 ) ).toString() == "abcdef" </Original> <Expanded> - "abcdef -" -== -"abcdef -" + "abcdef" == "abcdef" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( "abcdef", TextAttributes().setWidth( 6 ) ).toString() == "abcdef" </Original> @@ -5069,25 +3001,33 @@ three four" "abcdef" == "abcdef" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - Text( "abcdef\n", TextAttributes().setWidth( 6 ) ).toString() == "abcdef\n" + Text( "abcdef\n", TextAttributes().setWidth( 6 ) ).toString() == "abcdef" </Original> <Expanded> - "abcdef -" + "abcdef" == "abcdef" + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + Text( "abcdef\n", TextAttributes().setWidth( 5 ) ).toString() == "abcd-\nef" + </Original> + <Expanded> + "abcd- +ef" == -"abcdef -" +"abcd- +ef" </Expanded> </Expression> - <OverallResults successes="3" failures="0" expectedFailures="0"/> + <OverallResults successes="4" failures="0" expectedFailures="0"/> </Section> - <OverallResults successes="3" failures="0" expectedFailures="0"/> + <OverallResults successes="4" failures="0" expectedFailures="0"/> </Section> <Section name="With newlines"> <Section name="Wrapped once"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 9 ) ).toString() == "one two\nthree\nfour" </Original> @@ -5101,7 +3041,7 @@ three four" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 8 ) ).toString() == "one two\nthree\nfour" </Original> @@ -5115,7 +3055,7 @@ three four" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 7 ) ).toString() == "one two\nthree\nfour" </Original> @@ -5135,7 +3075,7 @@ four" </Section> <Section name="With newlines"> <Section name="Wrapped twice"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> Text( testString, TextAttributes().setWidth( 6 ) ).toString() == "one\ntwo\nthree\nfour" </Original> @@ -5155,191 +3095,120 @@ four" </Section> <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> - <Section name="With tabs"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - Text( testString, TextAttributes().setWidth( 15 ) ).toString() == "one two three\n four\n five\n six" - </Original> - <Expanded> - "one two three - four - five - six" + <Section name="With wrap-before/ after characters"> + <Section name="No wrapping"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString + </Original> + <Expanded> + "one,two(three) <here>" == -"one two three - four - five - six" - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResult success="true"/> - </TestCase> - <TestCase name="replaceInPlace"> - <Section name="replace single char"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - replaceInPlace( letters, "b", "z" ) - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - letters == "azcdefcg" - </Original> - <Expanded> - "azcdefcg" == "azcdefcg" - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="replace two chars"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - replaceInPlace( letters, "c", "z" ) - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - letters == "abzdefzg" - </Original> - <Expanded> - "abzdefzg" == "abzdefzg" - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="replace first char"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - replaceInPlace( letters, "a", "z" ) - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - letters == "zbcdefcg" - </Original> - <Expanded> - "zbcdefcg" == "zbcdefcg" - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="replace last char"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - replaceInPlace( letters, "g", "z" ) - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - letters == "abcdefcz" - </Original> - <Expanded> - "abcdefcz" == "abcdefcz" - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="replace all chars"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - replaceInPlace( letters, letters, "replaced" ) - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - letters == "replaced" - </Original> - <Expanded> - "replaced" == "replaced" - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <Section name="replace no chars"> - <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/TestMain.cpp" > - <Original> - !replaceInPlace( letters, "x", "z" ) - </Original> - <Expanded> - !false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - letters == letters - </Original> - <Expanded> - "abcdefcg" == "abcdefcg" - </Expanded> - </Expression> +"one,two(three) <here>" + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + Text( testString, TextAttributes().setWidth( 24 ) ).toString() == testString + </Original> + <Expanded> + "one,two(three) <here>" +== +"one,two(three) <here>" + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> - <Section name="escape '"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - replaceInPlace( s, "'", "|'" ) - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - s == "didn|'t" - </Original> - <Expanded> - "didn|'t" == "didn|'t" - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> + <Section name="With wrap-before/ after characters"> + <Section name="Wrap before"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + Text( testString, TextAttributes().setWidth( 11 ) ).toString() == "one,two\n(three)\n<here>" + </Original> + <Expanded> + "one,two +(three) +<here>" +== +"one,two +(three) +<here>" + </Expanded> + </Expression> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Strings can be rendered with colour"> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Text can be formatted using the Text class"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - Text( "hi there" ).toString() == "hi there" - </Original> - <Expanded> - "hi there" == "hi there" - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" > - <Original> - Text( "hi there", narrow ).toString() == "hi\nthere" - </Original> - <Expanded> - "hi -there" + <Section name="With wrap-before/ after characters"> + <Section name="Wrap after"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + Text( testString, TextAttributes().setWidth( 6 ) ).toString() == "one,\ntwo\n(thre-\ne)\n<here>" + </Original> + <Expanded> + "one, +two +(thre- +e) +<here>" == -"hi -there" - </Expanded> - </Expression> +"one, +two +(thre- +e) +<here>" + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + Text( testString, TextAttributes().setWidth( 5 ) ).toString() == "one,\ntwo\n(thr-\nee)\n<her-\ne>" + </Original> + <Expanded> + "one, +two +(thr- +ee) +<her- +e>" +== +"one, +two +(thr- +ee) +<her- +e>" + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + Text( testString, TextAttributes().setWidth( 4 ) ).toString() == "one,\ntwo\n(th-\nree)\n<he-\nre>" + </Original> + <Expanded> + "one, +two +(th- +ree) +<he- +re>" +== +"one, +two +(th- +ree) +<he- +re>" + </Expanded> + </Expression> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> <OverallResult success="true"/> </TestCase> <TestCase name="Long text is truncted"> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TestMain.cpp" > + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/TestMain.cpp" > <Original> t.toString(), EndsWith( "... message truncated due to excessive size" ) </Original> @@ -6352,80 +4221,151 @@ there" <TestCase name="ManuallyRegistered"> <OverallResult success="true"/> </TestCase> - <TestCase name="Parsing a std::pair"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <TestCase name="Matchers can be (AllOf) composed with the && operator"> + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - (std::pair<int, int>( 1, 2 )) == aNicePair + testStringForMatching(), Contains( "string" ) && Contains( "abc" ) && Contains( "substring" ) && Contains( "contains" ) </Original> <Expanded> - std::pair( 1, 2 ) == std::pair( 1, 2 ) + "this string contains 'abc' as a substring" ( contains: "string" and contains: "abc" and contains: "substring" and contains: "contains" ) </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="Where there is more to the expression after the RHS"> - <Warning> - Uncomment the code in this test to check that it gives a sensible compiler error - </Warning> + <TestCase name="Matchers can be (AnyOf) composed with the || operator"> + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + testStringForMatching(), Contains( "string" ) || Contains( "different" ) || Contains( "random" ) + </Original> + <Expanded> + "this string contains 'abc' as a substring" ( contains: "string" or contains: "different" or contains: "random" ) + </Expanded> + </Expression> + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + testStringForMatching2(), Contains( "string" ) || Contains( "different" ) || Contains( "random" ) + </Original> + <Expanded> + "some completely different text that contains one common word" ( contains: "string" or contains: "different" or contains: "random" ) + </Expanded> + </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="Where the LHS is not a simple value"> - <Warning> - Uncomment the code in this test to check that it gives a sensible compiler error - </Warning> + <TestCase name="Matchers can be composed with both && and ||"> + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) && Contains( "substring" ) + </Original> + <Expanded> + "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "substring" ) + </Expanded> + </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="A failing expression with a non streamable type is still captured"> - <Expression success="false" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" > + <TestCase name="Matchers can be composed with both && and || - failing"> + <Expression success="false" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - &o1 == &o2 + testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) && Contains( "random" ) </Original> <Expanded> - 0x<hex digits> == 0x<hex digits> + "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "random" ) </Expanded> </Expression> - <Expression success="false" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" > + <OverallResult success="false"/> + </TestCase> + <TestCase name="Matchers can be negated (Not) with the ! operator"> + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - o1 == o2 + testStringForMatching(), !Contains( "different" ) </Original> <Expanded> - {?} == {?} + "this string contains 'abc' as a substring" not contains: "different" + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="Matchers can be negated (Not) with the ! operator - failing"> + <Expression success="false" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + testStringForMatching(), !Contains( "substring" ) + </Original> + <Expanded> + "this string contains 'abc' as a substring" not contains: "substring" </Expanded> </Expression> <OverallResult success="false"/> </TestCase> - <TestCase name="string literals of different sizes can be compared"> - <Expression success="false" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <TestCase name="Mismatching exception messages failing the test"> + <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> - std::string( "first" ) == "second" + thisThrows(), "expected exception" </Original> <Expanded> - "first" == "second" + thisThrows(), "expected exception" + </Expanded> + </Expression> + <Expression success="false" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/ExceptionTests.cpp" > + <Original> + thisThrows(), "should fail" + </Original> + <Expanded> + expected exception </Expanded> </Expression> <OverallResult success="false"/> </TestCase> - <TestCase name="An expression with side-effects should only be evaluated once"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <TestCase name="Nice descriptive name"> + <Warning> + This one ran + </Warning> + <OverallResult success="true"/> + </TestCase> + <TestCase name="Non-std exceptions can be translated"> + <Exception filename="projects/<exe-name>/ExceptionTests.cpp" > + custom exception + </Exception> + <OverallResult success="false"/> + </TestCase> + <TestCase name="NotImplemented exception"> + <Expression success="true" type="REQUIRE_THROWS" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> - i++ == 7 + thisFunctionNotImplemented( 7 ) </Original> <Expanded> - 7 == 7 + thisFunctionNotImplemented( 7 ) </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="Objects that evaluated in boolean contexts can be checked"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TrickyTests.cpp" > <Original> - i++ == 8 + True </Original> <Expanded> - 8 == 8 + true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + !False + </Original> + <Expanded> + true + </Expanded> + </Expression> + <Expression success="true" type="CHECK_FALSE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + !False + </Original> + <Expanded> + !false </Expanded> </Expression> <OverallResult success="true"/> </TestCase> <TestCase name="Operators at different namespace levels not hijacked by Koenig lookup"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > <Original> 0x<hex digits> == o </Original> @@ -6435,366 +4375,2693 @@ there" </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="Demonstrate that a non-const == is not used"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <TestCase name="Ordering comparison checks that should fail"> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - t == 1u + data.int_seven > 7 </Original> <Expanded> - {?} == 1 + 7 > 7 </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Test enum bit values"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - 0x<hex digits> == bit30and31 + data.int_seven < 7 </Original> <Expanded> - 3221225472 (0x<hex digits>) == 3221225472 + 7 < 7 </Expanded> </Expression> - <OverallResult success="true"/> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.int_seven > 8 + </Original> + <Expanded> + 7 > 8 + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.int_seven < 6 + </Original> + <Expanded> + 7 < 6 + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.int_seven < 0 + </Original> + <Expanded> + 7 < 0 + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.int_seven < -1 + </Original> + <Expanded> + 7 < -1 + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.int_seven >= 8 + </Original> + <Expanded> + 7 >= 8 + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.int_seven <= 6 + </Original> + <Expanded> + 7 <= 6 + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.float_nine_point_one < 9 + </Original> + <Expanded> + 9.1f < 9 + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.float_nine_point_one > 10 + </Original> + <Expanded> + 9.1f > 10 + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.float_nine_point_one > 9.2 + </Original> + <Expanded> + 9.1f > 9.2 + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.str_hello > "hello" + </Original> + <Expanded> + "hello" > "hello" + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.str_hello < "hello" + </Original> + <Expanded> + "hello" < "hello" + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.str_hello > "hellp" + </Original> + <Expanded> + "hello" > "hellp" + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.str_hello > "z" + </Original> + <Expanded> + "hello" > "z" + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.str_hello < "hellm" + </Original> + <Expanded> + "hello" < "hellm" + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.str_hello < "a" + </Original> + <Expanded> + "hello" < "a" + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.str_hello >= "z" + </Original> + <Expanded> + "hello" >= "z" + </Expanded> + </Expression> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.str_hello <= "a" + </Original> + <Expanded> + "hello" <= "a" + </Expanded> + </Expression> + <OverallResult success="false"/> </TestCase> - <TestCase name="boolean member"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <TestCase name="Ordering comparison checks that should succeed"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.int_seven < 8 + </Original> + <Expanded> + 7 < 8 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.int_seven > 6 + </Original> + <Expanded> + 7 > 6 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.int_seven > 0 + </Original> + <Expanded> + 7 > 0 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.int_seven > -1 + </Original> + <Expanded> + 7 > -1 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.int_seven >= 7 + </Original> + <Expanded> + 7 >= 7 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.int_seven >= 6 + </Original> + <Expanded> + 7 >= 6 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.int_seven <= 7 + </Original> + <Expanded> + 7 <= 7 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.int_seven <= 8 + </Original> + <Expanded> + 7 <= 8 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - obj.prop != nullptr + data.float_nine_point_one > 9 </Original> <Expanded> - 0x<hex digits> != nullptr + 9.1f > 9 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.float_nine_point_one < 10 + </Original> + <Expanded> + 9.1f < 10 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.float_nine_point_one < 9.2 + </Original> + <Expanded> + 9.1f < 9.2 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.str_hello <= "hello" + </Original> + <Expanded> + "hello" <= "hello" + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.str_hello >= "hello" + </Original> + <Expanded> + "hello" >= "hello" + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.str_hello < "hellp" + </Original> + <Expanded> + "hello" < "hellp" + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.str_hello < "zebra" + </Original> + <Expanded> + "hello" < "zebra" + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.str_hello > "hellm" + </Original> + <Expanded> + "hello" > "hellm" + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + data.str_hello > "a" + </Original> + <Expanded> + "hello" > "a" </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="(unimplemented) static bools can be evaluated"> - <Section name="compare to true"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <TestCase name="Output from all sections is reported"> + <Section name="one"> + <Failure> + Message from section one + </Failure> + <OverallResults successes="0" failures="1" expectedFailures="0"/> + </Section> + <Section name="two"> + <Failure> + Message from section two + </Failure> + <OverallResults successes="0" failures="1" expectedFailures="0"/> + </Section> + <OverallResult success="false"/> + </TestCase> + <TestCase name="Parse test names and tags"> + <Section name="Empty test spec should have no filters"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > <Original> - is_true<true>::value == true + spec.hasFilters() == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <Section name="Test spec from empty string should have no filters"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches(tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <Section name="Test spec from just a comma should have no filters"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <Section name="Test spec from name should have one filter"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true </Original> <Expanded> true == true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > <Original> - true == is_true<true>::value + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == true </Original> <Expanded> true == true </Expanded> </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> + <OverallResults successes="3" failures="0" expectedFailures="0"/> </Section> - <Section name="compare to false"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <Section name="Test spec from quoted name should have one filter"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > <Original> - is_true<false>::value == false + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false </Original> <Expanded> false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > <Original> - false == is_true<false>::value + spec.matches( tcB ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <Section name="Test spec from name should have one filter"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false </Original> <Expanded> false == false </Expanded> </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="4" failures="0" expectedFailures="0"/> </Section> - <Section name="negation"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <Section name="Wildcard at the start"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > <Original> - !is_true<false>::value + spec.hasFilters() == true </Original> <Expanded> - true + true == true </Expanded> </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + parseTestSpec( "*a" ).matches( tcA ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="6" failures="0" expectedFailures="0"/> </Section> - <Section name="double negation"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <Section name="Wildcard at the end"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > <Original> - !!is_true<true>::value + spec.hasFilters() == true </Original> <Expanded> - true + true == true </Expanded> </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + parseTestSpec( "a*" ).matches( tcA ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="6" failures="0" expectedFailures="0"/> </Section> - <Section name="direct"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <Section name="Wildcard at both ends"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > <Original> - is_true<true>::value + spec.hasFilters() == true </Original> <Expanded> - true + true == true </Expanded> </Expression> - <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/TrickyTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > <Original> - !is_true<false>::value + spec.matches( tcA ) == false </Original> <Expanded> - !false + false == false </Expanded> </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + parseTestSpec( "*a*" ).matches( tcA ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="6" failures="0" expectedFailures="0"/> + </Section> + <Section name="Redundant wildcard at the start"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <Section name="Redundant wildcard at the end"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <Section name="Redundant wildcard at both ends"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <Section name="Wildcard at both ends, redundant at start"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="5" failures="0" expectedFailures="0"/> + </Section> + <Section name="Just wildcard"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="5" failures="0" expectedFailures="0"/> + </Section> + <Section name="Single tag"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="4" failures="0" expectedFailures="0"/> + </Section> + <Section name="Single tag, two matches"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="4" failures="0" expectedFailures="0"/> + </Section> + <Section name="Two tags"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="4" failures="0" expectedFailures="0"/> + </Section> + <Section name="Two tags, spare separated"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="4" failures="0" expectedFailures="0"/> + </Section> + <Section name="Wildcarded name and tag"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="5" failures="0" expectedFailures="0"/> + </Section> + <Section name="Single tag exclusion"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="4" failures="0" expectedFailures="0"/> + </Section> + <Section name="One tag exclusion and one tag inclusion"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="4" failures="0" expectedFailures="0"/> + </Section> + <Section name="One tag exclusion and one wldcarded name inclusion"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="5" failures="0" expectedFailures="0"/> + </Section> + <Section name="One tag exclusion, using exclude:, and one wldcarded name inclusion"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="5" failures="0" expectedFailures="0"/> + </Section> + <Section name="name exclusion"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="5" failures="0" expectedFailures="0"/> + </Section> + <Section name="wildcarded name exclusion"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="5" failures="0" expectedFailures="0"/> + </Section> + <Section name="wildcarded name exclusion with tag inclusion"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="5" failures="0" expectedFailures="0"/> + </Section> + <Section name="wildcarded name exclusion, using exclude:, with tag inclusion"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="5" failures="0" expectedFailures="0"/> + </Section> + <Section name="two wildcarded names"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="5" failures="0" expectedFailures="0"/> + </Section> + <Section name="empty tag"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="5" failures="0" expectedFailures="0"/> + </Section> + <Section name="empty quoted name"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <OverallResults successes="5" failures="0" expectedFailures="0"/> + </Section> + <Section name="quoted string followed by tag exclusion"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.hasFilters() == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcA ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcB ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcC ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/CmdLineTests.cpp" > + <Original> + spec.matches( tcD ) == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="5" failures="0" expectedFailures="0"/> </Section> <OverallResult success="true"/> </TestCase> - <TestCase name="Objects that evaluated in boolean contexts can be checked"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" > + <TestCase name="Parsing a std::pair"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > <Original> - True + (std::pair<int, int>( 1, 2 )) == aNicePair </Original> <Expanded> - true + std::pair( 1, 2 ) == std::pair( 1, 2 ) + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="Pointers can be compared to null"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + p == 0 + </Original> + <Expanded> + NULL == 0 </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - !False + p == pNULL </Original> <Expanded> - true + NULL == NULL </Expanded> </Expression> - <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/TrickyTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - !False + p != 0 </Original> <Expanded> - !false + 0x<hex digits> != 0 </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Assertions then sections"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > <Original> - Catch::alwaysTrue() + cp != 0 </Original> <Expanded> - true + 0x<hex digits> != 0 </Expanded> </Expression> - <Section name="A section"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + cpc != 0 + </Original> + <Expanded> + 0x<hex digits> != 0 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + returnsNull() == 0 + </Original> + <Expanded> + {null string} == 0 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + returnsConstNull() == 0 + </Original> + <Expanded> + {null string} == 0 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + 0 != p + </Original> + <Expanded> + 0 != 0x<hex digits> + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="Pointers can be converted to strings"> + <Warning> + actual address of p: 0x<hex digits> + </Warning> + <Warning> + toString(p): 0x<hex digits> + </Warning> + <OverallResult success="true"/> + </TestCase> + <TestCase name="Process can be configured on command line"> + <Section name="default - no arguments"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > <Original> - Catch::alwaysTrue() + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.shouldDebugBreak == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.abortAfter == -1 + </Original> + <Expanded> + -1 == -1 + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.noThrow == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.reporterNames.empty() </Original> <Expanded> true </Expanded> </Expression> - <Section name="Another section"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <OverallResults successes="5" failures="0" expectedFailures="0"/> + </Section> + <Section name="test lists"> + <Section name="1 test" description="Specify one test case using"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > <Original> - Catch::alwaysTrue() + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + cfg.testSpec().matches( fakeTestCase( "notIncluded" ) ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + cfg.testSpec().matches( fakeTestCase( "test1" ) ) </Original> <Expanded> true </Expanded> </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <Section name="test lists"> + <Section name="Specify one test case exclusion using exclude:"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) ) + </Original> + <Expanded> + true + </Expanded> + </Expression> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <Section name="test lists"> + <Section name="Specify one test case exclusion using ~"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false + </Original> + <Expanded> + false == false + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) ) + </Original> + <Expanded> + true + </Expanded> + </Expression> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <Section name="reporter"> + <Section name="-r/console"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.reporterNames[0] == "console" + </Original> + <Expanded> + "console" == "console" + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > - <Original> - Catch::alwaysTrue() - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Section name="A section"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > - <Original> - Catch::alwaysTrue() - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Section name="Another other section"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <Section name="reporter"> + <Section name="-r/xml"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > <Original> - Catch::alwaysTrue() + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.reporterNames[0] == "xml" + </Original> + <Expanded> + "xml" == "xml" + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Section name="reporter"> + <Section name="-r xml and junit"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.reporterNames.size() == 2 + </Original> + <Expanded> + 2 == 2 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.reporterNames[0] == "xml" + </Original> + <Expanded> + "xml" == "xml" + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.reporterNames[1] == "junit" + </Original> + <Expanded> + "junit" == "junit" + </Expanded> + </Expression> + <OverallResults successes="4" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="4" failures="0" expectedFailures="0"/> + </Section> + <Section name="reporter"> + <Section name="--reporter/junit"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.reporterNames[0] == "junit" + </Original> + <Expanded> + "junit" == "junit" + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Section name="debugger"> + <Section name="-b"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.shouldDebugBreak == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Section name="debugger"> + <Section name="--break"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.shouldDebugBreak </Original> <Expanded> true </Expanded> </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Section name="abort"> + <Section name="-a aborts after first failure"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.abortAfter == 1 + </Original> + <Expanded> + 1 == 1 + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Section name="abort"> + <Section name="-x 2 aborts after two failures"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.abortAfter == 2 + </Original> + <Expanded> + 2 == 2 + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Section name="abort"> + <Section name="-x must be greater than zero"> + <Expression success="true" type="REQUIRE_THAT" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfigAndReturnError( argv, config ), Contains( "greater than zero" ) + </Original> + <Expanded> + "Value after -x or --abortAfter must be greater than zero +- while parsing: (-x, --abortx <no. failures>)" contains: "greater than zero" + </Expanded> + </Expression> <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <Section name="abort"> + <Section name="-x must be numeric"> + <Expression success="true" type="REQUIRE_THAT" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfigAndReturnError( argv, config ), Contains( "-x" ) + </Original> + <Expanded> + "Unable to convert oops to destination type +- while parsing: (-x, --abortx <no. failures>)" contains: "-x" + </Expanded> + </Expression> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <Section name="nothrow"> + <Section name="-e"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.noThrow == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Section name="nothrow"> + <Section name="--nothrow"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.noThrow == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> + <Section name="output filename"> + <Section name="-o filename"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.outputFilename == "filename.ext" + </Original> + <Expanded> + "filename.ext" == "filename.ext" + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Section name="output filename"> + <Section name="--out"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.outputFilename == "filename.ext" + </Original> + <Expanded> + "filename.ext" == "filename.ext" + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Section name="combinations"> + <Section name="Single character flags can be combined"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.abortAfter == 1 + </Original> + <Expanded> + 1 == 1 + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.shouldDebugBreak + </Original> + <Expanded> + true + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.noThrow == true + </Original> + <Expanded> + true == true + </Expanded> + </Expression> + <OverallResults successes="4" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="4" failures="0" expectedFailures="0"/> + </Section> + <Section name="use-colour"> + <Section name="without option"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.useColour == UseColour::Auto + </Original> + <Expanded> + 0 == 0 + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Section name="use-colour"> + <Section name="auto"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.useColour == UseColour::Auto + </Original> + <Expanded> + 0 == 0 + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Section name="use-colour"> + <Section name="yes"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.useColour == UseColour::Yes + </Original> + <Expanded> + 1 == 1 + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Section name="use-colour"> + <Section name="no"> + <Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ) + </Original> + <Expanded> + parseIntoConfig( argv, config ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + config.useColour == UseColour::No + </Original> + <Expanded> + 2 == 2 + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <Section name="use-colour"> + <Section name="error"> + <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + parseIntoConfig( argv, config ), Contains( "colour mode must be one of" ) + </Original> + <Expanded> + parseIntoConfig( argv, config ), Contains( "colour mode must be one of" ) + </Expanded> + </Expression> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> <OverallResult success="true"/> </TestCase> - <TestCase name="non streamable - with conv. op"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <TestCase name="SCOPED_INFO is reset for each loop"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MessageTests.cpp" > <Original> - s == "7" + i < 10 </Original> <Expanded> - "7" == "7" + 0 < 10 </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Comparing function pointers"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MessageTests.cpp" > <Original> - a + i < 10 </Original> <Expanded> - true + 1 < 10 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MessageTests.cpp" > <Original> - a == &foo + i < 10 </Original> <Expanded> - 0x<hex digits> == 0x<hex digits> + 2 < 10 </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Comparing member function pointers"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MessageTests.cpp" > <Original> - m == &S::f + i < 10 </Original> <Expanded> - 0x<hex digits> -== -0x<hex digits> + 3 < 10 </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="pointer to class"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MessageTests.cpp" > <Original> - p == 0 + i < 10 </Original> <Expanded> - NULL == 0 + 4 < 10 </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="null_ptr"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MessageTests.cpp" > <Original> - ptr.get() == nullptr + i < 10 </Original> <Expanded> - NULL == nullptr + 5 < 10 </Expanded> </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MessageTests.cpp" > + <Original> + i < 10 + </Original> + <Expanded> + 6 < 10 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MessageTests.cpp" > + <Original> + i < 10 + </Original> + <Expanded> + 7 < 10 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MessageTests.cpp" > + <Original> + i < 10 + </Original> + <Expanded> + 8 < 10 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MessageTests.cpp" > + <Original> + i < 10 + </Original> + <Expanded> + 9 < 10 + </Expanded> + </Expression> + <Info> + current counter 10 + </Info> + <Info> + i := 10 + </Info> + <Expression success="false" type="REQUIRE" filename="projects/<exe-name>/MessageTests.cpp" > + <Original> + i < 10 + </Original> + <Expanded> + 10 < 10 + </Expanded> + </Expression> + <OverallResult success="false"/> + </TestCase> + <TestCase name="SUCCEED counts as a test pass"> <OverallResult success="true"/> </TestCase> - <TestCase name="X/level/0/a"> + <TestCase name="SUCCESS does not require an argument"> <OverallResult success="true"/> </TestCase> - <TestCase name="X/level/0/b"> + <TestCase name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods"> + <Section name="Given: No operations precede me"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/BDDTests.cpp" > + <Original> + before == 0 + </Original> + <Expanded> + 0 == 0 + </Expanded> + </Expression> + <Section name="When: We get the count"> + <Section name="Then: Subsequently values are higher"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/BDDTests.cpp" > + <Original> + after > before + </Original> + <Expanded> + 1 > 0 + </Expanded> + </Expression> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> <OverallResult success="true"/> </TestCase> - <TestCase name="X/level/1/a"> + <TestCase name="Scenario: Do that thing with the thing"> + <Section name="Given: This stuff exists"> + <Section name="When: I do this"> + <Section name="Then: it should do this"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/BDDTests.cpp" > + <Original> + itDoesThis() + </Original> + <Expanded> + true + </Expanded> + </Expression> + <Section name="And: do that"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/BDDTests.cpp" > + <Original> + itDoesThat() + </Original> + <Expanded> + true + </Expanded> + </Expression> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> <OverallResult success="true"/> </TestCase> - <TestCase name="X/level/1/b"> + <TestCase name="Scenario: This is a really long scenario name to see how the list command deals with wrapping"> + <Section name="Given: A section name that is so long that it cannot fit in a single console width"> + <Section name="When: The test headers are printed as part of the normal running of the scenario"> + <Section name="Then: The, deliberately very long and overly verbose (you see what I did there?) section names must wrap, along with an indent"> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> <OverallResult success="true"/> </TestCase> - <TestCase name="toString( has_toString )"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" > + <TestCase name="Scenario: Vector resizing affects size and capacity"> + <Section name="Given: an empty vector"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/BDDTests.cpp" > + <Original> + v.size() == 0 + </Original> + <Expanded> + 0 == 0 + </Expanded> + </Expression> + <Section name="When: it is made larger"> + <Section name="Then: the size and capacity go up"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/BDDTests.cpp" > + <Original> + v.size() == 10 + </Original> + <Expanded> + 10 == 10 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/BDDTests.cpp" > + <Original> + v.capacity() >= 10 + </Original> + <Expanded> + 10 >= 10 + </Expanded> + </Expression> + <Section name="And when: it is made smaller again"> + <Section name="Then: the size goes down but the capacity stays the same"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/BDDTests.cpp" > + <Original> + v.size() == 5 + </Original> + <Expanded> + 5 == 5 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/BDDTests.cpp" > + <Original> + v.capacity() >= 10 + </Original> + <Expanded> + 10 >= 10 + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="4" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="4" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="5" failures="0" expectedFailures="0"/> + </Section> + <Section name="Given: an empty vector"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/BDDTests.cpp" > + <Original> + v.size() == 0 + </Original> + <Expanded> + 0 == 0 + </Expanded> + </Expression> + <Section name="When: we reserve more space"> + <Section name="Then: The capacity is increased but the size remains the same"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/BDDTests.cpp" > + <Original> + v.capacity() >= 10 + </Original> + <Expanded> + 10 >= 10 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/BDDTests.cpp" > + <Original> + v.size() == 0 + </Original> + <Expanded> + 0 == 0 + </Expanded> + </Expression> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="2" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <OverallResult success="true"/> + </TestCase> + <TestCase name="Sends stuff to stdout and stderr"> + <OverallResult success="true"/> + </TestCase> + <TestCase name="Some simple comparisons between doubles"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - Catch::toString( item ) == "toString( has_toString )" + d == Approx( 1.23 ) </Original> <Expanded> - "toString( has_toString )" -== -"toString( has_toString )" + 1.23 == Approx( 1.23 ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > + <Original> + d != Approx( 1.22 ) + </Original> + <Expanded> + 1.23 != Approx( 1.22 ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > + <Original> + d != Approx( 1.24 ) + </Original> + <Expanded> + 1.23 != Approx( 1.24 ) + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > + <Original> + Approx( d ) == 1.23 + </Original> + <Expanded> + Approx( 1.23 ) == 1.23 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > + <Original> + Approx( d ) != 1.22 + </Original> + <Expanded> + Approx( 1.23 ) != 1.22 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > + <Original> + Approx( d ) != 1.24 + </Original> + <Expanded> + Approx( 1.23 ) != 1.24 </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="toString( has_maker )"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" > + <TestCase name="Standard output from all sections is reported"> + <Section name="one"> + <OverallResults successes="0" failures="1" expectedFailures="0"/> + </Section> + <Section name="two"> + <OverallResults successes="0" failures="1" expectedFailures="0"/> + </Section> + <OverallResult success="false"/> + </TestCase> + <TestCase name="StartsWith string matcher"> + <Expression success="false" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - Catch::toString( item ) == "StringMaker<has_maker>" + testStringForMatching(), StartsWith( "string" ) </Original> <Expanded> - "StringMaker<has_maker>" -== -"StringMaker<has_maker>" + "this string contains 'abc' as a substring" starts with: "string" + </Expanded> + </Expression> + <OverallResult success="false"/> + </TestCase> + <TestCase name="String matchers"> + <Expression success="true" type="REQUIRE_THAT" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + testStringForMatching(), Contains( "string" ) + </Original> + <Expanded> + "this string contains 'abc' as a substring" contains: "string" + </Expanded> + </Expression> + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + testStringForMatching(), Contains( "abc" ) + </Original> + <Expanded> + "this string contains 'abc' as a substring" contains: "abc" + </Expanded> + </Expression> + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + testStringForMatching(), StartsWith( "this" ) + </Original> + <Expanded> + "this string contains 'abc' as a substring" starts with: "this" + </Expanded> + </Expression> + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + testStringForMatching(), EndsWith( "substring" ) + </Original> + <Expanded> + "this string contains 'abc' as a substring" ends with: "substring" </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="toString( has_maker_and_toString )"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" > + <TestCase name="Strings can be rendered with colour"> + <OverallResult success="true"/> + </TestCase> + <TestCase name="Tabs and newlines show in output"> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - Catch::toString( item ) == "toString( has_maker_and_toString )" + s1 == s2 </Original> <Expanded> - "toString( has_maker_and_toString )" + "if ($b == 10) { + $a = 20; +}" == -"toString( has_maker_and_toString )" +"if ($b == 10) { + $a = 20; +} +" </Expanded> </Expression> + <OverallResult success="false"/> + </TestCase> + <TestCase name="Tag alias can be registered against tag patterns"> + <Section name="The same tag alias can only be registered once"> + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/TagAliasTests.cpp" > + <Original> + what, Contains( "[@zzz]" ) + </Original> + <Expanded> + "error: tag alias, "[@zzz]" already registered. + First seen at file:2 + Redefined at file:10" contains: "[@zzz]" + </Expanded> + </Expression> + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/TagAliasTests.cpp" > + <Original> + what, Contains( "file" ) + </Original> + <Expanded> + "error: tag alias, "[@zzz]" already registered. + First seen at file:2 + Redefined at file:10" contains: "file" + </Expanded> + </Expression> + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/TagAliasTests.cpp" > + <Original> + what, Contains( "2" ) + </Original> + <Expanded> + "error: tag alias, "[@zzz]" already registered. + First seen at file:2 + Redefined at file:10" contains: "2" + </Expanded> + </Expression> + <Expression success="true" type="CHECK_THAT" filename="projects/<exe-name>/TagAliasTests.cpp" > + <Original> + what, Contains( "10" ) + </Original> + <Expanded> + "error: tag alias, "[@zzz]" already registered. + First seen at file:2 + Redefined at file:10" contains: "10" + </Expanded> + </Expression> + <OverallResults successes="4" failures="0" expectedFailures="0"/> + </Section> + <Section name="Tag aliases must be of the form [@name]"> + <Expression success="true" type="CHECK_THROWS" filename="projects/<exe-name>/TagAliasTests.cpp" > + <Original> + registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) + </Original> + <Expanded> + registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) + </Expanded> + </Expression> + <Expression success="true" type="CHECK_THROWS" filename="projects/<exe-name>/TagAliasTests.cpp" > + <Original> + registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) + </Original> + <Expanded> + registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) + </Expanded> + </Expression> + <Expression success="true" type="CHECK_THROWS" filename="projects/<exe-name>/TagAliasTests.cpp" > + <Original> + registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) + </Original> + <Expanded> + registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) + </Expanded> + </Expression> + <Expression success="true" type="CHECK_THROWS" filename="projects/<exe-name>/TagAliasTests.cpp" > + <Original> + registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) + </Original> + <Expanded> + registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) + </Expanded> + </Expression> + <OverallResults successes="4" failures="0" expectedFailures="0"/> + </Section> <OverallResult success="true"/> </TestCase> - <TestCase name="toString( vectors<has_toString )"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" > + <TestCase name="Test case with one argument"> + <OverallResult success="true"/> + </TestCase> + <TestCase name="Test enum bit values"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > <Original> - Catch::toString( v ) == "{ {?} }" + 0x<hex digits> == bit30and31 </Original> <Expanded> - "{ {?} }" == "{ {?} }" + 3221225472 (0x<hex digits>) == 3221225472 </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="toString( vectors<has_maker )"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" > + <TestCase name="Text can be formatted using the Text class"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - Catch::toString( v ) == "{ StringMaker<has_maker> }" + Text( "hi there" ).toString() == "hi there" </Original> <Expanded> - "{ StringMaker<has_maker> }" + "hi there" == "hi there" + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > + <Original> + Text( "hi there", narrow ).toString() == "hi\nthere" + </Original> + <Expanded> + "hi +there" == -"{ StringMaker<has_maker> }" +"hi +there" </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="toString( vectors<has_maker_and_toString )"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" > + <TestCase name="The NO_FAIL macro reports a failure but does not fail the test"> + <Expression success="false" type="CHECK_NOFAIL" filename="projects/<exe-name>/MessageTests.cpp" > <Original> - Catch::toString( v ) == "{ StringMaker<has_maker_and_toString> }" + 1 == 2 </Original> <Expanded> - "{ StringMaker<has_maker_and_toString> }" -== -"{ StringMaker<has_maker_and_toString> }" + 1 == 2 </Expanded> </Expression> <OverallResult success="true"/> </TestCase> + <TestCase name="This test 'should' fail but doesn't"> + <OverallResult success="false"/> + </TestCase> <TestCase name="Tracker"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isOpen() </Original> @@ -6802,7 +7069,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isOpen() </Original> @@ -6811,7 +7078,7 @@ there" </Expanded> </Expression> <Section name="successfully close one section"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isSuccessfullyCompleted() </Original> @@ -6819,7 +7086,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isComplete() == false </Original> @@ -6827,7 +7094,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> ctx.completedCycle() </Original> @@ -6835,7 +7102,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isSuccessfullyCompleted() </Original> @@ -6845,7 +7112,7 @@ there" </Expression> <OverallResults successes="4" failures="0" expectedFailures="0"/> </Section> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isOpen() </Original> @@ -6853,7 +7120,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isOpen() </Original> @@ -6862,7 +7129,7 @@ there" </Expanded> </Expression> <Section name="fail one section"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isComplete() </Original> @@ -6870,7 +7137,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isSuccessfullyCompleted() == false </Original> @@ -6878,7 +7145,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isComplete() == false </Original> @@ -6886,7 +7153,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> ctx.completedCycle() </Original> @@ -6894,7 +7161,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isSuccessfullyCompleted() == false </Original> @@ -6903,7 +7170,7 @@ there" </Expanded> </Expression> <Section name="re-enter after failed section"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase2.isOpen() </Original> @@ -6911,7 +7178,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1b.isOpen() == false </Original> @@ -6919,7 +7186,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> ctx.completedCycle() </Original> @@ -6927,7 +7194,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isComplete() </Original> @@ -6935,7 +7202,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isSuccessfullyCompleted() </Original> @@ -6947,7 +7214,7 @@ there" </Section> <OverallResults successes="10" failures="0" expectedFailures="0"/> </Section> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isOpen() </Original> @@ -6955,7 +7222,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isOpen() </Original> @@ -6964,7 +7231,7 @@ there" </Expanded> </Expression> <Section name="fail one section"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isComplete() </Original> @@ -6972,7 +7239,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isSuccessfullyCompleted() == false </Original> @@ -6980,7 +7247,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isComplete() == false </Original> @@ -6988,7 +7255,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> ctx.completedCycle() </Original> @@ -6996,7 +7263,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isSuccessfullyCompleted() == false </Original> @@ -7005,7 +7272,7 @@ there" </Expanded> </Expression> <Section name="re-enter after failed section and find next section"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase2.isOpen() </Original> @@ -7013,7 +7280,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1b.isOpen() == false </Original> @@ -7021,7 +7288,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2.isOpen() </Original> @@ -7029,7 +7296,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> ctx.completedCycle() </Original> @@ -7037,7 +7304,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isComplete() </Original> @@ -7045,7 +7312,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isSuccessfullyCompleted() </Original> @@ -7057,7 +7324,7 @@ there" </Section> <OverallResults successes="11" failures="0" expectedFailures="0"/> </Section> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isOpen() </Original> @@ -7065,7 +7332,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isOpen() </Original> @@ -7074,7 +7341,7 @@ there" </Expanded> </Expression> <Section name="successfully close one section, then find another"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2.isOpen() == false </Original> @@ -7082,7 +7349,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isComplete() == false </Original> @@ -7091,7 +7358,7 @@ there" </Expanded> </Expression> <Section name="Re-enter - skips S1 and enters S2"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase2.isOpen() </Original> @@ -7099,7 +7366,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1b.isOpen() == false </Original> @@ -7107,7 +7374,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2b.isOpen() </Original> @@ -7115,7 +7382,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> ctx.completedCycle() == false </Original> @@ -7124,7 +7391,7 @@ there" </Expanded> </Expression> <Section name="Successfully close S2"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> ctx.completedCycle() </Original> @@ -7132,7 +7399,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2b.isSuccessfullyCompleted() </Original> @@ -7140,7 +7407,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase2.isComplete() == false </Original> @@ -7148,7 +7415,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase2.isSuccessfullyCompleted() </Original> @@ -7162,7 +7429,7 @@ there" </Section> <OverallResults successes="10" failures="0" expectedFailures="0"/> </Section> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isOpen() </Original> @@ -7170,7 +7437,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isOpen() </Original> @@ -7179,7 +7446,7 @@ there" </Expanded> </Expression> <Section name="successfully close one section, then find another"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2.isOpen() == false </Original> @@ -7187,7 +7454,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isComplete() == false </Original> @@ -7196,7 +7463,7 @@ there" </Expanded> </Expression> <Section name="Re-enter - skips S1 and enters S2"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase2.isOpen() </Original> @@ -7204,7 +7471,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1b.isOpen() == false </Original> @@ -7212,7 +7479,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2b.isOpen() </Original> @@ -7220,7 +7487,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> ctx.completedCycle() == false </Original> @@ -7229,7 +7496,7 @@ there" </Expanded> </Expression> <Section name="fail S2"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> ctx.completedCycle() </Original> @@ -7237,7 +7504,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2b.isComplete() </Original> @@ -7245,7 +7512,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2b.isSuccessfullyCompleted() == false </Original> @@ -7253,7 +7520,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase2.isSuccessfullyCompleted() == false </Original> @@ -7261,7 +7528,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase3.isOpen() </Original> @@ -7269,7 +7536,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1c.isOpen() == false </Original> @@ -7277,7 +7544,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2c.isOpen() == false </Original> @@ -7285,7 +7552,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase3.isSuccessfullyCompleted() </Original> @@ -7299,7 +7566,7 @@ there" </Section> <OverallResults successes="14" failures="0" expectedFailures="0"/> </Section> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isOpen() </Original> @@ -7307,7 +7574,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isOpen() </Original> @@ -7316,7 +7583,7 @@ there" </Expanded> </Expression> <Section name="open a nested section"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2.isOpen() </Original> @@ -7324,7 +7591,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2.isComplete() </Original> @@ -7332,7 +7599,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isComplete() == false </Original> @@ -7340,7 +7607,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isComplete() </Original> @@ -7348,7 +7615,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isComplete() == false </Original> @@ -7356,7 +7623,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isComplete() </Original> @@ -7366,7 +7633,7 @@ there" </Expression> <OverallResults successes="6" failures="0" expectedFailures="0"/> </Section> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isOpen() </Original> @@ -7374,7 +7641,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isOpen() </Original> @@ -7383,7 +7650,7 @@ there" </Expanded> </Expression> <Section name="start a generator"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1.isOpen() </Original> @@ -7391,7 +7658,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1.index() == 0 </Original> @@ -7399,7 +7666,7 @@ there" 0 == 0 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1.isComplete() == false </Original> @@ -7407,7 +7674,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isComplete() == false </Original> @@ -7416,7 +7683,7 @@ there" </Expanded> </Expression> <Section name="close outer section"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isComplete() == false </Original> @@ -7424,7 +7691,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isSuccessfullyCompleted() == false </Original> @@ -7433,7 +7700,7 @@ there" </Expanded> </Expression> <Section name="Re-enter for second generation"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase2.isOpen() </Original> @@ -7441,7 +7708,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1b.isOpen() </Original> @@ -7449,7 +7716,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1b.isOpen() </Original> @@ -7457,7 +7724,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1b.index() == 1 </Original> @@ -7465,7 +7732,7 @@ there" 1 == 1 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isComplete() == false </Original> @@ -7473,7 +7740,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1b.isComplete() </Original> @@ -7481,7 +7748,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1b.isComplete() </Original> @@ -7489,7 +7756,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase2.isComplete() </Original> @@ -7503,7 +7770,7 @@ there" </Section> <OverallResults successes="14" failures="0" expectedFailures="0"/> </Section> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isOpen() </Original> @@ -7511,7 +7778,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isOpen() </Original> @@ -7520,7 +7787,7 @@ there" </Expanded> </Expression> <Section name="start a generator"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1.isOpen() </Original> @@ -7528,7 +7795,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1.index() == 0 </Original> @@ -7536,7 +7803,7 @@ there" 0 == 0 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1.isComplete() == false </Original> @@ -7544,7 +7811,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isComplete() == false </Original> @@ -7553,7 +7820,7 @@ there" </Expanded> </Expression> <Section name="Start a new inner section"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2.isOpen() </Original> @@ -7561,7 +7828,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2.isComplete() </Original> @@ -7569,7 +7836,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isComplete() == false </Original> @@ -7577,7 +7844,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isComplete() == false </Original> @@ -7586,7 +7853,7 @@ there" </Expanded> </Expression> <Section name="Re-enter for second generation"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase2.isOpen() </Original> @@ -7594,7 +7861,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1b.isOpen() </Original> @@ -7602,7 +7869,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1b.isOpen() </Original> @@ -7610,7 +7877,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1b.index() == 1 </Original> @@ -7618,7 +7885,7 @@ there" 1 == 1 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2b.isOpen() </Original> @@ -7626,7 +7893,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2b.isComplete() </Original> @@ -7634,7 +7901,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1b.isComplete() </Original> @@ -7642,7 +7909,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1b.isComplete() </Original> @@ -7650,7 +7917,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase2.isComplete() </Original> @@ -7664,7 +7931,7 @@ there" </Section> <OverallResults successes="17" failures="0" expectedFailures="0"/> </Section> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isOpen() </Original> @@ -7672,7 +7939,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isOpen() </Original> @@ -7681,7 +7948,7 @@ there" </Expanded> </Expression> <Section name="start a generator"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1.isOpen() </Original> @@ -7689,7 +7956,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1.index() == 0 </Original> @@ -7697,7 +7964,7 @@ there" 0 == 0 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1.isComplete() == false </Original> @@ -7705,7 +7972,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isComplete() == false </Original> @@ -7714,7 +7981,7 @@ there" </Expanded> </Expression> <Section name="Fail an inner section"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2.isOpen() </Original> @@ -7722,7 +7989,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2.isComplete() </Original> @@ -7730,7 +7997,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2.isSuccessfullyCompleted() == false </Original> @@ -7738,7 +8005,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1.isComplete() == false </Original> @@ -7746,7 +8013,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase.isComplete() == false </Original> @@ -7755,7 +8022,7 @@ there" </Expanded> </Expression> <Section name="Re-enter for second generation"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase2.isOpen() </Original> @@ -7763,7 +8030,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1b.isOpen() </Original> @@ -7771,7 +8038,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1b.isOpen() </Original> @@ -7779,7 +8046,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1b.index() == 0 </Original> @@ -7787,7 +8054,7 @@ there" 0 == 0 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2b.isOpen() == false </Original> @@ -7795,7 +8062,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1b.isComplete() == false </Original> @@ -7803,7 +8070,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1b.isComplete() == false </Original> @@ -7811,7 +8078,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase2.isComplete() == false </Original> @@ -7819,7 +8086,7 @@ there" false == false </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase3.isOpen() </Original> @@ -7827,7 +8094,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1c.isOpen() </Original> @@ -7835,7 +8102,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1c.isOpen() </Original> @@ -7843,7 +8110,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1c.index() == 1 </Original> @@ -7851,7 +8118,7 @@ there" 1 == 1 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2c.isOpen() </Original> @@ -7859,7 +8126,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s2c.isComplete() </Original> @@ -7867,7 +8134,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> g1c.isComplete() </Original> @@ -7875,7 +8142,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> s1c.isComplete() </Original> @@ -7883,7 +8150,7 @@ there" true </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/PartTrackerTests.cpp" > <Original> testCase3.isComplete() </Original> @@ -7899,1678 +8166,1344 @@ there" </Section> <OverallResult success="true"/> </TestCase> - <TestCase name="std::pair<int,std::string> -> toString"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" > - <Original> - Catch::toString( value ) == "{ 34, \"xyzzy\" }" - </Original> - <Expanded> - "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" - </Expanded> - </Expression> - <OverallResult success="true"/> + <TestCase name="Unexpected exceptions can be translated"> + <Exception filename="projects/<exe-name>/ExceptionTests.cpp" > + 3.14 + </Exception> + <OverallResult success="false"/> </TestCase> - <TestCase name="std::pair<int,const std::string> -> toString"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" > + <TestCase name="Use a custom approx"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - Catch::toString(value) == "{ 34, \"xyzzy\" }" + d == approx( 1.23 ) </Original> <Expanded> - "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" + 1.23 == Approx( 1.23 ) </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="std::vector<std::pair<std::string,int> > -> toString"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - Catch::toString( pr ) == "{ { \"green\", 55 } }" + d == approx( 1.22 ) </Original> <Expanded> - "{ { "green", 55 } }" -== -"{ { "green", 55 } }" + 1.23 == Approx( 1.22 ) </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="pair<pair<int,const char *,pair<std::string,int> > -> toString"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - Catch::toString( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" + d == approx( 1.24 ) </Original> <Expanded> - "{ { 42, "Arthur" }, { "Ford", 24 } }" -== -"{ { 42, "Arthur" }, { "Ford", 24 } }" + 1.23 == Approx( 1.24 ) </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="vector<int> -> toString"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - Catch::toString(vv) == "{ }" + d != approx( 1.25 ) </Original> <Expanded> - "{ }" == "{ }" + 1.23 != Approx( 1.25 ) </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - Catch::toString(vv) == "{ 42 }" + approx( d ) == 1.23 </Original> <Expanded> - "{ 42 }" == "{ 42 }" + Approx( 1.23 ) == 1.23 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - Catch::toString(vv) == "{ 42, 250 }" + approx( d ) == 1.22 </Original> <Expanded> - "{ 42, 250 }" == "{ 42, 250 }" + Approx( 1.23 ) == 1.22 </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="vector<string> -> toString"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - Catch::toString(vv) == "{ }" + approx( d ) == 1.24 </Original> <Expanded> - "{ }" == "{ }" + Approx( 1.23 ) == 1.24 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ApproxTests.cpp" > <Original> - Catch::toString(vv) == "{ \"hello\" }" + approx( d ) != 1.25 </Original> <Expanded> - "{ "hello" }" == "{ "hello" }" + Approx( 1.23 ) != 1.25 </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="Variadic macros"> + <Section name="Section with one argument"> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResult success="true"/> + </TestCase> + <TestCase name="When checked exceptions are thrown they can be expected or unexpected"> + <Expression success="true" type="REQUIRE_THROWS_AS" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> - Catch::toString(vv) == "{ \"hello\", \"world\" }" + thisThrows() </Original> <Expanded> - "{ "hello", "world" }" -== -"{ "hello", "world" }" + thisThrows() </Expanded> </Expression> - <OverallResult success="true"/> - </TestCase> - <TestCase name="vector<int,allocator> -> toString"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" > + <Expression success="true" type="REQUIRE_NOTHROW" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> - Catch::toString(vv) == "{ }" + thisDoesntThrow() </Original> <Expanded> - "{ }" == "{ }" + thisDoesntThrow() </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" > + <Expression success="true" type="REQUIRE_THROWS" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> - Catch::toString(vv) == "{ 42 }" + thisThrows() </Original> <Expanded> - "{ 42 }" == "{ 42 }" + thisThrows() </Expanded> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="When unchecked exceptions are thrown directly they are always failures"> + <Exception filename="projects/<exe-name>/ExceptionTests.cpp" > + unexpected exception + </Exception> + <OverallResult success="false"/> + </TestCase> + <TestCase name="When unchecked exceptions are thrown during a CHECK the test should continue"> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> - Catch::toString(vv) == "{ 42, 250 }" + thisThrows() == 0 </Original> <Expanded> - "{ 42, 250 }" == "{ 42, 250 }" + thisThrows() == 0 </Expanded> + <Exception filename="projects/<exe-name>/ExceptionTests.cpp" > + expected exception + </Exception> </Expression> - <OverallResult success="true"/> + <OverallResult success="false"/> </TestCase> - <TestCase name="vec<vec<string,alloc>> -> toString"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" > + <TestCase name="When unchecked exceptions are thrown during a REQUIRE the test should abort fail"> + <Expression success="false" type="REQUIRE" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> - Catch::toString(v) == "{ }" + thisThrows() == 0 </Original> <Expanded> - "{ }" == "{ }" + thisThrows() == 0 </Expanded> + <Exception filename="projects/<exe-name>/ExceptionTests.cpp" > + expected exception + </Exception> </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" > + <OverallResult success="false"/> + </TestCase> + <TestCase name="When unchecked exceptions are thrown from functions they are always failures"> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/ExceptionTests.cpp" > <Original> - Catch::toString(v) == "{ { \"hello\" }, { \"world\" } }" + thisThrows() == 0 </Original> <Expanded> - "{ { "hello" }, { "world" } }" -== -"{ { "hello" }, { "world" } }" + thisThrows() == 0 </Expanded> + <Exception filename="projects/<exe-name>/ExceptionTests.cpp" > + expected exception + </Exception> </Expression> - <OverallResult success="true"/> + <OverallResult success="false"/> </TestCase> - <TestCase name="Parse test names and tags"> - <Section name="Empty test spec should have no filters"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <OverallResults successes="3" failures="0" expectedFailures="0"/> - </Section> - <Section name="Test spec from empty string should have no filters"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches(tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <OverallResults successes="3" failures="0" expectedFailures="0"/> - </Section> - <Section name="Test spec from just a comma should have no filters"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <OverallResults successes="3" failures="0" expectedFailures="0"/> - </Section> - <Section name="Test spec from name should have one filter"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <OverallResults successes="3" failures="0" expectedFailures="0"/> - </Section> - <Section name="Test spec from quoted name should have one filter"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <OverallResults successes="3" failures="0" expectedFailures="0"/> - </Section> - <Section name="Test spec from name should have one filter"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcC ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <OverallResults successes="4" failures="0" expectedFailures="0"/> + <TestCase name="When unchecked exceptions are thrown from sections they are always failures"> + <Section name="section name"> + <Exception filename="projects/<exe-name>/ExceptionTests.cpp" > + unexpected exception + </Exception> + <OverallResults successes="0" failures="1" expectedFailures="0"/> </Section> - <Section name="Wildcard at the start"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcC ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcD ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <OverallResult success="false"/> + </TestCase> + <TestCase name="When unchecked exceptions are thrown, but caught, they do not affect the test"> + <OverallResult success="true"/> + </TestCase> + <TestCase name="Where the LHS is not a simple value"> + <Warning> + Uncomment the code in this test to check that it gives a sensible compiler error + </Warning> + <OverallResult success="true"/> + </TestCase> + <TestCase name="Where there is more to the expression after the RHS"> + <Warning> + Uncomment the code in this test to check that it gives a sensible compiler error + </Warning> + <OverallResult success="true"/> + </TestCase> + <TestCase name="X/level/0/a"> + <OverallResult success="true"/> + </TestCase> + <TestCase name="X/level/0/b"> + <OverallResult success="true"/> + </TestCase> + <TestCase name="X/level/1/a"> + <OverallResult success="true"/> + </TestCase> + <TestCase name="X/level/1/b"> + <OverallResult success="true"/> + </TestCase> + <TestCase name="XmlEncode"> + <Section name="normal string"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - parseTestSpec( "*a" ).matches( tcA ) == true + encode( "normal string" ) == "normal string" </Original> <Expanded> - true == true + "normal string" == "normal string" </Expanded> </Expression> - <OverallResults successes="6" failures="0" expectedFailures="0"/> + <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> - <Section name="Wildcard at the end"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcC ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcD ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Section name="empty string"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - parseTestSpec( "a*" ).matches( tcA ) == true + encode( "" ) == "" </Original> <Expanded> - true == true + "" == "" </Expanded> </Expression> - <OverallResults successes="6" failures="0" expectedFailures="0"/> + <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> - <Section name="Wildcard at both ends"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcC ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcD ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Section name="string with ampersand"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - parseTestSpec( "*a*" ).matches( tcA ) == true + encode( "smith & jones" ) == "smith &amp; jones" </Original> <Expanded> - true == true + "smith &amp; jones" == "smith &amp; jones" </Expanded> </Expression> - <OverallResults successes="6" failures="0" expectedFailures="0"/> + <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> - <Section name="Redundant wildcard at the start"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Section name="string with less-than"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - spec.matches( tcB ) == false + encode( "smith < jones" ) == "smith &lt; jones" </Original> <Expanded> - false == false + "smith &lt; jones" == "smith &lt; jones" </Expanded> </Expression> - <OverallResults successes="3" failures="0" expectedFailures="0"/> + <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> - <Section name="Redundant wildcard at the end"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Section name="string with greater-than"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - spec.matches( tcA ) == true + encode( "smith > jones" ) == "smith > jones" </Original> <Expanded> - true == true + "smith > jones" == "smith > jones" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - spec.matches( tcB ) == false + encode( "smith ]]> jones" ) == "smith ]]&gt; jones" </Original> <Expanded> - false == false + "smith ]]&gt; jones" +== +"smith ]]&gt; jones" </Expanded> </Expression> - <OverallResults successes="3" failures="0" expectedFailures="0"/> + <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> - <Section name="Redundant wildcard at both ends"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Section name="string with quotes"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - spec.matches( tcA ) == true + encode( stringWithQuotes ) == stringWithQuotes </Original> <Expanded> - true == true + "don't "quote" me on that" +== +"don't "quote" me on that" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - spec.matches( tcB ) == false + encode( stringWithQuotes, Catch::XmlEncode::ForAttributes ) == "don't &quot;quote&quot; me on that" </Original> <Expanded> - false == false + "don't &quot;quote&quot; me on that" +== +"don't &quot;quote&quot; me on that" </Expanded> </Expression> - <OverallResults successes="3" failures="0" expectedFailures="0"/> + <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> - <Section name="Wildcard at both ends, redundant at start"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcC ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Section name="string with control char (1)"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - spec.matches( tcD ) == true + encode( "[\x01]" ) == "[&#x01;]" </Original> <Expanded> - true == true + "[&#x01;]" == "[&#x01;]" </Expanded> </Expression> - <OverallResults successes="5" failures="0" expectedFailures="0"/> + <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> - <Section name="Just wildcard"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcC ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Section name="string with control char (x7F)"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - spec.matches( tcD ) == true + encode( "[\x7F]" ) == "[&#x7F;]" </Original> <Expanded> - true == true + "[&#x7F;]" == "[&#x7F;]" </Expanded> </Expression> - <OverallResults successes="5" failures="0" expectedFailures="0"/> + <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> - <Section name="Single tag"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcC ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <OverallResults successes="4" failures="0" expectedFailures="0"/> + <OverallResult success="true"/> + </TestCase> + <TestCase name="atomic if"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + x == 0 + </Original> + <Expanded> + 0 == 0 + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="boolean member"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + obj.prop != 0 + </Original> + <Expanded> + 0x<hex digits> != 0 + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="checkedElse"> + <Expression success="true" type="CHECKED_ELSE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + flag + </Original> + <Expanded> + true + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + testCheckedElse( true ) + </Original> + <Expanded> + true + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="checkedElse, failing"> + <Expression success="false" type="CHECKED_ELSE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + flag + </Original> + <Expanded> + false + </Expanded> + </Expression> + <Expression success="false" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + testCheckedElse( false ) + </Original> + <Expanded> + false + </Expanded> + </Expression> + <OverallResult success="false"/> + </TestCase> + <TestCase name="checkedIf"> + <Expression success="true" type="CHECKED_IF" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + flag + </Original> + <Expanded> + true + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + testCheckedIf( true ) + </Original> + <Expanded> + true + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="checkedIf, failing"> + <Expression success="false" type="CHECKED_IF" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + flag + </Original> + <Expanded> + false + </Expanded> + </Expression> + <Expression success="false" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + testCheckedIf( false ) + </Original> + <Expanded> + false + </Expanded> + </Expression> + <OverallResult success="false"/> + </TestCase> + <TestCase name="comparisons between const int variables"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + unsigned_char_var == 1 + </Original> + <Expanded> + 1 == 1 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + unsigned_short_var == 1 + </Original> + <Expanded> + 1 == 1 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + unsigned_int_var == 1 + </Original> + <Expanded> + 1 == 1 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + unsigned_long_var == 1 + </Original> + <Expanded> + 1 == 1 + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="comparisons between int variables"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + long_var == unsigned_char_var + </Original> + <Expanded> + 1 == 1 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + long_var == unsigned_short_var + </Original> + <Expanded> + 1 == 1 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + long_var == unsigned_int_var + </Original> + <Expanded> + 1 == 1 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ConditionTests.cpp" > + <Original> + long_var == unsigned_long_var + </Original> + <Expanded> + 1 == 1 + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="even more nested SECTION tests"> + <Section name="c"> + <Section name="d (leaf)"> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> - <Section name="Single tag, two matches"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcC ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <OverallResults successes="4" failures="0" expectedFailures="0"/> + <Section name="c"> + <Section name="e (leaf)"> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> - <Section name="Two tags"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcC ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <OverallResults successes="4" failures="0" expectedFailures="0"/> + <Section name="f (leaf)"> + <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> - <Section name="Two tags, spare separated"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="first tag"> + <OverallResult success="true"/> + </TestCase> + <TestCase name="just failure"> + <Failure> + Previous info should not be seen + </Failure> + <OverallResult success="false"/> + </TestCase> + <TestCase name="just info"> + <OverallResult success="true"/> + </TestCase> + <TestCase name="looped SECTION tests"> + <Section name="s1" description="b is currently: 0"> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - spec.matches( tcC ) == true + b > a </Original> <Expanded> - true == true + 0 > 1 </Expanded> </Expression> - <OverallResults successes="4" failures="0" expectedFailures="0"/> + <OverallResults successes="0" failures="1" expectedFailures="0"/> </Section> - <Section name="Wildcarded name and tag"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcC ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcD ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <OverallResults successes="5" failures="0" expectedFailures="0"/> + <OverallResult success="false"/> + </TestCase> + <TestCase name="looped tests"> + <Info> + Testing if fib[0] (1) is even + </Info> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + ( fib[i] % 2 ) == 0 + </Original> + <Expanded> + 1 == 0 + </Expanded> + </Expression> + <Info> + Testing if fib[1] (1) is even + </Info> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + ( fib[i] % 2 ) == 0 + </Original> + <Expanded> + 1 == 0 + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + ( fib[i] % 2 ) == 0 + </Original> + <Expanded> + 0 == 0 + </Expanded> + </Expression> + <Info> + Testing if fib[3] (3) is even + </Info> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + ( fib[i] % 2 ) == 0 + </Original> + <Expanded> + 1 == 0 + </Expanded> + </Expression> + <Info> + Testing if fib[4] (5) is even + </Info> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + ( fib[i] % 2 ) == 0 + </Original> + <Expanded> + 1 == 0 + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + ( fib[i] % 2 ) == 0 + </Original> + <Expanded> + 0 == 0 + </Expanded> + </Expression> + <Info> + Testing if fib[6] (13) is even + </Info> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + ( fib[i] % 2 ) == 0 + </Original> + <Expanded> + 1 == 0 + </Expanded> + </Expression> + <Info> + Testing if fib[7] (21) is even + </Info> + <Expression success="false" type="CHECK" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + ( fib[i] % 2 ) == 0 + </Original> + <Expanded> + 1 == 0 + </Expanded> + </Expression> + <OverallResult success="false"/> + </TestCase> + <TestCase name="more nested SECTION tests"> + <Section name="s1" description="doesn't equal"> + <Section name="s2" description="equal"> + <Expression success="false" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + a == b + </Original> + <Expanded> + 1 == 2 + </Expanded> + </Expression> + <OverallResults successes="0" failures="1" expectedFailures="0"/> + </Section> + <OverallResults successes="0" failures="1" expectedFailures="0"/> </Section> - <Section name="Single tag exclusion"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcC ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <OverallResults successes="4" failures="0" expectedFailures="0"/> + <Section name="s1" description="doesn't equal"> + <Section name="s3" description="not equal"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + a != b + </Original> + <Expanded> + 1 != 2 + </Expanded> + </Expression> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> - <Section name="One tag exclusion and one tag inclusion"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcC ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <OverallResults successes="4" failures="0" expectedFailures="0"/> + <Section name="s1" description="doesn't equal"> + <Section name="s4" description="less than"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + a < b + </Original> + <Expanded> + 1 < 2 + </Expanded> + </Expression> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> - <Section name="One tag exclusion and one wldcarded name inclusion"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <OverallResult success="false"/> + </TestCase> + <TestCase name="nested SECTION tests"> + <Section name="s1" description="doesn't equal"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - spec.matches( tcC ) == false + a != b </Original> <Expanded> - false == false + 1 != 2 </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - spec.matches( tcD ) == true + b != a </Original> <Expanded> - true == true + 2 != 1 </Expanded> </Expression> - <OverallResults successes="5" failures="0" expectedFailures="0"/> + <Section name="s2" description="not equal"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + a != b + </Original> + <Expanded> + 1 != 2 + </Expanded> + </Expression> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="3" failures="0" expectedFailures="0"/> </Section> - <Section name="One tag exclusion, using exclude:, and one wldcarded name inclusion"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="non streamable - with conv. op"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + s == "7" + </Original> + <Expanded> + "7" == "7" + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="not allowed"> + <OverallResult success="true"/> + </TestCase> + <TestCase name="null strings"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + makeString( false ) != static_cast<char*>(0) + </Original> + <Expanded> + "valid string" != {null string} + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + makeString( true ) == static_cast<char*>(0) + </Original> + <Expanded> + {null string} == {null string} + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="pair<pair<int,const char *,pair<std::string,int> > -> toString"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ToStringPair.cpp" > + <Original> + Catch::toString( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" + </Original> + <Expanded> + "{ { 42, "Arthur" }, { "Ford", 24 } }" +== +"{ { 42, "Arthur" }, { "Ford", 24 } }" + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="pointer to class"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + p == 0 + </Original> + <Expanded> + NULL == 0 + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="random SECTION tests"> + <Section name="s1" description="doesn't equal"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - spec.matches( tcC ) == false + a != b </Original> <Expanded> - false == false + 1 != 2 </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - spec.matches( tcD ) == true + b != a </Original> <Expanded> - true == true + 2 != 1 </Expanded> </Expression> - <OverallResults successes="5" failures="0" expectedFailures="0"/> + <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> - <Section name="name exclusion"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcC ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Section name="s2" description="not equal"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - spec.matches( tcD ) == true + a != b </Original> <Expanded> - true == true + 1 != 2 </Expanded> </Expression> - <OverallResults successes="5" failures="0" expectedFailures="0"/> + <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> - <Section name="wildcarded name exclusion"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="replaceInPlace"> + <Section name="replace single char"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - spec.matches( tcC ) == false + replaceInPlace( letters, "b", "z" ) </Original> <Expanded> - false == false + true </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - spec.matches( tcD ) == false + letters == "azcdefcg" </Original> <Expanded> - false == false + "azcdefcg" == "azcdefcg" </Expanded> </Expression> - <OverallResults successes="5" failures="0" expectedFailures="0"/> + <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> - <Section name="wildcarded name exclusion with tag inclusion"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Section name="replace two chars"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - spec.matches( tcC ) == true + replaceInPlace( letters, "c", "z" ) </Original> <Expanded> - true == true + true </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - spec.matches( tcD ) == false + letters == "abzdefzg" </Original> <Expanded> - false == false + "abzdefzg" == "abzdefzg" </Expanded> </Expression> - <OverallResults successes="5" failures="0" expectedFailures="0"/> + <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> - <Section name="wildcarded name exclusion, using exclude:, with tag inclusion"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Section name="replace first char"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - spec.matches( tcC ) == true + replaceInPlace( letters, "a", "z" ) </Original> <Expanded> - true == true + true </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - spec.matches( tcD ) == false + letters == "zbcdefcg" </Original> <Expanded> - false == false + "zbcdefcg" == "zbcdefcg" </Expanded> </Expression> - <OverallResults successes="5" failures="0" expectedFailures="0"/> + <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> - <Section name="two wildcarded names"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Section name="replace last char"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - spec.matches( tcC ) == true + replaceInPlace( letters, "g", "z" ) </Original> <Expanded> - true == true + true </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - spec.matches( tcD ) == false + letters == "abcdefcz" </Original> <Expanded> - false == false + "abcdefcz" == "abcdefcz" </Expanded> </Expression> - <OverallResults successes="5" failures="0" expectedFailures="0"/> + <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> - <Section name="empty tag"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Section name="replace all chars"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - spec.matches( tcC ) == false + replaceInPlace( letters, letters, "replaced" ) </Original> <Expanded> - false == false + true </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - spec.matches( tcD ) == false + letters == "replaced" </Original> <Expanded> - false == false + "replaced" == "replaced" </Expanded> </Expression> - <OverallResults successes="5" failures="0" expectedFailures="0"/> + <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> - <Section name="empty quoted name"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Section name="replace no chars"> + <Expression success="true" type="CHECK_FALSE" filename="projects/<exe-name>/TestMain.cpp" > <Original> - spec.matches( tcC ) == false + !replaceInPlace( letters, "x", "z" ) </Original> <Expanded> - false == false + !false </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - spec.matches( tcD ) == false + letters == letters </Original> <Expanded> - false == false + "abcdefcg" == "abcdefcg" </Expanded> </Expression> - <OverallResults successes="5" failures="0" expectedFailures="0"/> + <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> - <Section name="quoted string followed by tag exclusion"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.hasFilters() == true - </Original> - <Expanded> - true == true - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcA ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > - <Original> - spec.matches( tcB ) == false - </Original> - <Expanded> - false == false - </Expanded> - </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Section name="escape '"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - spec.matches( tcC ) == false + replaceInPlace( s, "'", "|'" ) </Original> <Expanded> - false == false + true </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" > + <Expression success="true" type="CHECK" filename="projects/<exe-name>/TestMain.cpp" > <Original> - spec.matches( tcD ) == true + s == "didn|'t" </Original> <Expanded> - true == true + "didn|'t" == "didn|'t" </Expanded> </Expression> - <OverallResults successes="5" failures="0" expectedFailures="0"/> + <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> <OverallResult success="true"/> </TestCase> - <TestCase name="tuple<>"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" > + <TestCase name="second tag"> + <OverallResult success="true"/> + </TestCase> + <TestCase name="send a single char to INFO"> + <Info> + 3 + </Info> + <Expression success="false" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + false + </Original> + <Expanded> + false + </Expanded> + </Expression> + <OverallResult success="false"/> + </TestCase> + <TestCase name="sends information to INFO"> + <Info> + hi + </Info> + <Info> + i := 7 + </Info> + <Expression success="false" type="REQUIRE" filename="projects/<exe-name>/MessageTests.cpp" > + <Original> + false + </Original> + <Expanded> + false + </Expanded> + </Expression> + <OverallResult success="false"/> + </TestCase> + <TestCase name="std::pair<int,const std::string> -> toString"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ToStringPair.cpp" > + <Original> + Catch::toString(value) == "{ 34, \"xyzzy\" }" + </Original> + <Expanded> + "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="std::pair<int,std::string> -> toString"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ToStringPair.cpp" > <Original> - "{ }" == Catch::toString(type{}) + Catch::toString( value ) == "{ 34, \"xyzzy\" }" </Original> <Expanded> - "{ }" == "{ }" + "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="std::vector<std::pair<std::string,int> > -> toString"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ToStringPair.cpp" > + <Original> + Catch::toString( pr ) == "{ { \"green\", 55 } }" + </Original> + <Expanded> + "{ { "green", 55 } }" +== +"{ { "green", 55 } }" + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="string literals of different sizes can be compared"> + <Expression success="false" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" > + <Original> + std::string( "first" ) == "second" + </Original> + <Expanded> + "first" == "second" + </Expanded> + </Expression> + <OverallResult success="false"/> + </TestCase> + <TestCase name="toString on const wchar_t const pointer returns the string contents"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - "{ }" == Catch::toString(value) + result == "\"wide load\"" </Original> <Expanded> - "{ }" == "{ }" + ""wide load"" == ""wide load"" </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="tuple<int>"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" > + <TestCase name="toString on const wchar_t pointer returns the string contents"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - "{ 0 }" == Catch::toString(type{0}) + result == "\"wide load\"" </Original> <Expanded> - "{ 0 }" == "{ 0 }" + ""wide load"" == ""wide load"" </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="tuple<float,int>"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" > + <TestCase name="toString on wchar_t const pointer returns the string contents"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - "1.2f" == Catch::toString(float(1.2)) + result == "\"wide load\"" </Original> <Expanded> - "1.2f" == "1.2f" + ""wide load"" == ""wide load"" </Expanded> </Expression> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" > + <OverallResult success="true"/> + </TestCase> + <TestCase name="toString on wchar_t returns the string contents"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - "{ 1.2f, 0 }" == Catch::toString(type{1.2,0}) + result == "\"wide load\"" </Original> <Expanded> - "{ 1.2f, 0 }" == "{ 1.2f, 0 }" + ""wide load"" == ""wide load"" </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="tuple<string,string>"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" > + <TestCase name="toString( has_maker )"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ToStringWhich.cpp" > <Original> - "{ \"hello\", \"world\" }" == Catch::toString(type{"hello","world"}) + Catch::toString( item ) == "StringMaker<has_maker>" </Original> <Expanded> - "{ "hello", "world" }" + "StringMaker<has_maker>" == -"{ "hello", "world" }" +"StringMaker<has_maker>" </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="tuple<tuple<int>,tuple<>,float>"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" > + <TestCase name="toString( has_maker_and_toString )"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ToStringWhich.cpp" > <Original> - "{ { 42 }, { }, 1.2f }" == Catch::toString(value) + Catch::toString( item ) == "toString( has_maker_and_toString )" </Original> <Expanded> - "{ { 42 }, { }, 1.2f }" + "toString( has_maker_and_toString )" == -"{ { 42 }, { }, 1.2f }" +"toString( has_maker_and_toString )" </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="tuple<nullptr,int,const char *>"> - <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" > + <TestCase name="toString( has_toString )"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ToStringWhich.cpp" > <Original> - "{ nullptr, 42, \"Catch me\" }" == Catch::toString(value) + Catch::toString( item ) == "toString( has_toString )" </Original> <Expanded> - "{ nullptr, 42, "Catch me" }" + "toString( has_toString )" == -"{ nullptr, 42, "Catch me" }" +"toString( has_toString )" </Expanded> </Expression> <OverallResult success="true"/> </TestCase> - <TestCase name="Tag alias can be registered against tag patterns"> - <Section name="The same tag alias can only be registered once"> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" > - <Original> - what, Contains( "[@zzz]" ) - </Original> - <Expanded> - "error: tag alias, "[@zzz]" already registered. - First seen at file:2 - Redefined at file:10" contains: "[@zzz]" - </Expanded> - </Expression> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" > - <Original> - what, Contains( "file" ) - </Original> - <Expanded> - "error: tag alias, "[@zzz]" already registered. - First seen at file:2 - Redefined at file:10" contains: "file" - </Expanded> - </Expression> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" > + <TestCase name="toString( vectors<has_maker )"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ToStringWhich.cpp" > + <Original> + Catch::toString( v ) == "{ StringMaker<has_maker> }" + </Original> + <Expanded> + "{ StringMaker<has_maker> }" +== +"{ StringMaker<has_maker> }" + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="toString(enum w/operator<<)"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/EnumToString.cpp" > + <Original> + Catch::toString(e0) == "E2{0}" + </Original> + <Expanded> + "E2{0}" == "E2{0}" + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/EnumToString.cpp" > + <Original> + Catch::toString(e1) == "E2{1}" + </Original> + <Expanded> + "E2{1}" == "E2{1}" + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="toString(enum)"> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/EnumToString.cpp" > + <Original> + Catch::toString(e0) == "0" + </Original> + <Expanded> + "0" == "0" + </Expanded> + </Expression> + <Expression success="true" type="CHECK" filename="projects/<exe-name>/EnumToString.cpp" > + <Original> + Catch::toString(e1) == "1" + </Original> + <Expanded> + "1" == "1" + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="vector<int> -> toString"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ToStringVector.cpp" > + <Original> + Catch::toString(vv) == "{ }" + </Original> + <Expanded> + "{ }" == "{ }" + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ToStringVector.cpp" > + <Original> + Catch::toString(vv) == "{ 42 }" + </Original> + <Expanded> + "{ 42 }" == "{ 42 }" + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ToStringVector.cpp" > + <Original> + Catch::toString(vv) == "{ 42, 250 }" + </Original> + <Expanded> + "{ 42, 250 }" == "{ 42, 250 }" + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="vector<string> -> toString"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ToStringVector.cpp" > + <Original> + Catch::toString(vv) == "{ }" + </Original> + <Expanded> + "{ }" == "{ }" + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ToStringVector.cpp" > + <Original> + Catch::toString(vv) == "{ \"hello\" }" + </Original> + <Expanded> + "{ "hello" }" == "{ "hello" }" + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/ToStringVector.cpp" > + <Original> + Catch::toString(vv) == "{ \"hello\", \"world\" }" + </Original> + <Expanded> + "{ "hello", "world" }" +== +"{ "hello", "world" }" + </Expanded> + </Expression> + <OverallResult success="true"/> + </TestCase> + <TestCase name="vectors can be sized and resized"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + v.size() == 5 + </Original> + <Expanded> + 5 == 5 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + v.capacity() >= 5 + </Original> + <Expanded> + 5 >= 5 + </Expanded> + </Expression> + <Section name="resizing bigger changes size and capacity"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - what, Contains( "2" ) + v.size() == 10 </Original> <Expanded> - "error: tag alias, "[@zzz]" already registered. - First seen at file:2 - Redefined at file:10" contains: "2" + 10 == 10 </Expanded> </Expression> - <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - what, Contains( "10" ) + v.capacity() >= 10 </Original> <Expanded> - "error: tag alias, "[@zzz]" already registered. - First seen at file:2 - Redefined at file:10" contains: "10" + 10 >= 10 </Expanded> </Expression> - <OverallResults successes="4" failures="0" expectedFailures="0"/> + <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> - <Section name="Tag aliases must be of the form [@name]"> - <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + v.size() == 5 + </Original> + <Expanded> + 5 == 5 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + v.capacity() >= 5 + </Original> + <Expanded> + 5 >= 5 + </Expanded> + </Expression> + <Section name="resizing smaller changes size but not capacity"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) + v.size() == 0 </Original> <Expanded> - registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) + 0 == 0 </Expanded> </Expression> - <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) + v.capacity() >= 5 </Original> <Expanded> - registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) + 5 >= 5 </Expanded> </Expression> - <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" > + <Section name="We can use the 'swap trick' to reset the capacity"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + v.capacity() == 0 + </Original> + <Expanded> + 0 == 0 + </Expanded> + </Expression> + <OverallResults successes="1" failures="0" expectedFailures="0"/> + </Section> + <OverallResults successes="3" failures="0" expectedFailures="0"/> + </Section> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + v.size() == 5 + </Original> + <Expanded> + 5 == 5 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + v.capacity() >= 5 + </Original> + <Expanded> + 5 >= 5 + </Expanded> + </Expression> + <Section name="reserving bigger changes capacity but not size"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) + v.size() == 5 </Original> <Expanded> - registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) + 5 == 5 </Expanded> </Expression> - <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) + v.capacity() >= 10 </Original> <Expanded> - registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) + 10 >= 10 </Expanded> </Expression> - <OverallResults successes="4" failures="0" expectedFailures="0"/> - </Section> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Anonymous test case 1"> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Test case with one argument"> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Variadic macros"> - <Section name="Section with one argument"> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Scenario: Do that thing with the thing"> - <Section name="Given: This stuff exists"> - <Section name="When: I do this"> - <Section name="Then: it should do this"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" > - <Original> - itDoesThis() - </Original> - <Expanded> - true - </Expanded> - </Expression> - <Section name="And: do that"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" > - <Original> - itDoesThat() - </Original> - <Expanded> - true - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Scenario: Vector resizing affects size and capacity"> - <Section name="Given: an empty vector"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + v.size() == 5 + </Original> + <Expanded> + 5 == 5 + </Expanded> + </Expression> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > + <Original> + v.capacity() >= 5 + </Original> + <Expanded> + 5 >= 5 + </Expanded> + </Expression> + <Section name="reserving smaller does not change size or capacity"> + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - v.size() == 0 + v.size() == 5 </Original> <Expanded> - 0 == 0 + 5 == 5 </Expanded> </Expression> - <Section name="When: it is made larger"> - <Section name="Then: the size and capacity go up"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" > - <Original> - v.size() == 10 - </Original> - <Expanded> - 10 == 10 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" > - <Original> - v.capacity() >= 10 - </Original> - <Expanded> - 10 >= 10 - </Expanded> - </Expression> - <Section name="And when: it is made smaller again"> - <Section name="Then: the size goes down but the capacity stays the same"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" > - <Original> - v.size() == 5 - </Original> - <Expanded> - 5 == 5 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" > - <Original> - v.capacity() >= 10 - </Original> - <Expanded> - 10 >= 10 - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="4" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="4" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="5" failures="0" expectedFailures="0"/> - </Section> - <Section name="Given: an empty vector"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" > + <Expression success="true" type="REQUIRE" filename="projects/<exe-name>/MiscTests.cpp" > <Original> - v.size() == 0 + v.capacity() >= 5 </Original> <Expanded> - 0 == 0 + 5 >= 5 </Expanded> </Expression> - <Section name="When: we reserve more space"> - <Section name="Then: The capacity is increased but the size remains the same"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" > - <Original> - v.capacity() >= 10 - </Original> - <Expanded> - 10 >= 10 - </Expanded> - </Expression> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" > - <Original> - v.size() == 0 - </Original> - <Expanded> - 0 == 0 - </Expanded> - </Expression> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="3" failures="0" expectedFailures="0"/> + <OverallResults successes="2" failures="0" expectedFailures="0"/> </Section> <OverallResult success="true"/> </TestCase> - <TestCase name="Scenario: This is a really long scenario name to see how the list command deals with wrapping"> - <Section name="Given: A section name that is so long that it cannot fit in a single console width"> - <Section name="When: The test headers are printed as part of the normal running of the scenario"> - <Section name="Then: The, deliberately very long and overly verbose (you see what I did there?) section names must wrap, along with an indent"> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> + <TestCase name="xmlentitycheck"> + <Section name="embedded xml" description="<test>it should be possible to embed xml characters, such as <, " or &, or even whole <xml>documents</xml> within an attribute</test>"> <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> - <OverallResult success="true"/> - </TestCase> - <TestCase name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods"> - <Section name="Given: No operations precede me"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" > - <Original> - before == 0 - </Original> - <Expanded> - 0 == 0 - </Expanded> - </Expression> - <Section name="When: We get the count"> - <Section name="Then: Subsequently values are higher"> - <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" > - <Original> - after > before - </Original> - <Expanded> - 1 > 0 - </Expanded> - </Expression> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="1" failures="0" expectedFailures="0"/> - </Section> - <OverallResults successes="2" failures="0" expectedFailures="0"/> + <Section name="encoded chars" description="these should all be encoded: &&&"""<<<&"<<&""> + <OverallResults successes="1" failures="0" expectedFailures="0"/> </Section> <OverallResult success="true"/> </TestCase> - <OverallResults successes="825" failures="81" expectedFailures="18"/> + <OverallResults successes="817" failures="81" expectedFailures="18"/> </Group> - <OverallResults successes="825" failures="80" expectedFailures="18"/> + <OverallResults successes="817" failures="80" expectedFailures="18"/> </Catch> diff --git a/3rdparty/catch/projects/SelfTest/ConditionTests.cpp b/3rdparty/catch/projects/SelfTest/ConditionTests.cpp index b1d29106eea..f135198dcc2 100644 --- a/3rdparty/catch/projects/SelfTest/ConditionTests.cpp +++ b/3rdparty/catch/projects/SelfTest/ConditionTests.cpp @@ -210,29 +210,29 @@ TEST_CASE( "Comparisons with int literals don't warn when mixing signed/ unsigne TEST_CASE( "comparisons between int variables", "" ) { - long long_var = 1L; - unsigned char unsigned_char_var = 1; - unsigned short unsigned_short_var = 1; - unsigned int unsigned_int_var = 1; - unsigned long unsigned_long_var = 1L; - - REQUIRE( long_var == unsigned_char_var ); - REQUIRE( long_var == unsigned_short_var ); - REQUIRE( long_var == unsigned_int_var ); - REQUIRE( long_var == unsigned_long_var ); + long long_var = 1L; + unsigned char unsigned_char_var = 1; + unsigned short unsigned_short_var = 1; + unsigned int unsigned_int_var = 1; + unsigned long unsigned_long_var = 1L; + + REQUIRE( long_var == unsigned_char_var ); + REQUIRE( long_var == unsigned_short_var ); + REQUIRE( long_var == unsigned_int_var ); + REQUIRE( long_var == unsigned_long_var ); } TEST_CASE( "comparisons between const int variables", "" ) { - const unsigned char unsigned_char_var = 1; - const unsigned short unsigned_short_var = 1; - const unsigned int unsigned_int_var = 1; - const unsigned long unsigned_long_var = 1L; - - REQUIRE( unsigned_char_var == 1 ); - REQUIRE( unsigned_short_var == 1 ); - REQUIRE( unsigned_int_var == 1 ); - REQUIRE( unsigned_long_var == 1 ); + const unsigned char unsigned_char_var = 1; + const unsigned short unsigned_short_var = 1; + const unsigned int unsigned_int_var = 1; + const unsigned long unsigned_long_var = 1L; + + REQUIRE( unsigned_char_var == 1 ); + REQUIRE( unsigned_short_var == 1 ); + REQUIRE( unsigned_int_var == 1 ); + REQUIRE( unsigned_long_var == 1 ); } TEST_CASE( "Comparisons between unsigned ints and negative signed ints match c++ standard behaviour", "" ) diff --git a/3rdparty/catch/projects/SelfTest/EnumToString.cpp b/3rdparty/catch/projects/SelfTest/EnumToString.cpp index 6917d8ae8a0..f591520fb9c 100644 --- a/3rdparty/catch/projects/SelfTest/EnumToString.cpp +++ b/3rdparty/catch/projects/SelfTest/EnumToString.cpp @@ -38,7 +38,7 @@ TEST_CASE( "toString(enum w/operator<<)", "[toString][enum]" ) { // Enum class without user-provided stream operator enum class EnumClass1 { EnumClass1Value0, EnumClass1Value1 }; -TEST_CASE( "toString(enum class)", "[toString][enum][enumClass]" ) { +TEST_CASE( "toString(enum class)", "[toString][enum][enumClass][c++11][.]" ) { EnumClass1 e0 = EnumClass1::EnumClass1Value0; CHECK( Catch::toString(e0) == "0" ); EnumClass1 e1 = EnumClass1::EnumClass1Value1; @@ -59,7 +59,7 @@ inline std::ostream& operator<<( std::ostream& os, EnumClass2 e2 ) { } } -TEST_CASE( "toString(enum class w/operator<<)", "[toString][enum][enumClass]" ) { +TEST_CASE( "toString(enum class w/operator<<)", "[toString][enum][enumClass][c++11][.]" ) { EnumClass2 e0 = EnumClass2::EnumClass2Value0; CHECK( Catch::toString(e0) == "E2/V0" ); EnumClass2 e1 = EnumClass2::EnumClass2Value1; diff --git a/3rdparty/catch/projects/SelfTest/ExceptionTests.cpp b/3rdparty/catch/projects/SelfTest/ExceptionTests.cpp index 5ef91a1239a..de8f6fa3d7e 100644 --- a/3rdparty/catch/projects/SelfTest/ExceptionTests.cpp +++ b/3rdparty/catch/projects/SelfTest/ExceptionTests.cpp @@ -15,9 +15,9 @@ namespace { inline int thisThrows() { - if( Catch::alwaysTrue() ) - throw std::domain_error( "expected exception" ); - return 1; + if( Catch::alwaysTrue() ) + throw std::domain_error( "expected exception" ); + return 1; } int thisDoesntThrow() @@ -26,60 +26,64 @@ namespace } } -TEST_CASE( "When checked exceptions are thrown they can be expected or unexpected", "" ) +TEST_CASE( "When checked exceptions are thrown they can be expected or unexpected", "[!throws]" ) { REQUIRE_THROWS_AS( thisThrows(), std::domain_error ); REQUIRE_NOTHROW( thisDoesntThrow() ); REQUIRE_THROWS( thisThrows() ); } -TEST_CASE( "Expected exceptions that don't throw or unexpected exceptions fail the test", "[.][failing]" ) +TEST_CASE( "Expected exceptions that don't throw or unexpected exceptions fail the test", "[.][failing][!throws]" ) { CHECK_THROWS_AS( thisThrows(), std::string ); CHECK_THROWS_AS( thisDoesntThrow(), std::domain_error ); CHECK_NOTHROW( thisThrows() ); } -TEST_CASE( "When unchecked exceptions are thrown directly they are always failures", "[.][failing]" ) +TEST_CASE( "When unchecked exceptions are thrown directly they are always failures", "[.][failing][!throws]" ) { - if( Catch::alwaysTrue() ) - throw std::domain_error( "unexpected exception" ); + if( Catch::alwaysTrue() ) + throw std::domain_error( "unexpected exception" ); } -TEST_CASE( "An unchecked exception reports the line of the last assertion", "[.][failing]" ) +TEST_CASE( "An unchecked exception reports the line of the last assertion", "[.][failing][!throws]" ) { CHECK( 1 == 1 ); - if( Catch::alwaysTrue() ) - throw std::domain_error( "unexpected exception" ); + if( Catch::alwaysTrue() ) + throw std::domain_error( "unexpected exception" ); } -TEST_CASE( "When unchecked exceptions are thrown from sections they are always failures", "[.][failing]" ) +TEST_CASE( "When unchecked exceptions are thrown from sections they are always failures", "[.][failing][!throws]" ) { SECTION( "section name", "" ) { - if( Catch::alwaysTrue() ) - throw std::domain_error( "unexpected exception" ); + if( Catch::alwaysTrue() ) + throw std::domain_error( "unexpected exception" ); } } -TEST_CASE( "When unchecked exceptions are thrown from functions they are always failures", "[.][failing]" ) +TEST_CASE( "When unchecked exceptions are thrown from functions they are always failures", "[.][failing][!throws]" ) { CHECK( thisThrows() == 0 ); } -TEST_CASE( "When unchecked exceptions are thrown during a REQUIRE the test should abort fail", "[.][failing]" ) +TEST_CASE( "When unchecked exceptions are thrown during a REQUIRE the test should abort fail", "[.][failing][!throws]" ) { REQUIRE( thisThrows() == 0 ); FAIL( "This should never happen" ); } -TEST_CASE( "When unchecked exceptions are thrown during a CHECK the test should abort and fail", "[.][failing]" ) +TEST_CASE( "When unchecked exceptions are thrown during a CHECK the test should continue", "[.][failing][!throws]" ) { - CHECK( thisThrows() == 0 ); - FAIL( "This should never happen" ); + try { + CHECK(thisThrows() == 0); + } + catch(...) { + FAIL( "This should never happen" ); + } } -TEST_CASE( "When unchecked exceptions are thrown, but caught, they do not affect the test", "" ) +TEST_CASE( "When unchecked exceptions are thrown, but caught, they do not affect the test", "[!throws]" ) { try { @@ -139,50 +143,50 @@ CATCH_TRANSLATE_EXCEPTION( double& ex ) return Catch::toString( ex ); } -TEST_CASE("Non-std exceptions can be translated", "[.][failing]" ) +TEST_CASE("Non-std exceptions can be translated", "[.][failing][!throws]" ) { - if( Catch::alwaysTrue() ) - throw CustomException( "custom exception" ); + if( Catch::alwaysTrue() ) + throw CustomException( "custom exception" ); } -TEST_CASE("Custom std-exceptions can be custom translated", "[.][failing]" ) +TEST_CASE("Custom std-exceptions can be custom translated", "[.][failing][!throws]" ) { if( Catch::alwaysTrue() ) throw CustomException( "custom std exception" ); } inline void throwCustom() { - if( Catch::alwaysTrue() ) - throw CustomException( "custom exception - not std" ); + if( Catch::alwaysTrue() ) + throw CustomException( "custom exception - not std" ); } -TEST_CASE( "Custom exceptions can be translated when testing for nothrow", "[.][failing]" ) +TEST_CASE( "Custom exceptions can be translated when testing for nothrow", "[.][failing][!throws]" ) { REQUIRE_NOTHROW( throwCustom() ); } -TEST_CASE( "Custom exceptions can be translated when testing for throwing as something else", "[.][failing]" ) +TEST_CASE( "Custom exceptions can be translated when testing for throwing as something else", "[.][failing][!throws]" ) { REQUIRE_THROWS_AS( throwCustom(), std::exception ); } -TEST_CASE( "Unexpected exceptions can be translated", "[.][failing]" ) +TEST_CASE( "Unexpected exceptions can be translated", "[.][failing][!throws]" ) { - if( Catch::alwaysTrue() ) - throw double( 3.14 ); + if( Catch::alwaysTrue() ) + throw double( 3.14 ); } inline int thisFunctionNotImplemented( int ) { CATCH_NOT_IMPLEMENTED; } -TEST_CASE( "NotImplemented exception", "" ) +TEST_CASE( "NotImplemented exception", "[!throws]" ) { REQUIRE_THROWS( thisFunctionNotImplemented( 7 ) ); } -TEST_CASE( "Exception messages can be tested for", "" ) { +TEST_CASE( "Exception messages can be tested for", "[!throws]" ) { using namespace Catch::Matchers; SECTION( "exact match" ) REQUIRE_THROWS_WITH( thisThrows(), "expected exception" ); @@ -196,7 +200,7 @@ TEST_CASE( "Exception messages can be tested for", "" ) { } } -TEST_CASE( "Mismatching exception messages failing the test", "[.][failing]" ) { +TEST_CASE( "Mismatching exception messages failing the test", "[.][failing][!throws]" ) { REQUIRE_THROWS_WITH( thisThrows(), "expected exception" ); REQUIRE_THROWS_WITH( thisThrows(), "should fail" ); REQUIRE_THROWS_WITH( thisThrows(), "expected exception" ); diff --git a/3rdparty/catch/projects/SelfTest/MiscTests.cpp b/3rdparty/catch/projects/SelfTest/MiscTests.cpp index b440b412c9b..5de2ca4878f 100644 --- a/3rdparty/catch/projects/SelfTest/MiscTests.cpp +++ b/3rdparty/catch/projects/SelfTest/MiscTests.cpp @@ -466,7 +466,7 @@ TEST_CASE( "XmlEncode" ) { } #ifdef CATCH_CONFIG_CPP11_LONG_LONG -TEST_CASE( "long long" ) { +TEST_CASE( "long long", "[c++11][.]" ) { long long l = std::numeric_limits<long long>::max(); REQUIRE( l == std::numeric_limits<long long>::max() ); diff --git a/3rdparty/catch/projects/SelfTest/PartTrackerTests.cpp b/3rdparty/catch/projects/SelfTest/PartTrackerTests.cpp index 29256351197..45f4cf1cc46 100644 --- a/3rdparty/catch/projects/SelfTest/PartTrackerTests.cpp +++ b/3rdparty/catch/projects/SelfTest/PartTrackerTests.cpp @@ -36,16 +36,21 @@ using namespace Catch; // REQUIRE( C_A_T_C_H_Context().i() == 42 ); //} +Catch::TestCaseTracking::NameAndLocation makeNAL( std::string const& name ) { + return Catch::TestCaseTracking::NameAndLocation( name, Catch::SourceLineInfo() ); +} + TEST_CASE( "Tracker", "" ) { TrackerContext ctx; ctx.startRun(); ctx.startCycle(); - ITracker& testCase = SectionTracker::acquire( ctx, "Testcase" ); + + ITracker& testCase = SectionTracker::acquire( ctx, makeNAL( "Testcase" ) ); REQUIRE( testCase.isOpen() ); - ITracker& s1 = SectionTracker::acquire( ctx, "S1" ); + ITracker& s1 = SectionTracker::acquire( ctx, makeNAL( "S1" ) ); REQUIRE( s1.isOpen() ); SECTION( "successfully close one section", "" ) { @@ -70,10 +75,10 @@ TEST_CASE( "Tracker", "" ) { SECTION( "re-enter after failed section", "" ) { ctx.startCycle(); - ITracker& testCase2 = SectionTracker::acquire( ctx, "Testcase" ); + ITracker& testCase2 = SectionTracker::acquire( ctx, makeNAL( "Testcase" ) ); REQUIRE( testCase2.isOpen() ); - ITracker& s1b = SectionTracker::acquire( ctx, "S1" ); + ITracker& s1b = SectionTracker::acquire( ctx, makeNAL( "S1" ) ); REQUIRE( s1b.isOpen() == false ); testCase2.close(); @@ -83,13 +88,13 @@ TEST_CASE( "Tracker", "" ) { } SECTION( "re-enter after failed section and find next section", "" ) { ctx.startCycle(); - ITracker& testCase2 = SectionTracker::acquire( ctx, "Testcase" ); + ITracker& testCase2 = SectionTracker::acquire( ctx, makeNAL( "Testcase" ) ); REQUIRE( testCase2.isOpen() ); - ITracker& s1b = SectionTracker::acquire( ctx, "S1" ); + ITracker& s1b = SectionTracker::acquire( ctx, makeNAL( "S1" ) ); REQUIRE( s1b.isOpen() == false ); - ITracker& s2 = SectionTracker::acquire( ctx, "S2" ); + ITracker& s2 = SectionTracker::acquire( ctx, makeNAL( "S2" ) ); REQUIRE( s2.isOpen() ); s2.close(); @@ -104,7 +109,7 @@ TEST_CASE( "Tracker", "" ) { SECTION( "successfully close one section, then find another", "" ) { s1.close(); - ITracker& s2 = SectionTracker::acquire( ctx, "S2" ); + ITracker& s2 = SectionTracker::acquire( ctx, makeNAL( "S2" ) ); REQUIRE( s2.isOpen() == false ); testCase.close(); @@ -112,13 +117,13 @@ TEST_CASE( "Tracker", "" ) { SECTION( "Re-enter - skips S1 and enters S2", "" ) { ctx.startCycle(); - ITracker& testCase2 = SectionTracker::acquire( ctx, "Testcase" ); + ITracker& testCase2 = SectionTracker::acquire( ctx, makeNAL( "Testcase" ) ); REQUIRE( testCase2.isOpen() ); - ITracker& s1b = SectionTracker::acquire( ctx, "S1" ); + ITracker& s1b = SectionTracker::acquire( ctx, makeNAL( "S1" ) ); REQUIRE( s1b.isOpen() == false ); - ITracker& s2b = SectionTracker::acquire( ctx, "S2" ); + ITracker& s2b = SectionTracker::acquire( ctx, makeNAL( "S2" ) ); REQUIRE( s2b.isOpen() ); REQUIRE( ctx.completedCycle() == false ); @@ -145,13 +150,13 @@ TEST_CASE( "Tracker", "" ) { // Need a final cycle ctx.startCycle(); - ITracker& testCase3 = SectionTracker::acquire( ctx, "Testcase" ); + ITracker& testCase3 = SectionTracker::acquire( ctx, makeNAL( "Testcase" ) ); REQUIRE( testCase3.isOpen() ); - ITracker& s1c = SectionTracker::acquire( ctx, "S1" ); + ITracker& s1c = SectionTracker::acquire( ctx, makeNAL( "S1" ) ); REQUIRE( s1c.isOpen() == false ); - ITracker& s2c = SectionTracker::acquire( ctx, "S2" ); + ITracker& s2c = SectionTracker::acquire( ctx, makeNAL( "S2" ) ); REQUIRE( s2c.isOpen() == false ); testCase3.close(); @@ -161,7 +166,7 @@ TEST_CASE( "Tracker", "" ) { } SECTION( "open a nested section", "" ) { - ITracker& s2 = SectionTracker::acquire( ctx, "S2" ); + ITracker& s2 = SectionTracker::acquire( ctx, makeNAL( "S2" ) ); REQUIRE( s2.isOpen() ); s2.close(); @@ -177,7 +182,7 @@ TEST_CASE( "Tracker", "" ) { } SECTION( "start a generator", "" ) { - IndexTracker& g1 = IndexTracker::acquire( ctx, "G1", 2 ); + IndexTracker& g1 = IndexTracker::acquire( ctx, makeNAL( "G1" ), 2 ); REQUIRE( g1.isOpen() ); REQUIRE( g1.index() == 0 ); @@ -193,14 +198,14 @@ TEST_CASE( "Tracker", "" ) { SECTION( "Re-enter for second generation", "" ) { ctx.startCycle(); - ITracker& testCase2 = SectionTracker::acquire( ctx, "Testcase" ); + ITracker& testCase2 = SectionTracker::acquire( ctx, makeNAL( "Testcase" ) ); REQUIRE( testCase2.isOpen() ); - ITracker& s1b = SectionTracker::acquire( ctx, "S1" ); + ITracker& s1b = SectionTracker::acquire( ctx, makeNAL( "S1" ) ); REQUIRE( s1b.isOpen() ); - IndexTracker& g1b = IndexTracker::acquire( ctx, "G1", 2 ); + IndexTracker& g1b = IndexTracker::acquire( ctx, makeNAL( "G1" ), 2 ); REQUIRE( g1b.isOpen() ); REQUIRE( g1b.index() == 1 ); @@ -214,7 +219,7 @@ TEST_CASE( "Tracker", "" ) { } } SECTION( "Start a new inner section", "" ) { - ITracker& s2 = SectionTracker::acquire( ctx, "S2" ); + ITracker& s2 = SectionTracker::acquire( ctx, makeNAL( "S2" ) ); REQUIRE( s2.isOpen() ); s2.close(); @@ -228,19 +233,19 @@ TEST_CASE( "Tracker", "" ) { SECTION( "Re-enter for second generation", "" ) { ctx.startCycle(); - ITracker& testCase2 = SectionTracker::acquire( ctx, "Testcase" ); + ITracker& testCase2 = SectionTracker::acquire( ctx, makeNAL( "Testcase" ) ); REQUIRE( testCase2.isOpen() ); - ITracker& s1b = SectionTracker::acquire( ctx, "S1" ); + ITracker& s1b = SectionTracker::acquire( ctx, makeNAL( "S1" ) ); REQUIRE( s1b.isOpen() ); // generator - next value - IndexTracker& g1b = IndexTracker::acquire( ctx, "G1", 2 ); + IndexTracker& g1b = IndexTracker::acquire( ctx, makeNAL( "G1" ), 2 ); REQUIRE( g1b.isOpen() ); REQUIRE( g1b.index() == 1 ); // inner section again - ITracker& s2b = SectionTracker::acquire( ctx, "S2" ); + ITracker& s2b = SectionTracker::acquire( ctx, makeNAL( "S2" ) ); REQUIRE( s2b.isOpen() ); s2b.close(); @@ -256,7 +261,7 @@ TEST_CASE( "Tracker", "" ) { } SECTION( "Fail an inner section", "" ) { - ITracker& s2 = SectionTracker::acquire( ctx, "S2" ); + ITracker& s2 = SectionTracker::acquire( ctx, makeNAL( "S2" ) ); REQUIRE( s2.isOpen() ); s2.fail(); @@ -271,19 +276,19 @@ TEST_CASE( "Tracker", "" ) { SECTION( "Re-enter for second generation", "" ) { ctx.startCycle(); - ITracker& testCase2 = SectionTracker::acquire( ctx, "Testcase" ); + ITracker& testCase2 = SectionTracker::acquire( ctx, makeNAL( "Testcase" ) ); REQUIRE( testCase2.isOpen() ); - ITracker& s1b = SectionTracker::acquire( ctx, "S1" ); + ITracker& s1b = SectionTracker::acquire( ctx, makeNAL( "S1" ) ); REQUIRE( s1b.isOpen() ); // generator - still same value - IndexTracker& g1b = IndexTracker::acquire( ctx, "G1", 2 ); + IndexTracker& g1b = IndexTracker::acquire( ctx, makeNAL( "G1" ), 2 ); REQUIRE( g1b.isOpen() ); REQUIRE( g1b.index() == 0 ); // inner section again - this time won't open - ITracker& s2b = SectionTracker::acquire( ctx, "S2" ); + ITracker& s2b = SectionTracker::acquire( ctx, makeNAL( "S2" ) ); REQUIRE( s2b.isOpen() == false ); s1b.close(); @@ -295,19 +300,19 @@ TEST_CASE( "Tracker", "" ) { // Another cycle - now should complete ctx.startCycle(); - ITracker& testCase3 = SectionTracker::acquire( ctx, "Testcase" ); + ITracker& testCase3 = SectionTracker::acquire( ctx, makeNAL( "Testcase" ) ); REQUIRE( testCase3.isOpen() ); - ITracker& s1c = SectionTracker::acquire( ctx, "S1" ); + ITracker& s1c = SectionTracker::acquire( ctx, makeNAL( "S1" ) ); REQUIRE( s1c.isOpen() ); // generator - now next value - IndexTracker& g1c = IndexTracker::acquire( ctx, "G1", 2 ); + IndexTracker& g1c = IndexTracker::acquire( ctx, makeNAL( "G1" ), 2 ); REQUIRE( g1c.isOpen() ); REQUIRE( g1c.index() == 1 ); // inner section - now should open again - ITracker& s2c = SectionTracker::acquire( ctx, "S2" ); + ITracker& s2c = SectionTracker::acquire( ctx, makeNAL( "S2" ) ); REQUIRE( s2c.isOpen() ); s2c.close(); diff --git a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTest/catch_text.cpp b/3rdparty/catch/projects/SelfTest/SurrogateCpps/catch_test_case_tracker.cpp index a08e67b3670..bd67a8a7736 100644 --- a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTest/catch_text.cpp +++ b/3rdparty/catch/projects/SelfTest/SurrogateCpps/catch_test_case_tracker.cpp @@ -1,3 +1,2 @@ // This file is only here to verify (to the extent possible) the self sufficiency of the header -#include "catch_suppress_warnings.h" -#include "catch_text.h" +#include "internal/catch_test_case_tracker.hpp" diff --git a/3rdparty/catch/projects/SelfTest/TestMain.cpp b/3rdparty/catch/projects/SelfTest/TestMain.cpp index 16af2f67683..2a1769c3dc9 100644 --- a/3rdparty/catch/projects/SelfTest/TestMain.cpp +++ b/3rdparty/catch/projects/SelfTest/TestMain.cpp @@ -196,13 +196,13 @@ TEST_CASE( "Process can be configured on command line", "[config][command-line]" } SECTION( "use-colour", "") { - + using Catch::UseColour; - + SECTION( "without option", "" ) { const char* argv[] = { "test" }; CHECK_NOTHROW( parseIntoConfig( argv, config ) ); - + REQUIRE( config.useColour == UseColour::Auto ); } @@ -216,14 +216,14 @@ TEST_CASE( "Process can be configured on command line", "[config][command-line]" SECTION( "yes", "" ) { const char* argv[] = { "test", "--use-colour", "yes" }; CHECK_NOTHROW( parseIntoConfig( argv, config ) ); - + REQUIRE( config.useColour == UseColour::Yes ); } SECTION( "no", "" ) { const char* argv[] = { "test", "--use-colour", "no" }; CHECK_NOTHROW( parseIntoConfig( argv, config ) ); - + REQUIRE( config.useColour == UseColour::No ); } @@ -299,9 +299,10 @@ TEST_CASE( "Long strings can be wrapped", "[wrap]" ) { CHECK( Text( testString, TextAttributes().setWidth( 10 ) ).toString() == testString ); } SECTION( "Trailing newline" , "" ) { - CHECK( Text( "abcdef\n", TextAttributes().setWidth( 10 ) ).toString() == "abcdef\n" ); + CHECK( Text( "abcdef\n", TextAttributes().setWidth( 10 ) ).toString() == "abcdef" ); CHECK( Text( "abcdef", TextAttributes().setWidth( 6 ) ).toString() == "abcdef" ); - CHECK( Text( "abcdef\n", TextAttributes().setWidth( 6 ) ).toString() == "abcdef\n" ); + CHECK( Text( "abcdef\n", TextAttributes().setWidth( 6 ) ).toString() == "abcdef" ); + CHECK( Text( "abcdef\n", TextAttributes().setWidth( 5 ) ).toString() == "abcd-\nef" ); } SECTION( "Wrapped once", "" ) { CHECK( Text( testString, TextAttributes().setWidth( 9 ) ).toString() == "one two\nthree\nfour" ); @@ -313,16 +314,23 @@ TEST_CASE( "Long strings can be wrapped", "[wrap]" ) { } } - SECTION( "With tabs", "" ) { - - // guide: 1234567890123456789 - std::string testString = "one two \tthree four five six"; + SECTION( "With wrap-before/ after characters", "" ) { + std::string testString = "one,two(three) <here>"; - CHECK( Text( testString, TextAttributes().setWidth( 15 ) ).toString() - == "one two three\n four\n five\n six" ); + SECTION( "No wrapping", "" ) { + CHECK( Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString ); + CHECK( Text( testString, TextAttributes().setWidth( 24 ) ).toString() == testString ); + } + SECTION( "Wrap before", "" ) { + CHECK( Text( testString, TextAttributes().setWidth( 11 ) ).toString() == "one,two\n(three)\n<here>" ); + } + SECTION( "Wrap after", "" ) { + CHECK( Text( testString, TextAttributes().setWidth( 6 ) ).toString() == "one,\ntwo\n(thre-\ne)\n<here>" ); + CHECK( Text( testString, TextAttributes().setWidth( 5 ) ).toString() == "one,\ntwo\n(thr-\nee)\n<her-\ne>" ); + CHECK( Text( testString, TextAttributes().setWidth( 4 ) ).toString() == "one,\ntwo\n(th-\nree)\n<he-\nre>" ); + } } - } using namespace Catch; diff --git a/3rdparty/catch/projects/SelfTest/ToStringTuple.cpp b/3rdparty/catch/projects/SelfTest/ToStringTuple.cpp index 80e5453097a..fa61f631440 100644 --- a/3rdparty/catch/projects/SelfTest/ToStringTuple.cpp +++ b/3rdparty/catch/projects/SelfTest/ToStringTuple.cpp @@ -7,7 +7,7 @@ #pragma clang diagnostic ignored "-Wc++98-compat" #endif -TEST_CASE( "tuple<>", "[toString][tuple]" ) +TEST_CASE( "tuple<>", "[toString][tuple][c++11][.]" ) { typedef std::tuple<> type; CHECK( "{ }" == Catch::toString(type{}) ); @@ -15,27 +15,27 @@ TEST_CASE( "tuple<>", "[toString][tuple]" ) CHECK( "{ }" == Catch::toString(value) ); } -TEST_CASE( "tuple<int>", "[toString][tuple]" ) +TEST_CASE( "tuple<int>", "[toString][tuple][c++11][.]" ) { typedef std::tuple<int> type; CHECK( "{ 0 }" == Catch::toString(type{0}) ); } -TEST_CASE( "tuple<float,int>", "[toString][tuple]" ) +TEST_CASE( "tuple<float,int>", "[toString][tuple][c++11][.]" ) { typedef std::tuple<float,int> type; CHECK( "1.2f" == Catch::toString(float(1.2)) ); CHECK( "{ 1.2f, 0 }" == Catch::toString(type{1.2,0}) ); } -TEST_CASE( "tuple<string,string>", "[toString][tuple]" ) +TEST_CASE( "tuple<string,string>", "[toString][tuple][c++11][.]" ) { typedef std::tuple<std::string,std::string> type; CHECK( "{ \"hello\", \"world\" }" == Catch::toString(type{"hello","world"}) ); } -TEST_CASE( "tuple<tuple<int>,tuple<>,float>", "[toString][tuple]" ) +TEST_CASE( "tuple<tuple<int>,tuple<>,float>", "[toString][tuple][c++11][.]" ) { typedef std::tuple<std::tuple<int>,std::tuple<>,float> type; type value { std::tuple<int>{42}, {}, 1.2f }; @@ -43,7 +43,7 @@ TEST_CASE( "tuple<tuple<int>,tuple<>,float>", "[toString][tuple]" ) } #ifdef CATCH_CONFIG_CPP11_NULLPTR -TEST_CASE( "tuple<nullptr,int,const char *>", "[toString][tuple]" ) +TEST_CASE( "tuple<nullptr,int,const char *>", "[toString][tuple][c++11][.]" ) { typedef std::tuple<std::nullptr_t,int,const char *> type; type value { nullptr, 42, "Catch me" }; diff --git a/3rdparty/catch/projects/SelfTest/ToStringVector.cpp b/3rdparty/catch/projects/SelfTest/ToStringVector.cpp index c3a8d4ed647..cd071a9d232 100644 --- a/3rdparty/catch/projects/SelfTest/ToStringVector.cpp +++ b/3rdparty/catch/projects/SelfTest/ToStringVector.cpp @@ -52,7 +52,7 @@ namespace { }; } -TEST_CASE( "vector<int,allocator> -> toString", "[toString][vector,allocator]" ) { +TEST_CASE( "vector<int,allocator> -> toString", "[toString][vector,allocator][c++11][.]" ) { std::vector<int,minimal_allocator<int> > vv; REQUIRE( Catch::toString(vv) == "{ }" ); vv.push_back( 42 ); @@ -61,7 +61,7 @@ TEST_CASE( "vector<int,allocator> -> toString", "[toString][vector,allocator]" ) REQUIRE( Catch::toString(vv) == "{ 42, 250 }" ); } -TEST_CASE( "vec<vec<string,alloc>> -> toString", "[toString][vector,allocator]" ) { +TEST_CASE( "vec<vec<string,alloc>> -> toString", "[toString][vector,allocator][c++11][.]" ) { typedef std::vector<std::string,minimal_allocator<std::string> > inner; typedef std::vector<inner> vector; vector v; diff --git a/3rdparty/catch/projects/SelfTest/ToStringWhich.cpp b/3rdparty/catch/projects/SelfTest/ToStringWhich.cpp index 1d4aa892581..a1d2a60953f 100644 --- a/3rdparty/catch/projects/SelfTest/ToStringWhich.cpp +++ b/3rdparty/catch/projects/SelfTest/ToStringWhich.cpp @@ -37,19 +37,21 @@ TEST_CASE( "toString( has_toString )", "[toString]" ) { } // Call the overload -TEST_CASE( "toString( has_maker )", "[toString]" ) { +TEST_CASE( "toString( has_maker )", "toString]" ) { has_maker item; REQUIRE( Catch::toString( item ) == "StringMaker<has_maker>" ); } // Call the overload -TEST_CASE( "toString( has_maker_and_toString )", "[toString]" ) { +TEST_CASE( "toString( has_maker_and_toString )", "[.][toString]" ) { has_maker_and_toString item; REQUIRE( Catch::toString( item ) == "toString( has_maker_and_toString )" ); } // Vectors... -TEST_CASE( "toString( vectors<has_toString )", "[toString]" ) { + +// Don't run this in approval tests as it is sensitive to two phase lookup differences +TEST_CASE( "toString( vectors<has_toString )", "[.][toString][!nonportable]" ) { std::vector<has_toString> v(1); // This invokes template<T> toString which actually gives us '{ ? }' REQUIRE( Catch::toString( v ) == "{ {?} }" ); @@ -61,7 +63,8 @@ TEST_CASE( "toString( vectors<has_maker )", "[toString]" ) { } -TEST_CASE( "toString( vectors<has_maker_and_toString )", "[toString]" ) { +// Don't run this in approval tests as it is sensitive to two phase lookup differences +TEST_CASE( "toString( vectors<has_maker_and_toString )", "[.][toString][!nonportable]" ) { std::vector<has_maker_and_toString> v(1); // Note: This invokes the template<T> toString -> StringMaker REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker_and_toString> }" ); diff --git a/3rdparty/catch/projects/SelfTest/TrickyTests.cpp b/3rdparty/catch/projects/SelfTest/TrickyTests.cpp index eb53e420156..90a4f2fa588 100644 --- a/3rdparty/catch/projects/SelfTest/TrickyTests.cpp +++ b/3rdparty/catch/projects/SelfTest/TrickyTests.cpp @@ -387,7 +387,7 @@ TEST_CASE( "pointer to class", "[Tricky]" ) #include <memory> -TEST_CASE( "null_ptr", "[Tricky][c++11]" ) +TEST_CASE( "null_ptr", "[Tricky][c++11][.]" ) { std::unique_ptr<int> ptr; REQUIRE(ptr.get() == nullptr); diff --git a/3rdparty/catch/projects/SelfTest/makefile b/3rdparty/catch/projects/SelfTest/makefile deleted file mode 100644 index 0a29372c875..00000000000 --- a/3rdparty/catch/projects/SelfTest/makefile +++ /dev/null @@ -1,30 +0,0 @@ -SOURCES = ApproxTests.cpp \ - ClassTests.cpp \ - ConditionTests.cpp \ - ExceptionTests.cpp \ - GeneratorTests.cpp \ - MessageTests.cpp \ - MiscTests.cpp \ - TestMain.cpp \ - TrickyTests.cpp \ - BDDTests.cpp \ - VariadicMacrosTests.cpp \ - EnumToString.cpp \ - ToStringPair.cpp \ - ToStringVector.cpp \ - ToStringWhich.cpp - - -OBJECTS = $(patsubst %.cpp, %.o, $(SOURCES)) -CXX = g++ -CXXFLAGS = -I../../include -std=c++11 - -CatchSelfTest: $(OBJECTS) - $(CXX) -o $@ $^ - -test: CatchSelfTest - ./CatchSelfTest - -clean: - rm -f $(OBJECTS) CatchSelfTest - diff --git a/3rdparty/catch/projects/VS2008/TestCatch/TestCatch.sln b/3rdparty/catch/projects/VS2008/TestCatch/TestCatch.sln deleted file mode 100644 index bd85bbe2ca0..00000000000 --- a/3rdparty/catch/projects/VS2008/TestCatch/TestCatch.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestCatch", "TestCatch\TestCatch.vcproj", "{A2F23B19-9CF7-4246-AE58-BC65E39C6F7E}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A2F23B19-9CF7-4246-AE58-BC65E39C6F7E}.Debug|Win32.ActiveCfg = Debug|Win32 - {A2F23B19-9CF7-4246-AE58-BC65E39C6F7E}.Debug|Win32.Build.0 = Debug|Win32 - {A2F23B19-9CF7-4246-AE58-BC65E39C6F7E}.Release|Win32.ActiveCfg = Release|Win32 - {A2F23B19-9CF7-4246-AE58-BC65E39C6F7E}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/3rdparty/catch/projects/VS2008/TestCatch/TestCatch/TestCatch.cpp b/3rdparty/catch/projects/VS2008/TestCatch/TestCatch/TestCatch.cpp deleted file mode 100644 index 8dd2067d480..00000000000 --- a/3rdparty/catch/projects/VS2008/TestCatch/TestCatch/TestCatch.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// TestCatch.cpp : Defines the entry point for the console application. -// - -int main(int argc, char* argv[]) -{ - return 0; -} - diff --git a/3rdparty/catch/projects/VS2008/TestCatch/TestCatch/TestCatch.vcproj b/3rdparty/catch/projects/VS2008/TestCatch/TestCatch/TestCatch.vcproj deleted file mode 100644 index d4cb0c97532..00000000000 --- a/3rdparty/catch/projects/VS2008/TestCatch/TestCatch/TestCatch.vcproj +++ /dev/null @@ -1,390 +0,0 @@ -<?xml version="1.0" encoding="Windows-1252"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="9.00" - Name="TestCatch" - ProjectGUID="{A2F23B19-9CF7-4246-AE58-BC65E39C6F7E}" - RootNamespace="TestCatch" - Keyword="Win32Proj" - TargetFrameworkVersion="196613" - > - <Platforms> - <Platform - Name="Win32" - /> - </Platforms> - <ToolFiles> - </ToolFiles> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="1" - CharacterSet="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - AdditionalIncludeDirectories="..\..\..\..\include" - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="3" - UsePrecompiledHeader="0" - WarningLevel="4" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - LinkIncremental="2" - GenerateDebugInformation="true" - SubSystem="1" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="1" - CharacterSet="1" - WholeProgramOptimization="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="2" - EnableIntrinsicFunctions="true" - PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" - RuntimeLibrary="2" - EnableFunctionLevelLinking="true" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - LinkIncremental="1" - GenerateDebugInformation="true" - SubSystem="1" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <Filter - Name="Source Files" - Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" - UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" - > - <File - RelativePath="..\..\..\SelfTest\TestMain.cpp" - > - </File> - </Filter> - <Filter - Name="Include" - Filter="h;hpp;hxx;hm;inl;inc;xsd" - UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" - > - <File - RelativePath="..\..\..\..\include\catch.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\catch_objc.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\catch_objc_main.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\catch_runner.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\catch_with_main.hpp" - > - </File> - <Filter - Name="Internal" - > - <File - RelativePath="..\..\..\..\include\internal\catch_capture.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_commandline.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_common.h" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_config.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_debugger.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_evaluate.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_exception_translator_registry.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_generators.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_generators_impl.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_hub.h" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_hub_impl.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_interfaces_capture.h" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_interfaces_exception.h" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_interfaces_reporter.h" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_interfaces_runner.h" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_interfaces_testcase.h" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_list.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_reporter_registrars.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_reporter_registry.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_result_type.h" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_resultinfo.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_runner_impl.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_section.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_stream.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_test_case_info.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_test_case_registry_impl.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_test_registry.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\internal\catch_xmlwriter.hpp" - > - </File> - </Filter> - <Filter - Name="Reporters" - Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" - UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" - > - <File - RelativePath="..\..\..\..\include\reporters\catch_reporter_basic.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\reporters\catch_reporter_junit.hpp" - > - </File> - <File - RelativePath="..\..\..\..\include\reporters\catch_reporter_xml.hpp" - > - </File> - </Filter> - </Filter> - <Filter - Name="TestCases" - > - <File - RelativePath="..\..\..\SelfTest\ApproxTests.cpp" - > - </File> - <File - RelativePath="..\..\..\SelfTest\BDDTests.cpp" - > - </File> - <File - RelativePath="..\..\..\SelfTest\ClassTests.cpp" - > - </File> - <File - RelativePath="..\..\..\SelfTest\ConditionTests.cpp" - > - </File> - <File - RelativePath="..\..\..\SelfTest\ExceptionTests.cpp" - > - </File> - <File - RelativePath="..\..\..\SelfTest\GeneratorTests.cpp" - > - </File> - <File - RelativePath="..\..\..\SelfTest\MessageTests.cpp" - > - </File> - <File - RelativePath="..\..\..\SelfTest\MiscTests.cpp" - > - </File> - <File - RelativePath="..\..\..\SelfTest\SectionTrackerTests.cpp" - > - </File> - <File - RelativePath="..\..\..\SelfTest\TrickyTests.cpp" - > - </File> - <File - RelativePath="..\..\..\SelfTest\VariadicMacrosTests.cpp" - > - </File> - </Filter> - </Files> - <Globals> - </Globals> -</VisualStudioProject> diff --git a/3rdparty/catch/projects/VS2010/TestCatch/TestCatch.sln b/3rdparty/catch/projects/VS2010/TestCatch/TestCatch.sln deleted file mode 100644 index efb4502bf98..00000000000 --- a/3rdparty/catch/projects/VS2010/TestCatch/TestCatch.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestCatch", "TestCatch\TestCatch.vcxproj", "{A2F23B19-9CF7-4246-AE58-BC65E39C6F7E}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A2F23B19-9CF7-4246-AE58-BC65E39C6F7E}.Debug|Win32.ActiveCfg = Debug|Win32 - {A2F23B19-9CF7-4246-AE58-BC65E39C6F7E}.Debug|Win32.Build.0 = Debug|Win32 - {A2F23B19-9CF7-4246-AE58-BC65E39C6F7E}.Release|Win32.ActiveCfg = Release|Win32 - {A2F23B19-9CF7-4246-AE58-BC65E39C6F7E}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/3rdparty/catch/projects/VS2010/TestCatch/TestCatch/TestCatch.vcxproj b/3rdparty/catch/projects/VS2010/TestCatch/TestCatch/TestCatch.vcxproj deleted file mode 100644 index 52bcea11821..00000000000 --- a/3rdparty/catch/projects/VS2010/TestCatch/TestCatch/TestCatch.vcxproj +++ /dev/null @@ -1,148 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{A2F23B19-9CF7-4246-AE58-BC65E39C6F7E}</ProjectGuid> - <RootNamespace>TestCatch</RootNamespace> - <Keyword>Win32Proj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir> - <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental> - <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> - <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" /> - <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" /> - <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet> - <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" /> - <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" /> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <MinimalRebuild>true</MinimalRebuild> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level4</WarningLevel> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <TargetMachine>MachineX86</TargetMachine> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <FunctionLevelLinking>true</FunctionLevelLinking> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Console</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <TargetMachine>MachineX86</TargetMachine> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\..\SelfTest\ApproxTests.cpp" /> - <ClCompile Include="..\..\..\SelfTest\BDDTests.cpp" /> - <ClCompile Include="..\..\..\SelfTest\PartTrackerTests.cpp" /> - <ClCompile Include="..\..\..\SelfTest\TestMain.cpp" /> - <ClCompile Include="..\..\..\SelfTest\ClassTests.cpp" /> - <ClCompile Include="..\..\..\SelfTest\ConditionTests.cpp" /> - <ClCompile Include="..\..\..\SelfTest\ExceptionTests.cpp" /> - <ClCompile Include="..\..\..\SelfTest\GeneratorTests.cpp" /> - <ClCompile Include="..\..\..\SelfTest\MessageTests.cpp" /> - <ClCompile Include="..\..\..\SelfTest\MiscTests.cpp" /> - <ClCompile Include="..\..\..\SelfTest\TrickyTests.cpp" /> - <ClCompile Include="..\..\..\SelfTest\VariadicMacrosTests.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\..\..\..\include\catch.hpp" /> - <ClInclude Include="..\..\..\..\include\catch_objc.hpp" /> - <ClInclude Include="..\..\..\..\include\catch_objc_main.hpp" /> - <ClInclude Include="..\..\..\..\include\catch_runner.hpp" /> - <ClInclude Include="..\..\..\..\include\catch_with_main.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_capture.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_commandline.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_common.h" /> - <ClInclude Include="..\..\..\..\include\internal\catch_config.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_debugger.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_evaluate.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_exception_translator_registry.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_generators.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_generators_impl.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_hub.h" /> - <ClInclude Include="..\..\..\..\include\internal\catch_hub_impl.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_interfaces_capture.h" /> - <ClInclude Include="..\..\..\..\include\internal\catch_interfaces_exception.h" /> - <ClInclude Include="..\..\..\..\include\internal\catch_interfaces_reporter.h" /> - <ClInclude Include="..\..\..\..\include\internal\catch_interfaces_runner.h" /> - <ClInclude Include="..\..\..\..\include\internal\catch_interfaces_testcase.h" /> - <ClInclude Include="..\..\..\..\include\internal\catch_list.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_reporter_registrars.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_reporter_registry.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_result_type.h" /> - <ClInclude Include="..\..\..\..\include\internal\catch_resultinfo.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_runner_impl.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_section.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_stream.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_test_case_info.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_test_case_registry_impl.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_test_registry.hpp" /> - <ClInclude Include="..\..\..\..\include\internal\catch_xmlwriter.hpp" /> - <ClInclude Include="..\..\..\..\include\reporters\catch_reporter_basic.hpp" /> - <ClInclude Include="..\..\..\..\include\reporters\catch_reporter_junit.hpp" /> - <ClInclude Include="..\..\..\..\include\reporters\catch_reporter_xml.hpp" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project>
\ No newline at end of file diff --git a/3rdparty/catch/projects/Where did the projects go.txt b/3rdparty/catch/projects/Where did the projects go.txt new file mode 100644 index 00000000000..c7b011d55eb --- /dev/null +++ b/3rdparty/catch/projects/Where did the projects go.txt @@ -0,0 +1,13 @@ +The canonical project format is now CMake. +To generate an XCode or Visual Studio project you'll need CMake, which you can download from https://cmake.org if necessary. + +To generate the project files open a terminal/ console within the projects directory (where this file is located), create a directory called "Generated" (using mkdir or md), cd into it, then type: + +CMake -G <project format> ../.. + +Where <project format> is XCode for XCode projects, or "Visual Studio 14" for Visual Studio 2015 (replace 14 with the major version number for any other supported Visual Studio version - or execute CMake -help for the full list) + +Remember to re-run CMake any time you pull from GitHub. +Note that the projects/Generated folder is excluded in .gitignore. So it is recommended to use this. + +CMake can also generate make files or projects for other build systems. Run CMake -help for the full set of options. diff --git a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj b/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj deleted file mode 100644 index a26df5361bd..00000000000 --- a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj +++ /dev/null @@ -1,742 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 26059AF21BD4B94C003D575C /* PartTrackerTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26059AF11BD4B94C003D575C /* PartTrackerTests.cpp */; }; - 263F7A4719B6FCBF009474C2 /* EnumToString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 263F7A4619B6FCBF009474C2 /* EnumToString.cpp */; }; - 263F7A4B19B6FE1E009474C2 /* ToStringPair.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 263F7A4819B6FE1E009474C2 /* ToStringPair.cpp */; }; - 263F7A4C19B6FE1E009474C2 /* ToStringVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 263F7A4919B6FE1E009474C2 /* ToStringVector.cpp */; }; - 263F7A4D19B6FE1E009474C2 /* ToStringWhich.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 263F7A4A19B6FE1E009474C2 /* ToStringWhich.cpp */; }; - 2656C2211925E7330040DB02 /* catch_test_spec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2656C2201925E7330040DB02 /* catch_test_spec.cpp */; }; - 266B06B816F3A60A004ED264 /* VariadicMacrosTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 266B06B616F3A60A004ED264 /* VariadicMacrosTests.cpp */; }; - 266ECD74170F3C620030D735 /* BDDTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 266ECD73170F3C620030D735 /* BDDTests.cpp */; }; - 26711C8F195D465C0033EDA2 /* TagAliasTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26711C8D195D465C0033EDA2 /* TagAliasTests.cpp */; }; - 26847E5F16BBADB40043B9C1 /* catch_message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26847E5D16BBADB40043B9C1 /* catch_message.cpp */; }; - 2691574C1A532A280054F1ED /* ToStringTuple.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2691574B1A532A280054F1ED /* ToStringTuple.cpp */; }; - 2694A1FD16A0000E004816E3 /* catch_text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2694A1FB16A0000E004816E3 /* catch_text.cpp */; }; - 26E1B7D319213BC900812682 /* CmdLineTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26E1B7D119213BC900812682 /* CmdLineTests.cpp */; }; - 4A45DA2416161EF9004F8D6B /* catch_console_colour.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A45DA2316161EF9004F8D6B /* catch_console_colour.cpp */; }; - 4A45DA2716161F1F004F8D6B /* catch_ptr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A45DA2616161F1F004F8D6B /* catch_ptr.cpp */; }; - 4A45DA2916161F3D004F8D6B /* catch_streambuf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A45DA2816161F3D004F8D6B /* catch_streambuf.cpp */; }; - 4A45DA2B16161F79004F8D6B /* catch_interfaces_registry_hub.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A45DA2A16161F79004F8D6B /* catch_interfaces_registry_hub.cpp */; }; - 4A45DA2D16161FA2004F8D6B /* catch_interfaces_capture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A45DA2C16161FA2004F8D6B /* catch_interfaces_capture.cpp */; }; - 4A45DA3116161FFC004F8D6B /* catch_interfaces_reporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A45DA3016161FFB004F8D6B /* catch_interfaces_reporter.cpp */; }; - 4A45DA3316162047004F8D6B /* catch_interfaces_exception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A45DA3216162047004F8D6B /* catch_interfaces_exception.cpp */; }; - 4A45DA3516162071004F8D6B /* catch_interfaces_runner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A45DA3416162071004F8D6B /* catch_interfaces_runner.cpp */; }; - 4A6D0C27149B3D3B00DB3EAA /* CatchSelfTest.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4A6D0C26149B3D3B00DB3EAA /* CatchSelfTest.1 */; }; - 4A6D0C37149B3D9E00DB3EAA /* ApproxTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C2D149B3D9E00DB3EAA /* ApproxTests.cpp */; }; - 4A6D0C38149B3D9E00DB3EAA /* ClassTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C2F149B3D9E00DB3EAA /* ClassTests.cpp */; }; - 4A6D0C39149B3D9E00DB3EAA /* ConditionTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C30149B3D9E00DB3EAA /* ConditionTests.cpp */; }; - 4A6D0C3A149B3D9E00DB3EAA /* ExceptionTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C31149B3D9E00DB3EAA /* ExceptionTests.cpp */; }; - 4A6D0C3B149B3D9E00DB3EAA /* GeneratorTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C32149B3D9E00DB3EAA /* GeneratorTests.cpp */; }; - 4A6D0C3C149B3D9E00DB3EAA /* MessageTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C33149B3D9E00DB3EAA /* MessageTests.cpp */; }; - 4A6D0C3D149B3D9E00DB3EAA /* MiscTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C34149B3D9E00DB3EAA /* MiscTests.cpp */; }; - 4A6D0C3E149B3D9E00DB3EAA /* TestMain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C35149B3D9E00DB3EAA /* TestMain.cpp */; }; - 4A6D0C3F149B3D9E00DB3EAA /* TrickyTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A6D0C36149B3D9E00DB3EAA /* TrickyTests.cpp */; }; - 4AB3D99D1616216500C9A0F8 /* catch_interfaces_testcase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4AB3D99C1616216500C9A0F8 /* catch_interfaces_testcase.cpp */; }; - 4AB3D9A01616219100C9A0F8 /* catch_interfaces_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4AB3D99F1616219100C9A0F8 /* catch_interfaces_config.cpp */; }; - 4AB3D9A2161621B500C9A0F8 /* catch_interfaces_generators.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4AB3D9A1161621B500C9A0F8 /* catch_interfaces_generators.cpp */; }; - 4ACE21CC166CA1B300FB5509 /* catch_option.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4ACE21CA166CA1B300FB5509 /* catch_option.cpp */; }; - 4AEE032016142F910071E950 /* catch_common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4AEE031F16142F910071E950 /* catch_common.cpp */; }; - 4AEE032316142FC70071E950 /* catch_debugger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4AEE032216142FC70071E950 /* catch_debugger.cpp */; }; - 4AEE032516142FF10071E950 /* catch_stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4AEE032416142FF10071E950 /* catch_stream.cpp */; }; - 4AEE0328161434FD0071E950 /* catch_xmlwriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4AEE0327161434FD0071E950 /* catch_xmlwriter.cpp */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 4A6D0C1E149B3D3B00DB3EAA /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - 4A6D0C27149B3D3B00DB3EAA /* CatchSelfTest.1 in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 1; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 26059AF11BD4B94C003D575C /* PartTrackerTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PartTrackerTests.cpp; path = ../../../SelfTest/PartTrackerTests.cpp; sourceTree = "<group>"; }; - 261488FA184C81130041FBEB /* catch_test_spec.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_test_spec.hpp; sourceTree = "<group>"; }; - 261488FC184D1DC10041FBEB /* catch_stream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_stream.h; sourceTree = "<group>"; }; - 261488FD184D21290041FBEB /* catch_section_info.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_section_info.h; sourceTree = "<group>"; }; - 261488FE184DC32F0041FBEB /* catch_section.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_section.h; sourceTree = "<group>"; }; - 261488FF184DC4A20041FBEB /* catch_debugger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_debugger.h; sourceTree = "<group>"; }; - 2627F7051935B16F009BCE2D /* catch_result_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_result_builder.h; sourceTree = "<group>"; }; - 2627F7061935B55F009BCE2D /* catch_result_builder.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_result_builder.hpp; sourceTree = "<group>"; }; - 262E7399184673A800CAC268 /* catch_reporter_bases.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_bases.hpp; sourceTree = "<group>"; }; - 262E739A1846759000CAC268 /* catch_common.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_common.hpp; sourceTree = "<group>"; }; - 263F7A4519A66608009474C2 /* catch_fatal_condition.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_fatal_condition.hpp; sourceTree = "<group>"; }; - 263F7A4619B6FCBF009474C2 /* EnumToString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EnumToString.cpp; path = ../../../SelfTest/EnumToString.cpp; sourceTree = "<group>"; }; - 263F7A4819B6FE1E009474C2 /* ToStringPair.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ToStringPair.cpp; path = ../../../SelfTest/ToStringPair.cpp; sourceTree = "<group>"; }; - 263F7A4919B6FE1E009474C2 /* ToStringVector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ToStringVector.cpp; path = ../../../SelfTest/ToStringVector.cpp; sourceTree = "<group>"; }; - 263F7A4A19B6FE1E009474C2 /* ToStringWhich.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ToStringWhich.cpp; path = ../../../SelfTest/ToStringWhich.cpp; sourceTree = "<group>"; }; - 263FD06017AF8DF200988A20 /* catch_timer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_timer.hpp; sourceTree = "<group>"; }; - 263FD06117AF8DF200988A20 /* catch_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_timer.h; sourceTree = "<group>"; }; - 2656C21F1925E5100040DB02 /* catch_test_spec_parser.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_test_spec_parser.hpp; sourceTree = "<group>"; }; - 2656C2201925E7330040DB02 /* catch_test_spec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_test_spec.cpp; path = ../../../SelfTest/SurrogateCpps/catch_test_spec.cpp; sourceTree = "<group>"; }; - 2656C226192A77EF0040DB02 /* catch_suppress_warnings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_suppress_warnings.h; sourceTree = "<group>"; }; - 2656C227192A78410040DB02 /* catch_reenable_warnings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_reenable_warnings.h; sourceTree = "<group>"; }; - 266B06B616F3A60A004ED264 /* VariadicMacrosTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VariadicMacrosTests.cpp; path = ../../../SelfTest/VariadicMacrosTests.cpp; sourceTree = "<group>"; }; - 266ECD73170F3C620030D735 /* BDDTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BDDTests.cpp; path = ../../../SelfTest/BDDTests.cpp; sourceTree = "<group>"; }; - 266ECD8C1713614B0030D735 /* catch_legacy_reporter_adapter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_legacy_reporter_adapter.hpp; sourceTree = "<group>"; }; - 266ECD8D1713614B0030D735 /* catch_legacy_reporter_adapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_legacy_reporter_adapter.h; sourceTree = "<group>"; }; - 26711C8D195D465C0033EDA2 /* TagAliasTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TagAliasTests.cpp; path = ../../../SelfTest/TagAliasTests.cpp; sourceTree = "<group>"; }; - 26711C90195D46CD0033EDA2 /* catch_interfaces_tag_alias_registry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_tag_alias_registry.h; sourceTree = "<group>"; }; - 26711C91195D47820033EDA2 /* catch_tag_alias.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_tag_alias.h; sourceTree = "<group>"; }; - 26711C92195D48F60033EDA2 /* catch_tag_alias_registry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_tag_alias_registry.hpp; sourceTree = "<group>"; }; - 26711C94195D4B120033EDA2 /* catch_tag_alias_registry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_tag_alias_registry.h; sourceTree = "<group>"; }; - 26759473171C74C200A84BD1 /* catch_compiler_capabilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = catch_compiler_capabilities.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 26847E5B16BBAB790043B9C1 /* catch_message.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_message.h; sourceTree = "<group>"; }; - 26847E5C16BBACB60043B9C1 /* catch_message.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_message.hpp; sourceTree = "<group>"; }; - 26847E5D16BBADB40043B9C1 /* catch_message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_message.cpp; path = ../../../SelfTest/SurrogateCpps/catch_message.cpp; sourceTree = "<group>"; }; - 268F47B018A93F7800D8C14F /* catch_clara.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_clara.h; sourceTree = "<group>"; }; - 2691574A1A4480C50054F1ED /* catch_reporter_teamcity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_teamcity.hpp; sourceTree = "<group>"; }; - 2691574B1A532A280054F1ED /* ToStringTuple.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ToStringTuple.cpp; path = ../../../SelfTest/ToStringTuple.cpp; sourceTree = "<group>"; }; - 26926E8318D7777D004E10F2 /* clara.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = clara.h; path = ../../../../include/external/clara.h; sourceTree = "<group>"; }; - 26926E8418D77809004E10F2 /* tbc_text_format.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbc_text_format.h; path = ../../../../include/external/tbc_text_format.h; sourceTree = "<group>"; }; - 26948287179EF7F900ED166E /* catch_test_case_tracker.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_test_case_tracker.hpp; sourceTree = "<group>"; }; - 2694A1FB16A0000E004816E3 /* catch_text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = catch_text.cpp; sourceTree = "<group>"; }; - 269831E519078C1600BB0CE0 /* catch_tostring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_tostring.h; sourceTree = "<group>"; }; - 269831E619078CA200BB0CE0 /* catch_tostring.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_tostring.hpp; sourceTree = "<group>"; }; - 269831E719121CA500BB0CE0 /* catch_reporter_compact.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_compact.hpp; sourceTree = "<group>"; }; - 26AEAF1617BEA18E009E32C9 /* catch_platform.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_platform.h; sourceTree = "<group>"; }; - 26DACF2F17206D3400A21326 /* catch_text.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_text.h; sourceTree = "<group>"; }; - 26DFD3B11B53F84700FD6F16 /* catch_wildcard_pattern.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_wildcard_pattern.hpp; sourceTree = "<group>"; }; - 26E1B7D119213BC900812682 /* CmdLineTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CmdLineTests.cpp; path = ../../../SelfTest/CmdLineTests.cpp; sourceTree = "<group>"; }; - 26EDFBD91B72011F00B1873C /* catch_reporter_multi.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_multi.hpp; sourceTree = "<group>"; }; - 4A084F1C15DACEEA0027E631 /* catch_test_case_info.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_test_case_info.hpp; sourceTree = "<group>"; }; - 4A3D7DD01503869D005F9203 /* catch_matchers.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_matchers.hpp; sourceTree = "<group>"; }; - 4A45DA2316161EF9004F8D6B /* catch_console_colour.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_console_colour.cpp; path = ../../../SelfTest/SurrogateCpps/catch_console_colour.cpp; sourceTree = "<group>"; }; - 4A45DA2616161F1F004F8D6B /* catch_ptr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_ptr.cpp; path = ../../../SelfTest/SurrogateCpps/catch_ptr.cpp; sourceTree = "<group>"; }; - 4A45DA2816161F3D004F8D6B /* catch_streambuf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_streambuf.cpp; path = ../../../SelfTest/SurrogateCpps/catch_streambuf.cpp; sourceTree = "<group>"; }; - 4A45DA2A16161F79004F8D6B /* catch_interfaces_registry_hub.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_interfaces_registry_hub.cpp; path = ../../../SelfTest/SurrogateCpps/catch_interfaces_registry_hub.cpp; sourceTree = "<group>"; }; - 4A45DA2C16161FA2004F8D6B /* catch_interfaces_capture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_interfaces_capture.cpp; path = ../../../SelfTest/SurrogateCpps/catch_interfaces_capture.cpp; sourceTree = "<group>"; }; - 4A45DA3016161FFB004F8D6B /* catch_interfaces_reporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_interfaces_reporter.cpp; path = ../../../SelfTest/SurrogateCpps/catch_interfaces_reporter.cpp; sourceTree = "<group>"; }; - 4A45DA3216162047004F8D6B /* catch_interfaces_exception.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_interfaces_exception.cpp; path = ../../../SelfTest/SurrogateCpps/catch_interfaces_exception.cpp; sourceTree = "<group>"; }; - 4A45DA3416162071004F8D6B /* catch_interfaces_runner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_interfaces_runner.cpp; path = ../../../SelfTest/SurrogateCpps/catch_interfaces_runner.cpp; sourceTree = "<group>"; }; - 4A4B0F9715CE6CFB00AE2392 /* catch_registry_hub.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_registry_hub.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - 4A4B0F9915CE6EC100AE2392 /* catch_interfaces_registry_hub.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = catch_interfaces_registry_hub.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 4A4B0F9A15CEF84800AE2392 /* catch_notimplemented_exception.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_notimplemented_exception.h; sourceTree = "<group>"; }; - 4A4B0F9B15CEF8C400AE2392 /* catch_notimplemented_exception.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_notimplemented_exception.hpp; sourceTree = "<group>"; }; - 4A4B0F9C15CEFA8300AE2392 /* catch_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_impl.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - 4A6D0C20149B3D3B00DB3EAA /* CatchSelfTest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = CatchSelfTest; sourceTree = BUILT_PRODUCTS_DIR; }; - 4A6D0C26149B3D3B00DB3EAA /* CatchSelfTest.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = CatchSelfTest.1; sourceTree = "<group>"; }; - 4A6D0C2D149B3D9E00DB3EAA /* ApproxTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ApproxTests.cpp; path = ../../../SelfTest/ApproxTests.cpp; sourceTree = "<group>"; }; - 4A6D0C2F149B3D9E00DB3EAA /* ClassTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ClassTests.cpp; path = ../../../SelfTest/ClassTests.cpp; sourceTree = "<group>"; }; - 4A6D0C30149B3D9E00DB3EAA /* ConditionTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ConditionTests.cpp; path = ../../../SelfTest/ConditionTests.cpp; sourceTree = "<group>"; }; - 4A6D0C31149B3D9E00DB3EAA /* ExceptionTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ExceptionTests.cpp; path = ../../../SelfTest/ExceptionTests.cpp; sourceTree = "<group>"; }; - 4A6D0C32149B3D9E00DB3EAA /* GeneratorTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GeneratorTests.cpp; path = ../../../SelfTest/GeneratorTests.cpp; sourceTree = "<group>"; }; - 4A6D0C33149B3D9E00DB3EAA /* MessageTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MessageTests.cpp; path = ../../../SelfTest/MessageTests.cpp; sourceTree = "<group>"; }; - 4A6D0C34149B3D9E00DB3EAA /* MiscTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MiscTests.cpp; path = ../../../SelfTest/MiscTests.cpp; sourceTree = "<group>"; }; - 4A6D0C35149B3D9E00DB3EAA /* TestMain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TestMain.cpp; path = ../../../SelfTest/TestMain.cpp; sourceTree = "<group>"; }; - 4A6D0C36149B3D9E00DB3EAA /* TrickyTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TrickyTests.cpp; path = ../../../SelfTest/TrickyTests.cpp; sourceTree = "<group>"; }; - 4A6D0C42149B3E1500DB3EAA /* catch_session.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = catch_session.hpp; path = ../../../../include/catch_session.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - 4A6D0C43149B3E1500DB3EAA /* catch_with_main.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = catch_with_main.hpp; path = ../../../../include/catch_with_main.hpp; sourceTree = "<group>"; }; - 4A6D0C44149B3E1500DB3EAA /* catch.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = catch.hpp; path = ../../../../include/catch.hpp; sourceTree = "<group>"; }; - 4A6D0C46149B3E3D00DB3EAA /* catch_approx.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_approx.hpp; sourceTree = "<group>"; }; - 4A6D0C47149B3E3D00DB3EAA /* catch_capture.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_capture.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - 4A6D0C48149B3E3D00DB3EAA /* catch_commandline.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_commandline.hpp; sourceTree = "<group>"; }; - 4A6D0C49149B3E3D00DB3EAA /* catch_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_common.h; sourceTree = "<group>"; }; - 4A6D0C4A149B3E3D00DB3EAA /* catch_config.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_config.hpp; sourceTree = "<group>"; }; - 4A6D0C4B149B3E3D00DB3EAA /* catch_debugger.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_debugger.hpp; sourceTree = "<group>"; }; - 4A6D0C4C149B3E3D00DB3EAA /* catch_default_main.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_default_main.hpp; sourceTree = "<group>"; }; - 4A6D0C4D149B3E3D00DB3EAA /* catch_evaluate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_evaluate.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - 4A6D0C4E149B3E3D00DB3EAA /* catch_exception_translator_registry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_exception_translator_registry.hpp; sourceTree = "<group>"; }; - 4A6D0C4F149B3E3D00DB3EAA /* catch_generators.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_generators.hpp; sourceTree = "<group>"; }; - 4A6D0C50149B3E3D00DB3EAA /* catch_generators_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_generators_impl.hpp; sourceTree = "<group>"; }; - 4A6D0C51149B3E3D00DB3EAA /* catch_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_context.h; sourceTree = "<group>"; }; - 4A6D0C52149B3E3D00DB3EAA /* catch_context_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_context_impl.hpp; sourceTree = "<group>"; }; - 4A6D0C53149B3E3D00DB3EAA /* catch_interfaces_capture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_capture.h; sourceTree = "<group>"; }; - 4A6D0C54149B3E3D00DB3EAA /* catch_interfaces_exception.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = catch_interfaces_exception.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 4A6D0C55149B3E3D00DB3EAA /* catch_interfaces_reporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_reporter.h; sourceTree = "<group>"; }; - 4A6D0C56149B3E3D00DB3EAA /* catch_interfaces_runner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_runner.h; sourceTree = "<group>"; }; - 4A6D0C57149B3E3D00DB3EAA /* catch_interfaces_testcase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_testcase.h; sourceTree = "<group>"; }; - 4A6D0C58149B3E3D00DB3EAA /* catch_list.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_list.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - 4A6D0C59149B3E3D00DB3EAA /* catch_objc.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_objc.hpp; sourceTree = "<group>"; }; - 4A6D0C5A149B3E3D00DB3EAA /* catch_reporter_registrars.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_reporter_registrars.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - 4A6D0C5B149B3E3D00DB3EAA /* catch_reporter_registry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_registry.hpp; sourceTree = "<group>"; }; - 4A6D0C5C149B3E3D00DB3EAA /* catch_result_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_result_type.h; sourceTree = "<group>"; }; - 4A6D0C5D149B3E3D00DB3EAA /* catch_assertionresult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = catch_assertionresult.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 4A6D0C5E149B3E3D00DB3EAA /* catch_run_context.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_run_context.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - 4A6D0C5F149B3E3D00DB3EAA /* catch_section.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_section.hpp; sourceTree = "<group>"; }; - 4A6D0C60149B3E3D00DB3EAA /* catch_stream.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_stream.hpp; sourceTree = "<group>"; }; - 4A6D0C61149B3E3D00DB3EAA /* catch_test_case_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_test_case_info.h; sourceTree = "<group>"; }; - 4A6D0C62149B3E3D00DB3EAA /* catch_test_case_registry_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_test_case_registry_impl.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - 4A6D0C63149B3E3D00DB3EAA /* catch_test_registry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_test_registry.hpp; sourceTree = "<group>"; }; - 4A6D0C64149B3E3D00DB3EAA /* catch_xmlwriter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_xmlwriter.hpp; sourceTree = "<group>"; }; - 4A6D0C67149B3E3D00DB3EAA /* catch_reporter_junit.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_junit.hpp; sourceTree = "<group>"; }; - 4A6D0C68149B3E3D00DB3EAA /* catch_reporter_xml.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_xml.hpp; sourceTree = "<group>"; }; - 4A7ADB4314F631E10094FE10 /* catch_totals.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_totals.hpp; sourceTree = "<group>"; }; - 4A7DB2CD1652FE4B00FA6523 /* catch_version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = catch_version.h; path = ../../../../include/internal/catch_version.h; sourceTree = "<group>"; }; - 4A90B59B15D0F61A00EF71BC /* catch_interfaces_generators.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_generators.h; sourceTree = "<group>"; }; - 4A90B59D15D24FE900EF71BC /* catch_assertionresult.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_assertionresult.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - 4AA7B8B4165428BA003155F6 /* catch_version.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = catch_version.hpp; path = ../../../../include/internal/catch_version.hpp; sourceTree = "<group>"; }; - 4AB1C73514F97BDA00F31DF7 /* catch_console_colour_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_console_colour_impl.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - 4AB1C73714F97C1300F31DF7 /* catch_console_colour.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_console_colour.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - 4AB3D99C1616216500C9A0F8 /* catch_interfaces_testcase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_interfaces_testcase.cpp; path = ../../../SelfTest/SurrogateCpps/catch_interfaces_testcase.cpp; sourceTree = "<group>"; }; - 4AB3D99F1616219100C9A0F8 /* catch_interfaces_config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_interfaces_config.cpp; path = ../../../SelfTest/SurrogateCpps/catch_interfaces_config.cpp; sourceTree = "<group>"; }; - 4AB3D9A1161621B500C9A0F8 /* catch_interfaces_generators.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_interfaces_generators.cpp; path = ../../../SelfTest/SurrogateCpps/catch_interfaces_generators.cpp; sourceTree = "<group>"; }; - 4AB42F84166F3E1A0099F2C8 /* catch_reporter_console.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_console.hpp; sourceTree = "<group>"; }; - 4AB77CB51551AEA200857BF0 /* catch_ptr.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_ptr.hpp; sourceTree = "<group>"; }; - 4AB77CB71553B72B00857BF0 /* catch_section_info.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_section_info.hpp; sourceTree = "<group>"; }; - 4ABEA80415C90D2B009F0424 /* catch_objc_arc.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_objc_arc.hpp; sourceTree = "<group>"; }; - 4AC91CCE155CF02800DC5117 /* catch_expression_lhs.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; path = catch_expression_lhs.hpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; - 4ACE21C8166CA19700FB5509 /* catch_option.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_option.hpp; sourceTree = "<group>"; }; - 4ACE21CA166CA1B300FB5509 /* catch_option.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_option.cpp; path = ../../../SelfTest/SurrogateCpps/catch_option.cpp; sourceTree = "<group>"; }; - 4AEE031F16142F910071E950 /* catch_common.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_common.cpp; path = ../../../SelfTest/SurrogateCpps/catch_common.cpp; sourceTree = "<group>"; }; - 4AEE032216142FC70071E950 /* catch_debugger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_debugger.cpp; path = ../../../SelfTest/SurrogateCpps/catch_debugger.cpp; sourceTree = "<group>"; }; - 4AEE032416142FF10071E950 /* catch_stream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_stream.cpp; path = ../../../SelfTest/SurrogateCpps/catch_stream.cpp; sourceTree = "<group>"; }; - 4AEE0326161431070071E950 /* catch_streambuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_streambuf.h; sourceTree = "<group>"; }; - 4AEE0327161434FD0071E950 /* catch_xmlwriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_xmlwriter.cpp; path = ../../../SelfTest/SurrogateCpps/catch_xmlwriter.cpp; sourceTree = "<group>"; }; - 4AFC661D157E96A7009D58CF /* catch_interfaces_config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_interfaces_config.h; sourceTree = "<group>"; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 4A6D0C1D149B3D3B00DB3EAA /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 266E9AD317290E710061DAB2 /* Introspective Tests */ = { - isa = PBXGroup; - children = ( - 26059AF11BD4B94C003D575C /* PartTrackerTests.cpp */, - 26E1B7D119213BC900812682 /* CmdLineTests.cpp */, - 26711C8D195D465C0033EDA2 /* TagAliasTests.cpp */, - ); - name = "Introspective Tests"; - sourceTree = "<group>"; - }; - 26C5F3EB17514B670056FB3C /* External */ = { - isa = PBXGroup; - children = ( - 26926E8418D77809004E10F2 /* tbc_text_format.h */, - 26926E8318D7777D004E10F2 /* clara.h */, - ); - name = External; - sourceTree = "<group>"; - }; - 4A6D0C15149B3D3B00DB3EAA = { - isa = PBXGroup; - children = ( - 4A6D0C23149B3D3B00DB3EAA /* CatchSelfTest */, - 4A6D0C21149B3D3B00DB3EAA /* Products */, - ); - sourceTree = "<group>"; - }; - 4A6D0C21149B3D3B00DB3EAA /* Products */ = { - isa = PBXGroup; - children = ( - 4A6D0C20149B3D3B00DB3EAA /* CatchSelfTest */, - ); - name = Products; - sourceTree = "<group>"; - }; - 4A6D0C23149B3D3B00DB3EAA /* CatchSelfTest */ = { - isa = PBXGroup; - children = ( - 4A6D0C35149B3D9E00DB3EAA /* TestMain.cpp */, - 266E9AD317290E710061DAB2 /* Introspective Tests */, - 4A6D0C40149B3DAB00DB3EAA /* Tests */, - 4A6D0C41149B3DE900DB3EAA /* Catch */, - 4A6D0C26149B3D3B00DB3EAA /* CatchSelfTest.1 */, - ); - path = CatchSelfTest; - sourceTree = "<group>"; - }; - 4A6D0C40149B3DAB00DB3EAA /* Tests */ = { - isa = PBXGroup; - children = ( - 2691574B1A532A280054F1ED /* ToStringTuple.cpp */, - 263F7A4819B6FE1E009474C2 /* ToStringPair.cpp */, - 263F7A4919B6FE1E009474C2 /* ToStringVector.cpp */, - 263F7A4A19B6FE1E009474C2 /* ToStringWhich.cpp */, - 263F7A4619B6FCBF009474C2 /* EnumToString.cpp */, - 266ECD73170F3C620030D735 /* BDDTests.cpp */, - 4A6D0C36149B3D9E00DB3EAA /* TrickyTests.cpp */, - 4A6D0C2D149B3D9E00DB3EAA /* ApproxTests.cpp */, - 4A6D0C2F149B3D9E00DB3EAA /* ClassTests.cpp */, - 4A6D0C30149B3D9E00DB3EAA /* ConditionTests.cpp */, - 4A6D0C31149B3D9E00DB3EAA /* ExceptionTests.cpp */, - 4A6D0C32149B3D9E00DB3EAA /* GeneratorTests.cpp */, - 4A6D0C33149B3D9E00DB3EAA /* MessageTests.cpp */, - 4A6D0C34149B3D9E00DB3EAA /* MiscTests.cpp */, - 266B06B616F3A60A004ED264 /* VariadicMacrosTests.cpp */, - ); - name = Tests; - sourceTree = "<group>"; - }; - 4A6D0C41149B3DE900DB3EAA /* Catch */ = { - isa = PBXGroup; - children = ( - 26C5F3EB17514B670056FB3C /* External */, - 4A7DB2CD1652FE4B00FA6523 /* catch_version.h */, - 4AA7B8B4165428BA003155F6 /* catch_version.hpp */, - 4A8E4DCF160A34E200194CBD /* SurrogateCpps */, - 4A6D0C44149B3E1500DB3EAA /* catch.hpp */, - 4A6D0C42149B3E1500DB3EAA /* catch_session.hpp */, - 4A6D0C43149B3E1500DB3EAA /* catch_with_main.hpp */, - 4A6D0C45149B3E3D00DB3EAA /* internal */, - 4A6D0C65149B3E3D00DB3EAA /* reporters */, - ); - name = Catch; - sourceTree = "<group>"; - }; - 4A6D0C45149B3E3D00DB3EAA /* internal */ = { - isa = PBXGroup; - children = ( - 4AC91CC3155C38D300DC5117 /* Objective-C */, - 4AC91CC2155C388300DC5117 /* Infrastructure */, - 4AC91CC1155C387400DC5117 /* Interfaces */, - 4AC91CC0155C384400DC5117 /* Process */, - 4AC91CBF155C381600DC5117 /* Test execution */, - 4AC91CBE155C37F800DC5117 /* Registries */, - 4AC91CBD155C37B500DC5117 /* Assertions */, - 4AC91CB4155B9EBF00DC5117 /* impl */, - ); - name = internal; - path = ../../../../include/internal; - sourceTree = "<group>"; - }; - 4A6D0C65149B3E3D00DB3EAA /* reporters */ = { - isa = PBXGroup; - children = ( - 269831E719121CA500BB0CE0 /* catch_reporter_compact.hpp */, - 262E7399184673A800CAC268 /* catch_reporter_bases.hpp */, - 4A6D0C67149B3E3D00DB3EAA /* catch_reporter_junit.hpp */, - 4A6D0C68149B3E3D00DB3EAA /* catch_reporter_xml.hpp */, - 4AB42F84166F3E1A0099F2C8 /* catch_reporter_console.hpp */, - 2691574A1A4480C50054F1ED /* catch_reporter_teamcity.hpp */, - 26EDFBD91B72011F00B1873C /* catch_reporter_multi.hpp */, - ); - name = reporters; - path = ../../../../include/reporters; - sourceTree = "<group>"; - }; - 4A8E4DCF160A34E200194CBD /* SurrogateCpps */ = { - isa = PBXGroup; - children = ( - 2656C2201925E7330040DB02 /* catch_test_spec.cpp */, - 4AEE031F16142F910071E950 /* catch_common.cpp */, - 4AEE032216142FC70071E950 /* catch_debugger.cpp */, - 4AEE032416142FF10071E950 /* catch_stream.cpp */, - 4AEE0327161434FD0071E950 /* catch_xmlwriter.cpp */, - 4A45DA2316161EF9004F8D6B /* catch_console_colour.cpp */, - 4A45DA2616161F1F004F8D6B /* catch_ptr.cpp */, - 4A45DA2816161F3D004F8D6B /* catch_streambuf.cpp */, - 4A45DA2A16161F79004F8D6B /* catch_interfaces_registry_hub.cpp */, - 4A45DA2C16161FA2004F8D6B /* catch_interfaces_capture.cpp */, - 4A45DA3216162047004F8D6B /* catch_interfaces_exception.cpp */, - 4A45DA3016161FFB004F8D6B /* catch_interfaces_reporter.cpp */, - 4A45DA3416162071004F8D6B /* catch_interfaces_runner.cpp */, - 4AB3D99C1616216500C9A0F8 /* catch_interfaces_testcase.cpp */, - 4AB3D99F1616219100C9A0F8 /* catch_interfaces_config.cpp */, - 4AB3D9A1161621B500C9A0F8 /* catch_interfaces_generators.cpp */, - 4ACE21CA166CA1B300FB5509 /* catch_option.cpp */, - 2694A1FB16A0000E004816E3 /* catch_text.cpp */, - 26847E5D16BBADB40043B9C1 /* catch_message.cpp */, - ); - name = SurrogateCpps; - sourceTree = "<group>"; - }; - 4AC91CB4155B9EBF00DC5117 /* impl */ = { - isa = PBXGroup; - children = ( - 4A6D0C5F149B3E3D00DB3EAA /* catch_section.hpp */, - 263FD06017AF8DF200988A20 /* catch_timer.hpp */, - 4A4B0F9C15CEFA8300AE2392 /* catch_impl.hpp */, - 4A4B0F9715CE6CFB00AE2392 /* catch_registry_hub.hpp */, - 4A6D0C50149B3E3D00DB3EAA /* catch_generators_impl.hpp */, - 4A6D0C52149B3E3D00DB3EAA /* catch_context_impl.hpp */, - 4A6D0C5E149B3E3D00DB3EAA /* catch_run_context.hpp */, - 4A6D0C62149B3E3D00DB3EAA /* catch_test_case_registry_impl.hpp */, - 4AB1C73514F97BDA00F31DF7 /* catch_console_colour_impl.hpp */, - 4A4B0F9B15CEF8C400AE2392 /* catch_notimplemented_exception.hpp */, - 4A90B59D15D24FE900EF71BC /* catch_assertionresult.hpp */, - 4A084F1C15DACEEA0027E631 /* catch_test_case_info.hpp */, - 26847E5C16BBACB60043B9C1 /* catch_message.hpp */, - 2627F7061935B55F009BCE2D /* catch_result_builder.hpp */, - 26711C92195D48F60033EDA2 /* catch_tag_alias_registry.hpp */, - ); - name = impl; - sourceTree = "<group>"; - }; - 4AC91CBD155C37B500DC5117 /* Assertions */ = { - isa = PBXGroup; - children = ( - 269831E519078C1600BB0CE0 /* catch_tostring.h */, - 269831E619078CA200BB0CE0 /* catch_tostring.hpp */, - 4A6D0C4D149B3E3D00DB3EAA /* catch_evaluate.hpp */, - 4A6D0C4F149B3E3D00DB3EAA /* catch_generators.hpp */, - 4A6D0C5C149B3E3D00DB3EAA /* catch_result_type.h */, - 4A6D0C5D149B3E3D00DB3EAA /* catch_assertionresult.h */, - 261488FE184DC32F0041FBEB /* catch_section.h */, - 4A3D7DD01503869D005F9203 /* catch_matchers.hpp */, - 4A6D0C46149B3E3D00DB3EAA /* catch_approx.hpp */, - 4A6D0C47149B3E3D00DB3EAA /* catch_capture.hpp */, - 4AC91CCE155CF02800DC5117 /* catch_expression_lhs.hpp */, - 4A4B0F9A15CEF84800AE2392 /* catch_notimplemented_exception.h */, - 26847E5B16BBAB790043B9C1 /* catch_message.h */, - 261488FD184D21290041FBEB /* catch_section_info.h */, - 2627F7051935B16F009BCE2D /* catch_result_builder.h */, - ); - name = Assertions; - sourceTree = "<group>"; - }; - 4AC91CBE155C37F800DC5117 /* Registries */ = { - isa = PBXGroup; - children = ( - 4A6D0C4E149B3E3D00DB3EAA /* catch_exception_translator_registry.hpp */, - 4A6D0C5A149B3E3D00DB3EAA /* catch_reporter_registrars.hpp */, - 4A6D0C5B149B3E3D00DB3EAA /* catch_reporter_registry.hpp */, - 4A6D0C63149B3E3D00DB3EAA /* catch_test_registry.hpp */, - ); - name = Registries; - sourceTree = "<group>"; - }; - 4AC91CBF155C381600DC5117 /* Test execution */ = { - isa = PBXGroup; - children = ( - 261488FA184C81130041FBEB /* catch_test_spec.hpp */, - 2656C21F1925E5100040DB02 /* catch_test_spec_parser.hpp */, - 4A6D0C4A149B3E3D00DB3EAA /* catch_config.hpp */, - 4A6D0C51149B3E3D00DB3EAA /* catch_context.h */, - 4A6D0C61149B3E3D00DB3EAA /* catch_test_case_info.h */, - 4A7ADB4314F631E10094FE10 /* catch_totals.hpp */, - 4AB77CB71553B72B00857BF0 /* catch_section_info.hpp */, - 26948287179EF7F900ED166E /* catch_test_case_tracker.hpp */, - 26711C91195D47820033EDA2 /* catch_tag_alias.h */, - 26711C94195D4B120033EDA2 /* catch_tag_alias_registry.h */, - ); - name = "Test execution"; - sourceTree = "<group>"; - }; - 4AC91CC0155C384400DC5117 /* Process */ = { - isa = PBXGroup; - children = ( - 4A6D0C58149B3E3D00DB3EAA /* catch_list.hpp */, - 4A6D0C48149B3E3D00DB3EAA /* catch_commandline.hpp */, - 4A6D0C4C149B3E3D00DB3EAA /* catch_default_main.hpp */, - ); - name = Process; - sourceTree = "<group>"; - }; - 4AC91CC1155C387400DC5117 /* Interfaces */ = { - isa = PBXGroup; - children = ( - 4A4B0F9915CE6EC100AE2392 /* catch_interfaces_registry_hub.h */, - 4A6D0C53149B3E3D00DB3EAA /* catch_interfaces_capture.h */, - 4A6D0C54149B3E3D00DB3EAA /* catch_interfaces_exception.h */, - 4A6D0C55149B3E3D00DB3EAA /* catch_interfaces_reporter.h */, - 4A6D0C56149B3E3D00DB3EAA /* catch_interfaces_runner.h */, - 4A6D0C57149B3E3D00DB3EAA /* catch_interfaces_testcase.h */, - 4AFC661D157E96A7009D58CF /* catch_interfaces_config.h */, - 4A90B59B15D0F61A00EF71BC /* catch_interfaces_generators.h */, - 26711C90195D46CD0033EDA2 /* catch_interfaces_tag_alias_registry.h */, - ); - name = Interfaces; - sourceTree = "<group>"; - }; - 4AC91CC2155C388300DC5117 /* Infrastructure */ = { - isa = PBXGroup; - children = ( - 266ECD8C1713614B0030D735 /* catch_legacy_reporter_adapter.hpp */, - 266ECD8D1713614B0030D735 /* catch_legacy_reporter_adapter.h */, - 4A6D0C49149B3E3D00DB3EAA /* catch_common.h */, - 262E739A1846759000CAC268 /* catch_common.hpp */, - 4A6D0C4B149B3E3D00DB3EAA /* catch_debugger.hpp */, - 261488FF184DC4A20041FBEB /* catch_debugger.h */, - 4A6D0C60149B3E3D00DB3EAA /* catch_stream.hpp */, - 4A6D0C64149B3E3D00DB3EAA /* catch_xmlwriter.hpp */, - 4AB1C73714F97C1300F31DF7 /* catch_console_colour.hpp */, - 4AB77CB51551AEA200857BF0 /* catch_ptr.hpp */, - 4AEE0326161431070071E950 /* catch_streambuf.h */, - 4ACE21C8166CA19700FB5509 /* catch_option.hpp */, - 26759473171C74C200A84BD1 /* catch_compiler_capabilities.h */, - 26DACF2F17206D3400A21326 /* catch_text.h */, - 263FD06117AF8DF200988A20 /* catch_timer.h */, - 26AEAF1617BEA18E009E32C9 /* catch_platform.h */, - 261488FC184D1DC10041FBEB /* catch_stream.h */, - 268F47B018A93F7800D8C14F /* catch_clara.h */, - 2656C226192A77EF0040DB02 /* catch_suppress_warnings.h */, - 2656C227192A78410040DB02 /* catch_reenable_warnings.h */, - 263F7A4519A66608009474C2 /* catch_fatal_condition.hpp */, - 26DFD3B11B53F84700FD6F16 /* catch_wildcard_pattern.hpp */, - ); - name = Infrastructure; - sourceTree = "<group>"; - }; - 4AC91CC3155C38D300DC5117 /* Objective-C */ = { - isa = PBXGroup; - children = ( - 4A6D0C59149B3E3D00DB3EAA /* catch_objc.hpp */, - 4ABEA80415C90D2B009F0424 /* catch_objc_arc.hpp */, - ); - name = "Objective-C"; - sourceTree = "<group>"; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 4A6D0C1F149B3D3B00DB3EAA /* CatchSelfTest */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4A6D0C2A149B3D3B00DB3EAA /* Build configuration list for PBXNativeTarget "CatchSelfTest" */; - buildPhases = ( - 4A6D0C1C149B3D3B00DB3EAA /* Sources */, - 4A6D0C1D149B3D3B00DB3EAA /* Frameworks */, - 4A6D0C1E149B3D3B00DB3EAA /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = CatchSelfTest; - productName = CatchSelfTest; - productReference = 4A6D0C20149B3D3B00DB3EAA /* CatchSelfTest */; - productType = "com.apple.product-type.tool"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 4A6D0C17149B3D3B00DB3EAA /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0710; - }; - buildConfigurationList = 4A6D0C1A149B3D3B00DB3EAA /* Build configuration list for PBXProject "CatchSelfTest" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 4A6D0C15149B3D3B00DB3EAA; - productRefGroup = 4A6D0C21149B3D3B00DB3EAA /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 4A6D0C1F149B3D3B00DB3EAA /* CatchSelfTest */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - 4A6D0C1C149B3D3B00DB3EAA /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 263F7A4719B6FCBF009474C2 /* EnumToString.cpp in Sources */, - 4A6D0C37149B3D9E00DB3EAA /* ApproxTests.cpp in Sources */, - 4A6D0C38149B3D9E00DB3EAA /* ClassTests.cpp in Sources */, - 4A6D0C39149B3D9E00DB3EAA /* ConditionTests.cpp in Sources */, - 4A6D0C3A149B3D9E00DB3EAA /* ExceptionTests.cpp in Sources */, - 4A6D0C3B149B3D9E00DB3EAA /* GeneratorTests.cpp in Sources */, - 4A6D0C3C149B3D9E00DB3EAA /* MessageTests.cpp in Sources */, - 4A6D0C3D149B3D9E00DB3EAA /* MiscTests.cpp in Sources */, - 4A6D0C3E149B3D9E00DB3EAA /* TestMain.cpp in Sources */, - 4A6D0C3F149B3D9E00DB3EAA /* TrickyTests.cpp in Sources */, - 263F7A4D19B6FE1E009474C2 /* ToStringWhich.cpp in Sources */, - 26059AF21BD4B94C003D575C /* PartTrackerTests.cpp in Sources */, - 263F7A4B19B6FE1E009474C2 /* ToStringPair.cpp in Sources */, - 4AEE032016142F910071E950 /* catch_common.cpp in Sources */, - 263F7A4C19B6FE1E009474C2 /* ToStringVector.cpp in Sources */, - 4AEE032316142FC70071E950 /* catch_debugger.cpp in Sources */, - 4AEE032516142FF10071E950 /* catch_stream.cpp in Sources */, - 4AEE0328161434FD0071E950 /* catch_xmlwriter.cpp in Sources */, - 4A45DA2416161EF9004F8D6B /* catch_console_colour.cpp in Sources */, - 4A45DA2716161F1F004F8D6B /* catch_ptr.cpp in Sources */, - 26E1B7D319213BC900812682 /* CmdLineTests.cpp in Sources */, - 2656C2211925E7330040DB02 /* catch_test_spec.cpp in Sources */, - 4A45DA2916161F3D004F8D6B /* catch_streambuf.cpp in Sources */, - 4A45DA2B16161F79004F8D6B /* catch_interfaces_registry_hub.cpp in Sources */, - 4A45DA2D16161FA2004F8D6B /* catch_interfaces_capture.cpp in Sources */, - 4A45DA3116161FFC004F8D6B /* catch_interfaces_reporter.cpp in Sources */, - 4A45DA3316162047004F8D6B /* catch_interfaces_exception.cpp in Sources */, - 2691574C1A532A280054F1ED /* ToStringTuple.cpp in Sources */, - 26711C8F195D465C0033EDA2 /* TagAliasTests.cpp in Sources */, - 4A45DA3516162071004F8D6B /* catch_interfaces_runner.cpp in Sources */, - 4AB3D99D1616216500C9A0F8 /* catch_interfaces_testcase.cpp in Sources */, - 4AB3D9A01616219100C9A0F8 /* catch_interfaces_config.cpp in Sources */, - 4AB3D9A2161621B500C9A0F8 /* catch_interfaces_generators.cpp in Sources */, - 4ACE21CC166CA1B300FB5509 /* catch_option.cpp in Sources */, - 2694A1FD16A0000E004816E3 /* catch_text.cpp in Sources */, - 26847E5F16BBADB40043B9C1 /* catch_message.cpp in Sources */, - 266B06B816F3A60A004ED264 /* VariadicMacrosTests.cpp in Sources */, - 266ECD74170F3C620030D735 /* BDDTests.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 4A6D0C28149B3D3B00DB3EAA /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_CXX0X_EXTENSIONS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CLANG_WARN__EXIT_TIME_DESTRUCTORS = NO; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; - GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_PEDANTIC = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_PARAMETER = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = ""; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - USER_HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/../../../include\""; - }; - name = Debug; - }; - 4A6D0C29149B3D3B00DB3EAA /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_CXX0X_EXTENSIONS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; - CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CLANG_WARN__EXIT_TIME_DESTRUCTORS = NO; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_NO_COMMON_BLOCKS = YES; - GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES; - GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; - GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; - GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; - GCC_WARN_PEDANTIC = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_PARAMETER = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = ""; - SDKROOT = macosx; - USER_HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/../../../include\""; - }; - name = Release; - }; - 4A6D0C2B149B3D3B00DB3EAA /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "compiler-default"; - CLANG_WARN__DUPLICATE_METHOD_MATCH = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WARNING_CFLAGS = ( - "-Weverything", - "-Wparentheses", - "-Wno-disabled-macro-expansion", - ); - }; - name = Debug; - }; - 4A6D0C2C149B3D3B00DB3EAA /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_SECURITY_FLOATLOOPCOUNTER = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; - CLANG_CXX_LIBRARY = "compiler-default"; - CLANG_WARN__DUPLICATE_METHOD_MATCH = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WARNING_CFLAGS = ( - "-Weverything", - "-Wparentheses", - "-Wno-disabled-macro-expansion", - ); - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 4A6D0C1A149B3D3B00DB3EAA /* Build configuration list for PBXProject "CatchSelfTest" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4A6D0C28149B3D3B00DB3EAA /* Debug */, - 4A6D0C29149B3D3B00DB3EAA /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4A6D0C2A149B3D3B00DB3EAA /* Build configuration list for PBXNativeTarget "CatchSelfTest" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4A6D0C2B149B3D3B00DB3EAA /* Debug */, - 4A6D0C2C149B3D3B00DB3EAA /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 4A6D0C17149B3D3B00DB3EAA /* Project object */; -} diff --git a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 804437d0651..00000000000 --- a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Workspace - version = "1.0"> - <FileRef - location = "self:CatchSelfTest.xcodeproj"> - </FileRef> -</Workspace> diff --git a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTest/CatchSelfTest.1 b/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTest/CatchSelfTest.1 deleted file mode 100644 index 28b36e20289..00000000000 --- a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTest/CatchSelfTest.1 +++ /dev/null @@ -1,79 +0,0 @@ -.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples. -.\"See Also: -.\"man mdoc.samples for a complete listing of options -.\"man mdoc for the short list of editing options -.\"/usr/share/misc/mdoc.template -.Dd 16/12/2011 \" DATE -.Dt CatchSelfTest 1 \" Program name and manual section number -.Os Darwin -.Sh NAME \" Section Header - required - don't modify -.Nm CatchSelfTest, -.\" The following lines are read in generating the apropos(man -k) database. Use only key -.\" words here as the database is built based on the words here and in the .ND line. -.Nm Other_name_for_same_program(), -.Nm Yet another name for the same program. -.\" Use .Nm macro to designate other names for the documented program. -.Nd This line parsed for whatis database. -.Sh SYNOPSIS \" Section Header - required - don't modify -.Nm -.Op Fl abcd \" [-abcd] -.Op Fl a Ar path \" [-a path] -.Op Ar file \" [file] -.Op Ar \" [file ...] -.Ar arg0 \" Underlined argument - use .Ar anywhere to underline -arg2 ... \" Arguments -.Sh DESCRIPTION \" Section Header - required - don't modify -Use the .Nm macro to refer to your program throughout the man page like such: -.Nm -Underlining is accomplished with the .Ar macro like this: -.Ar underlined text . -.Pp \" Inserts a space -A list of items with descriptions: -.Bl -tag -width -indent \" Begins a tagged list -.It item a \" Each item preceded by .It macro -Description of item a -.It item b -Description of item b -.El \" Ends the list -.Pp -A list of flags and their descriptions: -.Bl -tag -width -indent \" Differs from above in tag removed -.It Fl a \"-a flag as a list item -Description of -a flag -.It Fl b -Description of -b flag -.El \" Ends the list -.Pp -.\" .Sh ENVIRONMENT \" May not be needed -.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1 -.\" .It Ev ENV_VAR_1 -.\" Description of ENV_VAR_1 -.\" .It Ev ENV_VAR_2 -.\" Description of ENV_VAR_2 -.\" .El -.Sh FILES \" File used or created by the topic of the man page -.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact -.It Pa /usr/share/file_name -FILE_1 description -.It Pa /Users/joeuser/Library/really_long_file_name -FILE_2 description -.El \" Ends the list -.\" .Sh DIAGNOSTICS \" May not be needed -.\" .Bl -diag -.\" .It Diagnostic Tag -.\" Diagnostic informtion here. -.\" .It Diagnostic Tag -.\" Diagnostic informtion here. -.\" .El -.Sh SEE ALSO -.\" List links in ascending order by section, alphabetically within a section. -.\" Please do not reference files that do not exist without filing a bug report -.Xr a 1 , -.Xr b 1 , -.Xr c 1 , -.Xr a 2 , -.Xr b 2 , -.Xr a 3 , -.Xr b 3 -.\" .Sh BUGS \" Document known, unremedied bugs -.\" .Sh HISTORY \" Document history if command behaves in a unique manner
\ No newline at end of file diff --git a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTestSingle.xcodeproj/project.pbxproj b/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTestSingle.xcodeproj/project.pbxproj deleted file mode 100644 index 1eee6eb6b64..00000000000 --- a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTestSingle.xcodeproj/project.pbxproj +++ /dev/null @@ -1,258 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 4A2894D615D3956000E20735 /* ApproxTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A2894D515D3956000E20735 /* ApproxTests.cpp */; }; - 4AB735FA15D396F400F9F7C3 /* TestMain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A2894E015D3957500E20735 /* TestMain.cpp */; }; - 4AB735FB15D3970C00F9F7C3 /* ClassTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A2894DA15D3957500E20735 /* ClassTests.cpp */; }; - 4AB735FC15D3971100F9F7C3 /* ConditionTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A2894DB15D3957500E20735 /* ConditionTests.cpp */; }; - 4AB735FD15D3971600F9F7C3 /* ExceptionTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A2894DC15D3957500E20735 /* ExceptionTests.cpp */; }; - 4AB735FE15D3971600F9F7C3 /* GeneratorTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A2894DD15D3957500E20735 /* GeneratorTests.cpp */; }; - 4AB735FF15D3971600F9F7C3 /* MessageTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A2894DE15D3957500E20735 /* MessageTests.cpp */; }; - 4AB7360015D3971600F9F7C3 /* MiscTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A2894DF15D3957500E20735 /* MiscTests.cpp */; }; - 4AB7360115D3971600F9F7C3 /* TrickyTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A2894E115D3957500E20735 /* TrickyTests.cpp */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 4A90B5D415D2E3E900EF71BC /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 4A2894D515D3956000E20735 /* ApproxTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ApproxTests.cpp; path = ../../../SelfTest/ApproxTests.cpp; sourceTree = "<group>"; }; - 4A2894DA15D3957500E20735 /* ClassTests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ClassTests.cpp; path = ../../../SelfTest/ClassTests.cpp; sourceTree = "<group>"; }; - 4A2894DB15D3957500E20735 /* ConditionTests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ConditionTests.cpp; path = ../../../SelfTest/ConditionTests.cpp; sourceTree = "<group>"; }; - 4A2894DC15D3957500E20735 /* ExceptionTests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ExceptionTests.cpp; path = ../../../SelfTest/ExceptionTests.cpp; sourceTree = "<group>"; }; - 4A2894DD15D3957500E20735 /* GeneratorTests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = GeneratorTests.cpp; path = ../../../SelfTest/GeneratorTests.cpp; sourceTree = "<group>"; }; - 4A2894DE15D3957500E20735 /* MessageTests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MessageTests.cpp; path = ../../../SelfTest/MessageTests.cpp; sourceTree = "<group>"; }; - 4A2894DF15D3957500E20735 /* MiscTests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MiscTests.cpp; path = ../../../SelfTest/MiscTests.cpp; sourceTree = "<group>"; }; - 4A2894E015D3957500E20735 /* TestMain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TestMain.cpp; path = ../../../SelfTest/TestMain.cpp; sourceTree = "<group>"; }; - 4A2894E115D3957500E20735 /* TrickyTests.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TrickyTests.cpp; path = ../../../SelfTest/TrickyTests.cpp; sourceTree = "<group>"; }; - 4A90B5D615D2E3E900EF71BC /* CatchSelfTestSingle */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = CatchSelfTestSingle; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 4A90B5D315D2E3E900EF71BC /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 4A2894E215D3957D00E20735 /* Self Test */ = { - isa = PBXGroup; - children = ( - 4A2894E015D3957500E20735 /* TestMain.cpp */, - ); - name = "Self Test"; - sourceTree = "<group>"; - }; - 4A2894E315D3959800E20735 /* Test Cases */ = { - isa = PBXGroup; - children = ( - 4A2894DA15D3957500E20735 /* ClassTests.cpp */, - 4A2894DB15D3957500E20735 /* ConditionTests.cpp */, - 4A2894DC15D3957500E20735 /* ExceptionTests.cpp */, - 4A2894DD15D3957500E20735 /* GeneratorTests.cpp */, - 4A2894DE15D3957500E20735 /* MessageTests.cpp */, - 4A2894DF15D3957500E20735 /* MiscTests.cpp */, - 4A2894E115D3957500E20735 /* TrickyTests.cpp */, - 4A2894D515D3956000E20735 /* ApproxTests.cpp */, - ); - name = "Test Cases"; - sourceTree = "<group>"; - }; - 4A90B5CB15D2E3E900EF71BC = { - isa = PBXGroup; - children = ( - 4A90B5D915D2E3E900EF71BC /* CatchSelfTestSingle */, - 4A90B5D715D2E3E900EF71BC /* Products */, - ); - sourceTree = "<group>"; - }; - 4A90B5D715D2E3E900EF71BC /* Products */ = { - isa = PBXGroup; - children = ( - 4A90B5D615D2E3E900EF71BC /* CatchSelfTestSingle */, - ); - name = Products; - sourceTree = "<group>"; - }; - 4A90B5D915D2E3E900EF71BC /* CatchSelfTestSingle */ = { - isa = PBXGroup; - children = ( - 4A2894E315D3959800E20735 /* Test Cases */, - 4A2894E215D3957D00E20735 /* Self Test */, - ); - path = CatchSelfTestSingle; - sourceTree = "<group>"; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 4A90B5D515D2E3E900EF71BC /* CatchSelfTestSingle */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4A90B5E015D2E3E900EF71BC /* Build configuration list for PBXNativeTarget "CatchSelfTestSingle" */; - buildPhases = ( - 4A90B5D215D2E3E900EF71BC /* Sources */, - 4A90B5D315D2E3E900EF71BC /* Frameworks */, - 4A90B5D415D2E3E900EF71BC /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = CatchSelfTestSingle; - productName = CatchSelfTestSingle; - productReference = 4A90B5D615D2E3E900EF71BC /* CatchSelfTestSingle */; - productType = "com.apple.product-type.tool"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 4A90B5CD15D2E3E900EF71BC /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0500; - ORGANIZATIONNAME = "Phil Nash"; - }; - buildConfigurationList = 4A90B5D015D2E3E900EF71BC /* Build configuration list for PBXProject "CatchSelfTestSingle" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 4A90B5CB15D2E3E900EF71BC; - productRefGroup = 4A90B5D715D2E3E900EF71BC /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 4A90B5D515D2E3E900EF71BC /* CatchSelfTestSingle */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - 4A90B5D215D2E3E900EF71BC /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4A2894D615D3956000E20735 /* ApproxTests.cpp in Sources */, - 4AB735FA15D396F400F9F7C3 /* TestMain.cpp in Sources */, - 4AB735FB15D3970C00F9F7C3 /* ClassTests.cpp in Sources */, - 4AB735FC15D3971100F9F7C3 /* ConditionTests.cpp in Sources */, - 4AB735FD15D3971600F9F7C3 /* ExceptionTests.cpp in Sources */, - 4AB735FE15D3971600F9F7C3 /* GeneratorTests.cpp in Sources */, - 4AB735FF15D3971600F9F7C3 /* MessageTests.cpp in Sources */, - 4AB7360015D3971600F9F7C3 /* MiscTests.cpp in Sources */, - 4AB7360115D3971600F9F7C3 /* TrickyTests.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 4A90B5DE15D2E3E900EF71BC /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.8; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - 4A90B5DF15D2E3E900EF71BC /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.8; - SDKROOT = macosx; - }; - name = Release; - }; - 4A90B5E115D2E3E900EF71BC /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LIBRARY = "libc++"; - HEADER_SEARCH_PATHS = "../../../single_include/**"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 4A90B5E215D2E3E900EF71BC /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LIBRARY = "libc++"; - HEADER_SEARCH_PATHS = "../../../single_include/**"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 4A90B5D015D2E3E900EF71BC /* Build configuration list for PBXProject "CatchSelfTestSingle" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4A90B5DE15D2E3E900EF71BC /* Debug */, - 4A90B5DF15D2E3E900EF71BC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4A90B5E015D2E3E900EF71BC /* Build configuration list for PBXNativeTarget "CatchSelfTestSingle" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4A90B5E115D2E3E900EF71BC /* Debug */, - 4A90B5E215D2E3E900EF71BC /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 4A90B5CD15D2E3E900EF71BC /* Project object */; -} diff --git a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTestSingle.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTestSingle.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 4fcfc0e62ac..00000000000 --- a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTestSingle.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Workspace - version = "1.0"> - <FileRef - location = "self:CatchSelfTestSingle.xcodeproj"> - </FileRef> -</Workspace> diff --git a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTestSingle.xcodeproj/project.xcworkspace/xcshareddata/CatchSelfTestSingle.xccheckout b/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTestSingle.xcodeproj/project.xcworkspace/xcshareddata/CatchSelfTestSingle.xccheckout deleted file mode 100644 index cce7052bd19..00000000000 --- a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTestSingle.xcodeproj/project.xcworkspace/xcshareddata/CatchSelfTestSingle.xccheckout +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>IDESourceControlProjectFavoriteDictionaryKey</key> - <false/> - <key>IDESourceControlProjectIdentifier</key> - <string>3A514CAE-B659-4429-93A3-39F9C0349EC4</string> - <key>IDESourceControlProjectName</key> - <string>CatchSelfTestSingle</string> - <key>IDESourceControlProjectOriginsDictionary</key> - <dict> - <key>90C00904F36E6ADB57A7313E998815D255B0DEAF</key> - <string>https://github.com/philsquared/Catch.git</string> - </dict> - <key>IDESourceControlProjectPath</key> - <string>projects/XCode/CatchSelfTest/CatchSelfTestSingle.xcodeproj</string> - <key>IDESourceControlProjectRelativeInstallPathDictionary</key> - <dict> - <key>90C00904F36E6ADB57A7313E998815D255B0DEAF</key> - <string>../../../../..</string> - </dict> - <key>IDESourceControlProjectURL</key> - <string>https://github.com/philsquared/Catch.git</string> - <key>IDESourceControlProjectVersion</key> - <integer>111</integer> - <key>IDESourceControlProjectWCCIdentifier</key> - <string>90C00904F36E6ADB57A7313E998815D255B0DEAF</string> - <key>IDESourceControlProjectWCConfigurations</key> - <array> - <dict> - <key>IDESourceControlRepositoryExtensionIdentifierKey</key> - <string>public.vcs.git</string> - <key>IDESourceControlWCCIdentifierKey</key> - <string>90C00904F36E6ADB57A7313E998815D255B0DEAF</string> - <key>IDESourceControlWCCName</key> - <string>Catch-Develop</string> - </dict> - </array> -</dict> -</plist> diff --git a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTestSingle/dummy.txt b/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTestSingle/dummy.txt deleted file mode 100644 index e69de29bb2d..00000000000 --- a/3rdparty/catch/projects/XCode/CatchSelfTest/CatchSelfTestSingle/dummy.txt +++ /dev/null diff --git a/3rdparty/catch/projects/XCode/OCTest/OCTest.xcodeproj/project.pbxproj b/3rdparty/catch/projects/XCode/OCTest/OCTest.xcodeproj/project.pbxproj deleted file mode 100644 index 6777e8e72c9..00000000000 --- a/3rdparty/catch/projects/XCode/OCTest/OCTest.xcodeproj/project.pbxproj +++ /dev/null @@ -1,265 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 4A63D2AC14E3C1A900F615CB /* OCTest.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4A63D2AB14E3C1A900F615CB /* OCTest.1 */; }; - 4A63D2B314E3C1E600F615CB /* Main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4A63D2B214E3C1E600F615CB /* Main.mm */; }; - 4A63D2C014E4544700F615CB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A63D2BF14E4544700F615CB /* Foundation.framework */; }; - 4A63D2C614E454CC00F615CB /* CatchOCTestCase.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4A63D2C214E454CC00F615CB /* CatchOCTestCase.mm */; }; - 4A63D2C714E454CC00F615CB /* OCTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4A63D2C314E454CC00F615CB /* OCTest.mm */; }; - 4A63D2C814E454CC00F615CB /* TestObj.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A63D2C514E454CC00F615CB /* TestObj.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 4A63D2A314E3C1A900F615CB /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - 4A63D2AC14E3C1A900F615CB /* OCTest.1 in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 1; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 4A63D2A514E3C1A900F615CB /* OCTest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = OCTest; sourceTree = BUILT_PRODUCTS_DIR; }; - 4A63D2AB14E3C1A900F615CB /* OCTest.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = OCTest.1; sourceTree = "<group>"; }; - 4A63D2B214E3C1E600F615CB /* Main.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Main.mm; sourceTree = "<group>"; }; - 4A63D2BF14E4544700F615CB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 4A63D2C114E454CC00F615CB /* CatchOCTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CatchOCTestCase.h; sourceTree = "<group>"; }; - 4A63D2C214E454CC00F615CB /* CatchOCTestCase.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CatchOCTestCase.mm; sourceTree = "<group>"; }; - 4A63D2C314E454CC00F615CB /* OCTest.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OCTest.mm; sourceTree = "<group>"; }; - 4A63D2C414E454CC00F615CB /* TestObj.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestObj.h; sourceTree = "<group>"; }; - 4A63D2C514E454CC00F615CB /* TestObj.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestObj.m; sourceTree = "<group>"; }; - 4AA0D951154C0A7A004B4193 /* catch_objc.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = catch_objc.hpp; path = ../../../include/internal/catch_objc.hpp; sourceTree = "<group>"; }; - 4ABEA80615C90E10009F0424 /* catch_objc_arc.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = catch_objc_arc.hpp; path = ../../../include/internal/catch_objc_arc.hpp; sourceTree = "<group>"; }; - 4ABEA80815C90E38009F0424 /* catch_tostring.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = catch_tostring.hpp; path = ../../../include/internal/catch_tostring.hpp; sourceTree = "<group>"; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 4A63D2A214E3C1A900F615CB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4A63D2C014E4544700F615CB /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 4A63D29A14E3C1A900F615CB = { - isa = PBXGroup; - children = ( - 4AA0D94F154C0A63004B4193 /* Catch */, - 4A63D2BF14E4544700F615CB /* Foundation.framework */, - 4A63D2A814E3C1A900F615CB /* OCTest */, - 4A63D2A614E3C1A900F615CB /* Products */, - ); - sourceTree = "<group>"; - }; - 4A63D2A614E3C1A900F615CB /* Products */ = { - isa = PBXGroup; - children = ( - 4A63D2A514E3C1A900F615CB /* OCTest */, - ); - name = Products; - sourceTree = "<group>"; - }; - 4A63D2A814E3C1A900F615CB /* OCTest */ = { - isa = PBXGroup; - children = ( - 4A63D2C114E454CC00F615CB /* CatchOCTestCase.h */, - 4A63D2C214E454CC00F615CB /* CatchOCTestCase.mm */, - 4A63D2C314E454CC00F615CB /* OCTest.mm */, - 4A63D2C414E454CC00F615CB /* TestObj.h */, - 4A63D2C514E454CC00F615CB /* TestObj.m */, - 4A63D2B214E3C1E600F615CB /* Main.mm */, - 4A63D2AB14E3C1A900F615CB /* OCTest.1 */, - ); - path = OCTest; - sourceTree = "<group>"; - }; - 4AA0D94F154C0A63004B4193 /* Catch */ = { - isa = PBXGroup; - children = ( - 4ABEA80815C90E38009F0424 /* catch_tostring.hpp */, - 4ABEA80615C90E10009F0424 /* catch_objc_arc.hpp */, - 4AA0D951154C0A7A004B4193 /* catch_objc.hpp */, - ); - name = Catch; - sourceTree = "<group>"; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 4A63D2A414E3C1A900F615CB /* OCTest */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4A63D2AF14E3C1A900F615CB /* Build configuration list for PBXNativeTarget "OCTest" */; - buildPhases = ( - 4A63D2A114E3C1A900F615CB /* Sources */, - 4A63D2A214E3C1A900F615CB /* Frameworks */, - 4A63D2A314E3C1A900F615CB /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = OCTest; - productName = OCTest; - productReference = 4A63D2A514E3C1A900F615CB /* OCTest */; - productType = "com.apple.product-type.tool"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 4A63D29C14E3C1A900F615CB /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0500; - }; - buildConfigurationList = 4A63D29F14E3C1A900F615CB /* Build configuration list for PBXProject "OCTest" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 4A63D29A14E3C1A900F615CB; - productRefGroup = 4A63D2A614E3C1A900F615CB /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 4A63D2A414E3C1A900F615CB /* OCTest */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - 4A63D2A114E3C1A900F615CB /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4A63D2B314E3C1E600F615CB /* Main.mm in Sources */, - 4A63D2C614E454CC00F615CB /* CatchOCTestCase.mm in Sources */, - 4A63D2C714E454CC00F615CB /* OCTest.mm in Sources */, - 4A63D2C814E454CC00F615CB /* TestObj.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 4A63D2AD14E3C1A900F615CB /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ../../../include; - MACOSX_DEPLOYMENT_TARGET = 10.7; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - 4A63D2AE14E3C1A900F615CB /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ../../../include; - MACOSX_DEPLOYMENT_TARGET = 10.7; - SDKROOT = macosx; - }; - name = Release; - }; - 4A63D2B014E3C1A900F615CB /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_ARC = YES; - HEADER_SEARCH_PATHS = ../../../include; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 4A63D2B114E3C1A900F615CB /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_ARC = YES; - HEADER_SEARCH_PATHS = ../../../include; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 4A63D29F14E3C1A900F615CB /* Build configuration list for PBXProject "OCTest" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4A63D2AD14E3C1A900F615CB /* Debug */, - 4A63D2AE14E3C1A900F615CB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4A63D2AF14E3C1A900F615CB /* Build configuration list for PBXNativeTarget "OCTest" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4A63D2B014E3C1A900F615CB /* Debug */, - 4A63D2B114E3C1A900F615CB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 4A63D29C14E3C1A900F615CB /* Project object */; -} diff --git a/3rdparty/catch/projects/XCode/OCTest/OCTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/3rdparty/catch/projects/XCode/OCTest/OCTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 119e61c58c7..00000000000 --- a/3rdparty/catch/projects/XCode/OCTest/OCTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Workspace - version = "1.0"> - <FileRef - location = "self:OCTest.xcodeproj"> - </FileRef> -</Workspace> diff --git a/3rdparty/catch/projects/XCode/OCTest/OCTest.xcodeproj/project.xcworkspace/xcshareddata/OCTest.xccheckout b/3rdparty/catch/projects/XCode/OCTest/OCTest.xcodeproj/project.xcworkspace/xcshareddata/OCTest.xccheckout deleted file mode 100644 index 2480364e3e2..00000000000 --- a/3rdparty/catch/projects/XCode/OCTest/OCTest.xcodeproj/project.xcworkspace/xcshareddata/OCTest.xccheckout +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>IDESourceControlProjectFavoriteDictionaryKey</key> - <false/> - <key>IDESourceControlProjectIdentifier</key> - <string>2F99C19E-ADF6-4D99-86C7-7A7830677E7D</string> - <key>IDESourceControlProjectName</key> - <string>OCTest</string> - <key>IDESourceControlProjectOriginsDictionary</key> - <dict> - <key>DE66138E-2FC7-4C1B-9901-82CBF6694223</key> - <string>ssh://github.com/philsquared/Catch.git</string> - </dict> - <key>IDESourceControlProjectPath</key> - <string>projects/XCode4/OCTest/OCTest.xcodeproj/project.xcworkspace</string> - <key>IDESourceControlProjectRelativeInstallPathDictionary</key> - <dict> - <key>DE66138E-2FC7-4C1B-9901-82CBF6694223</key> - <string>../../../../..</string> - </dict> - <key>IDESourceControlProjectURL</key> - <string>ssh://github.com/philsquared/Catch.git</string> - <key>IDESourceControlProjectVersion</key> - <integer>110</integer> - <key>IDESourceControlProjectWCCIdentifier</key> - <string>DE66138E-2FC7-4C1B-9901-82CBF6694223</string> - <key>IDESourceControlProjectWCConfigurations</key> - <array> - <dict> - <key>IDESourceControlRepositoryExtensionIdentifierKey</key> - <string>public.vcs.git</string> - <key>IDESourceControlWCCIdentifierKey</key> - <string>DE66138E-2FC7-4C1B-9901-82CBF6694223</string> - <key>IDESourceControlWCCName</key> - <string>Catch</string> - </dict> - </array> -</dict> -</plist> diff --git a/3rdparty/catch/projects/XCode/OCTest/OCTest/CatchOCTestCase.h b/3rdparty/catch/projects/XCode/OCTest/OCTest/CatchOCTestCase.h deleted file mode 100644 index bd26239ae16..00000000000 --- a/3rdparty/catch/projects/XCode/OCTest/OCTest/CatchOCTestCase.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// CatchOCTestCase.h -// OCTest -// -// Created by Phil on 13/11/2010. -// Copyright 2010 Two Blue Cubes Ltd. All rights reserved. -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#ifndef TWOBLUECUBES_CATCHOCTESTCASE_H_INCLUDED -#define TWOBLUECUBES_CATCHOCTESTCASE_H_INCLUDED - -#include "catch.hpp" - -#import <Cocoa/Cocoa.h> -#import "TestObj.h" - -@interface TestFixture : NSObject <OcFixture> -{ - TestObj* obj; -} - -@end - -#endif // TWOBLUECUBES_CATCHOCTESTCASE_H_INCLUDED diff --git a/3rdparty/catch/projects/XCode/OCTest/OCTest/CatchOCTestCase.mm b/3rdparty/catch/projects/XCode/OCTest/OCTest/CatchOCTestCase.mm deleted file mode 100644 index fb20287b8f0..00000000000 --- a/3rdparty/catch/projects/XCode/OCTest/OCTest/CatchOCTestCase.mm +++ /dev/null @@ -1,83 +0,0 @@ -// -// CatchOCTestCase.mm -// OCTest -// -// Created by Phil Nash on 13/11/2010. -// Copyright 2010 Two Blue Cubes Ltd. All rights reserved. -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -#import "CatchOCTestCase.h" - - -@implementation TestFixture - - --(void) setUp -{ - obj = [[TestObj alloc] init]; -} - --(void) tearDown -{ - arcSafeRelease( obj ); -} - -OC_TEST_CASE( "OCTest/test1", "This is a test case" ) -{ - REQUIRE( obj.int_val == 0 ); - - obj.int_val = 1; - - REQUIRE( obj.int_val == 1 ); -} - -OC_TEST_CASE( "OCTest/test2", "This is another test case" ) -{ - REQUIRE( obj.int_val == 0 ); - - obj.int_val = 2; - - REQUIRE( obj.int_val == 2 ); -} - -OC_TEST_CASE( "OCTest/BOOL", "tests a boolean value" ) -{ - CHECK( [obj isTrue] == NO ); - CHECK( [obj isFalse] == YES ); -} - -OC_TEST_CASE( "OCTest/throws/objc", "throws an Objective-C exception" ) -{ - @throw [[NSException alloc] initWithName: NSGenericException - reason: @"Objective-C exception" - userInfo: nil]; -} -OC_TEST_CASE( "OCTest/throws/stdc++", "throws a std c++ exception" ) -{ - throw std::domain_error( "std C++ exception" ); -} - -/////////////////////////////////////////////////////////////////////////// -template<typename T> -void useObject( const T& object ){} - -template<typename T> -void useObject( const T* object ){} - -OC_TEST_CASE( "OCTest/matchers", "Matches work with OC types (NSString so far)" ) -{ - REQUIRE_THAT( @"This is a string", Equals( @"This isnt a string" ) ); - REQUIRE_THAT( @"This is a string", Contains( @"is a" ) ); - REQUIRE_THAT( @"This is a string", StartsWith( @"This" ) ); - REQUIRE_THAT( @"This is a string", EndsWith( @"string" ) ); -} - -OC_TEST_CASE( "OCTest/matchers/nil", "nil NSString should not crash the test" ) -{ - CHECK_THAT( (NSString*)nil, Equals( @"This should fail, but not crash" ) ); - CHECK_THAT( (NSString*)nil, StartsWith( @"anything" ) ); -} - -@end diff --git a/3rdparty/catch/projects/XCode/OCTest/OCTest/Main.mm b/3rdparty/catch/projects/XCode/OCTest/OCTest/Main.mm deleted file mode 100644 index 569dc4d9cab..00000000000 --- a/3rdparty/catch/projects/XCode/OCTest/OCTest/Main.mm +++ /dev/null @@ -1,2 +0,0 @@ -#define CATCH_CONFIG_MAIN -#import "catch.hpp" diff --git a/3rdparty/catch/projects/XCode/OCTest/OCTest/OCTest.1 b/3rdparty/catch/projects/XCode/OCTest/OCTest/OCTest.1 deleted file mode 100644 index 7915d02a059..00000000000 --- a/3rdparty/catch/projects/XCode/OCTest/OCTest/OCTest.1 +++ /dev/null @@ -1,79 +0,0 @@ -.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples. -.\"See Also: -.\"man mdoc.samples for a complete listing of options -.\"man mdoc for the short list of editing options -.\"/usr/share/misc/mdoc.template -.Dd 09/02/2012 \" DATE -.Dt OCTest 1 \" Program name and manual section number -.Os Darwin -.Sh NAME \" Section Header - required - don't modify -.Nm OCTest, -.\" The following lines are read in generating the apropos(man -k) database. Use only key -.\" words here as the database is built based on the words here and in the .ND line. -.Nm Other_name_for_same_program(), -.Nm Yet another name for the same program. -.\" Use .Nm macro to designate other names for the documented program. -.Nd This line parsed for whatis database. -.Sh SYNOPSIS \" Section Header - required - don't modify -.Nm -.Op Fl abcd \" [-abcd] -.Op Fl a Ar path \" [-a path] -.Op Ar file \" [file] -.Op Ar \" [file ...] -.Ar arg0 \" Underlined argument - use .Ar anywhere to underline -arg2 ... \" Arguments -.Sh DESCRIPTION \" Section Header - required - don't modify -Use the .Nm macro to refer to your program throughout the man page like such: -.Nm -Underlining is accomplished with the .Ar macro like this: -.Ar underlined text . -.Pp \" Inserts a space -A list of items with descriptions: -.Bl -tag -width -indent \" Begins a tagged list -.It item a \" Each item preceded by .It macro -Description of item a -.It item b -Description of item b -.El \" Ends the list -.Pp -A list of flags and their descriptions: -.Bl -tag -width -indent \" Differs from above in tag removed -.It Fl a \"-a flag as a list item -Description of -a flag -.It Fl b -Description of -b flag -.El \" Ends the list -.Pp -.\" .Sh ENVIRONMENT \" May not be needed -.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1 -.\" .It Ev ENV_VAR_1 -.\" Description of ENV_VAR_1 -.\" .It Ev ENV_VAR_2 -.\" Description of ENV_VAR_2 -.\" .El -.Sh FILES \" File used or created by the topic of the man page -.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact -.It Pa /usr/share/file_name -FILE_1 description -.It Pa /Users/joeuser/Library/really_long_file_name -FILE_2 description -.El \" Ends the list -.\" .Sh DIAGNOSTICS \" May not be needed -.\" .Bl -diag -.\" .It Diagnostic Tag -.\" Diagnostic informtion here. -.\" .It Diagnostic Tag -.\" Diagnostic informtion here. -.\" .El -.Sh SEE ALSO -.\" List links in ascending order by section, alphabetically within a section. -.\" Please do not reference files that do not exist without filing a bug report -.Xr a 1 , -.Xr b 1 , -.Xr c 1 , -.Xr a 2 , -.Xr b 2 , -.Xr a 3 , -.Xr b 3 -.\" .Sh BUGS \" Document known, unremedied bugs -.\" .Sh HISTORY \" Document history if command behaves in a unique manner
\ No newline at end of file diff --git a/3rdparty/catch/projects/XCode/OCTest/OCTest/OCTest.mm b/3rdparty/catch/projects/XCode/OCTest/OCTest/OCTest.mm deleted file mode 100644 index bfb2ca26d00..00000000000 --- a/3rdparty/catch/projects/XCode/OCTest/OCTest/OCTest.mm +++ /dev/null @@ -1,28 +0,0 @@ -/* - * OCTest.mm - * OCTest - * - * Created by Phil on 13/11/2010. - * Copyright 2010 Two Blue Cubes Ltd. All rights reserved. - * - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ - -#import "catch.hpp" - -#import "TestObj.h" - -TEST_CASE( "OCTest/TestObj", "tests TestObj" ) -{ - TestObj* obj = [[TestObj alloc] init]; - - REQUIRE( obj.int_val == 0 ); - - obj.int_val = 1; - - REQUIRE( obj.int_val == 1 ); - - arcSafeRelease( obj ); -} diff --git a/3rdparty/catch/projects/XCode/OCTest/OCTest/TestObj.h b/3rdparty/catch/projects/XCode/OCTest/OCTest/TestObj.h deleted file mode 100644 index 8443921ffe4..00000000000 --- a/3rdparty/catch/projects/XCode/OCTest/OCTest/TestObj.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// TestObj.h -// OCTest -// -// Created by Phil on 13/11/2010. -// Copyright 2010 Two Blue Cubes Ltd. All rights reserved. -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#ifndef TWOBLUECUBES_TESTOBJ_H_INCLUDED -#define TWOBLUECUBES_TESTOBJ_H_INCLUDED - -#import <Foundation/Foundation.h> - - -@interface TestObj : NSObject { - - int int_val; -} - --(BOOL) isTrue; --(BOOL) isFalse; - -@property (nonatomic, assign ) int int_val; - -@end - -#endif // TWOBLUECUBES_TESTOBJ_H_INCLUDED diff --git a/3rdparty/catch/projects/XCode/OCTest/OCTest/TestObj.m b/3rdparty/catch/projects/XCode/OCTest/OCTest/TestObj.m deleted file mode 100644 index 2c7dc99b8f7..00000000000 --- a/3rdparty/catch/projects/XCode/OCTest/OCTest/TestObj.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// TestObj.m -// OCTest -// -// Created by Phil on 13/11/2010. -// Copyright 2010 Two Blue Cubes Ltd. All rights reserved. -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -#import "TestObj.h" - - -@implementation TestObj - -@synthesize int_val; - --(BOOL) isTrue { - return YES; -} --(BOOL) isFalse { - return NO; -} - -@end diff --git a/3rdparty/catch/projects/XCode/iOSTest/iOSTest.xcodeproj/project.pbxproj b/3rdparty/catch/projects/XCode/iOSTest/iOSTest.xcodeproj/project.pbxproj deleted file mode 100644 index e968cf620fc..00000000000 --- a/3rdparty/catch/projects/XCode/iOSTest/iOSTest.xcodeproj/project.pbxproj +++ /dev/null @@ -1,299 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 4A73280A14E66CFC0044823F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A73280914E66CFC0044823F /* UIKit.framework */; }; - 4A73280C14E66CFC0044823F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A73280B14E66CFC0044823F /* Foundation.framework */; }; - 4A73280E14E66CFC0044823F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A73280D14E66CFC0044823F /* CoreGraphics.framework */; }; - 4A73281414E66CFC0044823F /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4A73281214E66CFC0044823F /* InfoPlist.strings */; }; - 4A73282614E66D8B0044823F /* itChRunnerMain.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4A73282514E66D8B0044823F /* itChRunnerMain.mm */; }; - 4AB1C74F14FCC74900F31DF7 /* OCTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4AB1C74C14FCC74900F31DF7 /* OCTest.mm */; }; - 4AB1C75014FCC74900F31DF7 /* TestObj.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AB1C74E14FCC74900F31DF7 /* TestObj.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 4A73280514E66CFC0044823F /* iOSTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iOSTest.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 4A73280914E66CFC0044823F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 4A73280B14E66CFC0044823F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 4A73280D14E66CFC0044823F /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 4A73281114E66CFC0044823F /* iOSTest-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "iOSTest-Info.plist"; sourceTree = "<group>"; }; - 4A73281314E66CFC0044823F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; }; - 4A73281714E66CFC0044823F /* iOSTest-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iOSTest-Prefix.pch"; sourceTree = "<group>"; }; - 4A73282214E66D8B0044823F /* iTchRunnerAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iTchRunnerAppDelegate.h; sourceTree = "<group>"; }; - 4A73282314E66D8B0044823F /* iTchRunnerMainView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iTchRunnerMainView.h; sourceTree = "<group>"; }; - 4A73282414E66D8B0044823F /* iTchRunnerReporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iTchRunnerReporter.h; sourceTree = "<group>"; }; - 4A73282514E66D8B0044823F /* itChRunnerMain.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = itChRunnerMain.mm; path = ../../../runners/iTchRunner/itChRunnerMain.mm; sourceTree = "<group>"; }; - 4AB1C74C14FCC74900F31DF7 /* OCTest.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OCTest.mm; sourceTree = "<group>"; }; - 4AB1C74D14FCC74900F31DF7 /* TestObj.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestObj.h; sourceTree = "<group>"; }; - 4AB1C74E14FCC74900F31DF7 /* TestObj.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestObj.m; sourceTree = "<group>"; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 4A73280214E66CFC0044823F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4A73280A14E66CFC0044823F /* UIKit.framework in Frameworks */, - 4A73280C14E66CFC0044823F /* Foundation.framework in Frameworks */, - 4A73280E14E66CFC0044823F /* CoreGraphics.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 4A7327FA14E66CFC0044823F = { - isa = PBXGroup; - children = ( - 4A73280F14E66CFC0044823F /* iOSTest */, - 4A73280814E66CFC0044823F /* Frameworks */, - 4A73280614E66CFC0044823F /* Products */, - ); - sourceTree = "<group>"; - }; - 4A73280614E66CFC0044823F /* Products */ = { - isa = PBXGroup; - children = ( - 4A73280514E66CFC0044823F /* iOSTest.app */, - ); - name = Products; - sourceTree = "<group>"; - }; - 4A73280814E66CFC0044823F /* Frameworks */ = { - isa = PBXGroup; - children = ( - 4A73280914E66CFC0044823F /* UIKit.framework */, - 4A73280B14E66CFC0044823F /* Foundation.framework */, - 4A73280D14E66CFC0044823F /* CoreGraphics.framework */, - ); - name = Frameworks; - sourceTree = "<group>"; - }; - 4A73280F14E66CFC0044823F /* iOSTest */ = { - isa = PBXGroup; - children = ( - 4A73282014E66D6C0044823F /* iTch */, - 4A73281014E66CFC0044823F /* Supporting Files */, - ); - path = iOSTest; - sourceTree = "<group>"; - }; - 4A73281014E66CFC0044823F /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 4A73281114E66CFC0044823F /* iOSTest-Info.plist */, - 4A73281214E66CFC0044823F /* InfoPlist.strings */, - 4A73281714E66CFC0044823F /* iOSTest-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = "<group>"; - }; - 4A73282014E66D6C0044823F /* iTch */ = { - isa = PBXGroup; - children = ( - 4AB1C74C14FCC74900F31DF7 /* OCTest.mm */, - 4AB1C74D14FCC74900F31DF7 /* TestObj.h */, - 4AB1C74E14FCC74900F31DF7 /* TestObj.m */, - 4A73282114E66D8B0044823F /* internal */, - 4A73282514E66D8B0044823F /* itChRunnerMain.mm */, - ); - name = iTch; - sourceTree = "<group>"; - }; - 4A73282114E66D8B0044823F /* internal */ = { - isa = PBXGroup; - children = ( - 4A73282214E66D8B0044823F /* iTchRunnerAppDelegate.h */, - 4A73282314E66D8B0044823F /* iTchRunnerMainView.h */, - 4A73282414E66D8B0044823F /* iTchRunnerReporter.h */, - ); - name = internal; - path = ../../../runners/iTchRunner/internal; - sourceTree = "<group>"; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 4A73280414E66CFC0044823F /* iOSTest */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4A73281D14E66CFC0044823F /* Build configuration list for PBXNativeTarget "iOSTest" */; - buildPhases = ( - 4A73280114E66CFC0044823F /* Sources */, - 4A73280214E66CFC0044823F /* Frameworks */, - 4A73280314E66CFC0044823F /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = iOSTest; - productName = iOSTest; - productReference = 4A73280514E66CFC0044823F /* iOSTest.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 4A7327FC14E66CFC0044823F /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0420; - }; - buildConfigurationList = 4A7327FF14E66CFC0044823F /* Build configuration list for PBXProject "iOSTest" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 4A7327FA14E66CFC0044823F; - productRefGroup = 4A73280614E66CFC0044823F /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 4A73280414E66CFC0044823F /* iOSTest */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 4A73280314E66CFC0044823F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4A73281414E66CFC0044823F /* InfoPlist.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 4A73280114E66CFC0044823F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4A73282614E66D8B0044823F /* itChRunnerMain.mm in Sources */, - 4AB1C74F14FCC74900F31DF7 /* OCTest.mm in Sources */, - 4AB1C75014FCC74900F31DF7 /* TestObj.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 4A73281214E66CFC0044823F /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 4A73281314E66CFC0044823F /* en */, - ); - name = InfoPlist.strings; - sourceTree = "<group>"; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 4A73281B14E66CFC0044823F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - CLANG_ENABLE_OBJC_ARC = YES; - CODE_SIGN_IDENTITY = "iPhone Developer: Phil Nash (4KJCM5XSVL)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; - PROVISIONING_PROFILE = "95C4758A-E0B8-4714-9DA3-C7E1284444A4"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = ../../../include; - }; - name = Debug; - }; - 4A73281C14E66CFC0044823F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - CLANG_ENABLE_OBJC_ARC = YES; - CODE_SIGN_IDENTITY = "iPhone Developer: Phil Nash (4KJCM5XSVL)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; - OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - PROVISIONING_PROFILE = "95C4758A-E0B8-4714-9DA3-C7E1284444A4"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - USER_HEADER_SEARCH_PATHS = ../../../include; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 4A73281E14E66CFC0044823F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "iOSTest/iOSTest-Prefix.pch"; - INFOPLIST_FILE = "iOSTest/iOSTest-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - 4A73281F14E66CFC0044823F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "iOSTest/iOSTest-Prefix.pch"; - INFOPLIST_FILE = "iOSTest/iOSTest-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 4A7327FF14E66CFC0044823F /* Build configuration list for PBXProject "iOSTest" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4A73281B14E66CFC0044823F /* Debug */, - 4A73281C14E66CFC0044823F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4A73281D14E66CFC0044823F /* Build configuration list for PBXNativeTarget "iOSTest" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4A73281E14E66CFC0044823F /* Debug */, - 4A73281F14E66CFC0044823F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 4A7327FC14E66CFC0044823F /* Project object */; -} diff --git a/3rdparty/catch/projects/XCode/iOSTest/iOSTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/3rdparty/catch/projects/XCode/iOSTest/iOSTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index aaadc7d492c..00000000000 --- a/3rdparty/catch/projects/XCode/iOSTest/iOSTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Workspace - version = "1.0"> - <FileRef - location = "self:iOSTest.xcodeproj"> - </FileRef> -</Workspace> diff --git a/3rdparty/catch/projects/XCode/iOSTest/iOSTest/OCTest.mm b/3rdparty/catch/projects/XCode/iOSTest/iOSTest/OCTest.mm deleted file mode 100644 index d476cb42bf0..00000000000 --- a/3rdparty/catch/projects/XCode/iOSTest/iOSTest/OCTest.mm +++ /dev/null @@ -1,27 +0,0 @@ -/* - * OCTest.mm - * OCTest - * - * Created by Phil on 13/11/2010. - * Copyright 2010 Two Blue Cubes Ltd. All rights reserved. - * - * Distributed under the Boost Software License, Version 1.0. (See accompanying - * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - * - */ -#include "catch.hpp" - -#import "TestObj.h" - -TEST_CASE( "OCTest/TestObj", "tests TestObj" ) -{ - TestObj* obj = [[TestObj alloc] init]; - - REQUIRE( obj.int_val == 0 ); - - obj.int_val = 1; - - REQUIRE( obj.int_val == 1 ); - - arcSafeRelease( obj ); -} diff --git a/3rdparty/catch/projects/XCode/iOSTest/iOSTest/TestObj.h b/3rdparty/catch/projects/XCode/iOSTest/iOSTest/TestObj.h deleted file mode 100644 index de6725027a2..00000000000 --- a/3rdparty/catch/projects/XCode/iOSTest/iOSTest/TestObj.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// TestObj.h -// OCTest -// -// Created by Phil on 13/11/2010. -// Copyright 2010 Two Blue Cubes Ltd. All rights reserved. -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#ifndef TWOBLUECUBES_TESTOBJ_H_INCLUDED -#define TWOBLUECUBES_TESTOBJ_H_INCLUDED - -#import <Foundation/Foundation.h> - - -@interface TestObj : NSObject { - - int int_val; -} - -@property (nonatomic, assign ) int int_val; - -@end - -#endif // TWOBLUECUBES_TESTOBJ_H_INCLUDED diff --git a/3rdparty/catch/projects/XCode/iOSTest/iOSTest/TestObj.m b/3rdparty/catch/projects/XCode/iOSTest/iOSTest/TestObj.m deleted file mode 100644 index 943f4450837..00000000000 --- a/3rdparty/catch/projects/XCode/iOSTest/iOSTest/TestObj.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// TestObj.m -// OCTest -// -// Created by Phil on 13/11/2010. -// Copyright 2010 Two Blue Cubes Ltd. All rights reserved. -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -#import "TestObj.h" - - -@implementation TestObj - -@synthesize int_val; - -@end diff --git a/3rdparty/catch/projects/XCode/iOSTest/iOSTest/en.lproj/InfoPlist.strings b/3rdparty/catch/projects/XCode/iOSTest/iOSTest/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28ff8f8..00000000000 --- a/3rdparty/catch/projects/XCode/iOSTest/iOSTest/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/3rdparty/catch/projects/XCode/iOSTest/iOSTest/iOSTest-Info.plist b/3rdparty/catch/projects/XCode/iOSTest/iOSTest/iOSTest-Info.plist deleted file mode 100644 index f74b6db0993..00000000000 --- a/3rdparty/catch/projects/XCode/iOSTest/iOSTest/iOSTest-Info.plist +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleDisplayName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIconFiles</key> - <array/> - <key>CFBundleIdentifier</key> - <string>twobluecubes.${PRODUCT_NAME:rfc1034identifier}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>APPL</string> - <key>CFBundleShortVersionString</key> - <string>1.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>1.0</string> - <key>LSRequiresIPhoneOS</key> - <true/> - <key>UIRequiredDeviceCapabilities</key> - <array> - <string>armv7</string> - </array> - <key>UISupportedInterfaceOrientations</key> - <array> - <string>UIInterfaceOrientationPortrait</string> - <string>UIInterfaceOrientationLandscapeLeft</string> - <string>UIInterfaceOrientationLandscapeRight</string> - </array> - <key>UISupportedInterfaceOrientations~ipad</key> - <array> - <string>UIInterfaceOrientationPortrait</string> - <string>UIInterfaceOrientationPortraitUpsideDown</string> - <string>UIInterfaceOrientationLandscapeLeft</string> - <string>UIInterfaceOrientationLandscapeRight</string> - </array> -</dict> -</plist> diff --git a/3rdparty/catch/projects/XCode/iOSTest/iOSTest/iOSTest-Prefix.pch b/3rdparty/catch/projects/XCode/iOSTest/iOSTest/iOSTest-Prefix.pch deleted file mode 100644 index 403e8e45e5e..00000000000 --- a/3rdparty/catch/projects/XCode/iOSTest/iOSTest/iOSTest-Prefix.pch +++ /dev/null @@ -1,14 +0,0 @@ -// -// Prefix header for all source files of the 'iOSTest' target in the 'iOSTest' project -// - -#import <Availability.h> - -#ifndef __IPHONE_3_0 -#warning "This project uses features only available in iOS SDK 3.0 and later." -#endif - -#ifdef __OBJC__ - #import <UIKit/UIKit.h> - #import <Foundation/Foundation.h> -#endif diff --git a/3rdparty/catch/projects/runners/iTchRunner/internal/iTchRunnerAppDelegate.h b/3rdparty/catch/projects/runners/iTchRunner/internal/iTchRunnerAppDelegate.h deleted file mode 100644 index 522291a905a..00000000000 --- a/3rdparty/catch/projects/runners/iTchRunner/internal/iTchRunnerAppDelegate.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * iTchRunnerAppDelegate.h - * iTchRunner - * - * Created by Phil on 07/02/2011. - * Copyright 2011 Two Blue Cubes Ltd. All rights reserved. - * - */ -#ifndef TWOBLUECUBES_ITCHRUNNERAPPDELEGATE_H_INCLUDED -#define TWOBLUECUBES_ITCHRUNNERAPPDELEGATE_H_INCLUDED - -#import "iTchRunnerMainView.h" - - - -@interface iTchRunnerAppDelegate : NSObject <UIApplicationDelegate> -{ - UIWindow *window; -} - -@end - - -@implementation iTchRunnerAppDelegate - - -/////////////////////////////////////////////////////////////////////////////// -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - [window setUserInteractionEnabled:YES]; - [window setMultipleTouchEnabled:YES]; - - CGRect screenRect = [[UIScreen mainScreen] applicationFrame]; - iTchRunnerMainView* view = [[iTchRunnerMainView alloc] initWithFrame:screenRect]; - - [window addSubview:view]; - [window makeKeyAndVisible]; - arcSafeRelease( view ); - - return YES; -} - -/////////////////////////////////////////////////////////////////////////////// -- (void)dealloc -{ -#if !CATCH_ARC_ENABLED - [window release]; - [super dealloc]; -#endif -} - - -/////////////////////////////////////////////////////////////////////////////// -- (void)applicationWillResignActive:(UIApplication *)application -{ - /* - Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. - */ -} - - -/////////////////////////////////////////////////////////////////////////////// -- (void)applicationDidEnterBackground:(UIApplication *)application -{ - /* - Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - If your application supports background execution, called instead of applicationWillTerminate: when the user quits. - */ -} - - -/////////////////////////////////////////////////////////////////////////////// -- (void)applicationWillEnterForeground:(UIApplication *)application -{ - /* - Called as part of transition from the background to the inactive state: here you can undo many of the changes made on entering the background. - */ -} - - -/////////////////////////////////////////////////////////////////////////////// -- (void)applicationDidBecomeActive:(UIApplication *)application -{ - /* - Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. - */ -} - - -/////////////////////////////////////////////////////////////////////////////// -- (void)applicationWillTerminate:(UIApplication *)application -{ - /* - Called when the application is about to terminate. - See also applicationDidEnterBackground:. - */ -} - - -/////////////////////////////////////////////////////////////////////////////// -- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application -{ - /* - Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later. - */ -} - - - -@end - -#endif // TWOBLUECUBES_ITCHRUNNERAPPDELEGATE_H_INCLUDED diff --git a/3rdparty/catch/projects/runners/iTchRunner/internal/iTchRunnerMainView.h b/3rdparty/catch/projects/runners/iTchRunner/internal/iTchRunnerMainView.h deleted file mode 100644 index c6a6394ea57..00000000000 --- a/3rdparty/catch/projects/runners/iTchRunner/internal/iTchRunnerMainView.h +++ /dev/null @@ -1,189 +0,0 @@ -/* - * iTchRunnerMainView.h - * iTchRunner - * - * Created by Phil on 07/02/2011. - * Copyright 2011 Two Blue Cubes Ltd. All rights reserved. - * - */ -#ifndef TWOBLUECUBES_ITCHRUNNERMAINVIEW_H_INCLUDED -#define TWOBLUECUBES_ITCHRUNNERMAINVIEW_H_INCLUDED - -#include "internal/catch_config.hpp" -#include "internal/catch_runner_impl.hpp" -#include "internal/catch_context_impl.hpp" -#include "catch.hpp" - -#include "iTchRunnerReporter.h" - -#import <UIKit/UIKit.h> - -@interface iTchRunnerMainView : UIView<iTchRunnerDelegate, UIActionSheetDelegate> -{ - UITextField* appName; -} - --(void) showAlert; - -@end - -@implementation iTchRunnerMainView - - -/////////////////////////////////////////////////////////////////////////////// --(id) initWithFrame:(CGRect)frame -{ - if ((self = [super initWithFrame:frame])) - { - // Initialization code - self.backgroundColor = [UIColor blackColor]; - - appName = [[UITextField alloc] initWithFrame: CGRectMake( 0, 50, 320, 50 )]; - [self addSubview: appName]; - arcSafeRelease( appName ); - appName.textColor = [[UIColor alloc] initWithRed:0.35 green:0.35 blue:1 alpha:1]; - arcSafeRelease( appName.textColor ); - appName.textAlignment = NSTextAlignmentCenter; - - appName.text = [NSString stringWithFormat:@"CATCH tests"]; -// [self performSelector: @selector(showAlert) withObject:nil afterDelay:0.1]; - [self performSelectorOnMainThread:@selector(showAlert) withObject:nil waitUntilDone:NO]; - - } - return self; -} - -/////////////////////////////////////////////////////////////////////////////// --(void) dealloc -{ - [appName removeFromSuperview]; -#if !CATCH_ARC_ENABLED - [super dealloc]; -#endif -} - -/////////////////////////////////////////////////////////////////////////////// --(void) showAlert -{ - UIActionSheet* menu = [[UIActionSheet alloc] initWithTitle:@"Options" - delegate:self - cancelButtonTitle:nil - destructiveButtonTitle:nil - otherButtonTitles:@"Run all tests", nil]; - [menu showInView: self]; - arcSafeRelease( menu ); - -} - -// This is a copy & paste from Catch::Runner2 to get us bootstrapped (this is due to all be -// replaced anyway) -inline Catch::Totals runTestsForGroup( Catch::RunContext& context, const Catch::TestCaseFilters& filterGroup ) { - using namespace Catch; - Totals totals; - std::vector<TestCase>::const_iterator it = getRegistryHub().getTestCaseRegistry().getAllTests().begin(); - std::vector<TestCase>::const_iterator itEnd = getRegistryHub().getTestCaseRegistry().getAllTests().end(); - int testsRunForGroup = 0; - for(; it != itEnd; ++it ) { - if( filterGroup.shouldInclude( *it ) ) { - testsRunForGroup++; - - if( context.aborting() ) - break; - - totals += context.runTest( *it ); - } - } - if( testsRunForGroup == 0 ) - std::cerr << "\n[No test cases matched with: " << filterGroup.getName() << "]" << std::endl; - return totals; - -} - -/////////////////////////////////////////////////////////////////////////////// --(void) actionSheet: (UIActionSheet*) sheet clickedButtonAtIndex: (NSInteger) index -{ - Catch::Ptr<Catch::Config> config = new Catch::Config(); - Catch::IReporter* reporter = new Catch::iTchRunnerReporter( self ); - Catch::LegacyReporterAdapter* reporterAdapter = new Catch::LegacyReporterAdapter( reporter ); - Catch::RunContext runner( config.get(), reporterAdapter ); - - - std::vector<Catch::TestCaseFilters> filterGroups; - Catch::TestCaseFilters filterGroup( "" ); - filterGroups.push_back( filterGroup ); - - Catch::Totals totals; - - std::vector<Catch::TestCaseFilters>::const_iterator it = filterGroups.begin(); - std::vector<Catch::TestCaseFilters>::const_iterator itEnd = filterGroups.end(); - - std::size_t groupCount = filterGroups.size(); - std::size_t groupIndex = 0; - for(; it != itEnd && !runner.aborting(); ++it, ++index ) { - runner.testGroupStarting( it->getName(), groupIndex, groupCount ); - totals += runTestsForGroup( runner, *it ); - runner.testGroupEnded( it->getName(), totals, groupIndex, groupCount ); - } - - - if( totals.assertions.failed == 0 ) - { - NSLog( @"no failures" ); - if( totals.assertions.passed > 0 ) - appName.textColor = [[UIColor alloc] initWithRed:0.35 green:1 blue:0.35 alpha:1]; - } - else - { - NSLog( @"%lu failures", totals.assertions.failed ); - appName.textColor = [[UIColor alloc] initWithRed:1 green:0.35 blue:0.35 alpha:1]; - } -} - -/////////////////////////////////////////////////////////////////////////////// --(void) testWasRun: (const Catch::AssertionResult*) pResultInfo -{ - const Catch::AssertionResult& resultInfo = *pResultInfo; - std::ostringstream oss; - - if( resultInfo.hasExpression() ) - { - oss << resultInfo.getExpression(); - if( resultInfo.isOk() ) - oss << " succeeded"; - else - oss << " failed"; - } - switch( resultInfo.getResultType() ) - { - case Catch::ResultWas::ThrewException: - if( resultInfo.hasExpression() ) - oss << " with unexpected"; - else - oss << "Unexpected"; - oss << " exception with message: '" << resultInfo.getMessage() << "'"; - break; - case Catch::ResultWas::Info: - oss << "info: '" << resultInfo.getMessage() << "'"; - break; - case Catch::ResultWas::Warning: - oss << "warning: '" << resultInfo.getMessage() << "'"; - break; - case Catch::ResultWas::ExplicitFailure: - oss << "failed with message: '" << resultInfo.getMessage() << "'"; - break; - default: - break; - } - - if( resultInfo.hasExpression() ) - { - oss << " for: " << resultInfo.getExpandedExpression(); - } - oss << std::endl; - NSLog( @"%s", oss.str().c_str() ); -} - - -@end - -#endif // TWOBLUECUBES_ITCHRUNNERMAINVIEW_H_INCLUDED diff --git a/3rdparty/catch/projects/runners/iTchRunner/internal/iTchRunnerReporter.h b/3rdparty/catch/projects/runners/iTchRunner/internal/iTchRunnerReporter.h deleted file mode 100644 index d2628861562..00000000000 --- a/3rdparty/catch/projects/runners/iTchRunner/internal/iTchRunnerReporter.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * iTchRunnerReporter.h - * iTchRunner - * - * Created by Phil on 07/02/2011. - * Copyright 2011 Two Blue Cubes Ltd. All rights reserved. - * - */ -#ifndef TWOBLUECUBES_ITCHRUNNERREPORTER_H_INCLUDED -#define TWOBLUECUBES_ITCHRUNNERREPORTER_H_INCLUDED - -#include "catch.hpp" - -@protocol iTchRunnerDelegate - --(void) testWasRun: (const Catch::AssertionResult*) result; - -@end - -namespace Catch -{ - class iTchRunnerReporter : public SharedImpl<IReporter> - { - public: - /////////////////////////////////////////////////////////////////////////// - iTchRunnerReporter - ( - id<iTchRunnerDelegate> delegate - ) - : m_delegate( delegate ) - { - } - - /////////////////////////////////////////////////////////////////////////// - virtual bool shouldRedirectStdout - () - const - { - return true; - } - - /////////////////////////////////////////////////////////////////////////// - static std::string getDescription - () - { - return "Captures results for iOS runner"; - } - - /////////////////////////////////////////////////////////////////////////// - size_t getSucceeded - () - const - { - return m_totals.assertions.passed; - } - - /////////////////////////////////////////////////////////////////////////// - size_t getFailed - () - const - { - return m_totals.assertions.failed; - } - - /////////////////////////////////////////////////////////////////////////// - void reset() - { - m_totals = Totals(); - } - - private: // IReporter - - /////////////////////////////////////////////////////////////////////////// - virtual void StartTesting - () - {} - - /////////////////////////////////////////////////////////////////////////// - virtual void EndTesting - ( - const Totals& totals - ) - { - m_totals = totals; - } - - /////////////////////////////////////////////////////////////////////////// - virtual void Result - ( - const AssertionResult& result - ) - { - [m_delegate testWasRun: &result]; - } - - /////////////////////////////////////////////////////////////////////////// - // Deliberately unimplemented: - virtual void StartGroup( const std::string& ){} - virtual void EndGroup( const std::string&, const Totals& ){} - virtual void StartTestCase( const TestCaseInfo& ){} - virtual void StartSection( const std::string& sectionName, const std::string& description ) {} - virtual void EndSection( const std::string&, const Counts& ){} - virtual void EndTestCase( const TestCaseInfo&, const Totals&, const std::string&, const std::string& ){} - virtual void Aborted() {} - virtual void NoAssertionsInSection( std::string const& sectionName ) {} - virtual void NoAssertionsInTestCase( std::string const& testName ) {} - - private: - Totals m_totals; - - id<iTchRunnerDelegate> m_delegate; - }; -} - -#endif // TWOBLUECUBES_ITCHRUNNERREPORTER_H_INCLUDED diff --git a/3rdparty/catch/projects/runners/iTchRunner/itChRunnerMain.mm b/3rdparty/catch/projects/runners/iTchRunner/itChRunnerMain.mm deleted file mode 100644 index cac5faecca4..00000000000 --- a/3rdparty/catch/projects/runners/iTchRunner/itChRunnerMain.mm +++ /dev/null @@ -1,27 +0,0 @@ -// -// iTchRunnerMain.mm -// iTchRunner -// -// Created by Phil on 04/02/2011. -// Copyright Two Blue Cubes Ltd 2011. All rights reserved. -// - -#define CATCH_CONFIG_RUNNER -#include "catch.hpp" -#import "internal/iTchRunnerAppDelegate.h" - -int main(int argc, char *argv[]) -{ -#if !CATCH_ARC_ENABLED - NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; -#endif - - Catch::registerTestMethods(); - int retVal = UIApplicationMain(argc, argv, nil, @"iTchRunnerAppDelegate"); - -#if !CATCH_ARC_ENABLED - [pool release]; -#endif - - return retVal; -} diff --git a/3rdparty/catch/projects/runners/iTchRunner/readme b/3rdparty/catch/projects/runners/iTchRunner/readme deleted file mode 100644 index 2b2549176ce..00000000000 --- a/3rdparty/catch/projects/runners/iTchRunner/readme +++ /dev/null @@ -1,6 +0,0 @@ -* Select Project -> New Target. Select Cocoa Touch -> Application. Click next and name it something like "Unit Tests" -* While the target info is displayed, find: 'User Header Search Paths' and add a path to the Catch folder -* Open the plist file for the target (Unit Test-Info.plist, if you used that name). Delete the entry for "Main nib file base name: MainWindow" -* From the overview drop-down select the new target. -* Add the file Catch/Runner/iTchRunnerMain.mm into your project - but only in the new target -* Write tests (adding files under test into the target as necessary)
\ No newline at end of file diff --git a/3rdparty/catch/scripts/approvalTests.py b/3rdparty/catch/scripts/approvalTests.py index 618812f888d..6c51aa4eff2 100644 --- a/3rdparty/catch/scripts/approvalTests.py +++ b/3rdparty/catch/scripts/approvalTests.py @@ -1,115 +1,152 @@ -from __future__ import print_function +#!/usr/bin/env python + +from __future__ import print_function import os import sys import subprocess import re +import difflib +import scriptCommon from scriptCommon import catchPath -rootPath = os.path.join( catchPath, 'projects/SelfTest/Baselines' ) +rootPath = os.path.join(catchPath, 'projects/SelfTest/Baselines') + -filenameParser = re.compile( r'(.*)/(.*\..pp:)(.*)' ) -filelineParser = re.compile( r'(.*\..pp:)([0-9]*)(.*)' ) -pathParser = re.compile( r'(.*?)/(.*\..pp)(.*)' ) -lineNumberParser = re.compile( r'(.*)line="[0-9]*"(.*)' ) -hexParser = re.compile( r'(.*)\b(0[xX][0-9a-fA-F]+)\b(.*)' ) -durationsParser = re.compile( r'(.*)time="[0-9]*\.[0-9]*"(.*)' ) -versionParser = re.compile( r'(.*?)Catch v[0-9]*\.[0-9]*\.[0-9]*(.*)' ) -devVersionParser = re.compile( r'(.*?)Catch v[0-9]*\.[0-9]*\.[0-9]*-develop\.[0-9]*(.*)' ) +filelocParser = re.compile(r''' + .*/ + (.+\.[ch]pp) # filename + (?::|\() # : is starting separator between filename and line number on Linux, ( on Windows + ([0-9]*) # line number + \)? # Windows also has an ending separator, ) +''', re.VERBOSE) +lineNumberParser = re.compile(r' line="[0-9]*"') +hexParser = re.compile(r'\b(0[xX][0-9a-fA-F]+)\b') +durationsParser = re.compile(r' time="[0-9]*\.[0-9]*"') +timestampsParser = re.compile(r' timestamp="\d{4}-\d{2}-\d{2}T\d{2}\:\d{2}\:\d{2}Z"') +versionParser = re.compile(r'Catch v[0-9]+\.[0-9]+\.[0-9]+(-develop\.[0-9]+)?') +nullParser = re.compile(r'\b(__null|nullptr)\b') +exeNameParser = re.compile(r''' + \b + (CatchSelfTest|SelfTest) # Expected executable name + (?:.exe)? # Executable name contains .exe on Windows. + \b +''', re.VERBOSE) +# This is a hack until something more reasonable is figured out +specialCaseParser = re.compile(r'file\((\d+)\)') if len(sys.argv) == 2: - cmdPath = sys.argv[1] + cmdPath = sys.argv[1] else: - cmdPath = os.path.join( catchPath, 'projects/XCode/CatchSelfTest/DerivedData/CatchSelfTest/Build/Products/Debug/CatchSelfTest' ) + cmdPath = os.path.join(catchPath, scriptCommon.getBuildExecutable()) overallResult = 0 -def filterLine( line ): - m = filenameParser.match( line ) - if m: - line = m.group(2) + m.group(3) - m2 = filelineParser.match( line ) - if m2: - line = m2.group(1) + "<line number>" + m2.group(3) - else: - m2 = lineNumberParser.match( line ) - if m2: - line = m2.group(1) + m2.group(2) - m = pathParser.match( line ) - if m: - path = "/" + m.group(2) - if path.startswith( catchPath ): - path = path[1+len(catchPath):] - line = m.group(1) + path + m.group(3) - m = devVersionParser.match( line ) - if m: - line = m.group(1) + "<version>" + m.group(2) - else: - m = versionParser.match( line ) - if m: - line = m.group(1) + "<version>" + m.group(2) - - while True: - m = hexParser.match( line ) - if m: - line = m.group(1) + "0x<hex digits>" + m.group(3) - else: - break - m = durationsParser.match( line ) - if m: - line = m.group(1) + 'time="{duration}"' + m.group(2) - return line - -def approve( baseName, args ): - global overallResult - args[0:0] = [cmdPath] - if not os.path.exists( cmdPath ): - raise Exception( "Executable doesn't exist at " + cmdPath ) - baselinesPath = os.path.join( rootPath, '{0}.approved.txt'.format( baseName ) ) - rawResultsPath = os.path.join( rootPath, '_{0}.tmp'.format( baseName ) ) - filteredResultsPath = os.path.join( rootPath, '{0}.unapproved.txt'.format( baseName ) ) - - f = open( rawResultsPath, 'w' ) - subprocess.call( args, stdout=f, stderr=f ) - f.close() - - rawFile = open( rawResultsPath, 'r' ) - filteredFile = open( filteredResultsPath, 'w' ) - for line in rawFile: - filteredFile.write( filterLine( line ).rstrip() + "\n" ) - filteredFile.close() - rawFile.close() - - os.remove( rawResultsPath ) - print() - print( baseName + ":" ) - if os.path.exists( baselinesPath ): - diffResult = subprocess.call([ "diff", baselinesPath, filteredResultsPath ] ) - if diffResult == 0: - os.remove( filteredResultsPath ) - print( " \033[92mResults matched" ) - else: - print( " \n****************************\n \033[91mResults differed" ) - if diffResult > overallResult: - overallResult = diffResult - print( "\033[0m" ) - else: - print( " first approval" ) - if overallResult == 0: - overallResult = 1 +def diffFiles(fileA, fileB): + with open(fileA, 'r') as file: + aLines = file.readlines() + with open(fileB, 'r') as file: + bLines = file.readlines() + + shortenedFilenameA = fileA.rsplit(os.sep, 1)[-1] + shortenedFilenameB = fileB.rsplit(os.sep, 1)[-1] + + diff = difflib.unified_diff(aLines, bLines, fromfile=shortenedFilenameA, tofile=shortenedFilenameB, n=0) + return [line for line in diff if line[0] in ('+', '-')] + + +def filterLine(line): + if catchPath in line: + # make paths relative to Catch root + line = line.replace(catchPath + os.sep, '') + # go from \ in windows paths to / + line = line.replace('\\', '/') + + + # strip source line numbers + m = filelocParser.match(line) + if m: + # note that this also strips directories, leaving only the filename + filename, lnum = m.groups() + lnum = ":<line number>" if lnum else "" + line = filename + lnum + line[m.end():] + else: + line = lineNumberParser.sub(" ", line) + + # strip Catch version number + line = versionParser.sub("<version>", line) + + # replace *null* with 0 + line = nullParser.sub("0", line) + + # strip executable name + line = exeNameParser.sub("<exe-name>", line) + + # strip hexadecimal numbers (presumably pointer values) + line = hexParser.sub("0x<hex digits>", line) + + # strip durations and timestamps + line = durationsParser.sub(' time="{duration}"', line) + line = timestampsParser.sub(' timestamp="{iso8601-timestamp}"', line) + line = specialCaseParser.sub('file:\g<1>', line) + return line + + +def approve(baseName, args): + global overallResult + args[0:0] = [cmdPath] + if not os.path.exists(cmdPath): + raise Exception("Executable doesn't exist at " + cmdPath) + baselinesPath = os.path.join(rootPath, '{0}.approved.txt'.format(baseName)) + rawResultsPath = os.path.join(rootPath, '_{0}.tmp'.format(baseName)) + filteredResultsPath = os.path.join(rootPath, '{0}.unapproved.txt'.format(baseName)) + + f = open(rawResultsPath, 'w') + subprocess.call(args, stdout=f, stderr=f) + f.close() + + rawFile = open(rawResultsPath, 'r') + filteredFile = open(filteredResultsPath, 'w') + for line in rawFile: + filteredFile.write(filterLine(line).rstrip() + "\n") + filteredFile.close() + rawFile.close() + + os.remove(rawResultsPath) + print() + print(baseName + ":") + if os.path.exists(baselinesPath): + diffResult = diffFiles(baselinesPath, filteredResultsPath) + if diffResult: + print(''.join(diffResult)) + print(" \n****************************\n \033[91mResults differed") + if len(diffResult) > overallResult: + overallResult = len(diffResult) + else: + os.remove(filteredResultsPath) + print(" \033[92mResults matched") + print("\033[0m") + else: + print(" first approval") + if overallResult == 0: + overallResult = 1 + + +print("Running approvals against executable:") +print(" " + cmdPath) # Standard console reporter -approve( "console.std", ["~_"] ) +approve("console.std", ["~[c++11]~[!nonportable]", "--order", "lex"]) # console reporter, include passes, warn about No Assertions -approve( "console.sw", ["~_", "-s", "-w", "NoAssertions"] ) +approve("console.sw", ["~[c++11]~[!nonportable]", "-s", "-w", "NoAssertions", "--order", "lex"]) # console reporter, include passes, warn about No Assertions, limit failures to first 4 -approve( "console.swa4", ["~_", "-s", "-w", "NoAssertions", "-x", "4"] ) +approve("console.swa4", ["~[c++11]~[!nonportable]", "-s", "-w", "NoAssertions", "-x", "4", "--order", "lex"]) # junit reporter, include passes, warn about No Assertions -approve( "junit.sw", ["~_", "-s", "-w", "NoAssertions", "-r", "junit"] ) +approve("junit.sw", ["~[c++11]~[!nonportable]", "-s", "-w", "NoAssertions", "-r", "junit", "--order", "lex"]) # xml reporter, include passes, warn about No Assertions -approve( "xml.sw", ["~_", "-s", "-w", "NoAssertions", "-r", "xml"] ) +approve("xml.sw", ["~[c++11]~[!nonportable]", "-s", "-w", "NoAssertions", "-r", "xml", "--order", "lex"]) if overallResult != 0: - print( "run approve.py to approve new baselines" ) -exit( overallResult) + print("If these differenecs are expected run approve.py to approve new baselines") +exit(overallResult) diff --git a/3rdparty/catch/scripts/approve.py b/3rdparty/catch/scripts/approve.py index f4b66aa4a90..78a2a9e1cb8 100644 --- a/3rdparty/catch/scripts/approve.py +++ b/3rdparty/catch/scripts/approve.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python + from __future__ import print_function import os diff --git a/3rdparty/catch/scripts/benchmarkRunner.py b/3rdparty/catch/scripts/benchmarkRunner.py new file mode 100644 index 00000000000..dc753cf0050 --- /dev/null +++ b/3rdparty/catch/scripts/benchmarkRunner.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python3 + +import subprocess, os, sys +import xml.etree.ElementTree as ET +from collections import defaultdict +from statistics import median, stdev +from datetime import datetime + +def get_commit_hash(): + res = subprocess.run('git rev-parse HEAD'.split(), check=True, stdout=subprocess.PIPE, universal_newlines=True) + return res.stdout.strip() + +if len(sys.argv) < 2: + print('Usage: {} benchmark-binary'.format(sys.argv[0])) + exit(1) + + +num_runs = 10 +data = defaultdict(list) + + +def parse_file(file): + + def recursive_search(node): + if node.tag == 'TestCase': + results = node.find('OverallResult') + time = results.get('durationInSeconds') + data[node.get('name')].append(float(time)) + elif node.tag in ('Group', 'Catch'): + for child in node: + recursive_search(child) + + tree = ET.parse(file) + recursive_search(tree.getroot()) + +def run_benchmarks(binary): + call = [binary] + '-d yes -r xml -o'.split() + for i in range(num_runs): + file = 'temp{}.xml'.format(i) + print('Run number {}'.format(i)) + subprocess.run(call + [file]) + parse_file(file) + # Remove file right after parsing, because benchmark output can be big + os.remove(file) + + +# Run benchmarks +run_benchmarks(sys.argv[1]) + +result_file = '{:%Y-%m-%dT%H-%M-%S}-{}.result'.format(datetime.now(), get_commit_hash()) + + +print('Writing results to {}'.format(result_file)) +with open(result_file, 'w') as file: + for k in sorted(data): + file.write('{}: median: {} (s), stddev: {} (s)\n'.format(k, median(data[k]), stdev(data[k]))) diff --git a/3rdparty/catch/scripts/developBuild.py b/3rdparty/catch/scripts/developBuild.py index c244871ab79..c16c8a6ddf8 100644 --- a/3rdparty/catch/scripts/developBuild.py +++ b/3rdparty/catch/scripts/developBuild.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python + from __future__ import print_function from releaseCommon import Version diff --git a/3rdparty/catch/scripts/fixTrailingWhitespace.py b/3rdparty/catch/scripts/fixWhitespace.py index a1b6bbe871b..6f37c5399f8 100644 --- a/3rdparty/catch/scripts/fixTrailingWhitespace.py +++ b/3rdparty/catch/scripts/fixWhitespace.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python + from __future__ import print_function import os from scriptCommon import catchPath @@ -22,6 +24,7 @@ def fixFile( path ): changed = 0 for line in f: trimmed = line.rstrip() + "\n" + trimmed = trimmed.replace('\t', ' ') if trimmed != line: changed = changed +1 lines.append( trimmed ) diff --git a/3rdparty/catch/scripts/generateSingleHeader.py b/3rdparty/catch/scripts/generateSingleHeader.py index 419633f8328..78ed075390f 100644 --- a/3rdparty/catch/scripts/generateSingleHeader.py +++ b/3rdparty/catch/scripts/generateSingleHeader.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python + from __future__ import print_function import os diff --git a/3rdparty/catch/scripts/majorRelease.py b/3rdparty/catch/scripts/majorRelease.py index 03b7e78ec66..f367506a9d5 100644 --- a/3rdparty/catch/scripts/majorRelease.py +++ b/3rdparty/catch/scripts/majorRelease.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python + from __future__ import print_function from releaseCommon import Version diff --git a/3rdparty/catch/scripts/minorRelease.py b/3rdparty/catch/scripts/minorRelease.py index bbd97ed042e..ac36df96492 100644 --- a/3rdparty/catch/scripts/minorRelease.py +++ b/3rdparty/catch/scripts/minorRelease.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python + from __future__ import print_function from releaseCommon import Version diff --git a/3rdparty/catch/scripts/patchRelease.py b/3rdparty/catch/scripts/patchRelease.py index 6abf87af152..878662f8eaa 100644 --- a/3rdparty/catch/scripts/patchRelease.py +++ b/3rdparty/catch/scripts/patchRelease.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python + from __future__ import print_function from releaseCommon import Version diff --git a/3rdparty/catch/scripts/releaseCommon.py b/3rdparty/catch/scripts/releaseCommon.py index 14eb235e5bf..236bfbd04dc 100644 --- a/3rdparty/catch/scripts/releaseCommon.py +++ b/3rdparty/catch/scripts/releaseCommon.py @@ -75,6 +75,8 @@ class Version: f.write( line + "\n" ) def updateReadmeFile(self): + versionParser = re.compile( r'\*v\d+\.\d+\.\d+\*' ) + downloadParser = re.compile( r'<a href=\"https://github.com/philsquared/Catch/releases/download/v\d+\.\d+\.\d+/catch.hpp\">' ) f = open( readmePath, 'r' ) lines = [] for line in f: @@ -82,8 +84,7 @@ class Version: f.close() f = open( readmePath, 'w' ) for line in lines: - if line.startswith( "*v" ): - f.write( '*v{0}*\n'.format( self.getVersionString() ) ) - else: - f.write( line + "\n" ) + line = versionParser.sub( '*v{0}*'.format(self.getVersionString()), line) + line = downloadParser.sub( r'<a href="https://github.com/philsquared/Catch/releases/download/v{0}/catch.hpp">'.format(self.getVersionString()) , line) + f.write( line + "\n" ) diff --git a/3rdparty/catch/scripts/releaseNotes.py b/3rdparty/catch/scripts/releaseNotes.py index e083ec94534..324ae932a2f 100644 --- a/3rdparty/catch/scripts/releaseNotes.py +++ b/3rdparty/catch/scripts/releaseNotes.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python + import os import re import urllib2 diff --git a/3rdparty/catch/scripts/scriptCommon.py b/3rdparty/catch/scripts/scriptCommon.py index 6ac381adcb6..9adadb6ddcf 100644 --- a/3rdparty/catch/scripts/scriptCommon.py +++ b/3rdparty/catch/scripts/scriptCommon.py @@ -2,8 +2,13 @@ import os import sys import subprocess + catchPath = os.path.dirname(os.path.realpath( os.path.dirname(sys.argv[0]))) +def getBuildExecutable(): + dir = os.environ.get('CATCH_DEV_OUT_DIR', "cmake-build-debug/SelfTest") + return dir + def runAndCapture( args ): child = subprocess.Popen(" ".join( args ), shell=True, stdout=subprocess.PIPE) lines = [] @@ -18,4 +23,4 @@ def runAndCapture( args ): line = "" else: line = line + out - return lines
\ No newline at end of file + return lines diff --git a/3rdparty/catch/single_include/catch.hpp b/3rdparty/catch/single_include/catch.hpp index 2e6fe8d39cc..99c93f17f7c 100644 --- a/3rdparty/catch/single_include/catch.hpp +++ b/3rdparty/catch/single_include/catch.hpp @@ -1,6 +1,6 @@ /* - * Catch v1.5.8 - * Generated: 2016-10-26 12:07:30.938259 + * Catch v1.7.0 + * Generated: 2017-02-01 21:32:13.239291 * ---------------------------------------------------------- * This file has been merged from multiple headers. Please don't edit it directly * Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved. @@ -60,21 +60,6 @@ // #included from: catch_common.h #define TWOBLUECUBES_CATCH_COMMON_H_INCLUDED -#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line -#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) -#ifdef CATCH_CONFIG_COUNTER -# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ ) -#else -# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ ) -#endif - -#define INTERNAL_CATCH_STRINGIFY2( expr ) #expr -#define INTERNAL_CATCH_STRINGIFY( expr ) INTERNAL_CATCH_STRINGIFY2( expr ) - -#include <sstream> -#include <stdexcept> -#include <algorithm> - // #included from: catch_compiler_capabilities.h #define TWOBLUECUBES_CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED @@ -89,6 +74,8 @@ // CATCH_CONFIG_CPP11_LONG_LONG : is long long supported? // CATCH_CONFIG_CPP11_OVERRIDE : is override supported? // CATCH_CONFIG_CPP11_UNIQUE_PTR : is unique_ptr supported (otherwise use auto_ptr) +// CATCH_CONFIG_CPP11_SHUFFLE : is std::shuffle supported? +// CATCH_CONFIG_CPP11_TYPE_TRAITS : are type_traits and enable_if supported? // CATCH_CONFIG_CPP11_OR_GREATER : Is C++11 supported? @@ -181,6 +168,8 @@ #if (_MSC_VER >= 1900 ) // (VC++ 13 (VS2015)) #define CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT #define CATCH_INTERNAL_CONFIG_CPP11_GENERATED_METHODS +#define CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE +#define CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS #endif #endif // _MSC_VER @@ -246,6 +235,12 @@ # if !defined(CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) # define CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR # endif +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE) +# define CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE +# endif +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS) +# define CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS +# endif #endif // __cplusplus >= 201103L @@ -268,18 +263,27 @@ #if defined(CATCH_INTERNAL_CONFIG_VARIADIC_MACROS) && !defined(CATCH_CONFIG_NO_VARIADIC_MACROS) && !defined(CATCH_CONFIG_VARIADIC_MACROS) # define CATCH_CONFIG_VARIADIC_MACROS #endif -#if defined(CATCH_INTERNAL_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_NO_LONG_LONG) && !defined(CATCH_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_NO_CPP11) +#if defined(CATCH_INTERNAL_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_CPP11_NO_LONG_LONG) && !defined(CATCH_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_NO_CPP11) # define CATCH_CONFIG_CPP11_LONG_LONG #endif -#if defined(CATCH_INTERNAL_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_NO_OVERRIDE) && !defined(CATCH_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_NO_CPP11) +#if defined(CATCH_INTERNAL_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_CPP11_NO_OVERRIDE) && !defined(CATCH_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_NO_CPP11) # define CATCH_CONFIG_CPP11_OVERRIDE #endif -#if defined(CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_NO_UNIQUE_PTR) && !defined(CATCH_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_NO_CPP11) +#if defined(CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_CPP11_NO_UNIQUE_PTR) && !defined(CATCH_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_NO_CPP11) # define CATCH_CONFIG_CPP11_UNIQUE_PTR #endif -#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) +// Use of __COUNTER__ is suppressed if __JETBRAINS_IDE__ is #defined (meaning we're being parsed by a JetBrains IDE for +// analytics) because, at time of writing, __COUNTER__ is not properly handled by it. +// This does not affect compilation +#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) && !defined(__JETBRAINS_IDE__) # define CATCH_CONFIG_COUNTER #endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE) && !defined(CATCH_CONFIG_CPP11_NO_SHUFFLE) && !defined(CATCH_CONFIG_CPP11_SHUFFLE) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_SHUFFLE +#endif +# if defined(CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS) && !defined(CATCH_CONFIG_CPP11_NO_TYPE_TRAITS) && !defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_TYPE_TRAITS +# endif #if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS) # define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS @@ -315,6 +319,21 @@ # define CATCH_AUTO_PTR( T ) std::auto_ptr<T> #endif +#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line +#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) +#ifdef CATCH_CONFIG_COUNTER +# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ ) +#else +# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ ) +#endif + +#define INTERNAL_CATCH_STRINGIFY2( expr ) #expr +#define INTERNAL_CATCH_STRINGIFY( expr ) INTERNAL_CATCH_STRINGIFY2( expr ) + +#include <sstream> +#include <stdexcept> +#include <algorithm> + namespace Catch { struct IConfig; @@ -367,7 +386,10 @@ namespace Catch { } bool startsWith( std::string const& s, std::string const& prefix ); + bool startsWith( std::string const& s, char prefix ); bool endsWith( std::string const& s, std::string const& suffix ); + bool endsWith( std::string const& s, char suffix ); + bool contains( std::string const& s, std::string const& infix ); bool contains( std::string const& s, std::string const& infix ); void toLowerInPlace( std::string& s ); std::string toLower( std::string const& s ); @@ -387,8 +409,8 @@ namespace Catch { SourceLineInfo(); SourceLineInfo( char const* _file, std::size_t _line ); - SourceLineInfo( SourceLineInfo const& other ); # ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + SourceLineInfo(SourceLineInfo const& other) = default; SourceLineInfo( SourceLineInfo && ) = default; SourceLineInfo& operator = ( SourceLineInfo const& ) = default; SourceLineInfo& operator = ( SourceLineInfo && ) = default; @@ -397,7 +419,7 @@ namespace Catch { bool operator == ( SourceLineInfo const& other ) const; bool operator < ( SourceLineInfo const& other ) const; - std::string file; + char const* file; std::size_t line; }; @@ -832,6 +854,27 @@ namespace Catch { namespace Catch { + struct STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison; + + struct DecomposedExpression + { + virtual ~DecomposedExpression() {} + virtual bool isBinaryExpression() const { + return false; + } + virtual void reconstructExpression( std::string& dest ) const = 0; + + // Only simple binary comparisons can be decomposed. + // If more complex check is required then wrap sub-expressions in parentheses. + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator + ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator - ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator * ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator / ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator % ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( T const& ); + }; + struct AssertionInfo { AssertionInfo() {} @@ -848,11 +891,41 @@ namespace Catch { struct AssertionResultData { - AssertionResultData() : resultType( ResultWas::Unknown ) {} + AssertionResultData() : decomposedExpression( CATCH_NULL ) + , resultType( ResultWas::Unknown ) + , negated( false ) + , parenthesized( false ) {} + + void negate( bool parenthesize ) { + negated = !negated; + parenthesized = parenthesize; + if( resultType == ResultWas::Ok ) + resultType = ResultWas::ExpressionFailed; + else if( resultType == ResultWas::ExpressionFailed ) + resultType = ResultWas::Ok; + } + + std::string const& reconstructExpression() const { + if( decomposedExpression != CATCH_NULL ) { + decomposedExpression->reconstructExpression( reconstructedExpression ); + if( parenthesized ) { + reconstructedExpression.insert( 0, 1, '(' ); + reconstructedExpression.append( 1, ')' ); + } + if( negated ) { + reconstructedExpression.insert( 0, 1, '!' ); + } + decomposedExpression = CATCH_NULL; + } + return reconstructedExpression; + } - std::string reconstructedExpression; + mutable DecomposedExpression const* decomposedExpression; + mutable std::string reconstructedExpression; std::string message; ResultWas::OfType resultType; + bool negated; + bool parenthesized; }; class AssertionResult { @@ -879,6 +952,8 @@ namespace Catch { std::string getMessage() const; SourceLineInfo getSourceInfo() const; std::string getTestMacroName() const; + void discardDecomposedExpression() const; + void expandDecomposedExpression() const; protected: AssertionInfo m_info; @@ -1065,7 +1140,7 @@ namespace Matchers { { return m_caseSensitivity == CaseSensitive::No ? " (case insensitive)" - : ""; + : std::string(); } CaseSensitive::Choice m_caseSensitivity; std::string m_str; @@ -1083,7 +1158,7 @@ namespace Matchers { return m_data.m_str == m_data.adjustString( expr );; } virtual std::string toString() const { - return "equals: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); + return "equals: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); } CasedString m_data; @@ -1100,7 +1175,7 @@ namespace Matchers { return m_data.adjustString( expr ).find( m_data.m_str ) != std::string::npos; } virtual std::string toString() const { - return "contains: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); + return "contains: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); } CasedString m_data; @@ -1118,7 +1193,7 @@ namespace Matchers { return startsWith( m_data.adjustString( expr ), m_data.m_str ); } virtual std::string toString() const { - return "starts with: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); + return "starts with: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); } CasedString m_data; @@ -1135,7 +1210,7 @@ namespace Matchers { return endsWith( m_data.adjustString( expr ), m_data.m_str ); } virtual std::string toString() const { - return "ends with: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); + return "ends with: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); } CasedString m_data; @@ -1210,22 +1285,20 @@ namespace Catch { template<typename T> class ExpressionLhs; - struct STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison; - struct CopyableStream { CopyableStream() {} CopyableStream( CopyableStream const& other ) { oss << other.oss.str(); } CopyableStream& operator=( CopyableStream const& other ) { - oss.str(""); + oss.str(std::string()); oss << other.oss.str(); return *this; } std::ostringstream oss; }; - class ResultBuilder { + class ResultBuilder : public DecomposedExpression { public: ResultBuilder( char const* macroName, SourceLineInfo const& lineInfo, @@ -1243,19 +1316,15 @@ namespace Catch { return *this; } - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( RhsT const& ); - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( RhsT const& ); - ResultBuilder& setResultType( ResultWas::OfType result ); ResultBuilder& setResultType( bool result ); - ResultBuilder& setLhs( std::string const& lhs ); - ResultBuilder& setRhs( std::string const& rhs ); - ResultBuilder& setOp( std::string const& op ); - void endExpression(); + void endExpression( DecomposedExpression const& expr ); + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE; - std::string reconstructExpression() const; AssertionResult build() const; + AssertionResult build( DecomposedExpression const& expr ) const; void useActiveException( ResultDisposition::Flags resultDisposition = ResultDisposition::Normal ); void captureResult( ResultWas::OfType resultType ); @@ -1267,14 +1336,12 @@ namespace Catch { bool shouldDebugBreak() const; bool allowThrows() const; + template<typename ArgT, typename MatcherT> + void captureMatch( ArgT const& arg, MatcherT const& matcher, char const* matcherString ); + private: AssertionInfo m_assertionInfo; AssertionResultData m_data; - struct ExprComponents { - ExprComponents() : testFalse( false ) {} - bool testFalse; - std::string lhs, rhs, op; - } m_exprComponents; CopyableStream m_stream; bool m_shouldDebugBreak; @@ -1796,90 +1863,155 @@ std::string toString( T const& value ) { namespace Catch { -// Wraps the LHS of an expression and captures the operator and RHS (if any) - -// wrapping them all in a ResultBuilder object -template<typename T> -class ExpressionLhs { - ExpressionLhs& operator = ( ExpressionLhs const& ); -# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS - ExpressionLhs& operator = ( ExpressionLhs && ) = delete; -# endif +template<typename LhsT, Internal::Operator Op, typename RhsT> +class BinaryExpression; + +template<typename ArgT, typename MatcherT> +class MatchExpression; +// Wraps the LHS of an expression and overloads comparison operators +// for also capturing those and RHS (if any) +template<typename T> +class ExpressionLhs : public DecomposedExpression { public: - ExpressionLhs( ResultBuilder& rb, T lhs ) : m_rb( rb ), m_lhs( lhs ) {} -# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS - ExpressionLhs( ExpressionLhs const& ) = default; - ExpressionLhs( ExpressionLhs && ) = default; -# endif + ExpressionLhs( ResultBuilder& rb, T lhs ) : m_rb( rb ), m_lhs( lhs ), m_truthy(false) {} template<typename RhsT> - ResultBuilder& operator == ( RhsT const& rhs ) { + BinaryExpression<T, Internal::IsEqualTo, RhsT const&> + operator == ( RhsT const& rhs ) const { return captureExpression<Internal::IsEqualTo>( rhs ); } template<typename RhsT> - ResultBuilder& operator != ( RhsT const& rhs ) { + BinaryExpression<T, Internal::IsNotEqualTo, RhsT const&> + operator != ( RhsT const& rhs ) const { return captureExpression<Internal::IsNotEqualTo>( rhs ); } template<typename RhsT> - ResultBuilder& operator < ( RhsT const& rhs ) { + BinaryExpression<T, Internal::IsLessThan, RhsT const&> + operator < ( RhsT const& rhs ) const { return captureExpression<Internal::IsLessThan>( rhs ); } template<typename RhsT> - ResultBuilder& operator > ( RhsT const& rhs ) { + BinaryExpression<T, Internal::IsGreaterThan, RhsT const&> + operator > ( RhsT const& rhs ) const { return captureExpression<Internal::IsGreaterThan>( rhs ); } template<typename RhsT> - ResultBuilder& operator <= ( RhsT const& rhs ) { + BinaryExpression<T, Internal::IsLessThanOrEqualTo, RhsT const&> + operator <= ( RhsT const& rhs ) const { return captureExpression<Internal::IsLessThanOrEqualTo>( rhs ); } template<typename RhsT> - ResultBuilder& operator >= ( RhsT const& rhs ) { + BinaryExpression<T, Internal::IsGreaterThanOrEqualTo, RhsT const&> + operator >= ( RhsT const& rhs ) const { return captureExpression<Internal::IsGreaterThanOrEqualTo>( rhs ); } - ResultBuilder& operator == ( bool rhs ) { + BinaryExpression<T, Internal::IsEqualTo, bool> operator == ( bool rhs ) const { return captureExpression<Internal::IsEqualTo>( rhs ); } - ResultBuilder& operator != ( bool rhs ) { + BinaryExpression<T, Internal::IsNotEqualTo, bool> operator != ( bool rhs ) const { return captureExpression<Internal::IsNotEqualTo>( rhs ); } void endExpression() { - bool value = m_lhs ? true : false; + m_truthy = m_lhs ? true : false; m_rb - .setLhs( Catch::toString( value ) ) - .setResultType( value ) - .endExpression(); + .setResultType( m_truthy ) + .endExpression( *this ); } - // Only simple binary expressions are allowed on the LHS. - // If more complex compositions are required then place the sub expression in parentheses - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator + ( RhsT const& ); - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator - ( RhsT const& ); - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator / ( RhsT const& ); - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator * ( RhsT const& ); - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( RhsT const& ); - template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( RhsT const& ); + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE { + dest = Catch::toString( m_truthy ); + } private: template<Internal::Operator Op, typename RhsT> - ResultBuilder& captureExpression( RhsT const& rhs ) { - return m_rb - .setResultType( Internal::compare<Op>( m_lhs, rhs ) ) - .setLhs( Catch::toString( m_lhs ) ) - .setRhs( Catch::toString( rhs ) ) - .setOp( Internal::OperatorTraits<Op>::getName() ); + BinaryExpression<T, Op, RhsT&> captureExpression( RhsT& rhs ) const { + return BinaryExpression<T, Op, RhsT&>( m_rb, m_lhs, rhs ); + } + + template<Internal::Operator Op> + BinaryExpression<T, Op, bool> captureExpression( bool rhs ) const { + return BinaryExpression<T, Op, bool>( m_rb, m_lhs, rhs ); } private: ResultBuilder& m_rb; T m_lhs; + bool m_truthy; +}; + +template<typename LhsT, Internal::Operator Op, typename RhsT> +class BinaryExpression : public DecomposedExpression { +public: + BinaryExpression( ResultBuilder& rb, LhsT lhs, RhsT rhs ) + : m_rb( rb ), m_lhs( lhs ), m_rhs( rhs ) {} + + void endExpression() const { + m_rb + .setResultType( Internal::compare<Op>( m_lhs, m_rhs ) ) + .endExpression( *this ); + } + + virtual bool isBinaryExpression() const CATCH_OVERRIDE { + return true; + } + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE { + std::string lhs = Catch::toString( m_lhs ); + std::string rhs = Catch::toString( m_rhs ); + char delim = lhs.size() + rhs.size() < 40 && + lhs.find('\n') == std::string::npos && + rhs.find('\n') == std::string::npos ? ' ' : '\n'; + dest.reserve( 7 + lhs.size() + rhs.size() ); + // 2 for spaces around operator + // 2 for operator + // 2 for parentheses (conditionally added later) + // 1 for negation (conditionally added later) + dest = lhs; + dest += delim; + dest += Internal::OperatorTraits<Op>::getName(); + dest += delim; + dest += rhs; + } + +private: + ResultBuilder& m_rb; + LhsT m_lhs; + RhsT m_rhs; +}; + +template<typename ArgT, typename MatcherT> +class MatchExpression : public DecomposedExpression { +public: + MatchExpression( ArgT arg, MatcherT matcher, char const* matcherString ) + : m_arg( arg ), m_matcher( matcher ), m_matcherString( matcherString ) {} + + virtual bool isBinaryExpression() const CATCH_OVERRIDE { + return true; + } + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE { + std::string matcherAsString = m_matcher.toString(); + dest = Catch::toString( m_arg ); + dest += ' '; + if( matcherAsString == Detail::unprintableString ) + dest += m_matcherString; + else + dest += matcherAsString; + } + +private: + ArgT m_arg; + MatcherT m_matcher; + char const* m_matcherString; }; } // end namespace Catch @@ -1896,6 +2028,14 @@ namespace Catch { return ExpressionLhs<bool>( *this, value ); } + template<typename ArgT, typename MatcherT> + inline void ResultBuilder::captureMatch( ArgT const& arg, MatcherT const& matcher, + char const* matcherString ) { + MatchExpression<ArgT const&, MatcherT const&> expr( arg, matcher, matcherString ); + setResultType( matcher.match( arg ) ); + endExpression( expr ); + } + } // namespace Catch // #included from: catch_message.h @@ -1998,11 +2138,19 @@ namespace Catch { #define TWOBLUECUBES_CATCH_PLATFORM_H_INCLUDED #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) -#define CATCH_PLATFORM_MAC +# define CATCH_PLATFORM_MAC #elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED) -#define CATCH_PLATFORM_IPHONE +# define CATCH_PLATFORM_IPHONE +#elif defined(linux) || defined(__linux) || defined(__linux__) +# define CATCH_PLATFORM_LINUX #elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) -#define CATCH_PLATFORM_WINDOWS +# define CATCH_PLATFORM_WINDOWS +# if !defined(NOMINMAX) && !defined(CATCH_CONFIG_NO_NOMINMAX) +# define CATCH_DEFINES_NOMINMAX +# endif +# if !defined(WIN32_LEAN_AND_MEAN) && !defined(CATCH_CONFIG_NO_WIN32_LEAN_AND_MEAN) +# define CATCH_DEFINES_WIN32_LEAN_AND_MEAN +# endif #endif #include <string> @@ -2017,27 +2165,36 @@ namespace Catch{ // The following code snippet based on: // http://cocoawithlove.com/2008/03/break-into-debugger.html - #ifdef DEBUG - #if defined(__ppc64__) || defined(__ppc__) - #define CATCH_BREAK_INTO_DEBUGGER() \ - if( Catch::isDebuggerActive() ) { \ - __asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n" \ - : : : "memory","r0","r3","r4" ); \ - } - #else - #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) {__asm__("int $3\n" : : );} - #endif + #if defined(__ppc64__) || defined(__ppc__) + #define CATCH_TRAP() \ + __asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n" \ + : : : "memory","r0","r3","r4" ) + #else + #define CATCH_TRAP() __asm__("int $3\n" : : ) #endif +#elif defined(CATCH_PLATFORM_LINUX) + // If we can use inline assembler, do it because this allows us to break + // directly at the location of the failing check instead of breaking inside + // raise() called from it, i.e. one stack frame below. + #if defined(__GNUC__) && (defined(__i386) || defined(__x86_64)) + #define CATCH_TRAP() asm volatile ("int $3") + #else // Fall back to the generic way. + #include <signal.h> + + #define CATCH_TRAP() raise(SIGTRAP) + #endif #elif defined(_MSC_VER) - #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { __debugbreak(); } + #define CATCH_TRAP() __debugbreak() #elif defined(__MINGW32__) extern "C" __declspec(dllimport) void __stdcall DebugBreak(); - #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { DebugBreak(); } + #define CATCH_TRAP() DebugBreak() #endif -#ifndef CATCH_BREAK_INTO_DEBUGGER -#define CATCH_BREAK_INTO_DEBUGGER() Catch::alwaysTrue(); +#ifdef CATCH_TRAP + #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { CATCH_TRAP(); } +#else + #define CATCH_BREAK_INTO_DEBUGGER() Catch::alwaysTrue(); #endif // #included from: catch_interfaces_runner.h @@ -2070,10 +2227,11 @@ namespace Catch { ( __catchResult <= expr ).endExpression(); \ } \ catch( ... ) { \ - __catchResult.useActiveException( Catch::ResultDisposition::Normal ); \ + __catchResult.useActiveException( resultDisposition ); \ } \ INTERNAL_CATCH_REACT( __catchResult ) \ - } while( Catch::isTrue( false && !!(expr) ) ) // expr here is never evaluated at runtime but it forces the compiler to give it a look + } while( Catch::isTrue( false && static_cast<bool>( !!(expr) ) ) ) // expr here is never evaluated at runtime but it forces the compiler to give it a look + // The double negation silences MSVC's C4800 warning, the static_cast forces short-circuit evaluation if the type has overloaded &&. /////////////////////////////////////////////////////////////////////////////// #define INTERNAL_CATCH_IF( expr, resultDisposition, macroName ) \ @@ -2090,7 +2248,7 @@ namespace Catch { do { \ Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \ try { \ - expr; \ + static_cast<void>(expr); \ __catchResult.captureResult( Catch::ResultWas::Ok ); \ } \ catch( ... ) { \ @@ -2105,7 +2263,7 @@ namespace Catch { Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition, #matcher ); \ if( __catchResult.allowThrows() ) \ try { \ - expr; \ + static_cast<void>(expr); \ __catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \ } \ catch( ... ) { \ @@ -2122,7 +2280,7 @@ namespace Catch { Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \ if( __catchResult.allowThrows() ) \ try { \ - expr; \ + static_cast<void>(expr); \ __catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \ } \ catch( exceptionType ) { \ @@ -2164,13 +2322,7 @@ namespace Catch { do { \ Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #arg ", " #matcher, resultDisposition ); \ try { \ - std::string matcherAsString = (matcher).toString(); \ - __catchResult \ - .setLhs( Catch::toString( arg ) ) \ - .setRhs( matcherAsString == Catch::Detail::unprintableString ? #matcher : matcherAsString ) \ - .setOp( "matches" ) \ - .setResultType( (matcher).match( arg ) ); \ - __catchResult.captureExpression(); \ + __catchResult.captureMatch( arg, matcher, #matcher ); \ } catch( ... ) { \ __catchResult.useActiveException( resultDisposition | Catch::ResultDisposition::ContinueOnFailure ); \ } \ @@ -2623,6 +2775,10 @@ namespace Catch { #include <cmath> #include <limits> +#if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) +#include <type_traits> +#endif + namespace Catch { namespace Detail { @@ -2651,6 +2807,53 @@ namespace Detail { return approx; } +#if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator == ( const T& lhs, Approx const& rhs ) { + // Thanks to Richard Harris for his help refining this formula + auto lhs_v = double(lhs); + return fabs( lhs_v - rhs.m_value ) < rhs.m_epsilon * (rhs.m_scale + (std::max)( fabs(lhs_v), fabs(rhs.m_value) ) ); + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator == ( Approx const& lhs, const T& rhs ) { + return operator==( rhs, lhs ); + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator != ( T lhs, Approx const& rhs ) { + return !operator==( lhs, rhs ); + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator != ( Approx const& lhs, T rhs ) { + return !operator==( rhs, lhs ); + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator <= ( T lhs, Approx const& rhs ) + { + return double(lhs) < rhs.m_value || lhs == rhs; + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator <= ( Approx const& lhs, T rhs ) + { + return lhs.m_value < double(rhs) || lhs == rhs; + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator >= ( T lhs, Approx const& rhs ) + { + return double(lhs) > rhs.m_value || lhs == rhs; + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator >= ( Approx const& lhs, T rhs ) + { + return lhs.m_value > double(rhs) || lhs == rhs; + } +#else friend bool operator == ( double lhs, Approx const& rhs ) { // Thanks to Richard Harris for his help refining this formula return fabs( lhs - rhs.m_value ) < rhs.m_epsilon * (rhs.m_scale + (std::max)( fabs(lhs), fabs(rhs.m_value) ) ); @@ -2668,6 +2871,27 @@ namespace Detail { return !operator==( rhs, lhs ); } + friend bool operator <= ( double lhs, Approx const& rhs ) + { + return lhs < rhs.m_value || lhs == rhs; + } + + friend bool operator <= ( Approx const& lhs, double rhs ) + { + return lhs.m_value < rhs || lhs == rhs; + } + + friend bool operator >= ( double lhs, Approx const& rhs ) + { + return lhs > rhs.m_value || lhs == rhs; + } + + friend bool operator >= ( Approx const& lhs, double rhs ) + { + return lhs.m_value > rhs || lhs == rhs; + } +#endif + Approx& epsilon( double newEpsilon ) { m_epsilon = newEpsilon; return *this; @@ -2822,7 +3046,8 @@ namespace Catch { IsHidden = 1 << 1, ShouldFail = 1 << 2, MayFail = 1 << 3, - Throws = 1 << 4 + Throws = 1 << 4, + NonPortable = 1 << 5 }; TestCaseInfo( std::string const& _name, @@ -3134,11 +3359,11 @@ namespace Catch m_wildcard( NoWildcard ), m_pattern( adjustCase( pattern ) ) { - if( startsWith( m_pattern, "*" ) ) { + if( startsWith( m_pattern, '*' ) ) { m_pattern = m_pattern.substr( 1 ); m_wildcard = WildcardAtStart; } - if( endsWith( m_pattern, "*" ) ) { + if( endsWith( m_pattern, '*' ) ) { m_pattern = m_pattern.substr( 0, m_pattern.size()-1 ); m_wildcard = static_cast<WildcardPosition>( m_wildcard | WildcardAtEnd ); } @@ -3257,11 +3482,12 @@ namespace Catch { namespace Catch { class TestSpecParser { - enum Mode{ None, Name, QuotedName, Tag }; + enum Mode{ None, Name, QuotedName, Tag, EscapedName }; Mode m_mode; bool m_exclusion; std::size_t m_start, m_pos; std::string m_arg; + std::vector<std::size_t> m_escapeChars; TestSpec::Filter m_currentFilter; TestSpec m_testSpec; ITagAliasRegistry const* m_tagAliases; @@ -3274,6 +3500,7 @@ namespace Catch { m_exclusion = false; m_start = std::string::npos; m_arg = m_tagAliases->expandAliases( arg ); + m_escapeChars.clear(); for( m_pos = 0; m_pos < m_arg.size(); ++m_pos ) visitChar( m_arg[m_pos] ); if( m_mode == Name ) @@ -3292,6 +3519,7 @@ namespace Catch { case '~': m_exclusion = true; return; case '[': return startNewMode( Tag, ++m_pos ); case '"': return startNewMode( QuotedName, ++m_pos ); + case '\\': return escape(); default: startNewMode( Name, m_pos ); break; } } @@ -3307,7 +3535,11 @@ namespace Catch { addPattern<TestSpec::NamePattern>(); startNewMode( Tag, ++m_pos ); } + else if( c == '\\' ) + escape(); } + else if( m_mode == EscapedName ) + m_mode = Name; else if( m_mode == QuotedName && c == '"' ) addPattern<TestSpec::NamePattern>(); else if( m_mode == Tag && c == ']' ) @@ -3317,10 +3549,19 @@ namespace Catch { m_mode = mode; m_start = start; } + void escape() { + if( m_mode == None ) + m_start = m_pos; + m_mode = EscapedName; + m_escapeChars.push_back( m_pos ); + } std::string subString() const { return m_arg.substr( m_start, m_pos - m_start ); } template<typename T> void addPattern() { std::string token = subString(); + for( size_t i = 0; i < m_escapeChars.size(); ++i ) + token = token.substr( 0, m_escapeChars[i]-i ) + token.substr( m_escapeChars[i]+1-i ); + m_escapeChars.clear(); if( startsWith( token, "exclude:" ) ) { m_exclusion = true; token = token.substr( 8 ); @@ -3406,6 +3647,8 @@ namespace Catch { virtual RunTests::InWhatOrder runOrder() const = 0; virtual unsigned int rngSeed() const = 0; virtual UseColour::YesOrNo useColour() const = 0; + virtual std::vector<std::string> const& getSectionsToRun() const = 0; + }; } @@ -3428,6 +3671,7 @@ namespace Catch { #include <streambuf> #include <ostream> #include <fstream> +#include <memory> namespace Catch { @@ -3531,6 +3775,7 @@ namespace Catch { std::vector<std::string> reporterNames; std::vector<std::string> testsOrTags; + std::vector<std::string> sectionsToRun; }; class Config : public SharedImpl<IConfig> { @@ -3571,7 +3816,8 @@ namespace Catch { bool shouldDebugBreak() const { return m_data.shouldDebugBreak; } - std::vector<std::string> getReporterNames() const { return m_data.reporterNames; } + std::vector<std::string> const& getReporterNames() const { return m_data.reporterNames; } + std::vector<std::string> const& getSectionsToRun() const CATCH_OVERRIDE { return m_data.sectionsToRun; } int abortAfter() const { return m_data.abortAfter; } @@ -3995,9 +4241,12 @@ namespace Clara { inline void convertInto( std::string const& _source, std::string& _dest ) { _dest = _source; } + char toLowerCh(char c) { + return static_cast<char>( ::tolower( c ) ); + } inline void convertInto( std::string const& _source, bool& _dest ) { std::string sourceLC = _source; - std::transform( sourceLC.begin(), sourceLC.end(), sourceLC.begin(), ::tolower ); + std::transform( sourceLC.begin(), sourceLC.end(), sourceLC.begin(), toLowerCh ); if( sourceLC == "y" || sourceLC == "1" || sourceLC == "true" || sourceLC == "yes" || sourceLC == "on" ) _dest = true; else if( sourceLC == "n" || sourceLC == "0" || sourceLC == "false" || sourceLC == "no" || sourceLC == "off" ) @@ -4658,13 +4907,14 @@ namespace Catch { config.abortAfter = x; } inline void addTestOrTags( ConfigData& config, std::string const& _testSpec ) { config.testsOrTags.push_back( _testSpec ); } + inline void addSectionToRun( ConfigData& config, std::string const& sectionName ) { config.sectionsToRun.push_back( sectionName ); } inline void addReporterName( ConfigData& config, std::string const& _reporterName ) { config.reporterNames.push_back( _reporterName ); } inline void addWarning( ConfigData& config, std::string const& _warning ) { if( _warning == "NoAssertions" ) config.warnings = static_cast<WarnAbout::What>( config.warnings | WarnAbout::NoAssertions ); else - throw std::runtime_error( "Unrecognised warning: '" + _warning + "'" ); + throw std::runtime_error( "Unrecognised warning: '" + _warning + '\'' ); } inline void setOrder( ConfigData& config, std::string const& order ) { if( startsWith( "declared", order ) ) @@ -4674,7 +4924,7 @@ namespace Catch { else if( startsWith( "random", order ) ) config.runOrder = RunTests::InRandomOrder; else - throw std::runtime_error( "Unrecognised ordering: '" + order + "'" ); + throw std::runtime_error( "Unrecognised ordering: '" + order + '\'' ); } inline void setRngSeed( ConfigData& config, std::string const& seed ) { if( seed == "time" ) { @@ -4720,10 +4970,10 @@ namespace Catch { std::string line; while( std::getline( f, line ) ) { line = trim(line); - if( !line.empty() && !startsWith( line, "#" ) ) { - if( !startsWith( line, "\"" ) ) - line = "\"" + line + "\""; - addTestOrTags( config, line + "," ); + if( !line.empty() && !startsWith( line, '#' ) ) { + if( !startsWith( line, '"' ) ) + line = '"' + line + '"'; + addTestOrTags( config, line + ',' ); } } } @@ -4811,6 +5061,10 @@ namespace Catch { .describe( "adds a tag for the filename" ) .bind( &ConfigData::filenamesAsTags ); + cli["-c"]["--section"] + .describe( "specify section to run" ) + .bind( &addSectionToRun, "section name" ); + // Less common commands which don't have a short form cli["--list-test-names-only"] .describe( "list all/matching test cases names only" ) @@ -4883,19 +5137,16 @@ namespace Tbc { TextAttributes() : initialIndent( std::string::npos ), indent( 0 ), - width( consoleWidth-1 ), - tabChar( '\t' ) + width( consoleWidth-1 ) {} TextAttributes& setInitialIndent( std::size_t _value ) { initialIndent = _value; return *this; } TextAttributes& setIndent( std::size_t _value ) { indent = _value; return *this; } TextAttributes& setWidth( std::size_t _value ) { width = _value; return *this; } - TextAttributes& setTabChar( char _value ) { tabChar = _value; return *this; } std::size_t initialIndent; // indent of first line, or npos std::size_t indent; // indent of subsequent lines, or all if initialIndent is npos std::size_t width; // maximum width of text, including indent. Longer text will wrap - char tabChar; // If this char is seen the indent is changed to current pos }; class Text { @@ -4903,62 +5154,76 @@ namespace Tbc { Text( std::string const& _str, TextAttributes const& _attr = TextAttributes() ) : attr( _attr ) { - std::string wrappableChars = " [({.,/|\\-"; - std::size_t indent = _attr.initialIndent != std::string::npos - ? _attr.initialIndent - : _attr.indent; - std::string remainder = _str; + const std::string wrappableBeforeChars = "[({<\t"; + const std::string wrappableAfterChars = "])}>-,./|\\"; + const std::string wrappableInsteadOfChars = " \n\r"; + std::string indent = _attr.initialIndent != std::string::npos + ? std::string( _attr.initialIndent, ' ' ) + : std::string( _attr.indent, ' ' ); + + typedef std::string::const_iterator iterator; + iterator it = _str.begin(); + const iterator strEnd = _str.end(); + + while( it != strEnd ) { - while( !remainder.empty() ) { if( lines.size() >= 1000 ) { lines.push_back( "... message truncated due to excessive size" ); return; } - std::size_t tabPos = std::string::npos; - std::size_t width = (std::min)( remainder.size(), _attr.width - indent ); - std::size_t pos = remainder.find_first_of( '\n' ); - if( pos <= width ) { - width = pos; - } - pos = remainder.find_last_of( _attr.tabChar, width ); - if( pos != std::string::npos ) { - tabPos = pos; - if( remainder[width] == '\n' ) - width--; - remainder = remainder.substr( 0, tabPos ) + remainder.substr( tabPos+1 ); - } - if( width == remainder.size() ) { - spliceLine( indent, remainder, width ); - } - else if( remainder[width] == '\n' ) { - spliceLine( indent, remainder, width ); - if( width <= 1 || remainder.size() != 1 ) - remainder = remainder.substr( 1 ); - indent = _attr.indent; - } - else { - pos = remainder.find_last_of( wrappableChars, width ); - if( pos != std::string::npos && pos > 0 ) { - spliceLine( indent, remainder, pos ); - if( remainder[0] == ' ' ) - remainder = remainder.substr( 1 ); + std::string suffix; + std::size_t width = (std::min)( static_cast<size_t>( strEnd-it ), _attr.width-static_cast<size_t>( indent.size() ) ); + iterator itEnd = it+width; + iterator itNext = _str.end(); + + iterator itNewLine = std::find( it, itEnd, '\n' ); + if( itNewLine != itEnd ) + itEnd = itNewLine; + + if( itEnd != strEnd ) { + bool foundWrapPoint = false; + iterator findIt = itEnd; + do { + if( wrappableAfterChars.find( *findIt ) != std::string::npos && findIt != itEnd ) { + itEnd = findIt+1; + itNext = findIt+1; + foundWrapPoint = true; + } + else if( findIt > it && wrappableBeforeChars.find( *findIt ) != std::string::npos ) { + itEnd = findIt; + itNext = findIt; + foundWrapPoint = true; + } + else if( wrappableInsteadOfChars.find( *findIt ) != std::string::npos ) { + itNext = findIt+1; + itEnd = findIt; + foundWrapPoint = true; + } + if( findIt == it ) + break; + else + --findIt; + } + while( !foundWrapPoint ); + + if( !foundWrapPoint ) { + // No good wrap char, so we'll break mid word and add a hyphen + --itEnd; + itNext = itEnd; + suffix = "-"; } else { - spliceLine( indent, remainder, width-1 ); - lines.back() += "-"; + while( itEnd > it && wrappableInsteadOfChars.find( *(itEnd-1) ) != std::string::npos ) + --itEnd; } - if( lines.size() == 1 ) - indent = _attr.indent; - if( tabPos != std::string::npos ) - indent += tabPos; } - } - } + lines.push_back( indent + std::string( it, itEnd ) + suffix ); - void spliceLine( std::size_t _indent, std::string& _remainder, std::size_t _pos ) { - lines.push_back( std::string( _indent, ' ' ) + _remainder.substr( 0, _pos ) ); - _remainder = _remainder.substr( _pos ); + if( indent.size() != _attr.indent ) + indent = std::string( _attr.indent, ' ' ); + it = itNext; + } } typedef std::vector<std::string>::const_iterator const_iterator; @@ -5355,9 +5620,9 @@ namespace Catch { } if( !config.testSpec().hasFilters() ) - Catch::cout() << pluralise( matchedTests, "test case" ) << "\n" << std::endl; + Catch::cout() << pluralise( matchedTests, "test case" ) << '\n' << std::endl; else - Catch::cout() << pluralise( matchedTests, "matching test case" ) << "\n" << std::endl; + Catch::cout() << pluralise( matchedTests, "matching test case" ) << '\n' << std::endl; return matchedTests; } @@ -5372,8 +5637,8 @@ namespace Catch { ++it ) { matchedTests++; TestCaseInfo const& testCaseInfo = it->getTestCaseInfo(); - if( startsWith( testCaseInfo.name, "#" ) ) - Catch::cout() << "\"" << testCaseInfo.name << "\"" << std::endl; + if( startsWith( testCaseInfo.name, '#' ) ) + Catch::cout() << '"' << testCaseInfo.name << '"' << std::endl; else Catch::cout() << testCaseInfo.name << std::endl; } @@ -5436,9 +5701,9 @@ namespace Catch { .setInitialIndent( 0 ) .setIndent( oss.str().size() ) .setWidth( CATCH_CONFIG_CONSOLE_WIDTH-10 ) ); - Catch::cout() << oss.str() << wrapper << "\n"; + Catch::cout() << oss.str() << wrapper << '\n'; } - Catch::cout() << pluralise( tagCounts.size(), "tag" ) << "\n" << std::endl; + Catch::cout() << pluralise( tagCounts.size(), "tag" ) << '\n' << std::endl; return tagCounts.size(); } @@ -5457,9 +5722,9 @@ namespace Catch { .setWidth( CATCH_CONFIG_CONSOLE_WIDTH - maxNameLen-8 ) ); Catch::cout() << " " << it->first - << ":" + << ':' << std::string( maxNameLen - it->first.size() + 2, ' ' ) - << wrapper << "\n"; + << wrapper << '\n'; } Catch::cout() << std::endl; return factories.size(); @@ -5490,15 +5755,26 @@ namespace Catch { #include <string> #include <assert.h> #include <vector> +#include <iterator> namespace Catch { namespace TestCaseTracking { + struct NameAndLocation { + std::string name; + SourceLineInfo location; + + NameAndLocation( std::string const& _name, SourceLineInfo const& _location ) + : name( _name ), + location( _location ) + {} + }; + struct ITracker : SharedImpl<> { virtual ~ITracker(); // static queries - virtual std::string name() const = 0; + virtual NameAndLocation const& nameAndLocation() const = 0; // dynamic queries virtual bool isComplete() const = 0; // Successfully completed or failed @@ -5514,7 +5790,7 @@ namespace TestCaseTracking { virtual void markAsNeedingAnotherRun() = 0; virtual void addChild( Ptr<ITracker> const& child ) = 0; - virtual ITracker* findChild( std::string const& name ) = 0; + virtual ITracker* findChild( NameAndLocation const& nameAndLocation ) = 0; virtual void openChild() = 0; // Debug/ checking @@ -5522,7 +5798,7 @@ namespace TestCaseTracking { virtual bool isIndexTracker() const = 0; }; - class TrackerContext { + class TrackerContext { enum RunState { NotStarted, @@ -5584,30 +5860,32 @@ namespace TestCaseTracking { Failed }; class TrackerHasName { - std::string m_name; + NameAndLocation m_nameAndLocation; public: - TrackerHasName( std::string const& name ) : m_name( name ) {} + TrackerHasName( NameAndLocation const& nameAndLocation ) : m_nameAndLocation( nameAndLocation ) {} bool operator ()( Ptr<ITracker> const& tracker ) { - return tracker->name() == m_name; + return + tracker->nameAndLocation().name == m_nameAndLocation.name && + tracker->nameAndLocation().location == m_nameAndLocation.location; } }; typedef std::vector<Ptr<ITracker> > Children; - std::string m_name; + NameAndLocation m_nameAndLocation; TrackerContext& m_ctx; ITracker* m_parent; Children m_children; CycleState m_runState; public: - TrackerBase( std::string const& name, TrackerContext& ctx, ITracker* parent ) - : m_name( name ), + TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ) + : m_nameAndLocation( nameAndLocation ), m_ctx( ctx ), m_parent( parent ), m_runState( NotStarted ) {} virtual ~TrackerBase(); - virtual std::string name() const CATCH_OVERRIDE { - return m_name; + virtual NameAndLocation const& nameAndLocation() const CATCH_OVERRIDE { + return m_nameAndLocation; } virtual bool isComplete() const CATCH_OVERRIDE { return m_runState == CompletedSuccessfully || m_runState == Failed; @@ -5626,8 +5904,8 @@ namespace TestCaseTracking { m_children.push_back( child ); } - virtual ITracker* findChild( std::string const& name ) CATCH_OVERRIDE { - Children::const_iterator it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( name ) ); + virtual ITracker* findChild( NameAndLocation const& nameAndLocation ) CATCH_OVERRIDE { + Children::const_iterator it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( nameAndLocation ) ); return( it != m_children.end() ) ? it->get() : CATCH_NULL; @@ -5705,32 +5983,56 @@ namespace TestCaseTracking { }; class SectionTracker : public TrackerBase { + std::vector<std::string> m_filters; public: - SectionTracker( std::string const& name, TrackerContext& ctx, ITracker* parent ) - : TrackerBase( name, ctx, parent ) - {} + SectionTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ) + : TrackerBase( nameAndLocation, ctx, parent ) + { + if( parent ) { + while( !parent->isSectionTracker() ) + parent = &parent->parent(); + + SectionTracker& parentSection = static_cast<SectionTracker&>( *parent ); + addNextFilters( parentSection.m_filters ); + } + } virtual ~SectionTracker(); virtual bool isSectionTracker() const CATCH_OVERRIDE { return true; } - static SectionTracker& acquire( TrackerContext& ctx, std::string const& name ) { + static SectionTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation ) { SectionTracker* section = CATCH_NULL; ITracker& currentTracker = ctx.currentTracker(); - if( ITracker* childTracker = currentTracker.findChild( name ) ) { + if( ITracker* childTracker = currentTracker.findChild( nameAndLocation ) ) { assert( childTracker ); assert( childTracker->isSectionTracker() ); section = static_cast<SectionTracker*>( childTracker ); } else { - section = new SectionTracker( name, ctx, ¤tTracker ); + section = new SectionTracker( nameAndLocation, ctx, ¤tTracker ); currentTracker.addChild( section ); } - if( !ctx.completedCycle() && !section->isComplete() ) { + if( !ctx.completedCycle() ) + section->tryOpen(); + return *section; + } - section->open(); + void tryOpen() { + if( !isComplete() && (m_filters.empty() || m_filters[0].empty() || m_filters[0] == m_nameAndLocation.name ) ) + open(); + } + + void addInitialFilters( std::vector<std::string> const& filters ) { + if( !filters.empty() ) { + m_filters.push_back(""); // Root - should never be consulted + m_filters.push_back(""); // Test Case - not a section filter + std::copy( filters.begin(), filters.end(), std::back_inserter( m_filters ) ); } - return *section; + } + void addNextFilters( std::vector<std::string> const& filters ) { + if( filters.size() > 1 ) + std::copy( filters.begin()+1, filters.end(), std::back_inserter( m_filters ) ); } }; @@ -5738,8 +6040,8 @@ namespace TestCaseTracking { int m_size; int m_index; public: - IndexTracker( std::string const& name, TrackerContext& ctx, ITracker* parent, int size ) - : TrackerBase( name, ctx, parent ), + IndexTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent, int size ) + : TrackerBase( nameAndLocation, ctx, parent ), m_size( size ), m_index( -1 ) {} @@ -5747,17 +6049,17 @@ namespace TestCaseTracking { virtual bool isIndexTracker() const CATCH_OVERRIDE { return true; } - static IndexTracker& acquire( TrackerContext& ctx, std::string const& name, int size ) { + static IndexTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation, int size ) { IndexTracker* tracker = CATCH_NULL; ITracker& currentTracker = ctx.currentTracker(); - if( ITracker* childTracker = currentTracker.findChild( name ) ) { + if( ITracker* childTracker = currentTracker.findChild( nameAndLocation ) ) { assert( childTracker ); assert( childTracker->isIndexTracker() ); tracker = static_cast<IndexTracker*>( childTracker ); } else { - tracker = new IndexTracker( name, ctx, ¤tTracker, size ); + tracker = new IndexTracker( nameAndLocation, ctx, ¤tTracker, size ); currentTracker.addChild( tracker ); } @@ -5785,7 +6087,7 @@ namespace TestCaseTracking { }; inline ITracker& TrackerContext::startRun() { - m_rootTracker = new SectionTracker( "{root}", *this, CATCH_NULL ); + m_rootTracker = new SectionTracker( NameAndLocation( "{root}", CATCH_INTERNAL_LINEINFO ), *this, CATCH_NULL ); m_currentTracker = CATCH_NULL; m_runState = Executing; return *m_rootTracker; @@ -5805,25 +6107,77 @@ using TestCaseTracking::IndexTracker; namespace Catch { - // Report the error condition then exit the process - inline void fatal( std::string const& message, int exitCode ) { + // Report the error condition + inline void reportFatal( std::string const& message ) { IContext& context = Catch::getCurrentContext(); IResultCapture* resultCapture = context.getResultCapture(); resultCapture->handleFatalErrorCondition( message ); - - if( Catch::alwaysTrue() ) // avoids "no return" warnings - exit( exitCode ); } } // namespace Catch #if defined ( CATCH_PLATFORM_WINDOWS ) ///////////////////////////////////////// +#define NOMINMAX +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#undef WIN32_LEAN_AND_MEAN +#undef NOMINMAX + namespace Catch { + struct SignalDefs { DWORD id; const char* name; }; + extern SignalDefs signalDefs[]; + // There is no 1-1 mapping between signals and windows exceptions. + // Windows can easily distinguish between SO and SigSegV, + // but SigInt, SigTerm, etc are handled differently. + SignalDefs signalDefs[] = { + { EXCEPTION_ILLEGAL_INSTRUCTION, "SIGILL - Illegal instruction signal" }, + { EXCEPTION_STACK_OVERFLOW, "SIGSEGV - Stack overflow" }, + { EXCEPTION_ACCESS_VIOLATION, "SIGSEGV - Segmentation violation signal" }, + { EXCEPTION_INT_DIVIDE_BY_ZERO, "Divide by zero error" }, + }; + struct FatalConditionHandler { - void reset() {} - }; + + static LONG CALLBACK handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo) { + for (int i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i) { + if (ExceptionInfo->ExceptionRecord->ExceptionCode == signalDefs[i].id) { + reportFatal(signalDefs[i].name); + } + } + // If its not an exception we care about, pass it along. + // This stops us from eating debugger breaks etc. + return EXCEPTION_CONTINUE_SEARCH; + } + + // 32k seems enough for Catch to handle stack overflow, + // but the value was found experimentally, so there is no strong guarantee + FatalConditionHandler():m_isSet(true), m_guaranteeSize(32 * 1024), m_exceptionHandlerHandle(CATCH_NULL) { + // Register as first handler in current chain + m_exceptionHandlerHandle = AddVectoredExceptionHandler(1, handleVectoredException); + // Pass in guarantee size to be filled + SetThreadStackGuarantee(&m_guaranteeSize); + } + + void reset() { + if (m_isSet) { + // Unregister handler and restore the old guarantee + RemoveVectoredExceptionHandler(m_exceptionHandlerHandle); + SetThreadStackGuarantee(&m_guaranteeSize); + m_exceptionHandlerHandle = CATCH_NULL; + m_isSet = false; + } + } + + ~FatalConditionHandler() { + reset(); + } + private: + bool m_isSet; + ULONG m_guaranteeSize; + PVOID m_exceptionHandlerHandle; + }; } // namespace Catch @@ -5833,7 +6187,10 @@ namespace Catch { namespace Catch { - struct SignalDefs { int id; const char* name; }; + struct SignalDefs { + int id; + const char* name; + }; extern SignalDefs signalDefs[]; SignalDefs signalDefs[] = { { SIGINT, "SIGINT - Terminal interrupt signal" }, @@ -5842,35 +6199,66 @@ namespace Catch { { SIGSEGV, "SIGSEGV - Segmentation violation signal" }, { SIGTERM, "SIGTERM - Termination request signal" }, { SIGABRT, "SIGABRT - Abort (abnormal termination) signal" } - }; + }; struct FatalConditionHandler { + static bool isSet; + static struct sigaction oldSigActions [sizeof(signalDefs)/sizeof(SignalDefs)]; + static stack_t oldSigStack; + static char altStackMem[SIGSTKSZ]; + static void handleSignal( int sig ) { - for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) - if( sig == signalDefs[i].id ) - fatal( signalDefs[i].name, -sig ); - fatal( "<unknown signal>", -sig ); + std::string name = "<unknown signal>"; + for (std::size_t i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i) { + SignalDefs &def = signalDefs[i]; + if (sig == def.id) { + name = def.name; + break; + } + } + reset(); + reportFatal(name); + raise( sig ); } - FatalConditionHandler() : m_isSet( true ) { - for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) - signal( signalDefs[i].id, handleSignal ); + FatalConditionHandler() { + isSet = true; + stack_t sigStack; + sigStack.ss_sp = altStackMem; + sigStack.ss_size = SIGSTKSZ; + sigStack.ss_flags = 0; + sigaltstack(&sigStack, &oldSigStack); + struct sigaction sa = { 0 }; + + sa.sa_handler = handleSignal; + sa.sa_flags = SA_ONSTACK; + for (std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i) { + sigaction(signalDefs[i].id, &sa, &oldSigActions[i]); + } } + ~FatalConditionHandler() { reset(); } - void reset() { - if( m_isSet ) { - for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) - signal( signalDefs[i].id, SIG_DFL ); - m_isSet = false; + static void reset() { + if( isSet ) { + // Set signals back to previous values -- hopefully nobody overwrote them in the meantime + for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) { + sigaction(signalDefs[i].id, &oldSigActions[i], CATCH_NULL); + } + // Return the old stack + sigaltstack(&oldSigStack, CATCH_NULL); + isSet = false; } } - - bool m_isSet; }; + bool FatalConditionHandler::isSet = false; + struct sigaction FatalConditionHandler::oldSigActions[sizeof(signalDefs)/sizeof(SignalDefs)] = {}; + stack_t FatalConditionHandler::oldSigStack = {}; + char FatalConditionHandler::altStackMem[SIGSTKSZ] = {}; + } // namespace Catch #endif // not Windows @@ -5949,10 +6337,11 @@ namespace Catch { m_activeTestCase = &testCase; do { - m_trackerContext.startRun(); + ITracker& rootTracker = m_trackerContext.startRun(); + dynamic_cast<SectionTracker&>( rootTracker ).addInitialFilters( m_config->getSectionsToRun() ); do { m_trackerContext.startCycle(); - m_testCaseTracker = &SectionTracker::acquire( m_trackerContext, testInfo.name ); + m_testCaseTracker = &SectionTracker::acquire( m_trackerContext, TestCaseTracking::NameAndLocation( testInfo.name, testInfo.lineInfo ) ); runCurrentTest( redirectedCout, redirectedCerr ); } while( !m_testCaseTracker->isSuccessfullyCompleted() && !aborting() ); @@ -5997,7 +6386,7 @@ namespace Catch { m_messages.clear(); // Reset working state - m_lastAssertionInfo = AssertionInfo( "", m_lastAssertionInfo.lineInfo, "{Unknown expression after the reported line}" , m_lastAssertionInfo.resultDisposition ); + m_lastAssertionInfo = AssertionInfo( std::string(), m_lastAssertionInfo.lineInfo, "{Unknown expression after the reported line}" , m_lastAssertionInfo.resultDisposition ); m_lastResult = result; } @@ -6006,10 +6395,7 @@ namespace Catch { Counts& assertions ) { - std::ostringstream oss; - oss << sectionInfo.name << "@" << sectionInfo.lineInfo; - - ITracker& sectionTracker = SectionTracker::acquire( m_trackerContext, oss.str() ); + ITracker& sectionTracker = SectionTracker::acquire( m_trackerContext, TestCaseTracking::NameAndLocation( sectionInfo.name, sectionInfo.lineInfo ) ); if( !sectionTracker.isOpen() ) return false; m_activeSections.push_back( §ionTracker ); @@ -6068,7 +6454,7 @@ namespace Catch { virtual std::string getCurrentTestName() const { return m_activeTestCase ? m_activeTestCase->getTestCaseInfo().name - : ""; + : std::string(); } virtual const AssertionResult* getLastResult() const { @@ -6098,11 +6484,11 @@ namespace Catch { deltaTotals.testCases.failed = 1; m_reporter->testCaseEnded( TestCaseStats( testInfo, deltaTotals, - "", - "", + std::string(), + std::string(), false ) ); m_totals.testCases.failed++; - testGroupEnded( "", m_totals, 1, 1 ); + testGroupEnded( std::string(), m_totals, 1, 1 ); m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, false ) ); } @@ -6121,7 +6507,7 @@ namespace Catch { Counts prevAssertions = m_totals.assertions; double duration = 0; try { - m_lastAssertionInfo = AssertionInfo( "TEST_CASE", testCaseInfo.lineInfo, "", ResultDisposition::Normal ); + m_lastAssertionInfo = AssertionInfo( "TEST_CASE", testCaseInfo.lineInfo, std::string(), ResultDisposition::Normal ); seedRng( *m_config ); @@ -6454,10 +6840,6 @@ namespace Catch { #include <iostream> #include <algorithm> -#ifdef CATCH_CPP14_OR_GREATER -#include <random> -#endif - namespace Catch { struct RandomNumberGenerator { @@ -6465,7 +6847,7 @@ namespace Catch { result_type operator()( result_type n ) const { return std::rand() % n; } -#ifdef CATCH_CPP14_OR_GREATER +#ifdef CATCH_CONFIG_CPP11_SHUFFLE static constexpr result_type min() { return 0; } static constexpr result_type max() { return 1000000; } result_type operator()() const { return std::rand() % max(); } @@ -6473,7 +6855,7 @@ namespace Catch { template<typename V> static void shuffle( V& vector ) { RandomNumberGenerator rng; -#ifdef CATCH_CPP14_OR_GREATER +#ifdef CATCH_CONFIG_CPP11_SHUFFLE std::shuffle( vector.begin(), vector.end(), rng ); #else std::random_shuffle( vector.begin(), vector.end(), rng ); @@ -6516,7 +6898,7 @@ namespace Catch { ss << Colour( Colour::Red ) << "error: TEST_CASE( \"" << it->name << "\" ) already defined.\n" - << "\tFirst seen at " << prev.first->getTestCaseInfo().lineInfo << "\n" + << "\tFirst seen at " << prev.first->getTestCaseInfo().lineInfo << '\n' << "\tRedefined at " << it->getTestCaseInfo().lineInfo << std::endl; throw std::runtime_error(ss.str()); @@ -6548,7 +6930,7 @@ namespace Catch { virtual void registerTest( TestCase const& testCase ) { std::string name = testCase.getTestCaseInfo().name; - if( name == "" ) { + if( name.empty() ) { std::ostringstream oss; oss << "Anonymous test case " << ++m_unnamedCount; return registerTest( testCase.withName( oss.str() ) ); @@ -6597,7 +6979,7 @@ namespace Catch { inline std::string extractClassName( std::string const& classOrQualifiedMethodName ) { std::string className = classOrQualifiedMethodName; - if( startsWith( className, "&" ) ) + if( startsWith( className, '&' ) ) { std::size_t lastColons = className.rfind( "::" ); std::size_t penultimateColons = className.rfind( "::", lastColons-1 ); @@ -6887,7 +7269,7 @@ namespace Catch { m_ofs.open( filename.c_str() ); if( m_ofs.fail() ) { std::ostringstream oss; - oss << "Unable to open file: '" << filename << "'"; + oss << "Unable to open file: '" << filename << '\''; throw std::domain_error( oss.str() ); } } @@ -6940,6 +7322,11 @@ namespace Catch { Context( Context const& ); void operator=( Context const& ); + public: + virtual ~Context() { + deleteAllValues( m_generatorsByTestName ); + } + public: // IContext virtual IResultCapture* getResultCapture() { return m_resultCapture; @@ -7053,8 +7440,15 @@ namespace Catch { #if defined ( CATCH_CONFIG_COLOUR_WINDOWS ) ///////////////////////////////////////// -#ifndef NOMINMAX -#define NOMINMAX +// #included from: catch_windows_h_proxy.h + +#define TWOBLUECUBES_CATCH_WINDOWS_H_PROXY_H_INCLUDED + +#ifdef CATCH_DEFINES_NOMINMAX +# define NOMINMAX +#endif +#ifdef CATCH_DEFINES_WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN #endif #ifdef __AFXDLL @@ -7063,6 +7457,13 @@ namespace Catch { #include <windows.h> #endif +#ifdef CATCH_DEFINES_NOMINMAX +# undef NOMINMAX +#endif +#ifdef CATCH_DEFINES_WIN32_LEAN_AND_MEAN +# undef WIN32_LEAN_AND_MEAN +#endif + namespace Catch { namespace { @@ -7143,7 +7544,7 @@ namespace { case Colour::White: return setColour( "[0m" ); case Colour::Red: return setColour( "[0;31m" ); case Colour::Green: return setColour( "[0;32m" ); - case Colour::Blue: return setColour( "[0:34m" ); + case Colour::Blue: return setColour( "[0;34m" ); case Colour::Cyan: return setColour( "[0;36m" ); case Colour::Yellow: return setColour( "[0;33m" ); case Colour::Grey: return setColour( "[1;30m" ); @@ -7329,7 +7730,7 @@ namespace Catch { std::string AssertionResult::getExpression() const { if( isFalseTest( m_info.resultDisposition ) ) - return "!" + m_info.capturedExpression; + return '!' + m_info.capturedExpression; else return m_info.capturedExpression; } @@ -7345,7 +7746,7 @@ namespace Catch { } std::string AssertionResult::getExpandedExpression() const { - return m_resultData.reconstructedExpression; + return m_resultData.reconstructExpression(); } std::string AssertionResult::getMessage() const { @@ -7359,6 +7760,14 @@ namespace Catch { return m_info.macroName; } + void AssertionResult::discardDecomposedExpression() const { + m_resultData.decomposedExpression = CATCH_NULL; + } + + void AssertionResult::expandDecomposedExpression() const { + m_resultData.reconstructExpression(); + } + } // end namespace Catch // #included from: catch_test_case_info.hpp @@ -7367,7 +7776,7 @@ namespace Catch { namespace Catch { inline TestCaseInfo::SpecialProperties parseSpecialTag( std::string const& tag ) { - if( startsWith( tag, "." ) || + if( startsWith( tag, '.' ) || tag == "hide" || tag == "!hide" ) return TestCaseInfo::IsHidden; @@ -7377,6 +7786,8 @@ namespace Catch { return TestCaseInfo::ShouldFail; else if( tag == "!mayfail" ) return TestCaseInfo::MayFail; + else if( tag == "!nonportable" ) + return TestCaseInfo::NonPortable; else return TestCaseInfo::None; } @@ -7451,7 +7862,7 @@ namespace Catch { std::ostringstream oss; for( std::set<std::string>::const_iterator it = tags.begin(), itEnd = tags.end(); it != itEnd; ++it ) { - oss << "[" << *it << "]"; + oss << '[' << *it << ']'; std::string lcaseTag = toLower( *it ); testCaseInfo.properties = static_cast<TestCaseInfo::SpecialProperties>( testCaseInfo.properties | parseSpecialTag( lcaseTag ) ); testCaseInfo.lcaseTags.insert( lcaseTag ); @@ -7567,18 +7978,18 @@ namespace Catch { {} std::ostream& operator << ( std::ostream& os, Version const& version ) { - os << version.majorVersion << "." - << version.minorVersion << "." + os << version.majorVersion << '.' + << version.minorVersion << '.' << version.patchNumber; if( !version.branchName.empty() ) { - os << "-" << version.branchName - << "." << version.buildNumber; + os << '-' << version.branchName + << '.' << version.buildNumber; } return os; } - Version libraryVersion( 1, 5, 8, "", 0 ); + Version libraryVersion( 1, 7, 0, "", 0 ); } @@ -7749,7 +8160,6 @@ namespace Catch #endif #ifdef CATCH_PLATFORM_WINDOWS -#include <windows.h> #else #include <sys/time.h> #endif @@ -7798,17 +8208,28 @@ namespace Catch { // #included from: catch_common.hpp #define TWOBLUECUBES_CATCH_COMMON_HPP_INCLUDED +#include <cstring> + namespace Catch { bool startsWith( std::string const& s, std::string const& prefix ) { - return s.size() >= prefix.size() && s.substr( 0, prefix.size() ) == prefix; + return s.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), s.begin()); + } + bool startsWith( std::string const& s, char prefix ) { + return !s.empty() && s[0] == prefix; } bool endsWith( std::string const& s, std::string const& suffix ) { - return s.size() >= suffix.size() && s.substr( s.size()-suffix.size(), suffix.size() ) == suffix; + return s.size() >= suffix.size() && std::equal(suffix.rbegin(), suffix.rend(), s.rbegin()); + } + bool endsWith( std::string const& s, char suffix ) { + return !s.empty() && s[s.size()-1] == suffix; } bool contains( std::string const& s, std::string const& infix ) { return s.find( infix ) != std::string::npos; } + bool contains( std::string const& s, char infix ) { + return s.find(infix) != std::string::npos; + } char toLowerCh(char c) { return static_cast<char>( ::tolower( c ) ); } @@ -7825,7 +8246,7 @@ namespace Catch { std::string::size_type start = str.find_first_not_of( whitespaceChars ); std::string::size_type end = str.find_last_not_of( whitespaceChars ); - return start != std::string::npos ? str.substr( start, 1+end-start ) : ""; + return start != std::string::npos ? str.substr( start, 1+end-start ) : std::string(); } bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ) { @@ -7848,29 +8269,25 @@ namespace Catch { {} std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser ) { - os << pluraliser.m_count << " " << pluraliser.m_label; + os << pluraliser.m_count << ' ' << pluraliser.m_label; if( pluraliser.m_count != 1 ) - os << "s"; + os << 's'; return os; } - SourceLineInfo::SourceLineInfo() : line( 0 ){} + SourceLineInfo::SourceLineInfo() : file(""), line( 0 ){} SourceLineInfo::SourceLineInfo( char const* _file, std::size_t _line ) : file( _file ), line( _line ) {} - SourceLineInfo::SourceLineInfo( SourceLineInfo const& other ) - : file( other.file ), - line( other.line ) - {} bool SourceLineInfo::empty() const { - return file.empty(); + return file[0] == '\0'; } bool SourceLineInfo::operator == ( SourceLineInfo const& other ) const { - return line == other.line && file == other.file; + return line == other.line && (file == other.file || std::strcmp(file, other.file) == 0); } bool SourceLineInfo::operator < ( SourceLineInfo const& other ) const { - return line < other.line || ( line == other.line && file < other.file ); + return line < other.line || ( line == other.line && (std::strcmp(file, other.file) < 0)); } void seedRng( IConfig const& config ) { @@ -7883,16 +8300,16 @@ namespace Catch { std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ) { #ifndef __GNUG__ - os << info.file << "(" << info.line << ")"; + os << info.file << '(' << info.line << ')'; #else - os << info.file << ":" << info.line; + os << info.file << ':' << info.line; #endif return os; } void throwLogicError( std::string const& message, SourceLineInfo const& locationInfo ) { std::ostringstream oss; - oss << locationInfo << ": Internal Catch error: '" << message << "'"; + oss << locationInfo << ": Internal Catch error: '" << message << '\''; if( alwaysTrue() ) throw std::logic_error( oss.str() ); } @@ -7989,6 +8406,33 @@ namespace Catch { } } // namespace Catch +#elif defined(CATCH_PLATFORM_LINUX) + #include <fstream> + #include <string> + + namespace Catch{ + // The standard POSIX way of detecting a debugger is to attempt to + // ptrace() the process, but this needs to be done from a child and not + // this process itself to still allow attaching to this process later + // if wanted, so is rather heavy. Under Linux we have the PID of the + // "debugger" (which doesn't need to be gdb, of course, it could also + // be strace, for example) in /proc/$PID/status, so just get it from + // there instead. + bool isDebuggerActive(){ + std::ifstream in("/proc/self/status"); + for( std::string line; std::getline(in, line); ) { + static const int PREFIX_LEN = 11; + if( line.compare(0, PREFIX_LEN, "TracerPid:\t") == 0 ) { + // We're traced if the PID is not 0 and no other PID starts + // with 0 digit, so it's enough to check for just a single + // character. + return line.length() > PREFIX_LEN && line[PREFIX_LEN] != '0'; + } + } + + return false; + } + } // namespace Catch #elif defined(_MSC_VER) extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); namespace Catch { @@ -8086,7 +8530,7 @@ std::string toString( std::string const& value ) { } } } - return "\"" + s + "\""; + return '"' + s + '"'; } std::string toString( std::wstring const& value ) { @@ -8107,19 +8551,19 @@ std::string toString( char* const value ) { std::string toString( const wchar_t* const value ) { - return value ? Catch::toString( std::wstring(value) ) : std::string( "{null string}" ); + return value ? Catch::toString( std::wstring(value) ) : std::string( "{null string}" ); } std::string toString( wchar_t* const value ) { - return Catch::toString( static_cast<const wchar_t*>( value ) ); + return Catch::toString( static_cast<const wchar_t*>( value ) ); } std::string toString( int value ) { std::ostringstream oss; oss << value; if( value > Detail::hexThreshold ) - oss << " (0x" << std::hex << value << ")"; + oss << " (0x" << std::hex << value << ')'; return oss.str(); } @@ -8127,7 +8571,7 @@ std::string toString( unsigned long value ) { std::ostringstream oss; oss << value; if( value > Detail::hexThreshold ) - oss << " (0x" << std::hex << value << ")"; + oss << " (0x" << std::hex << value << ')'; return oss.str(); } @@ -8155,7 +8599,7 @@ std::string toString( const double value ) { return fpToString( value, 10 ); } std::string toString( const float value ) { - return fpToString( value, 5 ) + "f"; + return fpToString( value, 5 ) + 'f'; } std::string toString( bool value ) { @@ -8163,9 +8607,19 @@ std::string toString( bool value ) { } std::string toString( char value ) { - return value < ' ' - ? toString( static_cast<unsigned int>( value ) ) - : Detail::makeString( value ); + if ( value == '\r' ) + return "'\\r'"; + if ( value == '\f' ) + return "'\\f'"; + if ( value == '\n' ) + return "'\\n'"; + if ( value == '\t' ) + return "'\\t'"; + if ( '\0' <= value && value < ' ' ) + return toString( static_cast<unsigned int>( value ) ); + char chstr[] = "' '"; + chstr[1] = value; + return chstr; } std::string toString( signed char value ) { @@ -8181,14 +8635,14 @@ std::string toString( long long value ) { std::ostringstream oss; oss << value; if( value > Detail::hexThreshold ) - oss << " (0x" << std::hex << value << ")"; + oss << " (0x" << std::hex << value << ')'; return oss.str(); } std::string toString( unsigned long long value ) { std::ostringstream oss; oss << value; if( value > Detail::hexThreshold ) - oss << " (0x" << std::hex << value << ")"; + oss << " (0x" << std::hex << value << ')'; return oss.str(); } #endif @@ -8245,22 +8699,10 @@ namespace Catch { m_data.resultType = result ? ResultWas::Ok : ResultWas::ExpressionFailed; return *this; } - ResultBuilder& ResultBuilder::setLhs( std::string const& lhs ) { - m_exprComponents.lhs = lhs; - return *this; - } - ResultBuilder& ResultBuilder::setRhs( std::string const& rhs ) { - m_exprComponents.rhs = rhs; - return *this; - } - ResultBuilder& ResultBuilder::setOp( std::string const& op ) { - m_exprComponents.op = op; - return *this; - } - void ResultBuilder::endExpression() { - m_exprComponents.testFalse = isFalseTest( m_assertionInfo.resultDisposition ); - captureExpression(); + void ResultBuilder::endExpression( DecomposedExpression const& expr ) { + AssertionResult result = build( expr ); + handleResult( result ); } void ResultBuilder::useActiveException( ResultDisposition::Flags resultDisposition ) { @@ -8273,6 +8715,7 @@ namespace Catch { setResultType( resultType ); captureExpression(); } + void ResultBuilder::captureExpectedException( std::string const& expectedMessage ) { if( expectedMessage.empty() ) captureExpectedException( Matchers::Impl::Generic::AllOf<std::string>() ); @@ -8282,7 +8725,7 @@ namespace Catch { void ResultBuilder::captureExpectedException( Matchers::Impl::Matcher<std::string> const& matcher ) { - assert( m_exprComponents.testFalse == false ); + assert( !isFalseTest( m_assertionInfo.resultDisposition ) ); AssertionResultData data = m_data; data.resultType = ResultWas::Ok; data.reconstructedExpression = m_assertionInfo.capturedExpression; @@ -8300,6 +8743,7 @@ namespace Catch { AssertionResult result = build(); handleResult( result ); } + void ResultBuilder::handleResult( AssertionResult const& result ) { getResultCapture().assertionEnded( result ); @@ -8311,6 +8755,7 @@ namespace Catch { m_shouldThrow = true; } } + void ResultBuilder::react() { if( m_shouldThrow ) throw Catch::TestFailureException(); @@ -8321,43 +8766,32 @@ namespace Catch { AssertionResult ResultBuilder::build() const { - assert( m_data.resultType != ResultWas::Unknown ); + return build( *this ); + } + // CAVEAT: The returned AssertionResult stores a pointer to the argument expr, + // a temporary DecomposedExpression, which in turn holds references to + // operands, possibly temporary as well. + // It should immediately be passed to handleResult; if the expression + // needs to be reported, its string expansion must be composed before + // the temporaries are destroyed. + AssertionResult ResultBuilder::build( DecomposedExpression const& expr ) const + { + assert( m_data.resultType != ResultWas::Unknown ); AssertionResultData data = m_data; - // Flip bool results if testFalse is set - if( m_exprComponents.testFalse ) { - if( data.resultType == ResultWas::Ok ) - data.resultType = ResultWas::ExpressionFailed; - else if( data.resultType == ResultWas::ExpressionFailed ) - data.resultType = ResultWas::Ok; + // Flip bool results if FalseTest flag is set + if( isFalseTest( m_assertionInfo.resultDisposition ) ) { + data.negate( expr.isBinaryExpression() ); } data.message = m_stream.oss.str(); - data.reconstructedExpression = reconstructExpression(); - if( m_exprComponents.testFalse ) { - if( m_exprComponents.op == "" ) - data.reconstructedExpression = "!" + data.reconstructedExpression; - else - data.reconstructedExpression = "!(" + data.reconstructedExpression + ")"; - } + data.decomposedExpression = &expr; // for lazy reconstruction return AssertionResult( m_assertionInfo, data ); } - std::string ResultBuilder::reconstructExpression() const { - if( m_exprComponents.op == "" ) - return m_exprComponents.lhs.empty() ? m_assertionInfo.capturedExpression : m_exprComponents.op + m_exprComponents.lhs; - else if( m_exprComponents.op == "matches" ) - return m_exprComponents.lhs + " " + m_exprComponents.rhs; - else if( m_exprComponents.op != "!" ) { - if( m_exprComponents.lhs.size() + m_exprComponents.rhs.size() < 40 && - m_exprComponents.lhs.find("\n") == std::string::npos && - m_exprComponents.rhs.find("\n") == std::string::npos ) - return m_exprComponents.lhs + " " + m_exprComponents.op + " " + m_exprComponents.rhs; - else - return m_exprComponents.lhs + "\n" + m_exprComponents.op + "\n" + m_exprComponents.rhs; - } - else - return "{can't expand - use " + m_assertionInfo.macroName + "_FALSE( " + m_assertionInfo.capturedExpression.substr(1) + " ) instead of " + m_assertionInfo.macroName + "( " + m_assertionInfo.capturedExpression + " ) for better diagnostics}"; + + void ResultBuilder::reconstructExpression( std::string& dest ) const { + dest = m_assertionInfo.capturedExpression; } } // end namespace Catch @@ -8418,7 +8852,7 @@ namespace Catch { void TagAliasRegistry::add( char const* alias, char const* tag, SourceLineInfo const& lineInfo ) { - if( !startsWith( alias, "[@" ) || !endsWith( alias, "]" ) ) { + if( !startsWith( alias, "[@" ) || !endsWith( alias, ']' ) ) { std::ostringstream oss; oss << "error: tag alias, \"" << alias << "\" is not of the form [@alias name].\n" << lineInfo; throw std::domain_error( oss.str().c_str() ); @@ -8426,7 +8860,7 @@ namespace Catch { if( !m_registry.insert( std::make_pair( alias, TagAlias( tag, lineInfo ) ) ).second ) { std::ostringstream oss; oss << "error: tag alias, \"" << alias << "\" already registered.\n" - << "\tFirst seen at " << find(alias)->lineInfo << "\n" + << "\tFirst seen at " << find(alias)->lineInfo << '\n' << "\tRedefined at " << lineInfo; throw std::domain_error( oss.str().c_str() ); } @@ -8694,12 +9128,12 @@ namespace Catch { struct BySectionInfo { BySectionInfo( SectionInfo const& other ) : m_other( other ) {} - BySectionInfo( BySectionInfo const& other ) : m_other( other.m_other ) {} + BySectionInfo( BySectionInfo const& other ) : m_other( other.m_other ) {} bool operator() ( Ptr<SectionNode> const& node ) const { return node->stats.sectionInfo.lineInfo == m_other.lineInfo; } private: - void operator=( BySectionInfo const& ); + void operator=( BySectionInfo const& ); SectionInfo const& m_other; }; @@ -8755,6 +9189,12 @@ namespace Catch { assert( !m_sectionStack.empty() ); SectionNode& sectionNode = *m_sectionStack.back(); sectionNode.assertions.push_back( assertionStats ); + // AssertionResult holds a pointer to a temporary DecomposedExpression, + // which getExpandedExpression() calls to build the expression string. + // Our section stack copy of the assertionResult will likely outlive the + // temporary, so it must be expanded or discarded now to avoid calling + // a destroyed object later. + prepareExpandedExpression( sectionNode.assertions.back().assertionResult ); return true; } virtual void sectionEnded( SectionStats const& sectionStats ) CATCH_OVERRIDE { @@ -8789,6 +9229,13 @@ namespace Catch { virtual void skipTest( TestCaseInfo const& ) CATCH_OVERRIDE {} + virtual void prepareExpandedExpression( AssertionResult& result ) const { + if( result.isOk() ) + result.discardDecomposedExpression(); + else + result.expandDecomposedExpression(); + } + Ptr<IConfig const> m_config; std::ostream& stream; std::vector<AssertionStats> m_assertions; @@ -8894,7 +9341,7 @@ namespace Catch { return new T( config ); } virtual std::string getDescription() const { - return ""; + return std::string(); } }; @@ -8963,7 +9410,7 @@ namespace Catch { default: // Escape control chars - based on contribution by @espenalb in PR #465 and // by @mrpi PR #588 - if ( ( c < '\x09' ) || ( c > '\x0D' && c < '\x20') || c=='\x7F' ) + if ( ( c >= 0 && c < '\x09' ) || ( c > '\x0D' && c < '\x20') || c=='\x7F' ) os << "&#x" << std::uppercase << std::hex << std::setfill('0') << std::setw(2) << static_cast<int>( c ) << ';'; else os << c; @@ -9042,7 +9489,7 @@ namespace Catch { XmlWriter& startElement( std::string const& name ) { ensureTagClosed(); newlineIfNecessary(); - stream() << m_indent << "<" << name; + stream() << m_indent << '<' << name; m_tags.push_back( name ); m_indent += " "; m_tagIsOpen = true; @@ -9071,12 +9518,12 @@ namespace Catch { XmlWriter& writeAttribute( std::string const& name, std::string const& attribute ) { if( !name.empty() && !attribute.empty() ) - stream() << " " << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << "\""; + stream() << ' ' << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << '"'; return *this; } XmlWriter& writeAttribute( std::string const& name, bool attribute ) { - stream() << " " << name << "=\"" << ( attribute ? "true" : "false" ) << "\""; + stream() << ' ' << name << "=\"" << ( attribute ? "true" : "false" ) << '"'; return *this; } @@ -9108,7 +9555,7 @@ namespace Catch { XmlWriter& writeBlankLine() { ensureTagClosed(); - stream() << "\n"; + stream() << '\n'; return *this; } @@ -9133,7 +9580,7 @@ namespace Catch { void newlineIfNecessary() { if( m_needsNewline ) { - stream() << "\n"; + stream() << '\n'; m_needsNewline = false; } } @@ -9166,6 +9613,7 @@ namespace Catch { public: XmlReporter( ReporterConfig const& _config ) : StreamingReporterBase( _config ), + m_xml(_config.stream()), m_sectionDepth( 0 ) { m_reporterPrefs.shouldRedirectStdOut = true; @@ -9185,7 +9633,6 @@ namespace Catch { virtual void testRunStarting( TestRunInfo const& testInfo ) CATCH_OVERRIDE { StreamingReporterBase::testRunStarting( testInfo ); - m_xml.setStream( stream ); m_xml.startElement( "Catch" ); if( !m_config->name().empty() ) m_xml.writeAttribute( "name", m_config->name() ); @@ -9242,7 +9689,7 @@ namespace Catch { if( assertionResult.hasExpression() ) { m_xml.startElement( "Expression" ) .writeAttribute( "success", assertionResult.succeeded() ) - .writeAttribute( "type", assertionResult.getTestMacroName() ) + .writeAttribute( "type", assertionResult.getTestMacroName() ) .writeAttribute( "filename", assertionResult.getSourceInfo().file ) .writeAttribute( "line", assertionResult.getSourceInfo().line ); @@ -9349,6 +9796,35 @@ namespace Catch { namespace Catch { + namespace { + std::string getCurrentTimestamp() { + // Beware, this is not reentrant because of backward compatibility issues + // Also, UTC only, again because of backward compatibility (%z is C++11) + time_t rawtime; + std::time(&rawtime); + const size_t timeStampSize = sizeof("2017-01-16T17:06:45Z"); + +#ifdef CATCH_PLATFORM_WINDOWS + std::tm timeInfo = {}; + gmtime_s(&timeInfo, &rawtime); +#else + std::tm* timeInfo; + timeInfo = std::gmtime(&rawtime); +#endif + + char timeStamp[timeStampSize]; + const char * const fmt = "%Y-%m-%dT%H:%M:%SZ"; + +#ifdef CATCH_PLATFORM_WINDOWS + std::strftime(timeStamp, timeStampSize, fmt, &timeInfo); +#else + std::strftime(timeStamp, timeStampSize, fmt, timeInfo); +#endif + return std::string(timeStamp); + } + + } + class JunitReporter : public CumulativeReporterBase { public: JunitReporter( ReporterConfig const& _config ) @@ -9413,7 +9889,7 @@ namespace Catch { xml.writeAttribute( "time", "" ); else xml.writeAttribute( "time", suiteTime ); - xml.writeAttribute( "timestamp", "tbd" ); // !TBD + xml.writeAttribute( "timestamp", getCurrentTimestamp() ); // Write test cases for( TestGroupNode::ChildNodes::const_iterator @@ -9448,7 +9924,7 @@ namespace Catch { SectionNode const& sectionNode ) { std::string name = trim( sectionNode.stats.sectionInfo.name ); if( !rootName.empty() ) - name = rootName + "/" + name; + name = rootName + '/' + name; if( !sectionNode.assertions.empty() || !sectionNode.stdOut.empty() || @@ -9526,14 +10002,14 @@ namespace Catch { std::ostringstream oss; if( !result.getMessage().empty() ) - oss << result.getMessage() << "\n"; + oss << result.getMessage() << '\n'; for( std::vector<MessageInfo>::const_iterator it = stats.infoMessages.begin(), itEnd = stats.infoMessages.end(); it != itEnd; ++it ) if( it->type == ResultWas::Info ) - oss << it->message << "\n"; + oss << it->message << '\n'; oss << "at " << result.getSourceInfo(); xml.writeText( oss.str(), false ); @@ -9568,7 +10044,7 @@ namespace Catch { } virtual void noMatchingTestCases( std::string const& spec ) CATCH_OVERRIDE { - stream << "No test cases matched '" << spec << "'" << std::endl; + stream << "No test cases matched '" << spec << '\'' << std::endl; } virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE { @@ -9610,12 +10086,12 @@ namespace Catch { } if( m_headerPrinted ) { if( m_config->showDurations() == ShowDurations::Always ) - stream << "Completed in " << _sectionStats.durationInSeconds << "s" << std::endl; + stream << "Completed in " << _sectionStats.durationInSeconds << 's' << std::endl; m_headerPrinted = false; } else { if( m_config->showDurations() == ShowDurations::Always ) - stream << _sectionStats.sectionInfo.name << " completed in " << _sectionStats.durationInSeconds << "s" << std::endl; + stream << _sectionStats.sectionInfo.name << " completed in " << _sectionStats.durationInSeconds << 's' << std::endl; } StreamingReporterBase::sectionEnded( _sectionStats ); } @@ -9629,7 +10105,7 @@ namespace Catch { printSummaryDivider(); stream << "Summary for group '" << _testGroupStats.groupInfo.name << "':\n"; printTotals( _testGroupStats.totals ); - stream << "\n" << std::endl; + stream << '\n' << std::endl; } StreamingReporterBase::testGroupEnded( _testGroupStats ); } @@ -9721,13 +10197,13 @@ namespace Catch { printSourceInfo(); if( stats.totals.assertions.total() > 0 ) { if( result.isOk() ) - stream << "\n"; + stream << '\n'; printResultType(); printOriginalExpression(); printReconstructedExpression(); } else { - stream << "\n"; + stream << '\n'; } printMessage(); } @@ -9744,25 +10220,25 @@ namespace Catch { Colour colourGuard( Colour::OriginalExpression ); stream << " "; stream << result.getExpressionInMacro(); - stream << "\n"; + stream << '\n'; } } void printReconstructedExpression() const { if( result.hasExpandedExpression() ) { stream << "with expansion:\n"; Colour colourGuard( Colour::ReconstructedExpression ); - stream << Text( result.getExpandedExpression(), TextAttributes().setIndent(2) ) << "\n"; + stream << Text( result.getExpandedExpression(), TextAttributes().setIndent(2) ) << '\n'; } } void printMessage() const { if( !messageLabel.empty() ) - stream << messageLabel << ":" << "\n"; + stream << messageLabel << ':' << '\n'; for( std::vector<MessageInfo>::const_iterator it = messages.begin(), itEnd = messages.end(); it != itEnd; ++it ) { // If this assertion is a warning ignore any INFO messages if( printInfoMessages || it->type != ResultWas::Info ) - stream << Text( it->message, TextAttributes().setIndent(2) ) << "\n"; + stream << Text( it->message, TextAttributes().setIndent(2) ) << '\n'; } } void printSourceInfo() const { @@ -9794,7 +10270,7 @@ namespace Catch { } } void lazyPrintRunInfo() { - stream << "\n" << getLineOfChars<'~'>() << "\n"; + stream << '\n' << getLineOfChars<'~'>() << '\n'; Colour colour( Colour::SecondaryText ); stream << currentTestRunInfo->name << " is a Catch v" << libraryVersion << " host application.\n" @@ -9828,19 +10304,19 @@ namespace Catch { SourceLineInfo lineInfo = m_sectionStack.front().lineInfo; if( !lineInfo.empty() ){ - stream << getLineOfChars<'-'>() << "\n"; + stream << getLineOfChars<'-'>() << '\n'; Colour colourGuard( Colour::FileName ); - stream << lineInfo << "\n"; + stream << lineInfo << '\n'; } - stream << getLineOfChars<'.'>() << "\n" << std::endl; + stream << getLineOfChars<'.'>() << '\n' << std::endl; } void printClosedHeader( std::string const& _name ) { printOpenHeader( _name ); - stream << getLineOfChars<'.'>() << "\n"; + stream << getLineOfChars<'.'>() << '\n'; } void printOpenHeader( std::string const& _name ) { - stream << getLineOfChars<'-'>() << "\n"; + stream << getLineOfChars<'-'>() << '\n'; { Colour colourGuard( Colour::Headers ); printHeaderString( _name ); @@ -9857,7 +10333,7 @@ namespace Catch { i = 0; stream << Text( _string, TextAttributes() .setIndent( indent+i) - .setInitialIndent( indent ) ) << "\n"; + .setInitialIndent( indent ) ) << '\n'; } struct SummaryColumn { @@ -9872,9 +10348,9 @@ namespace Catch { std::string row = oss.str(); for( std::vector<std::string>::iterator it = rows.begin(); it != rows.end(); ++it ) { while( it->size() < row.size() ) - *it = " " + *it; + *it = ' ' + *it; while( it->size() > row.size() ) - row = " " + row; + row = ' ' + row; } rows.push_back( row ); return *this; @@ -9894,8 +10370,8 @@ namespace Catch { stream << Colour( Colour::ResultSuccess ) << "All tests passed"; stream << " (" << pluralise( totals.assertions.passed, "assertion" ) << " in " - << pluralise( totals.testCases.passed, "test case" ) << ")" - << "\n"; + << pluralise( totals.testCases.passed, "test case" ) << ')' + << '\n'; } else { @@ -9930,10 +10406,10 @@ namespace Catch { else if( value != "0" ) { stream << Colour( Colour::LightGrey ) << " | "; stream << Colour( it->colour ) - << value << " " << it->label; + << value << ' ' << it->label; } } - stream << "\n"; + stream << '\n'; } static std::size_t makeRatio( std::size_t number, std::size_t total ) { @@ -9969,10 +10445,10 @@ namespace Catch { else { stream << Colour( Colour::Warning ) << std::string( CATCH_CONFIG_CONSOLE_WIDTH-1, '=' ); } - stream << "\n"; + stream << '\n'; } void printSummaryDivider() { - stream << getLineOfChars<'-'>() << "\n"; + stream << getLineOfChars<'-'>() << '\n'; } private: @@ -10007,7 +10483,7 @@ namespace Catch { } virtual void noMatchingTestCases( std::string const& spec ) { - stream << "No test cases matched '" << spec << "'" << std::endl; + stream << "No test cases matched '" << spec << '\'' << std::endl; } virtual void assertionStarting( AssertionInfo const& ) { @@ -10034,7 +10510,7 @@ namespace Catch { virtual void testRunEnded( TestRunStats const& _testRunStats ) { printTotals( _testRunStats.totals ); - stream << "\n" << std::endl; + stream << '\n' << std::endl; StreamingReporterBase::testRunEnded( _testRunStats ); } @@ -10134,26 +10610,26 @@ namespace Catch { void printSourceInfo() const { Colour colourGuard( Colour::FileName ); - stream << result.getSourceInfo() << ":"; + stream << result.getSourceInfo() << ':'; } void printResultType( Colour::Code colour, std::string passOrFail ) const { if( !passOrFail.empty() ) { { Colour colourGuard( colour ); - stream << " " << passOrFail; + stream << ' ' << passOrFail; } - stream << ":"; + stream << ':'; } } void printIssue( std::string issue ) const { - stream << " " << issue; + stream << ' ' << issue; } void printExpressionWas() { if( result.hasExpression() ) { - stream << ";"; + stream << ';'; { Colour colour( dimColour() ); stream << " expression was:"; @@ -10164,7 +10640,7 @@ namespace Catch { void printOriginalExpression() const { if( result.hasExpression() ) { - stream << " " << result.getExpression(); + stream << ' ' << result.getExpression(); } } @@ -10180,7 +10656,7 @@ namespace Catch { void printMessage() { if ( itMessage != messages.end() ) { - stream << " '" << itMessage->message << "'"; + stream << " '" << itMessage->message << '\''; ++itMessage; } } @@ -10195,13 +10671,13 @@ namespace Catch { { Colour colourGuard( colour ); - stream << " with " << pluralise( N, "message" ) << ":"; + stream << " with " << pluralise( N, "message" ) << ':'; } for(; itMessage != itEnd; ) { // If this assertion is a warning ignore any INFO messages if( printInfoMessages || itMessage->type != ResultWas::Info ) { - stream << " '" << itMessage->message << "'"; + stream << " '" << itMessage->message << '\''; if ( ++itMessage != itEnd ) { Colour colourGuard( dimColour() ); stream << " and"; @@ -10227,7 +10703,7 @@ namespace Catch { // - green: Passed [both/all] N tests cases with M assertions. std::string bothOrAll( std::size_t count ) const { - return count == 1 ? "" : count == 2 ? "both " : "all " ; + return count == 1 ? std::string() : count == 2 ? "both " : "all " ; } void printTotals( const Totals& totals ) const { @@ -10238,12 +10714,12 @@ namespace Catch { Colour colour( Colour::ResultError ); const std::string qualify_assertions_failed = totals.assertions.failed == totals.assertions.total() ? - bothOrAll( totals.assertions.failed ) : ""; + bothOrAll( totals.assertions.failed ) : std::string(); stream << "Failed " << bothOrAll( totals.testCases.failed ) << pluralise( totals.testCases.failed, "test case" ) << ", " "failed " << qualify_assertions_failed << - pluralise( totals.assertions.failed, "assertion" ) << "."; + pluralise( totals.assertions.failed, "assertion" ) << '.'; } else if( totals.assertions.total() == 0 ) { stream << @@ -10255,14 +10731,14 @@ namespace Catch { Colour colour( Colour::ResultError ); stream << "Failed " << pluralise( totals.testCases.failed, "test case" ) << ", " - "failed " << pluralise( totals.assertions.failed, "assertion" ) << "."; + "failed " << pluralise( totals.assertions.failed, "assertion" ) << '.'; } else { Colour colour( Colour::ResultSuccess ); stream << "Passed " << bothOrAll( totals.testCases.passed ) << pluralise( totals.testCases.passed, "test case" ) << - " with " << pluralise( totals.assertions.passed, "assertion" ) << "."; + " with " << pluralise( totals.assertions.passed, "assertion" ) << '.'; } } }; @@ -10348,7 +10824,8 @@ namespace Catch { // Standard C/C++ main entry point int main (int argc, char * argv[]) { - return Catch::Session().run( argc, argv ); + int result = Catch::Session().run( argc, argv ); + return ( result < 0xff ? result : 0xff ); } #else // __OBJC__ @@ -10366,7 +10843,7 @@ int main (int argc, char * const argv[]) { [pool drain]; #endif - return result; + return ( result < 0xff ? result : 0xff ); } #endif // __OBJC__ @@ -10396,12 +10873,12 @@ int main (int argc, char * const argv[]) { #define CATCH_CHECKED_ELSE( expr ) INTERNAL_CATCH_ELSE( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECKED_ELSE" ) #define CATCH_CHECK_NOFAIL( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, "CATCH_CHECK_NOFAIL" ) -#define CATCH_CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THROWS" ) +#define CATCH_CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, "", "CATCH_CHECK_THROWS" ) #define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THROWS_AS" ) #define CATCH_CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, matcher, "CATCH_CHECK_THROWS_WITH" ) #define CATCH_CHECK_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_NOTHROW" ) -#define CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THAT" ) +#define CATCH_CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THAT" ) #define CATCH_REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::Normal, "CATCH_REQUIRE_THAT" ) #define CATCH_INFO( msg ) INTERNAL_CATCH_INFO( msg, "CATCH_INFO" ) |