aboutsummaryrefslogtreecommitdiff
path: root/projects/SelfTest
diff options
context:
space:
mode:
Diffstat (limited to 'projects/SelfTest')
-rw-r--r--projects/SelfTest/ApproxTests.cpp112
-rw-r--r--projects/SelfTest/BDDTests.cpp103
-rw-r--r--projects/SelfTest/Baselines/console.std.approved.txt835
-rw-r--r--projects/SelfTest/Baselines/console.sw.approved.txt9098
-rw-r--r--projects/SelfTest/Baselines/console.swa4.approved.txt491
-rw-r--r--projects/SelfTest/Baselines/junit.sw.approved.txt687
-rw-r--r--projects/SelfTest/Baselines/xml.sw.approved.txt9569
-rw-r--r--projects/SelfTest/ClassTests.cpp57
-rw-r--r--projects/SelfTest/CmdLineTests.cpp264
-rw-r--r--projects/SelfTest/ConditionTests.cpp335
-rw-r--r--projects/SelfTest/EnumToString.cpp76
-rw-r--r--projects/SelfTest/ExceptionTests.cpp203
-rw-r--r--projects/SelfTest/GeneratorTests.cpp42
-rw-r--r--projects/SelfTest/MessageTests.cpp133
-rw-r--r--projects/SelfTest/MiscTests.cpp480
-rw-r--r--projects/SelfTest/PartTrackerTests.cpp328
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_common.cpp3
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_console_colour.cpp3
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_debugger.cpp2
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_interfaces_capture.cpp3
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_interfaces_config.cpp2
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_interfaces_exception.cpp2
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_interfaces_generators.cpp1
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_interfaces_registry_hub.cpp3
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_interfaces_reporter.cpp2
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_interfaces_runner.cpp1
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_interfaces_testcase.cpp2
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_message.cpp3
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_option.cpp3
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_ptr.cpp3
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_stream.cpp3
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_streambuf.cpp3
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_test_spec.cpp3
-rw-r--r--projects/SelfTest/SurrogateCpps/catch_xmlwriter.cpp4
-rw-r--r--projects/SelfTest/TagAliasTests.cpp41
-rw-r--r--projects/SelfTest/TestMain.cpp483
-rw-r--r--projects/SelfTest/ToStringPair.cpp47
-rw-r--r--projects/SelfTest/ToStringTuple.cpp59
-rw-r--r--projects/SelfTest/ToStringVector.cpp77
-rw-r--r--projects/SelfTest/ToStringWhich.cpp68
-rw-r--r--projects/SelfTest/TrickyTests.cpp401
-rw-r--r--projects/SelfTest/VariadicMacrosTests.cpp31
-rw-r--r--projects/SelfTest/makefile30
43 files changed, 24096 insertions, 0 deletions
diff --git a/projects/SelfTest/ApproxTests.cpp b/projects/SelfTest/ApproxTests.cpp
new file mode 100644
index 0000000..5365659
--- /dev/null
+++ b/projects/SelfTest/ApproxTests.cpp
@@ -0,0 +1,112 @@
+/*
+ * Created by Phil on 28/04/2011.
+ * Copyright 2011 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"
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "Some simple comparisons between doubles",
+ "[Approx]"
+)
+{
+ double d = 1.23;
+
+ REQUIRE( d == Approx( 1.23 ) );
+ REQUIRE( d != Approx( 1.22 ) );
+ REQUIRE( d != Approx( 1.24 ) );
+
+ REQUIRE( Approx( d ) == 1.23 );
+ REQUIRE( Approx( d ) != 1.22 );
+ REQUIRE( Approx( d ) != 1.24 );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "Approximate comparisons with different epsilons",
+ "[Approx]"
+ )
+{
+ double d = 1.23;
+
+ REQUIRE( d != Approx( 1.231 ) );
+ REQUIRE( d == Approx( 1.231 ).epsilon( 0.1 ) );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "Approximate comparisons with floats",
+ "[Approx]"
+)
+{
+ REQUIRE( 1.23f == Approx( 1.23f ) );
+ REQUIRE( 0.0f == Approx( 0.0f ) );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "Approximate comparisons with ints",
+ "[Approx]"
+)
+{
+ REQUIRE( 1 == Approx( 1 ) );
+ REQUIRE( 0 == Approx( 0 ) );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "Approximate comparisons with mixed numeric types",
+ "[Approx]"
+)
+{
+ const double dZero = 0;
+ const double dSmall = 0.00001;
+ const double dMedium = 1.234;
+
+ REQUIRE( 1.0f == Approx( 1 ) );
+ REQUIRE( 0 == Approx( dZero) );
+ REQUIRE( 0 == Approx( dSmall ).epsilon( 0.001 ) );
+ REQUIRE( 1.234f == Approx( dMedium ) );
+ REQUIRE( dMedium == Approx( 1.234f ) );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "Use a custom approx",
+ "[Approx][custom]"
+)
+{
+ double d = 1.23;
+
+ Approx approx = Approx::custom().epsilon( 0.005 );
+
+ REQUIRE( d == approx( 1.23 ) );
+ REQUIRE( d == approx( 1.22 ) );
+ REQUIRE( d == approx( 1.24 ) );
+ REQUIRE( d != approx( 1.25 ) );
+
+ REQUIRE( approx( d ) == 1.23 );
+ REQUIRE( approx( d ) == 1.22 );
+ REQUIRE( approx( d ) == 1.24 );
+ REQUIRE( approx( d ) != 1.25 );
+}
+
+inline double divide( double a, double b ) {
+ return a/b;
+}
+
+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 ) );
+}
diff --git a/projects/SelfTest/BDDTests.cpp b/projects/SelfTest/BDDTests.cpp
new file mode 100644
index 0000000..2c8bc24
--- /dev/null
+++ b/projects/SelfTest/BDDTests.cpp
@@ -0,0 +1,103 @@
+/*
+ * Created by Phil on 29/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"
+
+inline bool itDoesThis(){ return true; }
+inline bool itDoesThat(){ return true; }
+
+SCENARIO( "Do that thing with the thing", "[Tags]" ) {
+ GIVEN( "This stuff exists" ) {
+ // make stuff exist
+ WHEN( "I do this" ) {
+ // do this
+ THEN( "it should do this")
+ {
+ REQUIRE( itDoesThis() );
+ AND_THEN( "do that")
+ REQUIRE( itDoesThat() );
+ }
+ }
+ }
+}
+
+SCENARIO( "Vector resizing affects size and capacity", "[vector][bdd][size][capacity]" ) {
+ GIVEN( "an empty vector" ) {
+ std::vector<int> v;
+ REQUIRE( v.size() == 0 );
+
+ WHEN( "it is made larger" ) {
+ v.resize( 10 );
+ THEN( "the size and capacity go up" ) {
+ REQUIRE( v.size() == 10 );
+ REQUIRE( v.capacity() >= 10 );
+
+ AND_WHEN( "it is made smaller again" ) {
+ v.resize( 5 );
+ THEN( "the size goes down but the capacity stays the same" ) {
+ REQUIRE( v.size() == 5 );
+ REQUIRE( v.capacity() >= 10 );
+ }
+ }
+ }
+ }
+
+ WHEN( "we reserve more space" ) {
+ v.reserve( 10 );
+ THEN( "The capacity is increased but the size remains the same" ) {
+ REQUIRE( v.capacity() >= 10 );
+ REQUIRE( v.size() == 0 );
+ }
+ }
+ }
+}
+
+SCENARIO( "This is a really long scenario name to see how the list command deals with wrapping",
+ "[very long tags][lots][long][tags][verbose]"
+ "[one very long tag name that should cause line wrapping writing out using the list command]"
+ "[anotherReallyLongTagNameButThisOneHasNoObviousWrapPointsSoShouldSplitWithinAWordUsingADashCharacter]" ) {
+ 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" )
+ SUCCEED("boo!");
+}
+
+namespace {
+
+// a trivial fixture example to support SCENARIO_METHOD tests
+struct Fixture
+{
+ Fixture()
+ : d_counter(0)
+ {
+ }
+
+ int counter()
+ {
+ return d_counter++;
+ }
+
+ int d_counter;
+};
+
+}
+
+SCENARIO_METHOD(Fixture,
+ "BDD tests requiring Fixtures to provide commonly-accessed data or methods",
+ "[bdd][fixtures]") {
+ const int before(counter());
+ GIVEN("No operations precede me") {
+ REQUIRE(before == 0);
+ WHEN("We get the count") {
+ const int after(counter());
+ THEN("Subsequently values are higher") {
+ REQUIRE(after > before);
+ }
+ }
+ }
+}
diff --git a/projects/SelfTest/Baselines/console.std.approved.txt b/projects/SelfTest/Baselines/console.std.approved.txt
new file mode 100644
index 0000000..29870b9
--- /dev/null
+++ b/projects/SelfTest/Baselines/console.std.approved.txt
@@ -0,0 +1,835 @@
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CatchSelfTest is a <version> host application.
+Run with -? for options
+
+-------------------------------------------------------------------------------
+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 fails
+-------------------------------------------------------------------------------
+ClassTests.cpp:<line number>
+...............................................................................
+
+ClassTests.cpp:<line number>: FAILED:
+ REQUIRE( m_a == 2 )
+with expansion:
+ 1 == 2
+
+-------------------------------------------------------------------------------
+Equality checks that should fail
+-------------------------------------------------------------------------------
+ConditionTests.cpp:<line number>
+...............................................................................
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.int_seven == 6 )
+with expansion:
+ 7 == 6
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.int_seven == 8 )
+with expansion:
+ 7 == 8
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.int_seven == 0 )
+with expansion:
+ 7 == 0
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.float_nine_point_one == Approx( 9.11f ) )
+with expansion:
+ 9.1f == Approx( 9.1099996567 )
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.float_nine_point_one == Approx( 9.0f ) )
+with expansion:
+ 9.1f == Approx( 9.0 )
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.float_nine_point_one == Approx( 1 ) )
+with expansion:
+ 9.1f == Approx( 1.0 )
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.float_nine_point_one == Approx( 0 ) )
+with expansion:
+ 9.1f == Approx( 0.0 )
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.double_pi == Approx( 3.1415 ) )
+with expansion:
+ 3.1415926535 == Approx( 3.1415 )
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.str_hello == "goodbye" )
+with expansion:
+ "hello" == "goodbye"
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.str_hello == "hell" )
+with expansion:
+ "hello" == "hell"
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.str_hello == "hello1" )
+with expansion:
+ "hello" == "hello1"
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.str_hello.size() == 6 )
+with expansion:
+ 5 == 6
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( x == Approx( 1.301 ) )
+with expansion:
+ 1.3 == Approx( 1.301 )
+
+-------------------------------------------------------------------------------
+Inequality 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.float_nine_point_one != Approx( 9.1f ) )
+with expansion:
+ 9.1f != Approx( 9.1000003815 )
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.double_pi != Approx( 3.1415926535 ) )
+with expansion:
+ 3.1415926535 != Approx( 3.1415926535 )
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.str_hello != "hello" )
+with expansion:
+ "hello" != "hello"
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.str_hello.size() != 5 )
+with expansion:
+ 5 != 5
+
+-------------------------------------------------------------------------------
+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" )
+with expansion:
+ "hello" <= "a"
+
+-------------------------------------------------------------------------------
+'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)
+
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+When unchecked exceptions are thrown directly they are always failures
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+due to unexpected exception with message:
+ unexpected exception
+
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+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:
+ unexpected exception
+
+-------------------------------------------------------------------------------
+When unchecked exceptions are thrown from functions they are always failures
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+ CHECK( thisThrows() == 0 )
+due to unexpected exception with message:
+ expected exception
+
+-------------------------------------------------------------------------------
+When unchecked exceptions are thrown during a REQUIRE the test should abort
+fail
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+ REQUIRE( thisThrows() == 0 )
+due to unexpected exception with message:
+ expected exception
+
+-------------------------------------------------------------------------------
+When unchecked exceptions are thrown during a CHECK the test should abort and
+fail
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+ CHECK( thisThrows() == 0 )
+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
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+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
+Message from section two
+-------------------------------------------------------------------------------
+SCOPED_INFO is reset for each loop
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.cpp:<line number>: FAILED:
+ REQUIRE( i < 10 )
+with expansion:
+ 10 < 10
+with messages:
+ current counter 10
+ i := 10
+
+-------------------------------------------------------------------------------
+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>
+
+-------------------------------------------------------------------------------
+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
+-------------------------------------------------------------------------------
+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>: 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>: 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
+-------------------------------------------------------------------------------
+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
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+send a single char to INFO
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>: FAILED:
+ REQUIRE( false )
+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
+-------------------------------------------------------------------------------
+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:
+ {?} == {?}
+
+-------------------------------------------------------------------------------
+string literals of different sizes can be compared
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>: FAILED:
+ REQUIRE( std::string( "first" ) == "second" )
+with expansion:
+ "first" == "second"
+
+===============================================================================
+test cases: 167 | 124 passed | 42 failed | 1 failed as expected
+assertions: 919 | 823 passed | 83 failed | 13 failed as expected
+
diff --git a/projects/SelfTest/Baselines/console.sw.approved.txt b/projects/SelfTest/Baselines/console.sw.approved.txt
new file mode 100644
index 0000000..cd73c2a
--- /dev/null
+++ b/projects/SelfTest/Baselines/console.sw.approved.txt
@@ -0,0 +1,9098 @@
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CatchSelfTest is a <version> host application.
+Run with -? for options
+
+-------------------------------------------------------------------------------
+toString(enum)
+-------------------------------------------------------------------------------
+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 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
+
+-------------------------------------------------------------------------------
+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
+-------------------------------------------------------------------------------
+ConditionTests.cpp:<line number>
+...............................................................................
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.int_seven == 6 )
+with expansion:
+ 7 == 6
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.int_seven == 8 )
+with expansion:
+ 7 == 8
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.int_seven == 0 )
+with expansion:
+ 7 == 0
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.float_nine_point_one == Approx( 9.11f ) )
+with expansion:
+ 9.1f == Approx( 9.1099996567 )
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.float_nine_point_one == Approx( 9.0f ) )
+with expansion:
+ 9.1f == Approx( 9.0 )
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.float_nine_point_one == Approx( 1 ) )
+with expansion:
+ 9.1f == Approx( 1.0 )
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.float_nine_point_one == Approx( 0 ) )
+with expansion:
+ 9.1f == Approx( 0.0 )
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.double_pi == Approx( 3.1415 ) )
+with expansion:
+ 3.1415926535 == Approx( 3.1415 )
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.str_hello == "goodbye" )
+with expansion:
+ "hello" == "goodbye"
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.str_hello == "hell" )
+with expansion:
+ "hello" == "hell"
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.str_hello == "hello1" )
+with expansion:
+ "hello" == "hello1"
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.str_hello.size() == 6 )
+with expansion:
+ 5 == 6
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( x == Approx( 1.301 ) )
+with expansion:
+ 1.3 == Approx( 1.301 )
+
+-------------------------------------------------------------------------------
+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>
+...............................................................................
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.int_seven != 7 )
+with expansion:
+ 7 != 7
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.float_nine_point_one != Approx( 9.1f ) )
+with expansion:
+ 9.1f != Approx( 9.1000003815 )
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.double_pi != Approx( 3.1415926535 ) )
+with expansion:
+ 3.1415926535 != Approx( 3.1415926535 )
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.str_hello != "hello" )
+with expansion:
+ "hello" != "hello"
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.str_hello.size() != 5 )
+with expansion:
+ 5 != 5
+
+-------------------------------------------------------------------------------
+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
+
+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"
+
+-------------------------------------------------------------------------------
+Comparisons with int literals don't warn when mixing signed/ unsigned
+-------------------------------------------------------------------------------
+ConditionTests.cpp:<line number>
+...............................................................................
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( i == 1 )
+with expansion:
+ 1 == 1
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( ui == 2 )
+with expansion:
+ 2 == 2
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( l == 3 )
+with expansion:
+ 3 == 3
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( ul == 4 )
+with expansion:
+ 4 == 4
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( c == 5 )
+with expansion:
+ 5 == 5
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( uc == 6 )
+with expansion:
+ 6 == 6
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( 1 == i )
+with expansion:
+ 1 == 1
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( 2 == ui )
+with expansion:
+ 2 == 2
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( 3 == l )
+with expansion:
+ 3 == 3
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( 4 == ul )
+with expansion:
+ 4 == 4
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( 5 == c )
+with expansion:
+ 5 == 5
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( 6 == uc )
+with expansion:
+ 6 == 6
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( (std::numeric_limits<unsigned long>::max)() > ul )
+with expansion:
+ 18446744073709551615 (0x<hex digits>)
+ >
+ 4
+
+-------------------------------------------------------------------------------
+comparisons between int variables
+-------------------------------------------------------------------------------
+ConditionTests.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 )
+with expansion:
+ 1 == 1
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( long_var == unsigned_int_var )
+with expansion:
+ 1 == 1
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( long_var == unsigned_long_var )
+with expansion:
+ 1 == 1
+
+-------------------------------------------------------------------------------
+comparisons between const int variables
+-------------------------------------------------------------------------------
+ConditionTests.cpp:<line number>
+...............................................................................
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( unsigned_char_var == 1 )
+with expansion:
+ 1 == 1
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( unsigned_short_var == 1 )
+with expansion:
+ 1 == 1
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( unsigned_int_var == 1 )
+with expansion:
+ 1 == 1
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( unsigned_long_var == 1 )
+with expansion:
+ 1 == 1
+
+-------------------------------------------------------------------------------
+Comparisons between unsigned ints and negative signed ints match c++ standard
+behaviour
+-------------------------------------------------------------------------------
+ConditionTests.cpp:<line number>
+...............................................................................
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ CHECK( ( -1 > 2u ) )
+with expansion:
+ true
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ CHECK( -1 > 2u )
+with expansion:
+ -1 > 2
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ CHECK( ( 2u < -1 ) )
+with expansion:
+ true
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ CHECK( 2u < -1 )
+with expansion:
+ 2 < -1
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ CHECK( ( minInt > 2u ) )
+with expansion:
+ true
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ CHECK( minInt > 2u )
+with expansion:
+ -2147483648 > 2
+
+-------------------------------------------------------------------------------
+Comparisons between ints where one side is computed
+-------------------------------------------------------------------------------
+ConditionTests.cpp:<line number>
+...............................................................................
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ CHECK( 54 == 6*9 )
+with expansion:
+ 54 == 54
+
+-------------------------------------------------------------------------------
+Pointers can be compared to null
+-------------------------------------------------------------------------------
+ConditionTests.cpp:<line number>
+...............................................................................
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( p == nullptr )
+with expansion:
+ NULL == nullptr
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( p == pNULL )
+with expansion:
+ NULL == NULL
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( p != nullptr )
+with expansion:
+ 0x<hex digits> != nullptr
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( cp != nullptr )
+with expansion:
+ 0x<hex digits> != nullptr
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( cpc != nullptr )
+with expansion:
+ 0x<hex digits> != nullptr
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( returnsNull() == nullptr )
+with expansion:
+ {null string} == nullptr
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( returnsConstNull() == nullptr )
+with expansion:
+ {null string} == nullptr
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( nullptr != p )
+with expansion:
+ nullptr != 0x<hex digits>
+
+-------------------------------------------------------------------------------
+'Not' checks that should succeed
+-------------------------------------------------------------------------------
+ConditionTests.cpp:<line number>
+...............................................................................
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( false == false )
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( true == true )
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( !false )
+with expansion:
+ true
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE_FALSE( false )
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( !falseValue )
+with expansion:
+ true
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE_FALSE( falseValue )
+with expansion:
+ !false
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE( !(1 == 2) )
+with expansion:
+ true
+
+ConditionTests.cpp:<line number>:
+PASSED:
+ REQUIRE_FALSE( 1 == 2 )
+with expansion:
+ !(1 == 2)
+
+-------------------------------------------------------------------------------
+'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)
+
+-------------------------------------------------------------------------------
+When checked exceptions are thrown they can be expected or unexpected
+-------------------------------------------------------------------------------
+ExceptionTests.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() )
+
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+When unchecked exceptions are thrown directly they are always failures
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+due to unexpected exception with message:
+ unexpected exception
+
+-------------------------------------------------------------------------------
+An unchecked exception reports the line of the last assertion
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+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:
+ unexpected exception
+
+-------------------------------------------------------------------------------
+When unchecked exceptions are thrown from functions they are always failures
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+ CHECK( thisThrows() == 0 )
+due to unexpected exception with message:
+ expected exception
+
+-------------------------------------------------------------------------------
+When unchecked exceptions are thrown during a REQUIRE the test should abort
+fail
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+ REQUIRE( thisThrows() == 0 )
+due to unexpected exception with message:
+ expected exception
+
+-------------------------------------------------------------------------------
+When unchecked exceptions are thrown during a CHECK the test should abort and
+fail
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+ CHECK( thisThrows() == 0 )
+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
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>: FAILED:
+due to unexpected exception with message:
+ 3.14
+
+-------------------------------------------------------------------------------
+NotImplemented exception
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>:
+PASSED:
+ REQUIRE_THROWS( thisFunctionNotImplemented( 7 ) )
+
+-------------------------------------------------------------------------------
+Exception messages can be tested for
+ exact match
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>:
+PASSED:
+ REQUIRE_THROWS_WITH( thisThrows(), "expected exception" )
+
+-------------------------------------------------------------------------------
+Exception messages can be tested for
+ different case
+-------------------------------------------------------------------------------
+ExceptionTests.cpp:<line number>
+...............................................................................
+
+ExceptionTests.cpp:<line number>:
+PASSED:
+ REQUIRE_THROWS_WITH( thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No ) )
+
+-------------------------------------------------------------------------------
+Exception messages can be tested for
+ wildcarded
+-------------------------------------------------------------------------------
+ExceptionTests.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>:
+PASSED:
+ REQUIRE_THROWS_WITH( thisThrows(), Contains( "exCept", Catch::CaseSensitive::No ) )
+
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 200 == 200
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 202 == 202
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 204 == 204
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 206 == 206
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 208 == 208
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 210 == 210
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 212 == 212
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 2 == 2
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 4 == 4
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 6 == 6
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 8 == 8
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 10 == 10
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 30 == 30
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 40 == 40
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 42 == 42
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 214 == 214
+
+-------------------------------------------------------------------------------
+Generators over two ranges
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 )
+with expansion:
+ 72 == 72
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 )
+with expansion:
+ 214 == 214
+
+-------------------------------------------------------------------------------
+Generator over a range of pairs
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( i->first == i->second-1 )
+with expansion:
+ 0 == 0
+
+-------------------------------------------------------------------------------
+Generator over a range of pairs
+-------------------------------------------------------------------------------
+GeneratorTests.cpp:<line number>
+...............................................................................
+
+GeneratorTests.cpp:<line number>:
+PASSED:
+ CATCH_REQUIRE( i->first == i->second-1 )
+with expansion:
+ 2 == 2
+
+-------------------------------------------------------------------------------
+INFO and WARN do not abort tests
+-------------------------------------------------------------------------------
+MessageTests.cpp:<line number>
+...............................................................................
+
+MessageTests.cpp:<line number>:
+warning:
+ this is a message
+ 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>
+...............................................................................
+
+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>:
+PASSED:
+ CHECK( a == 2 )
+with expansion:
+ 2 == 2
+with message:
+ this message may be logged later
+
+MessageTests.cpp:<line number>: FAILED:
+ CHECK( a == 1 )
+with expansion:
+ 2 == 1
+with message:
+ this message should be logged
+
+MessageTests.cpp:<line number>: FAILED:
+ CHECK( a == 0 )
+with expansion:
+ 2 == 0
+with message:
+ and this, but later
+
+MessageTests.cpp:<line number>:
+PASSED:
+ CHECK( a == 2 )
+with expansion:
+ 2 == 2
+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 &amp; jones" )
+with expansion:
+ "smith &amp; jones" == "smith &amp; jones"
+
+-------------------------------------------------------------------------------
+XmlEncode
+ string with less-than
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+ REQUIRE( encode( "smith < jones" ) == "smith &lt; jones" )
+with expansion:
+ "smith &lt; jones" == "smith &lt; 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 ]]&gt; jones" )
+with expansion:
+ "smith ]]&gt; jones"
+ ==
+ "smith ]]&gt; 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 &quot;quote&quot; me on that" )
+with expansion:
+ "don't &quot;quote&quot; me on that"
+ ==
+ "don't &quot;quote&quot; me on that"
+
+-------------------------------------------------------------------------------
+XmlEncode
+ string with control char (1)
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+ REQUIRE( encode( "[\x01]" ) == "[&#x1]" )
+with expansion:
+ "[&#x1]" == "[&#x1]"
+
+-------------------------------------------------------------------------------
+XmlEncode
+ string with control char (x7F)
+-------------------------------------------------------------------------------
+MiscTests.cpp:<line number>
+...............................................................................
+
+MiscTests.cpp:<line number>:
+PASSED:
+ REQUIRE( encode( "[\x7F]" ) == "[&#x7F]" )
+with expansion:
+ "[&#x7F]" == "[&#x7F]"
+
+-------------------------------------------------------------------------------
+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>)
+
+-------------------------------------------------------------------------------
+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
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+ abort
+ -a aborts after first failure
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+ REQUIRE( config.abortAfter == 1 )
+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 ) )
+
+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
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( config.noThrow == true )
+with expansion:
+ true == true
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+ use-colour
+ without option
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+ REQUIRE( config.useColour == UseColour::Auto )
+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 ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+ REQUIRE( config.useColour == UseColour::Auto )
+with expansion:
+ 0 == 0
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+ use-colour
+ yes
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+ REQUIRE( config.useColour == UseColour::Yes )
+with expansion:
+ 1 == 1
+
+-------------------------------------------------------------------------------
+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>:
+PASSED:
+ REQUIRE( config.useColour == UseColour::No )
+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" ) )
+
+-------------------------------------------------------------------------------
+Long strings can be wrapped
+ plain string
+ No wrapping
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString )
+with expansion:
+ "one two three four"
+ ==
+ "one two three four"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 18 ) ).toString() == testString )
+with expansion:
+ "one two three four"
+ ==
+ "one two three four"
+
+-------------------------------------------------------------------------------
+Long strings can be wrapped
+ plain string
+ Wrapped once
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 17 ) ).toString() == "one two three\nfour" )
+with expansion:
+ "one two three
+ four"
+ ==
+ "one two three
+ four"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 16 ) ).toString() == "one two three\nfour" )
+with expansion:
+ "one two three
+ four"
+ ==
+ "one two three
+ four"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 14 ) ).toString() == "one two three\nfour" )
+with expansion:
+ "one two three
+ four"
+ ==
+ "one two three
+ four"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 13 ) ).toString() == "one two three\nfour" )
+with expansion:
+ "one two three
+ four"
+ ==
+ "one two three
+ four"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 12 ) ).toString() == "one two\nthree four" )
+with expansion:
+ "one two
+ three four"
+ ==
+ "one two
+ three four"
+
+-------------------------------------------------------------------------------
+Long strings can be wrapped
+ plain string
+ Wrapped twice
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 9 ) ).toString() == "one two\nthree\nfour" )
+with expansion:
+ "one two
+ three
+ four"
+ ==
+ "one two
+ three
+ four"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 8 ) ).toString() == "one two\nthree\nfour" )
+with expansion:
+ "one two
+ three
+ four"
+ ==
+ "one two
+ three
+ four"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 7 ) ).toString() == "one two\nthree\nfour" )
+with expansion:
+ "one two
+ three
+ four"
+ ==
+ "one two
+ three
+ four"
+
+-------------------------------------------------------------------------------
+Long strings can be wrapped
+ plain string
+ Wrapped three times
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 6 ) ).toString() == "one\ntwo\nthree\nfour" )
+with expansion:
+ "one
+ two
+ three
+ four"
+ ==
+ "one
+ two
+ three
+ four"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 5 ) ).toString() == "one\ntwo\nthree\nfour" )
+with expansion:
+ "one
+ two
+ three
+ four"
+ ==
+ "one
+ two
+ three
+ four"
+
+-------------------------------------------------------------------------------
+Long strings can be wrapped
+ plain string
+ Short wrap
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( "abcdef", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndef" )
+with expansion:
+ "abc-
+ def"
+ ==
+ "abc-
+ def"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( "abcdefg", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndefg" )
+with expansion:
+ "abc-
+ defg"
+ ==
+ "abc-
+ defg"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( "abcdefgh", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndef-\ngh" )
+with expansion:
+ "abc-
+ def-
+ gh"
+ ==
+ "abc-
+ def-
+ gh"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 4 ) ).toString() == "one\ntwo\nthr-\nee\nfour" )
+with expansion:
+ "one
+ two
+ thr-
+ ee
+ four"
+ ==
+ "one
+ two
+ thr-
+ ee
+ four"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 3 ) ).toString() == "one\ntwo\nth-\nree\nfo-\nur" )
+with expansion:
+ "one
+ two
+ th-
+ ree
+ fo-
+ ur"
+ ==
+ "one
+ two
+ th-
+ ree
+ fo-
+ ur"
+
+-------------------------------------------------------------------------------
+Long strings can be wrapped
+ plain string
+ As container
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ REQUIRE( text.size() == 4 )
+with expansion:
+ 4 == 4
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( text[0] == "one" )
+with expansion:
+ "one" == "one"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( text[1] == "two" )
+with expansion:
+ "two" == "two"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( text[2] == "three" )
+with expansion:
+ "three" == "three"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( text[3] == "four" )
+with expansion:
+ "four" == "four"
+
+-------------------------------------------------------------------------------
+Long strings can be wrapped
+ plain string
+ Indent first line differently
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( text.toString() == " one two\n three\n four" )
+with expansion:
+ " one two
+ three
+ four"
+ ==
+ " one two
+ three
+ four"
+
+-------------------------------------------------------------------------------
+Long strings can be wrapped
+ With newlines
+ No wrapping
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString )
+with expansion:
+ "one two
+ three four"
+ ==
+ "one two
+ three four"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 18 ) ).toString() == testString )
+with expansion:
+ "one two
+ three four"
+ ==
+ "one two
+ three four"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 10 ) ).toString() == testString )
+with expansion:
+ "one two
+ three four"
+ ==
+ "one two
+ three four"
+
+-------------------------------------------------------------------------------
+Long strings can be wrapped
+ With newlines
+ Trailing newline
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( "abcdef\n", TextAttributes().setWidth( 10 ) ).toString() == "abcdef\n" )
+with expansion:
+ "abcdef
+ "
+ ==
+ "abcdef
+ "
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( "abcdef", TextAttributes().setWidth( 6 ) ).toString() == "abcdef" )
+with expansion:
+ "abcdef" == "abcdef"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( "abcdef\n", TextAttributes().setWidth( 6 ) ).toString() == "abcdef\n" )
+with expansion:
+ "abcdef
+ "
+ ==
+ "abcdef
+ "
+
+-------------------------------------------------------------------------------
+Long strings can be wrapped
+ With newlines
+ Wrapped once
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 9 ) ).toString() == "one two\nthree\nfour" )
+with expansion:
+ "one two
+ three
+ four"
+ ==
+ "one two
+ three
+ four"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 8 ) ).toString() == "one two\nthree\nfour" )
+with expansion:
+ "one two
+ three
+ four"
+ ==
+ "one two
+ three
+ four"
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 7 ) ).toString() == "one two\nthree\nfour" )
+with expansion:
+ "one two
+ three
+ four"
+ ==
+ "one two
+ three
+ four"
+
+-------------------------------------------------------------------------------
+Long strings can be wrapped
+ With newlines
+ Wrapped twice
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( Text( testString, TextAttributes().setWidth( 6 ) ).toString() == "one\ntwo\nthree\nfour" )
+with expansion:
+ "one
+ two
+ three
+ four"
+ ==
+ "one
+ two
+ three
+ four"
+
+-------------------------------------------------------------------------------
+Long strings can be wrapped
+ With tabs
+-------------------------------------------------------------------------------
+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" )
+with expansion:
+ "one two three
+ four
+ five
+ six"
+ ==
+ "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
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( letters == "azcdefcg" )
+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"
+
+-------------------------------------------------------------------------------
+replaceInPlace
+ replace no chars
+-------------------------------------------------------------------------------
+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 )
+with expansion:
+ "abcdefcg" == "abcdefcg"
+
+-------------------------------------------------------------------------------
+replaceInPlace
+ escape '
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK( replaceInPlace( s, "'", "|'" ) )
+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>
+...............................................................................
+
+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"
+ ==
+ "hi
+ there"
+
+-------------------------------------------------------------------------------
+Long text is truncted
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+ CHECK_THAT( t.toString(), EndsWith( "... message truncated due to excessive size" ) )
+with expansion:
+ "***************************************************************************-
+ ***-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+ ****************************************************************************-
+ **-
+ ****************************************************************************-
+ **-
+ ************************
+... message truncated due to excessive size
+
+-------------------------------------------------------------------------------
+ManuallyRegistered
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+with message:
+ was called
+
+-------------------------------------------------------------------------------
+Parsing a std::pair
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( (std::pair<int, int>( 1, 2 )) == aNicePair )
+with expansion:
+ std::pair( 1, 2 ) == std::pair( 1, 2 )
+
+-------------------------------------------------------------------------------
+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
+-------------------------------------------------------------------------------
+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:
+ {?} == {?}
+
+-------------------------------------------------------------------------------
+string literals of different sizes can be compared
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>: FAILED:
+ REQUIRE( std::string( "first" ) == "second" )
+with expansion:
+ "first" == "second"
+
+-------------------------------------------------------------------------------
+An expression with side-effects should only be evaluated once
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( i++ == 7 )
+with expansion:
+ 7 == 7
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( i++ == 8 )
+with expansion:
+ 8 == 8
+
+-------------------------------------------------------------------------------
+Operators at different namespace levels not hijacked by Koenig lookup
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( 0x<hex digits> == o )
+with expansion:
+ 3221225472 (0x<hex digits>) == {?}
+
+-------------------------------------------------------------------------------
+Demonstrate that a non-const == is not used
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( t == 1u )
+with expansion:
+ {?} == 1
+
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+boolean member
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( obj.prop != nullptr )
+with expansion:
+ 0x<hex digits> != nullptr
+
+-------------------------------------------------------------------------------
+(unimplemented) static bools can be evaluated
+ compare to true
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( is_true<true>::value == true )
+with expansion:
+ true == true
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( true == is_true<true>::value )
+with expansion:
+ true == true
+
+-------------------------------------------------------------------------------
+(unimplemented) static bools can be evaluated
+ compare to false
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( is_true<false>::value == false )
+with expansion:
+ false == false
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( false == is_true<false>::value )
+with expansion:
+ false == false
+
+-------------------------------------------------------------------------------
+(unimplemented) static bools can be evaluated
+ negation
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( !is_true<false>::value )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+(unimplemented) static bools can be evaluated
+ double negation
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( !!is_true<true>::value )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+(unimplemented) static bools can be evaluated
+ direct
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( is_true<true>::value )
+with expansion:
+ true
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE_FALSE( is_true<false>::value )
+with expansion:
+ !false
+
+-------------------------------------------------------------------------------
+Objects that evaluated in boolean contexts can be checked
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ CHECK( True )
+with expansion:
+ true
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ CHECK( !False )
+with expansion:
+ true
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ CHECK_FALSE( False )
+with expansion:
+ !false
+
+-------------------------------------------------------------------------------
+Assertions then sections
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::alwaysTrue() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Assertions then sections
+ A section
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::alwaysTrue() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Assertions then sections
+ A section
+ Another section
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::alwaysTrue() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Assertions then sections
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::alwaysTrue() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Assertions then sections
+ A section
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::alwaysTrue() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Assertions then sections
+ A section
+ Another other section
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::alwaysTrue() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+non streamable - with conv. op
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s == "7" )
+with expansion:
+ "7" == "7"
+
+-------------------------------------------------------------------------------
+Comparing function pointers
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( a )
+with expansion:
+ true
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( a == &foo )
+with expansion:
+ 0x<hex digits> == 0x<hex digits>
+
+-------------------------------------------------------------------------------
+Comparing member function pointers
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ CHECK( m == &S::f )
+with expansion:
+ 0x<hex digits>
+ ==
+ 0x<hex digits>
+
+-------------------------------------------------------------------------------
+pointer to class
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( p == 0 )
+with expansion:
+ NULL == 0
+
+-------------------------------------------------------------------------------
+null_ptr
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+ REQUIRE( ptr.get() == nullptr )
+with expansion:
+ NULL == nullptr
+
+-------------------------------------------------------------------------------
+X/level/0/a
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+
+-------------------------------------------------------------------------------
+X/level/0/b
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+
+-------------------------------------------------------------------------------
+X/level/1/a
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+
+-------------------------------------------------------------------------------
+X/level/1/b
+-------------------------------------------------------------------------------
+TrickyTests.cpp:<line number>
+...............................................................................
+
+TrickyTests.cpp:<line number>:
+PASSED:
+
+-------------------------------------------------------------------------------
+toString( has_toString )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString( item ) == "toString( has_toString )" )
+with expansion:
+ "toString( has_toString )"
+ ==
+ "toString( has_toString )"
+
+-------------------------------------------------------------------------------
+toString( has_maker )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString( item ) == "StringMaker<has_maker>" )
+with expansion:
+ "StringMaker<has_maker>"
+ ==
+ "StringMaker<has_maker>"
+
+-------------------------------------------------------------------------------
+toString( has_maker_and_toString )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString( item ) == "toString( has_maker_and_toString )" )
+with expansion:
+ "toString( has_maker_and_toString )"
+ ==
+ "toString( has_maker_and_toString )"
+
+-------------------------------------------------------------------------------
+toString( vectors<has_toString )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString( v ) == "{ {?} }" )
+with expansion:
+ "{ {?} }" == "{ {?} }"
+
+-------------------------------------------------------------------------------
+toString( vectors<has_maker )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker> }" )
+with expansion:
+ "{ StringMaker<has_maker> }"
+ ==
+ "{ StringMaker<has_maker> }"
+
+-------------------------------------------------------------------------------
+toString( vectors<has_maker_and_toString )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker_and_toString> }" )
+with expansion:
+ "{ StringMaker<has_maker_and_toString> }"
+ ==
+ "{ StringMaker<has_maker_and_toString> }"
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isOpen() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+ successfully close one section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isSuccessfullyCompleted() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( ctx.completedCycle() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isSuccessfullyCompleted() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isOpen() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+ fail one section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isSuccessfullyCompleted() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( ctx.completedCycle() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isSuccessfullyCompleted() == false )
+with expansion:
+ false == false
+
+-------------------------------------------------------------------------------
+Tracker
+ fail one section
+ re-enter after failed section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase2.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1b.isOpen() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( ctx.completedCycle() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isSuccessfullyCompleted() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isOpen() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+ fail one section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isSuccessfullyCompleted() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( ctx.completedCycle() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isSuccessfullyCompleted() == false )
+with expansion:
+ false == false
+
+-------------------------------------------------------------------------------
+Tracker
+ fail one section
+ re-enter after failed section and find next section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase2.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1b.isOpen() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( ctx.completedCycle() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isSuccessfullyCompleted() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isOpen() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+ successfully close one section, then find another
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2.isOpen() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isComplete() == false )
+with expansion:
+ false == false
+
+-------------------------------------------------------------------------------
+Tracker
+ successfully close one section, then find another
+ Re-enter - skips S1 and enters S2
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase2.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1b.isOpen() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2b.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( ctx.completedCycle() == false )
+with expansion:
+ false == false
+
+-------------------------------------------------------------------------------
+Tracker
+ successfully close one section, then find another
+ Re-enter - skips S1 and enters S2
+ Successfully close S2
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( ctx.completedCycle() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2b.isSuccessfullyCompleted() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase2.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase2.isSuccessfullyCompleted() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isOpen() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+ successfully close one section, then find another
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2.isOpen() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isComplete() == false )
+with expansion:
+ false == false
+
+-------------------------------------------------------------------------------
+Tracker
+ successfully close one section, then find another
+ Re-enter - skips S1 and enters S2
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase2.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1b.isOpen() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2b.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( ctx.completedCycle() == false )
+with expansion:
+ false == false
+
+-------------------------------------------------------------------------------
+Tracker
+ successfully close one section, then find another
+ Re-enter - skips S1 and enters S2
+ fail S2
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( ctx.completedCycle() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2b.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2b.isSuccessfullyCompleted() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase2.isSuccessfullyCompleted() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase3.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1c.isOpen() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2c.isOpen() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase3.isSuccessfullyCompleted() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isOpen() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+ open a nested section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isComplete() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isOpen() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+ start a generator
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1.index() == 0 )
+with expansion:
+ 0 == 0
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isComplete() == false )
+with expansion:
+ false == false
+
+-------------------------------------------------------------------------------
+Tracker
+ start a generator
+ close outer section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isSuccessfullyCompleted() == false )
+with expansion:
+ false == false
+
+-------------------------------------------------------------------------------
+Tracker
+ start a generator
+ close outer section
+ Re-enter for second generation
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase2.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1b.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1b.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1b.index() == 1 )
+with expansion:
+ 1 == 1
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1b.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1b.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase2.isComplete() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isOpen() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+ start a generator
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1.index() == 0 )
+with expansion:
+ 0 == 0
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isComplete() == false )
+with expansion:
+ false == false
+
+-------------------------------------------------------------------------------
+Tracker
+ start a generator
+ Start a new inner section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isComplete() == false )
+with expansion:
+ false == false
+
+-------------------------------------------------------------------------------
+Tracker
+ start a generator
+ Start a new inner section
+ Re-enter for second generation
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase2.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1b.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1b.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1b.index() == 1 )
+with expansion:
+ 1 == 1
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2b.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2b.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1b.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1b.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase2.isComplete() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isOpen() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Tracker
+ start a generator
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1.index() == 0 )
+with expansion:
+ 0 == 0
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isComplete() == false )
+with expansion:
+ false == false
+
+-------------------------------------------------------------------------------
+Tracker
+ start a generator
+ Fail an inner section
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2.isSuccessfullyCompleted() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase.isComplete() == false )
+with expansion:
+ false == false
+
+-------------------------------------------------------------------------------
+Tracker
+ start a generator
+ Fail an inner section
+ Re-enter for second generation
+-------------------------------------------------------------------------------
+PartTrackerTests.cpp:<line number>
+...............................................................................
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase2.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1b.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1b.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1b.index() == 0 )
+with expansion:
+ 0 == 0
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2b.isOpen() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1b.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1b.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase2.isComplete() == false )
+with expansion:
+ false == false
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase3.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1c.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1c.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1c.index() == 1 )
+with expansion:
+ 1 == 1
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2c.isOpen() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s2c.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( g1c.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( s1c.isComplete() )
+with expansion:
+ true
+
+PartTrackerTests.cpp:<line number>:
+PASSED:
+ REQUIRE( testCase3.isComplete() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+std::pair<int,std::string> -> toString
+-------------------------------------------------------------------------------
+ToStringPair.cpp:<line number>
+...............................................................................
+
+ToStringPair.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString( value ) == "{ 34, \"xyzzy\" }" )
+with expansion:
+ "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }"
+
+-------------------------------------------------------------------------------
+std::pair<int,const std::string> -> toString
+-------------------------------------------------------------------------------
+ToStringPair.cpp:<line number>
+...............................................................................
+
+ToStringPair.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString(value) == "{ 34, \"xyzzy\" }" )
+with expansion:
+ "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }"
+
+-------------------------------------------------------------------------------
+std::vector<std::pair<std::string,int> > -> toString
+-------------------------------------------------------------------------------
+ToStringPair.cpp:<line number>
+...............................................................................
+
+ToStringPair.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString( pr ) == "{ { \"green\", 55 } }" )
+with expansion:
+ "{ { "green", 55 } }"
+ ==
+ "{ { "green", 55 } }"
+
+-------------------------------------------------------------------------------
+pair<pair<int,const char *,pair<std::string,int> > -> toString
+-------------------------------------------------------------------------------
+ToStringPair.cpp:<line number>
+...............................................................................
+
+ToStringPair.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" )
+with expansion:
+ "{ { 42, "Arthur" }, { "Ford", 24 } }"
+ ==
+ "{ { 42, "Arthur" }, { "Ford", 24 } }"
+
+-------------------------------------------------------------------------------
+vector<int> -> toString
+-------------------------------------------------------------------------------
+ToStringVector.cpp:<line number>
+...............................................................................
+
+ToStringVector.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString(vv) == "{ }" )
+with expansion:
+ "{ }" == "{ }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString(vv) == "{ 42 }" )
+with expansion:
+ "{ 42 }" == "{ 42 }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString(vv) == "{ 42, 250 }" )
+with expansion:
+ "{ 42, 250 }" == "{ 42, 250 }"
+
+-------------------------------------------------------------------------------
+vector<string> -> toString
+-------------------------------------------------------------------------------
+ToStringVector.cpp:<line number>
+...............................................................................
+
+ToStringVector.cpp:<line number>:
+PASSED:
+ 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" }"
+
+-------------------------------------------------------------------------------
+vector<int,allocator> -> toString
+-------------------------------------------------------------------------------
+ToStringVector.cpp:<line number>
+...............................................................................
+
+ToStringVector.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString(vv) == "{ }" )
+with expansion:
+ "{ }" == "{ }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString(vv) == "{ 42 }" )
+with expansion:
+ "{ 42 }" == "{ 42 }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+ REQUIRE( Catch::toString(vv) == "{ 42, 250 }" )
+with expansion:
+ "{ 42, 250 }" == "{ 42, 250 }"
+
+-------------------------------------------------------------------------------
+vec<vec<string,alloc>> -> toString
+-------------------------------------------------------------------------------
+ToStringVector.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" } }"
+
+-------------------------------------------------------------------------------
+Parse test names and tags
+ Empty test spec should have no filters
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+Parse test names and tags
+ Test spec from empty string should have no filters
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+Parse test names and tags
+ Test spec from just a comma should have no filters
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+Parse test names and tags
+ Test spec from quoted 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
+
+-------------------------------------------------------------------------------
+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
+
+-------------------------------------------------------------------------------
+Parse test names and tags
+ Wildcard at the 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 ) == false )
+with expansion:
+ false == false
+
+CmdLineTests.cpp:<line number>:
+PASSED:
+ CHECK( parseTestSpec( "*a" ).matches( tcA ) == true )
+with expansion:
+ true == true
+
+-------------------------------------------------------------------------------
+Parse test names and tags
+ Wildcard at the end
+-------------------------------------------------------------------------------
+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
+
+CmdLineTests.cpp:<line number>:
+PASSED:
+ CHECK( parseTestSpec( "a*" ).matches( tcA ) == true )
+with expansion:
+ true == true
+
+-------------------------------------------------------------------------------
+Parse test names and tags
+ 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 ) == 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
+
+CmdLineTests.cpp:<line number>:
+PASSED:
+ CHECK( parseTestSpec( "*a*" ).matches( tcA ) == true )
+with expansion:
+ true == true
+
+-------------------------------------------------------------------------------
+Parse test names and tags
+ Redundant wildcard at the 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 ) == true )
+with expansion:
+ true == true
+
+CmdLineTests.cpp:<line number>:
+PASSED:
+ CHECK( spec.matches( tcB ) == false )
+with expansion:
+ false == false
+
+-------------------------------------------------------------------------------
+Parse test names and tags
+ Redundant wildcard at the end
+-------------------------------------------------------------------------------
+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
+ 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
+
+-------------------------------------------------------------------------------
+tuple<>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+ CHECK( "{ }" == Catch::toString(type{}) )
+with expansion:
+ "{ }" == "{ }"
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+ CHECK( "{ }" == Catch::toString(value) )
+with expansion:
+ "{ }" == "{ }"
+
+-------------------------------------------------------------------------------
+tuple<int>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+ CHECK( "{ 0 }" == Catch::toString(type{0}) )
+with expansion:
+ "{ 0 }" == "{ 0 }"
+
+-------------------------------------------------------------------------------
+tuple<float,int>
+-------------------------------------------------------------------------------
+ToStringTuple.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>:
+PASSED:
+ CHECK( "{ 1.2f, 0 }" == Catch::toString(type{1.2,0}) )
+with expansion:
+ "{ 1.2f, 0 }" == "{ 1.2f, 0 }"
+
+-------------------------------------------------------------------------------
+tuple<string,string>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+ CHECK( "{ \"hello\", \"world\" }" == Catch::toString(type{"hello","world"}) )
+with expansion:
+ "{ "hello", "world" }"
+ ==
+ "{ "hello", "world" }"
+
+-------------------------------------------------------------------------------
+tuple<tuple<int>,tuple<>,float>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+ CHECK( "{ { 42 }, { }, 1.2f }" == Catch::toString(value) )
+with expansion:
+ "{ { 42 }, { }, 1.2f }"
+ ==
+ "{ { 42 }, { }, 1.2f }"
+
+-------------------------------------------------------------------------------
+tuple<nullptr,int,const char *>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+ CHECK( "{ nullptr, 42, \"Catch me\" }" == Catch::toString(value) )
+with expansion:
+ "{ nullptr, 42, "Catch me" }"
+ ==
+ "{ nullptr, 42, "Catch me" }"
+
+-------------------------------------------------------------------------------
+Tag alias can be registered against tag patterns
+ The same tag alias can only be registered once
+-------------------------------------------------------------------------------
+TagAliasTests.cpp:<line number>
+...............................................................................
+
+TagAliasTests.cpp:<line number>:
+PASSED:
+ CHECK_THAT( what, Contains( "[@zzz]" ) )
+with expansion:
+ "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 ) ) )
+
+-------------------------------------------------------------------------------
+Anonymous test case 1
+-------------------------------------------------------------------------------
+VariadicMacrosTests.cpp:<line number>
+...............................................................................
+
+VariadicMacrosTests.cpp:<line number>:
+PASSED:
+with message:
+ anonymous test case
+
+-------------------------------------------------------------------------------
+Test case with one argument
+-------------------------------------------------------------------------------
+VariadicMacrosTests.cpp:<line number>
+...............................................................................
+
+VariadicMacrosTests.cpp:<line number>:
+PASSED:
+with message:
+ no assertions
+
+-------------------------------------------------------------------------------
+Variadic macros
+ Section with one argument
+-------------------------------------------------------------------------------
+VariadicMacrosTests.cpp:<line number>
+...............................................................................
+
+VariadicMacrosTests.cpp:<line number>:
+PASSED:
+with message:
+ no assertions
+
+-------------------------------------------------------------------------------
+Scenario: Do that thing with the thing
+ Given: This stuff exists
+ When: I do this
+ Then: it should do this
+-------------------------------------------------------------------------------
+BDDTests.cpp:<line number>
+...............................................................................
+
+BDDTests.cpp:<line number>:
+PASSED:
+ REQUIRE( itDoesThis() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+Scenario: Do that thing with the thing
+ Given: This stuff exists
+ When: I do this
+ Then: it should do this
+ And: do that
+-------------------------------------------------------------------------------
+BDDTests.cpp:<line number>
+...............................................................................
+
+BDDTests.cpp:<line number>:
+PASSED:
+ REQUIRE( itDoesThat() )
+with expansion:
+ true
+
+-------------------------------------------------------------------------------
+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: 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
+
+-------------------------------------------------------------------------------
+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!
+
+-------------------------------------------------------------------------------
+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:
+ 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
+-------------------------------------------------------------------------------
+BDDTests.cpp:<line number>
+...............................................................................
+
+BDDTests.cpp:<line number>:
+PASSED:
+ REQUIRE( after > before )
+with expansion:
+ 1 > 0
+
+===============================================================================
+test cases: 167 | 123 passed | 43 failed | 1 failed as expected
+assertions: 921 | 823 passed | 85 failed | 13 failed as expected
+
diff --git a/projects/SelfTest/Baselines/console.swa4.approved.txt b/projects/SelfTest/Baselines/console.swa4.approved.txt
new file mode 100644
index 0000000..0793f1d
--- /dev/null
+++ b/projects/SelfTest/Baselines/console.swa4.approved.txt
@@ -0,0 +1,491 @@
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CatchSelfTest is a <version> host application.
+Run with -? for options
+
+-------------------------------------------------------------------------------
+toString(enum)
+-------------------------------------------------------------------------------
+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 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
+
+-------------------------------------------------------------------------------
+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
+-------------------------------------------------------------------------------
+ConditionTests.cpp:<line number>
+...............................................................................
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.int_seven == 6 )
+with expansion:
+ 7 == 6
+
+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>
+...............................................................................
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.int_seven != 7 )
+with expansion:
+ 7 != 7
+
+ConditionTests.cpp:<line number>: FAILED:
+ CHECK( data.float_nine_point_one != Approx( 9.1f ) )
+with expansion:
+ 9.1f != Approx( 9.1000003815 )
+
+===============================================================================
+test cases: 19 | 15 passed | 3 failed | 1 failed as expected
+assertions: 62 | 56 passed | 4 failed | 2 failed as expected
+
diff --git a/projects/SelfTest/Baselines/junit.sw.approved.txt b/projects/SelfTest/Baselines/junit.sw.approved.txt
new file mode 100644
index 0000000..110ee8c
--- /dev/null
+++ b/projects/SelfTest/Baselines/junit.sw.approved.txt
@@ -0,0 +1,687 @@
+<testsuites>
+ <testsuite name="CatchSelfTest" errors="13" failures="72" tests="921" hostname="tbd" time="{duration}" timestamp="tbd">
+ <testcase classname="global" name="toString(enum)" time="{duration}"/>
+ <testcase classname="global" name="toString(enum w/operator&lt;&lt;)" time="{duration}"/>
+ <testcase classname="global" name="toString(enum class)" time="{duration}"/>
+ <testcase classname="global" name="toString(enum class w/operator&lt;&lt;)" 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}"/>
+ <testcase classname="TestClass" name="A METHOD_AS_TEST_CASE based test run that fails" time="{duration}">
+ <failure message="&quot;hello&quot; == &quot;world&quot;" 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="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="global" name="Equality checks that should fail" time="{duration}">
+ <failure message="7 == 6" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="7 == 8" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="7 == 0" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="9.1f == Approx( 9.1099996567 )" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="9.1f == Approx( 9.0 )" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="9.1f == Approx( 1.0 )" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="9.1f == Approx( 0.0 )" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="3.1415926535 == Approx( 3.1415 )" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="&quot;hello&quot; == &quot;goodbye&quot;" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="&quot;hello&quot; == &quot;hell&quot;" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="&quot;hello&quot; == &quot;hello1&quot;" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="5 == 6" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="1.3 == Approx( 1.301 )" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ </testcase>
+ <testcase classname="global" name="Inequality checks that should succeed" time="{duration}"/>
+ <testcase classname="global" name="Inequality checks that should fail" time="{duration}">
+ <failure message="7 != 7" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="9.1f != Approx( 9.1000003815 )" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="3.1415926535 != Approx( 3.1415926535 )" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="&quot;hello&quot; != &quot;hello&quot;" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="5 != 5" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ </testcase>
+ <testcase classname="global" name="Ordering comparison checks that should succeed" time="{duration}"/>
+ <testcase classname="global" name="Ordering comparison checks that should fail" time="{duration}">
+ <failure message="7 > 7" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="7 &lt; 7" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="7 > 8" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="7 &lt; 6" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="7 &lt; 0" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="7 &lt; -1" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="7 >= 8" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="7 &lt;= 6" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="9.1f &lt; 9" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="9.1f > 10" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="9.1f > 9.2" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="&quot;hello&quot; > &quot;hello&quot;" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="&quot;hello&quot; &lt; &quot;hello&quot;" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="&quot;hello&quot; > &quot;hellp&quot;" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="&quot;hello&quot; > &quot;z&quot;" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="&quot;hello&quot; &lt; &quot;hellm&quot;" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="&quot;hello&quot; &lt; &quot;a&quot;" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="&quot;hello&quot; >= &quot;z&quot;" type="CHECK">
+ConditionTests.cpp:<line number>
+ </failure>
+ <failure message="&quot;hello&quot; &lt;= &quot;a&quot;" type="CHECK">
+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>
+ </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="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>
+ </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}">
+ <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
+ExceptionTests.cpp:<line number>
+ </error>
+ </testcase>
+ <testcase classname="When unchecked exceptions are thrown from sections they are always failures" name="section name" 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}">
+ <error message="thisThrows() == 0" type="CHECK">
+expected exception
+ExceptionTests.cpp:<line number>
+ </error>
+ </testcase>
+ <testcase classname="global" name="When unchecked exceptions are thrown during a REQUIRE the test should abort fail" time="{duration}">
+ <error message="thisThrows() == 0" type="REQUIRE">
+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}">
+ <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}">
+ <error type="TEST_CASE">
+3.14
+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>
+ </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>
+ </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>
+ </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 &lt; 10" type="REQUIRE">
+current counter 10
+i := 10
+MessageTests.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="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>
+ </failure>
+ </testcase>
+ <testcase classname="global" name="looped tests" time="{duration}">
+ <failure message="1 == 0" type="CHECK">
+Testing if fib[0] (1) is even
+MiscTests.cpp:<line number>
+ </failure>
+ <failure message="1 == 0" type="CHECK">
+Testing if fib[1] (1) is even
+MiscTests.cpp:<line number>
+ </failure>
+ <failure message="1 == 0" type="CHECK">
+Testing if fib[3] (3) is even
+MiscTests.cpp:<line number>
+ </failure>
+ <failure message="1 == 0" type="CHECK">
+Testing if fib[4] (5) is even
+MiscTests.cpp:<line number>
+ </failure>
+ <failure message="1 == 0" type="CHECK">
+Testing if fib[6] (13) is even
+MiscTests.cpp:<line number>
+ </failure>
+ <failure message="1 == 0" type="CHECK">
+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="&quot;this string contains 'abc' as a substring&quot; contains: &quot;not there&quot;" type="CHECK_THAT">
+MiscTests.cpp:<line number>
+ </failure>
+ </testcase>
+ <testcase classname="global" name="StartsWith string matcher" time="{duration}">
+ <failure message="&quot;this string contains 'abc' as a substring&quot; starts with: &quot;string&quot;" type="CHECK_THAT">
+MiscTests.cpp:<line number>
+ </failure>
+ </testcase>
+ <testcase classname="global" name="EndsWith string matcher" time="{duration}">
+ <failure message="&quot;this string contains 'abc' as a substring&quot; ends with: &quot;this&quot;" type="CHECK_THAT">
+MiscTests.cpp:<line number>
+ </failure>
+ </testcase>
+ <testcase classname="global" name="Equals string matcher" time="{duration}">
+ <failure message="&quot;this string contains 'abc' as a substring&quot; equals: &quot;something else&quot;" 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 &amp;&amp; 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 &amp;&amp; and ||" time="{duration}"/>
+ <testcase classname="global" name="Matchers can be composed with both &amp;&amp; and || - failing" time="{duration}">
+ <failure message="&quot;this string contains 'abc' as a substring&quot; ( ( contains: &quot;string&quot; or contains: &quot;different&quot; ) and contains: &quot;random&quot; )" 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="&quot;this string contains 'abc' as a substring&quot; not contains: &quot;substring&quot;" 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
+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="not allowed" time="{duration}"/>
+ <testcase classname="global" name="Tabs and newlines show in output" time="{duration}">
+ <failure message="&quot;if ($b == 10) {
+ $a = 20;
+}&quot;
+==
+&quot;if ($b == 10) {
+ $a = 20;
+}
+&quot;" 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="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="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}"/>
+ <testcase classname="replaceInPlace" name="replace last char" time="{duration}"/>
+ <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>
+ </failure>
+ <failure message="{?} == {?}" type="CHECK">
+TrickyTests.cpp:<line number>
+ </failure>
+ </testcase>
+ <testcase classname="global" name="string literals of different sizes can be compared" time="{duration}">
+ <failure message="&quot;first&quot; == &quot;second&quot;" 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( has_maker )" time="{duration}"/>
+ <testcase classname="global" name="toString( has_maker_and_toString )" time="{duration}"/>
+ <testcase classname="global" name="toString( vectors&lt;has_toString )" time="{duration}"/>
+ <testcase classname="global" name="toString( vectors&lt;has_maker )" time="{duration}"/>
+ <testcase classname="global" name="toString( vectors&lt;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&lt;int,std::string> -> toString" time="{duration}"/>
+ <testcase classname="global" name="std::pair&lt;int,const std::string> -> toString" time="{duration}"/>
+ <testcase classname="global" name="std::vector&lt;std::pair&lt;std::string,int> > -> toString" time="{duration}"/>
+ <testcase classname="global" name="pair&lt;pair&lt;int,const char *,pair&lt;std::string,int> > -> toString" time="{duration}"/>
+ <testcase classname="global" name="vector&lt;int> -> toString" time="{duration}"/>
+ <testcase classname="global" name="vector&lt;string> -> toString" time="{duration}"/>
+ <testcase classname="global" name="vector&lt;int,allocator> -> toString" time="{duration}"/>
+ <testcase classname="global" name="vec&lt;vec&lt;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&lt;>" time="{duration}"/>
+ <testcase classname="global" name="tuple&lt;int>" time="{duration}"/>
+ <testcase classname="global" name="tuple&lt;float,int>" time="{duration}"/>
+ <testcase classname="global" name="tuple&lt;string,string>" time="{duration}"/>
+ <testcase classname="global" name="tuple&lt;tuple&lt;int>,tuple&lt;>,float>" time="{duration}"/>
+ <testcase classname="global" name="tuple&lt;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}"/>
+ <system-out>
+Message from section one
+Message from section two
+A string sent directly to stdout
+hello
+hello
+ </system-out>
+ <system-err>
+A string sent directly to stderr
+ </system-err>
+ </testsuite>
+</testsuites>
diff --git a/projects/SelfTest/Baselines/xml.sw.approved.txt b/projects/SelfTest/Baselines/xml.sw.approved.txt
new file mode 100644
index 0000000..c0af02f
--- /dev/null
+++ b/projects/SelfTest/Baselines/xml.sw.approved.txt
@@ -0,0 +1,9569 @@
+<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&lt;&lt;)">
+ <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&lt;&lt;)">
+ <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>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="Some simple comparisons between doubles">
+ <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>
+ 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>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="Approximate comparisons with different epsilons">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+ <Original>
+ d != Approx( 1.231 )
+ </Original>
+ <Expanded>
+ 1.23 != Approx( 1.231 )
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+ <Original>
+ d == Approx( 1.231 ).epsilon( 0.1 )
+ </Original>
+ <Expanded>
+ 1.23 == Approx( 1.231 )
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </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" >
+ <Original>
+ 0.0f == Approx( 0.0f )
+ </Original>
+ <Expanded>
+ 0.0f == Approx( 0.0 )
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="Approximate comparisons with ints">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+ <Original>
+ 1 == Approx( 1 )
+ </Original>
+ <Expanded>
+ 1 == Approx( 1.0 )
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+ <Original>
+ 0 == Approx( 0 )
+ </Original>
+ <Expanded>
+ 0 == Approx( 0.0 )
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="Approximate comparisons with mixed numeric types">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+ <Original>
+ 1.0f == Approx( 1 )
+ </Original>
+ <Expanded>
+ 1.0f == Approx( 1.0 )
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+ <Original>
+ 0 == Approx( dZero)
+ </Original>
+ <Expanded>
+ 0 == Approx( 0.0 )
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+ <Original>
+ 0 == Approx( dSmall ).epsilon( 0.001 )
+ </Original>
+ <Expanded>
+ 0 == Approx( 0.00001 )
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+ <Original>
+ 1.234f == Approx( dMedium )
+ </Original>
+ <Expanded>
+ 1.234f == Approx( 1.234 )
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
+ <Original>
+ dMedium == Approx( 1.234f )
+ </Original>
+ <Expanded>
+ 1.234 == Approx( 1.2339999676 )
+ </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>
+ <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" >
+ <Original>
+ divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 )
+ </Original>
+ <Expanded>
+ 3.1428571429 != Approx( 3.141 )
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="A METHOD_AS_TEST_CASE based test run that succeeds">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" >
+ <Original>
+ s == "hello"
+ </Original>
+ <Expanded>
+ "hello" == "hello"
+ </Expanded>
+ </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" >
+ <Original>
+ s == "world"
+ </Original>
+ <Expanded>
+ "hello" == "world"
+ </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" >
+ <Original>
+ m_a == 1
+ </Original>
+ <Expanded>
+ 1 == 1
+ </Expanded>
+ </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>
+ <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" >
+ <Original>
+ "hello" == data.str_hello
+ </Original>
+ <Expanded>
+ "hello" == "hello"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.str_hello.size() == 5
+ </Original>
+ <Expanded>
+ 5 == 5
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ x == Approx( 1.3 )
+ </Original>
+ <Expanded>
+ 1.3 == Approx( 1.3 )
+ </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>
+ <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" >
+ <Original>
+ data.str_hello != "hello1"
+ </Original>
+ <Expanded>
+ "hello" != "hello1"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.str_hello.size() != 6
+ </Original>
+ <Expanded>
+ 5 != 6
+ </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" >
+ <Original>
+ data.str_hello != "hello"
+ </Original>
+ <Expanded>
+ "hello" != "hello"
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.str_hello.size() != 5
+ </Original>
+ <Expanded>
+ 5 != 5
+ </Expanded>
+ </Expression>
+ <OverallResult success="false"/>
+ </TestCase>
+ <TestCase name="Ordering comparison checks that should succeed">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.int_seven &lt; 8
+ </Original>
+ <Expanded>
+ 7 &lt; 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 &lt;= 7
+ </Original>
+ <Expanded>
+ 7 &lt;= 7
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.int_seven &lt;= 8
+ </Original>
+ <Expanded>
+ 7 &lt;= 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" >
+ <Original>
+ data.float_nine_point_one &lt; 10
+ </Original>
+ <Expanded>
+ 9.1f &lt; 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.float_nine_point_one &lt; 9.2
+ </Original>
+ <Expanded>
+ 9.1f &lt; 9.2
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.str_hello &lt;= "hello"
+ </Original>
+ <Expanded>
+ "hello" &lt;= "hello"
+ </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" >
+ <Original>
+ data.str_hello &lt; "hellp"
+ </Original>
+ <Expanded>
+ "hello" &lt; "hellp"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.str_hello &lt; "zebra"
+ </Original>
+ <Expanded>
+ "hello" &lt; "zebra"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.str_hello > "hellm"
+ </Original>
+ <Expanded>
+ "hello" > "hellm"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.str_hello > "a"
+ </Original>
+ <Expanded>
+ "hello" > "a"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="Ordering comparison 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.int_seven &lt; 7
+ </Original>
+ <Expanded>
+ 7 &lt; 7
+ </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 &lt; 6
+ </Original>
+ <Expanded>
+ 7 &lt; 6
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.int_seven &lt; 0
+ </Original>
+ <Expanded>
+ 7 &lt; 0
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.int_seven &lt; -1
+ </Original>
+ <Expanded>
+ 7 &lt; -1
+ </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 &lt;= 6
+ </Original>
+ <Expanded>
+ 7 &lt;= 6
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.float_nine_point_one &lt; 9
+ </Original>
+ <Expanded>
+ 9.1f &lt; 9
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.float_nine_point_one > 10
+ </Original>
+ <Expanded>
+ 9.1f > 10
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/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/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.str_hello > "hello"
+ </Original>
+ <Expanded>
+ "hello" > "hello"
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.str_hello &lt; "hello"
+ </Original>
+ <Expanded>
+ "hello" &lt; "hello"
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.str_hello > "hellp"
+ </Original>
+ <Expanded>
+ "hello" > "hellp"
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.str_hello > "z"
+ </Original>
+ <Expanded>
+ "hello" > "z"
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.str_hello &lt; "hellm"
+ </Original>
+ <Expanded>
+ "hello" &lt; "hellm"
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.str_hello &lt; "a"
+ </Original>
+ <Expanded>
+ "hello" &lt; "a"
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.str_hello >= "z"
+ </Original>
+ <Expanded>
+ "hello" >= "z"
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ data.str_hello &lt;= "a"
+ </Original>
+ <Expanded>
+ "hello" &lt;= "a"
+ </Expanded>
+ </Expression>
+ <OverallResult success="false"/>
+ </TestCase>
+ <TestCase name="Comparisons with int literals don't warn when mixing signed/ unsigned">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ i == 1
+ </Original>
+ <Expanded>
+ 1 == 1
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ ui == 2
+ </Original>
+ <Expanded>
+ 2 == 2
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ l == 3
+ </Original>
+ <Expanded>
+ 3 == 3
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ ul == 4
+ </Original>
+ <Expanded>
+ 4 == 4
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ c == 5
+ </Original>
+ <Expanded>
+ 5 == 5
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ uc == 6
+ </Original>
+ <Expanded>
+ 6 == 6
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ 1 == i
+ </Original>
+ <Expanded>
+ 1 == 1
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ 2 == ui
+ </Original>
+ <Expanded>
+ 2 == 2
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ 3 == l
+ </Original>
+ <Expanded>
+ 3 == 3
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ 4 == ul
+ </Original>
+ <Expanded>
+ 4 == 4
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ 5 == c
+ </Original>
+ <Expanded>
+ 5 == 5
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ 6 == uc
+ </Original>
+ <Expanded>
+ 6 == 6
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ (std::numeric_limits&lt;unsigned long>::max)() > ul
+ </Original>
+ <Expanded>
+ 18446744073709551615 (0x<hex digits>)
+>
+4
+ </Expanded>
+ </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" >
+ <Original>
+ long_var == unsigned_long_var
+ </Original>
+ <Expanded>
+ 1 == 1
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </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" >
+ <Original>
+ unsigned_long_var == 1
+ </Original>
+ <Expanded>
+ 1 == 1
+ </Expanded>
+ </Expression>
+ <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/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 &lt; -1 )
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ 2u &lt; -1
+ </Original>
+ <Expanded>
+ 2 &lt; -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" >
+ <Original>
+ minInt > 2u
+ </Original>
+ <Expanded>
+ -2147483648 > 2
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </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>
+ <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" >
+ <Original>
+ nullptr != p
+ </Original>
+ <Expanded>
+ nullptr != 0x<hex digits>
+ </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" >
+ <Original>
+ !falseValue
+ </Original>
+ <Expanded>
+ !false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ !(1 == 2)
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ !1 == 2
+ </Original>
+ <Expanded>
+ !(1 == 2)
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="'Not' checks that should fail">
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ false != false
+ </Original>
+ <Expanded>
+ false != false
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ true != true
+ </Original>
+ <Expanded>
+ true != true
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ !true
+ </Original>
+ <Expanded>
+ false
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ !true
+ </Original>
+ <Expanded>
+ !true
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ !trueValue
+ </Original>
+ <Expanded>
+ false
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ !trueValue
+ </Original>
+ <Expanded>
+ !true
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ !(1 == 1)
+ </Original>
+ <Expanded>
+ false
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
+ <Original>
+ !1 == 1
+ </Original>
+ <Expanded>
+ !(1 == 1)
+ </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" >
+ <Original>
+ thisThrows()
+ </Original>
+ <Expanded>
+ thisThrows()
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE_NOTHROW" filename="projects/SelfTest/ExceptionTests.cpp" >
+ <Original>
+ thisDoesntThrow()
+ </Original>
+ <Expanded>
+ thisDoesntThrow()
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE_THROWS" filename="projects/SelfTest/ExceptionTests.cpp" >
+ <Original>
+ thisThrows()
+ </Original>
+ <Expanded>
+ thisThrows()
+ </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" >
+ <Original>
+ thisDoesntThrow()
+ </Original>
+ <Expanded>
+ thisDoesntThrow()
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK_NOTHROW" filename="projects/SelfTest/ExceptionTests.cpp" >
+ <Original>
+ thisThrows()
+ </Original>
+ <Expanded>
+ thisThrows()
+ </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" >
+ <Original>
+ 1 == 1
+ </Original>
+ <Expanded>
+ 1 == 1
+ </Expanded>
+ </Expression>
+ <Expression success="false" filename="projects/SelfTest/ExceptionTests.cpp" >
+ <Original>
+ {Unknown expression after the reported line}
+ </Original>
+ <Expanded>
+ {Unknown expression after the reported line}
+ </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" >
+ <Original>
+ thisThrows() == 0
+ </Original>
+ <Expanded>
+ thisThrows() == 0
+ </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" >
+ <Original>
+ thisThrows() == 0
+ </Original>
+ <Expanded>
+ thisThrows() == 0
+ </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" >
+ <Original>
+ thisThrows() == 0
+ </Original>
+ <Expanded>
+ thisThrows() == 0
+ </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" >
+ <Original>
+ throwCustom()
+ </Original>
+ <Expanded>
+ throwCustom()
+ </Expanded>
+ <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
+ custom exception - not std
+ </Exception>
+ </Expression>
+ <OverallResult success="false"/>
+ </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" >
+ <Original>
+ throwCustom()
+ </Original>
+ <Expanded>
+ throwCustom()
+ </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" >
+ <Original>
+ thisFunctionNotImplemented( 7 )
+ </Original>
+ <Expanded>
+ thisFunctionNotImplemented( 7 )
+ </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" >
+ <Original>
+ thisThrows(), "expected exception"
+ </Original>
+ <Expanded>
+ thisThrows(), "expected exception"
+ </Expanded>
+ </Expression>
+ <OverallResults successes="1" failures="0" expectedFailures="0"/>
+ </Section>
+ <Section name="different case">
+ <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" >
+ <Original>
+ thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No )
+ </Original>
+ <Expanded>
+ thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No )
+ </Expanded>
+ </Expression>
+ <OverallResults successes="1" failures="0" expectedFailures="0"/>
+ </Section>
+ <Section name="wildcarded">
+ <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" >
+ <Original>
+ thisThrows(), StartsWith( "expected" )
+ </Original>
+ <Expanded>
+ thisThrows(), StartsWith( "expected" )
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" >
+ <Original>
+ thisThrows(), EndsWith( "exception" )
+ </Original>
+ <Expanded>
+ thisThrows(), EndsWith( "exception" )
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" >
+ <Original>
+ thisThrows(), Contains( "except" )
+ </Original>
+ <Expanded>
+ thisThrows(), Contains( "except" )
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" >
+ <Original>
+ thisThrows(), Contains( "exCept", Catch::CaseSensitive::No )
+ </Original>
+ <Expanded>
+ thisThrows(), Contains( "exCept", Catch::CaseSensitive::No )
+ </Expanded>
+ </Expression>
+ <OverallResults successes="4" failures="0" expectedFailures="0"/>
+ </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" >
+ <Original>
+ thisThrows(), "expected exception"
+ </Original>
+ <Expanded>
+ thisThrows(), "expected exception"
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="REQUIRE_THROWS_WITH" filename="projects/SelfTest/ExceptionTests.cpp" >
+ <Original>
+ thisThrows(), "should fail"
+ </Original>
+ <Expanded>
+ expected exception
+ </Expanded>
+ </Expression>
+ <OverallResult success="false"/>
+ </TestCase>
+ <TestCase name="Generators over two ranges">
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 2 == 2
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 200 == 200
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 4 == 4
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 200 == 200
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 6 == 6
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 200 == 200
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 8 == 8
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 200 == 200
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 10 == 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 200 == 200
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 30 == 30
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 200 == 200
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 40 == 40
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 200 == 200
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 42 == 42
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 200 == 200
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 72 == 72
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 200 == 200
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 2 == 2
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 202 == 202
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 4 == 4
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 202 == 202
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 6 == 6
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 202 == 202
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 8 == 8
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 202 == 202
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 10 == 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 202 == 202
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 30 == 30
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 202 == 202
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 40 == 40
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 202 == 202
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 42 == 42
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 202 == 202
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 72 == 72
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 202 == 202
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 2 == 2
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 204 == 204
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 4 == 4
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 204 == 204
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 6 == 6
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 204 == 204
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 8 == 8
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 204 == 204
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 10 == 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 204 == 204
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 30 == 30
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 204 == 204
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 40 == 40
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 204 == 204
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 42 == 42
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 204 == 204
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 72 == 72
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 204 == 204
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 2 == 2
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 206 == 206
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 4 == 4
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 206 == 206
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 6 == 6
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 206 == 206
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 8 == 8
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 206 == 206
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 10 == 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 206 == 206
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 30 == 30
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 206 == 206
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 40 == 40
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 206 == 206
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 42 == 42
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 206 == 206
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 72 == 72
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 206 == 206
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 2 == 2
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 208 == 208
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 4 == 4
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 208 == 208
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 6 == 6
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 208 == 208
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 8 == 8
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 208 == 208
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 10 == 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 208 == 208
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 30 == 30
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 208 == 208
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 40 == 40
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 208 == 208
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 42 == 42
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 208 == 208
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 72 == 72
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 208 == 208
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 2 == 2
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 210 == 210
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 4 == 4
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 210 == 210
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 6 == 6
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 210 == 210
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 8 == 8
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 210 == 210
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 10 == 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 210 == 210
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 30 == 30
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 210 == 210
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 40 == 40
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 210 == 210
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 42 == 42
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 210 == 210
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 72 == 72
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 210 == 210
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 2 == 2
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 212 == 212
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 4 == 4
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 212 == 212
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 6 == 6
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 212 == 212
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 8 == 8
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 212 == 212
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 10 == 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 212 == 212
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 30 == 30
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 212 == 212
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 40 == 40
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 212 == 212
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 42 == 42
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 212 == 212
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 72 == 72
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 212 == 212
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 2 == 2
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 214 == 214
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 4 == 4
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 214 == 214
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 6 == 6
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 214 == 214
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 8 == 8
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 214 == 214
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 10 == 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 214 == 214
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 30 == 30
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 214 == 214
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 40 == 40
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 214 == 214
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 42 == 42
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 214 == 214
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( i, 2 ) == i*2
+ </Original>
+ <Expanded>
+ 72 == 72
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ multiply( j, 2 ) == j*2
+ </Original>
+ <Expanded>
+ 214 == 214
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="Generator over a range of pairs">
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ i->first == i->second-1
+ </Original>
+ <Expanded>
+ 0 == 0
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
+ <Original>
+ i->first == i->second-1
+ </Original>
+ <Expanded>
+ 2 == 2
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="INFO and WARN do not abort tests">
+ <Info>
+ this is a message
+ </Info>
+ <Warning>
+ this is a warning
+ </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
+ </Info>
+ <Info>
+ so should this
+ </Info>
+ <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+ <Original>
+ a == 1
+ </Original>
+ <Expanded>
+ 2 == 1
+ </Expanded>
+ </Expression>
+ <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" >
+ <Original>
+ a == 2
+ </Original>
+ <Expanded>
+ 2 == 2
+ </Expanded>
+ </Expression>
+ <Info>
+ this message should be logged
+ </Info>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/MessageTests.cpp" >
+ <Original>
+ a == 1
+ </Original>
+ <Expanded>
+ 2 == 1
+ </Expanded>
+ </Expression>
+ <Info>
+ and this, but later
+ </Info>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/MessageTests.cpp" >
+ <Original>
+ a == 0
+ </Original>
+ <Expanded>
+ 2 == 0
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/MessageTests.cpp" >
+ <Original>
+ a == 2
+ </Original>
+ <Expanded>
+ 2 == 2
+ </Expanded>
+ </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 &lt; 10
+ </Original>
+ <Expanded>
+ 0 &lt; 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+ <Original>
+ i &lt; 10
+ </Original>
+ <Expanded>
+ 1 &lt; 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+ <Original>
+ i &lt; 10
+ </Original>
+ <Expanded>
+ 2 &lt; 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+ <Original>
+ i &lt; 10
+ </Original>
+ <Expanded>
+ 3 &lt; 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+ <Original>
+ i &lt; 10
+ </Original>
+ <Expanded>
+ 4 &lt; 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+ <Original>
+ i &lt; 10
+ </Original>
+ <Expanded>
+ 5 &lt; 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+ <Original>
+ i &lt; 10
+ </Original>
+ <Expanded>
+ 6 &lt; 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+ <Original>
+ i &lt; 10
+ </Original>
+ <Expanded>
+ 7 &lt; 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+ <Original>
+ i &lt; 10
+ </Original>
+ <Expanded>
+ 8 &lt; 10
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+ <Original>
+ i &lt; 10
+ </Original>
+ <Expanded>
+ 9 &lt; 10
+ </Expanded>
+ </Expression>
+ <Info>
+ current counter 10
+ </Info>
+ <Info>
+ i := 10
+ </Info>
+ <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
+ <Original>
+ i &lt; 10
+ </Original>
+ <Expanded>
+ 10 &lt; 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 &lt; b
+ </Original>
+ <Expanded>
+ 1 &lt; 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&lt;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&lt;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="&lt;test>it should be possible to embed xml characters, such as &lt;, &quot; or &amp;, or even whole &lt;xml>documents&lt;/xml> within an attribute&lt;/test>">
+ <OverallResults successes="1" failures="0" expectedFailures="0"/>
+ </Section>
+ <Section name="encoded chars" description="these should all be encoded: &amp;&amp;&amp;&quot;&quot;&quot;&lt;&lt;&lt;&amp;&quot;&lt;&lt;&amp;&quot;">
+ <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 &amp;&amp; operator">
+ <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+ <Original>
+ testStringForMatching(), Contains( "string" ) &amp;&amp; Contains( "abc" ) &amp;&amp; Contains( "substring" ) &amp;&amp; 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" >
+ <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/SelfTest/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="Matchers can be composed with both &amp;&amp; and ||">
+ <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+ <Original>
+ testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) &amp;&amp; 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="Matchers can be composed with both &amp;&amp; and || - failing">
+ <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
+ <Original>
+ testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) &amp;&amp; Contains( "random" )
+ </Original>
+ <Expanded>
+ "this string contains 'abc' as a substring" ( ( contains: "string" or contains: "different" ) and contains: "random" )
+ </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" >
+ <Original>
+ 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/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" >
+ <Original>
+ Factorial(3) == 6
+ </Original>
+ <Expanded>
+ 6 == 6
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
+ <Original>
+ Factorial(10) == 3628800
+ </Original>
+ <Expanded>
+ 3628800 (0x<hex digits>) == 3628800 (0x<hex digits>)
+ </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" >
+ <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>
+ <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" >
+ <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>
+ <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" >
+ <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>
+ <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
+ </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>
+ <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" >
+ <Original>
+ s1 == s2
+ </Original>
+ <Expanded>
+ "if ($b == 10) {
+ $a = 20;
+}"
+==
+"if ($b == 10) {
+ $a = 20;
+}
+"
+ </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" >
+ <Original>
+ result == "\"wide load\""
+ </Original>
+ <Expanded>
+ ""wide load"" == ""wide load""
+ </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" >
+ <Original>
+ result == "\"wide load\""
+ </Original>
+ <Expanded>
+ ""wide load"" == ""wide load""
+ </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" >
+ <Original>
+ result == "\"wide load\""
+ </Original>
+ <Expanded>
+ ""wide load"" == ""wide load""
+ </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" >
+ <Original>
+ result == "\"wide load\""
+ </Original>
+ <Expanded>
+ ""wide load"" == ""wide load""
+ </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 &amp; jones" ) == "smith &amp;amp; jones"
+ </Original>
+ <Expanded>
+ "smith &amp;amp; jones" == "smith &amp;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 &lt; jones" ) == "smith &amp;lt; jones"
+ </Original>
+ <Expanded>
+ "smith &amp;lt; jones" == "smith &amp;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 ]]&gt; jones" ) == "smith ]]&amp;gt; jones"
+ </Original>
+ <Expanded>
+ "smith ]]&amp;gt; jones"
+==
+"smith ]]&amp;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 &amp;quot;quote&amp;quot; me on that"
+ </Original>
+ <Expanded>
+ "don't &amp;quot;quote&amp;quot; me on that"
+==
+"don't &amp;quot;quote&amp;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]" ) == "[&amp;#x1]"
+ </Original>
+ <Expanded>
+ "[&amp;#x1]" == "[&amp;#x1]"
+ </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]" ) == "[&amp;#x7F]"
+ </Original>
+ <Expanded>
+ "[&amp;#x7F]" == "[&amp;#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" >
+ <Original>
+ l == std::numeric_limits&lt;long long>::max()
+ </Original>
+ <Expanded>
+ 9223372036854775807 (0x<hex digits>)
+==
+9223372036854775807 (0x<hex digits>)
+ </Expanded>
+ </Expression>
+ <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 &lt;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 &lt;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" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString
+ </Original>
+ <Expanded>
+ "one two three four"
+==
+"one two three four"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 18 ) ).toString() == testString
+ </Original>
+ <Expanded>
+ "one two three four"
+==
+"one two three four"
+ </Expanded>
+ </Expression>
+ <OverallResults successes="2" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="2" failures="0" expectedFailures="0"/>
+ </Section>
+ <Section name="plain string">
+ <Section name="Wrapped once">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 17 ) ).toString() == "one two three\nfour"
+ </Original>
+ <Expanded>
+ "one two three
+four"
+==
+"one two three
+four"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 16 ) ).toString() == "one two three\nfour"
+ </Original>
+ <Expanded>
+ "one two three
+four"
+==
+"one two three
+four"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 14 ) ).toString() == "one two three\nfour"
+ </Original>
+ <Expanded>
+ "one two three
+four"
+==
+"one two three
+four"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 13 ) ).toString() == "one two three\nfour"
+ </Original>
+ <Expanded>
+ "one two three
+four"
+==
+"one two three
+four"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 12 ) ).toString() == "one two\nthree four"
+ </Original>
+ <Expanded>
+ "one two
+three four"
+==
+"one two
+three four"
+ </Expanded>
+ </Expression>
+ <OverallResults successes="5" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="5" failures="0" expectedFailures="0"/>
+ </Section>
+ <Section name="plain string">
+ <Section name="Wrapped twice">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 9 ) ).toString() == "one two\nthree\nfour"
+ </Original>
+ <Expanded>
+ "one two
+three
+four"
+==
+"one two
+three
+four"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 8 ) ).toString() == "one two\nthree\nfour"
+ </Original>
+ <Expanded>
+ "one two
+three
+four"
+==
+"one two
+three
+four"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 7 ) ).toString() == "one two\nthree\nfour"
+ </Original>
+ <Expanded>
+ "one two
+three
+four"
+==
+"one two
+three
+four"
+ </Expanded>
+ </Expression>
+ <OverallResults successes="3" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="3" failures="0" expectedFailures="0"/>
+ </Section>
+ <Section name="plain string">
+ <Section name="Wrapped three times">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 6 ) ).toString() == "one\ntwo\nthree\nfour"
+ </Original>
+ <Expanded>
+ "one
+two
+three
+four"
+==
+"one
+two
+three
+four"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 5 ) ).toString() == "one\ntwo\nthree\nfour"
+ </Original>
+ <Expanded>
+ "one
+two
+three
+four"
+==
+"one
+two
+three
+four"
+ </Expanded>
+ </Expression>
+ <OverallResults successes="2" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="2" failures="0" expectedFailures="0"/>
+ </Section>
+ <Section name="plain string">
+ <Section name="Short wrap">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( "abcdef", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndef"
+ </Original>
+ <Expanded>
+ "abc-
+def"
+==
+"abc-
+def"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( "abcdefg", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndefg"
+ </Original>
+ <Expanded>
+ "abc-
+defg"
+==
+"abc-
+defg"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( "abcdefgh", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndef-\ngh"
+ </Original>
+ <Expanded>
+ "abc-
+def-
+gh"
+==
+"abc-
+def-
+gh"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 4 ) ).toString() == "one\ntwo\nthr-\nee\nfour"
+ </Original>
+ <Expanded>
+ "one
+two
+thr-
+ee
+four"
+==
+"one
+two
+thr-
+ee
+four"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 3 ) ).toString() == "one\ntwo\nth-\nree\nfo-\nur"
+ </Original>
+ <Expanded>
+ "one
+two
+th-
+ree
+fo-
+ur"
+==
+"one
+two
+th-
+ree
+fo-
+ur"
+ </Expanded>
+ </Expression>
+ <OverallResults successes="5" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="5" failures="0" expectedFailures="0"/>
+ </Section>
+ <Section name="plain string">
+ <Section name="As container">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ text.size() == 4
+ </Original>
+ <Expanded>
+ 4 == 4
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ text[0] == "one"
+ </Original>
+ <Expanded>
+ "one" == "one"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ text[1] == "two"
+ </Original>
+ <Expanded>
+ "two" == "two"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ text[2] == "three"
+ </Original>
+ <Expanded>
+ "three" == "three"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ text[3] == "four"
+ </Original>
+ <Expanded>
+ "four" == "four"
+ </Expanded>
+ </Expression>
+ <OverallResults successes="5" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="5" failures="0" expectedFailures="0"/>
+ </Section>
+ <Section name="plain string">
+ <Section name="Indent first line differently">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ text.toString() == " one two\n three\n four"
+ </Original>
+ <Expanded>
+ " one two
+ three
+ four"
+==
+" one two
+ three
+ four"
+ </Expanded>
+ </Expression>
+ <OverallResults successes="1" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="1" failures="0" expectedFailures="0"/>
+ </Section>
+ <Section name="With newlines">
+ <Section name="No wrapping">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString
+ </Original>
+ <Expanded>
+ "one two
+three four"
+==
+"one two
+three four"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 18 ) ).toString() == testString
+ </Original>
+ <Expanded>
+ "one two
+three four"
+==
+"one two
+three four"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 10 ) ).toString() == testString
+ </Original>
+ <Expanded>
+ "one two
+three four"
+==
+"one two
+three four"
+ </Expanded>
+ </Expression>
+ <OverallResults successes="3" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="3" failures="0" expectedFailures="0"/>
+ </Section>
+ <Section name="With newlines">
+ <Section name="Trailing newline">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( "abcdef\n", TextAttributes().setWidth( 10 ) ).toString() == "abcdef\n"
+ </Original>
+ <Expanded>
+ "abcdef
+"
+==
+"abcdef
+"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( "abcdef", TextAttributes().setWidth( 6 ) ).toString() == "abcdef"
+ </Original>
+ <Expanded>
+ "abcdef" == "abcdef"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( "abcdef\n", TextAttributes().setWidth( 6 ) ).toString() == "abcdef\n"
+ </Original>
+ <Expanded>
+ "abcdef
+"
+==
+"abcdef
+"
+ </Expanded>
+ </Expression>
+ <OverallResults successes="3" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="3" failures="0" expectedFailures="0"/>
+ </Section>
+ <Section name="With newlines">
+ <Section name="Wrapped once">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 9 ) ).toString() == "one two\nthree\nfour"
+ </Original>
+ <Expanded>
+ "one two
+three
+four"
+==
+"one two
+three
+four"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 8 ) ).toString() == "one two\nthree\nfour"
+ </Original>
+ <Expanded>
+ "one two
+three
+four"
+==
+"one two
+three
+four"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 7 ) ).toString() == "one two\nthree\nfour"
+ </Original>
+ <Expanded>
+ "one two
+three
+four"
+==
+"one two
+three
+four"
+ </Expanded>
+ </Expression>
+ <OverallResults successes="3" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="3" failures="0" expectedFailures="0"/>
+ </Section>
+ <Section name="With newlines">
+ <Section name="Wrapped twice">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ Text( testString, TextAttributes().setWidth( 6 ) ).toString() == "one\ntwo\nthree\nfour"
+ </Original>
+ <Expanded>
+ "one
+two
+three
+four"
+==
+"one
+two
+three
+four"
+ </Expanded>
+ </Expression>
+ <OverallResults successes="1" failures="0" expectedFailures="0"/>
+ </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"
+==
+"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>
+ <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>
+ <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"
+==
+"hi
+there"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="Long text is truncted">
+ <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TestMain.cpp" >
+ <Original>
+ t.toString(), EndsWith( "... message truncated due to excessive size" )
+ </Original>
+ <Expanded>
+ "******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+******************************************************************************-
+************************
+******************************************************************************-
+... message truncated due to excessive size" ends with: "... message truncated due to excessive size"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="ManuallyRegistered">
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="Parsing a std::pair">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ (std::pair&lt;int, int>( 1, 2 )) == aNicePair
+ </Original>
+ <Expanded>
+ std::pair( 1, 2 ) == std::pair( 1, 2 )
+ </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>
+ <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="A failing expression with a non streamable type is still captured">
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ &amp;o1 == &amp;o2
+ </Original>
+ <Expanded>
+ 0x<hex digits> == 0x<hex digits>
+ </Expanded>
+ </Expression>
+ <Expression success="false" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ o1 == o2
+ </Original>
+ <Expanded>
+ {?} == {?}
+ </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" >
+ <Original>
+ std::string( "first" ) == "second"
+ </Original>
+ <Expanded>
+ "first" == "second"
+ </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" >
+ <Original>
+ i++ == 7
+ </Original>
+ <Expanded>
+ 7 == 7
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ i++ == 8
+ </Original>
+ <Expanded>
+ 8 == 8
+ </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" >
+ <Original>
+ 0x<hex digits> == o
+ </Original>
+ <Expanded>
+ 3221225472 (0x<hex digits>) == {?}
+ </Expanded>
+ </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" >
+ <Original>
+ t == 1u
+ </Original>
+ <Expanded>
+ {?} == 1
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="Test enum bit values">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ 0x<hex digits> == bit30and31
+ </Original>
+ <Expanded>
+ 3221225472 (0x<hex digits>) == 3221225472
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="boolean member">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ obj.prop != nullptr
+ </Original>
+ <Expanded>
+ 0x<hex digits> != nullptr
+ </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" >
+ <Original>
+ is_true&lt;true>::value == true
+ </Original>
+ <Expanded>
+ true == true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ true == is_true&lt;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/SelfTest/TrickyTests.cpp" >
+ <Original>
+ is_true&lt;false>::value == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ false == is_true&lt;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/SelfTest/TrickyTests.cpp" >
+ <Original>
+ !is_true&lt;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/SelfTest/TrickyTests.cpp" >
+ <Original>
+ !!is_true&lt;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/SelfTest/TrickyTests.cpp" >
+ <Original>
+ is_true&lt;true>::value
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ !is_true&lt;false>::value
+ </Original>
+ <Expanded>
+ !false
+ </Expanded>
+ </Expression>
+ <OverallResults successes="2" 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" >
+ <Original>
+ True
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ !False
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ !False
+ </Original>
+ <Expanded>
+ !false
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="Assertions then sections">
+ <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 section">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/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/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" >
+ <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="non streamable - with conv. op">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ s == "7"
+ </Original>
+ <Expanded>
+ "7" == "7"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="Comparing function pointers">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ a
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ a == &amp;foo
+ </Original>
+ <Expanded>
+ 0x<hex digits> == 0x<hex digits>
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="Comparing member function pointers">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ m == &amp;S::f
+ </Original>
+ <Expanded>
+ 0x<hex digits>
+==
+0x<hex digits>
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="pointer to class">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ p == 0
+ </Original>
+ <Expanded>
+ NULL == 0
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="null_ptr">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
+ <Original>
+ ptr.get() == nullptr
+ </Original>
+ <Expanded>
+ NULL == nullptr
+ </Expanded>
+ </Expression>
+ <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="toString( has_toString )">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+ <Original>
+ Catch::toString( item ) == "toString( has_toString )"
+ </Original>
+ <Expanded>
+ "toString( has_toString )"
+==
+"toString( has_toString )"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="toString( has_maker )">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+ <Original>
+ Catch::toString( item ) == "StringMaker&lt;has_maker>"
+ </Original>
+ <Expanded>
+ "StringMaker&lt;has_maker>"
+==
+"StringMaker&lt;has_maker>"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="toString( has_maker_and_toString )">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+ <Original>
+ Catch::toString( item ) == "toString( has_maker_and_toString )"
+ </Original>
+ <Expanded>
+ "toString( has_maker_and_toString )"
+==
+"toString( has_maker_and_toString )"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="toString( vectors&lt;has_toString )">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+ <Original>
+ Catch::toString( v ) == "{ {?} }"
+ </Original>
+ <Expanded>
+ "{ {?} }" == "{ {?} }"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="toString( vectors&lt;has_maker )">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+ <Original>
+ Catch::toString( v ) == "{ StringMaker&lt;has_maker> }"
+ </Original>
+ <Expanded>
+ "{ StringMaker&lt;has_maker> }"
+==
+"{ StringMaker&lt;has_maker> }"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="toString( vectors&lt;has_maker_and_toString )">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+ <Original>
+ Catch::toString( v ) == "{ StringMaker&lt;has_maker_and_toString> }"
+ </Original>
+ <Expanded>
+ "{ StringMaker&lt;has_maker_and_toString> }"
+==
+"{ StringMaker&lt;has_maker_and_toString> }"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="Tracker">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Section name="successfully close one section">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isSuccessfullyCompleted()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ ctx.completedCycle()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isSuccessfullyCompleted()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <OverallResults successes="4" failures="0" expectedFailures="0"/>
+ </Section>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Section name="fail one section">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isSuccessfullyCompleted() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ ctx.completedCycle()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isSuccessfullyCompleted() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Section name="re-enter after failed section">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase2.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1b.isOpen() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ ctx.completedCycle()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isSuccessfullyCompleted()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <OverallResults successes="5" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="10" failures="0" expectedFailures="0"/>
+ </Section>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Section name="fail one section">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isSuccessfullyCompleted() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ ctx.completedCycle()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isSuccessfullyCompleted() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Section name="re-enter after failed section and find next section">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase2.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1b.isOpen() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ ctx.completedCycle()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isSuccessfullyCompleted()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <OverallResults successes="6" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="11" failures="0" expectedFailures="0"/>
+ </Section>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Section name="successfully close one section, then find another">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2.isOpen() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Section name="Re-enter - skips S1 and enters S2">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase2.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1b.isOpen() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2b.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ ctx.completedCycle() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Section name="Successfully close S2">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ ctx.completedCycle()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2b.isSuccessfullyCompleted()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase2.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase2.isSuccessfullyCompleted()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <OverallResults successes="4" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="8" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="10" failures="0" expectedFailures="0"/>
+ </Section>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Section name="successfully close one section, then find another">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2.isOpen() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Section name="Re-enter - skips S1 and enters S2">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase2.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1b.isOpen() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2b.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ ctx.completedCycle() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Section name="fail S2">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ ctx.completedCycle()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2b.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2b.isSuccessfullyCompleted() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase2.isSuccessfullyCompleted() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase3.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1c.isOpen() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2c.isOpen() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase3.isSuccessfullyCompleted()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <OverallResults successes="8" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="12" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="14" failures="0" expectedFailures="0"/>
+ </Section>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Section name="open a nested section">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <OverallResults successes="6" failures="0" expectedFailures="0"/>
+ </Section>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Section name="start a generator">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1.index() == 0
+ </Original>
+ <Expanded>
+ 0 == 0
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Section name="close outer section">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isSuccessfullyCompleted() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Section name="Re-enter for second generation">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase2.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1b.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1b.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1b.index() == 1
+ </Original>
+ <Expanded>
+ 1 == 1
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1b.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1b.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase2.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <OverallResults successes="8" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="10" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="14" failures="0" expectedFailures="0"/>
+ </Section>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Section name="start a generator">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1.index() == 0
+ </Original>
+ <Expanded>
+ 0 == 0
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Section name="Start a new inner section">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Section name="Re-enter for second generation">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase2.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1b.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1b.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1b.index() == 1
+ </Original>
+ <Expanded>
+ 1 == 1
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2b.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2b.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1b.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1b.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase2.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <OverallResults successes="9" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="13" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="17" failures="0" expectedFailures="0"/>
+ </Section>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Section name="start a generator">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1.index() == 0
+ </Original>
+ <Expanded>
+ 0 == 0
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Section name="Fail an inner section">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2.isSuccessfullyCompleted() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Section name="Re-enter for second generation">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase2.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1b.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1b.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1b.index() == 0
+ </Original>
+ <Expanded>
+ 0 == 0
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2b.isOpen() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1b.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1b.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase2.isComplete() == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase3.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1c.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1c.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1c.index() == 1
+ </Original>
+ <Expanded>
+ 1 == 1
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2c.isOpen()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s2c.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ g1c.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ s1c.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/PartTrackerTests.cpp" >
+ <Original>
+ testCase3.isComplete()
+ </Original>
+ <Expanded>
+ true
+ </Expanded>
+ </Expression>
+ <OverallResults successes="17" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="22" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResults successes="26" failures="0" expectedFailures="0"/>
+ </Section>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="std::pair&lt;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>
+ <TestCase name="std::pair&lt;int,const 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>
+ <TestCase name="std::vector&lt;std::pair&lt;std::string,int> > -> toString">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" >
+ <Original>
+ Catch::toString( pr ) == "{ { \"green\", 55 } }"
+ </Original>
+ <Expanded>
+ "{ { "green", 55 } }"
+==
+"{ { "green", 55 } }"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="pair&lt;pair&lt;int,const char *,pair&lt;std::string,int> > -> toString">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/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="vector&lt;int> -> toString">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+ <Original>
+ Catch::toString(vv) == "{ }"
+ </Original>
+ <Expanded>
+ "{ }" == "{ }"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+ <Original>
+ Catch::toString(vv) == "{ 42 }"
+ </Original>
+ <Expanded>
+ "{ 42 }" == "{ 42 }"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+ <Original>
+ Catch::toString(vv) == "{ 42, 250 }"
+ </Original>
+ <Expanded>
+ "{ 42, 250 }" == "{ 42, 250 }"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="vector&lt;string> -> toString">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+ <Original>
+ Catch::toString(vv) == "{ }"
+ </Original>
+ <Expanded>
+ "{ }" == "{ }"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+ <Original>
+ Catch::toString(vv) == "{ \"hello\" }"
+ </Original>
+ <Expanded>
+ "{ "hello" }" == "{ "hello" }"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+ <Original>
+ Catch::toString(vv) == "{ \"hello\", \"world\" }"
+ </Original>
+ <Expanded>
+ "{ "hello", "world" }"
+==
+"{ "hello", "world" }"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="vector&lt;int,allocator> -> toString">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+ <Original>
+ Catch::toString(vv) == "{ }"
+ </Original>
+ <Expanded>
+ "{ }" == "{ }"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+ <Original>
+ Catch::toString(vv) == "{ 42 }"
+ </Original>
+ <Expanded>
+ "{ 42 }" == "{ 42 }"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+ <Original>
+ Catch::toString(vv) == "{ 42, 250 }"
+ </Original>
+ <Expanded>
+ "{ 42, 250 }" == "{ 42, 250 }"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="vec&lt;vec&lt;string,alloc>> -> toString">
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+ <Original>
+ Catch::toString(v) == "{ }"
+ </Original>
+ <Expanded>
+ "{ }" == "{ }"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+ <Original>
+ Catch::toString(v) == "{ { \"hello\" }, { \"world\" } }"
+ </Original>
+ <Expanded>
+ "{ { "hello" }, { "world" } }"
+==
+"{ { "hello" }, { "world" } }"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </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"/>
+ </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" >
+ <Original>
+ parseTestSpec( "*a" ).matches( tcA ) == true
+ </Original>
+ <Expanded>
+ true == true
+ </Expanded>
+ </Expression>
+ <OverallResults successes="6" 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" >
+ <Original>
+ parseTestSpec( "a*" ).matches( tcA ) == true
+ </Original>
+ <Expanded>
+ true == true
+ </Expanded>
+ </Expression>
+ <OverallResults successes="6" 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" >
+ <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/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>
+ <OverallResults successes="3" 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" >
+ <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>
+ <OverallResults successes="3" 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" >
+ <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>
+ <OverallResults successes="3" 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" >
+ <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/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" >
+ <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/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>
+ <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>
+ <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>
+ <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" >
+ <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/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"/>
+ </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>
+ <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>
+ <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" >
+ <Original>
+ spec.matches( tcC ) == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/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/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 ) == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/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/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" >
+ <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/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 ) == false
+ </Original>
+ <Expanded>
+ false == false
+ </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"/>
+ </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" >
+ <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"/>
+ </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" >
+ <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"/>
+ </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" >
+ <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"/>
+ </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" >
+ <Original>
+ spec.matches( tcC ) == false
+ </Original>
+ <Expanded>
+ false == false
+ </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"/>
+ </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" >
+ <Original>
+ spec.matches( tcC ) == false
+ </Original>
+ <Expanded>
+ false == false
+ </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"/>
+ </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" >
+ <Original>
+ spec.matches( tcC ) == false
+ </Original>
+ <Expanded>
+ false == false
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/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="tuple&lt;>">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+ <Original>
+ "{ }" == Catch::toString(type{})
+ </Original>
+ <Expanded>
+ "{ }" == "{ }"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+ <Original>
+ "{ }" == Catch::toString(value)
+ </Original>
+ <Expanded>
+ "{ }" == "{ }"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="tuple&lt;int>">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+ <Original>
+ "{ 0 }" == Catch::toString(type{0})
+ </Original>
+ <Expanded>
+ "{ 0 }" == "{ 0 }"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="tuple&lt;float,int>">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+ <Original>
+ "1.2f" == Catch::toString(float(1.2))
+ </Original>
+ <Expanded>
+ "1.2f" == "1.2f"
+ </Expanded>
+ </Expression>
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+ <Original>
+ "{ 1.2f, 0 }" == Catch::toString(type{1.2,0})
+ </Original>
+ <Expanded>
+ "{ 1.2f, 0 }" == "{ 1.2f, 0 }"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="tuple&lt;string,string>">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+ <Original>
+ "{ \"hello\", \"world\" }" == Catch::toString(type{"hello","world"})
+ </Original>
+ <Expanded>
+ "{ "hello", "world" }"
+==
+"{ "hello", "world" }"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="tuple&lt;tuple&lt;int>,tuple&lt;>,float>">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+ <Original>
+ "{ { 42 }, { }, 1.2f }" == Catch::toString(value)
+ </Original>
+ <Expanded>
+ "{ { 42 }, { }, 1.2f }"
+==
+"{ { 42 }, { }, 1.2f }"
+ </Expanded>
+ </Expression>
+ <OverallResult success="true"/>
+ </TestCase>
+ <TestCase name="tuple&lt;nullptr,int,const char *>">
+ <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+ <Original>
+ "{ nullptr, 42, \"Catch me\" }" == Catch::toString(value)
+ </Original>
+ <Expanded>
+ "{ nullptr, 42, "Catch me" }"
+==
+"{ nullptr, 42, "Catch me" }"
+ </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" >
+ <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/SelfTest/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/SelfTest/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/SelfTest/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/SelfTest/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/SelfTest/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="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" >
+ <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/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" >
+ <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/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"/>
+ </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>
+ <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>
+ <OverallResult success="true"/>
+ </TestCase>
+ <OverallResults successes="823" failures="85" expectedFailures="13"/>
+ </Group>
+ <OverallResults successes="823" failures="85" expectedFailures="13"/>
+</Catch>
diff --git a/projects/SelfTest/ClassTests.cpp b/projects/SelfTest/ClassTests.cpp
new file mode 100644
index 0000000..a470784
--- /dev/null
+++ b/projects/SelfTest/ClassTests.cpp
@@ -0,0 +1,57 @@
+/*
+ * Created by Phil on 09/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"
+
+namespace
+{
+ class TestClass
+ {
+ std::string s;
+
+ public:
+ TestClass()
+ : s( "hello" )
+ {}
+
+ void succeedingCase()
+ {
+ REQUIRE( s == "hello" );
+ }
+ void failingCase()
+ {
+ REQUIRE( s == "world" );
+ }
+ };
+}
+
+
+METHOD_AS_TEST_CASE( TestClass::succeedingCase, "A METHOD_AS_TEST_CASE based test run that succeeds", "[class]" )
+METHOD_AS_TEST_CASE( TestClass::failingCase, "A METHOD_AS_TEST_CASE based test run that fails", "[.][class][failing]" )
+
+
+struct Fixture
+{
+ Fixture() : m_a( 1 ) {}
+
+ int m_a;
+};
+
+TEST_CASE_METHOD( Fixture, "A TEST_CASE_METHOD based test run that succeeds", "[class]" )
+{
+ REQUIRE( m_a == 1 );
+}
+
+// We should be able to write our tests within a different namespace
+namespace Inner
+{
+ TEST_CASE_METHOD( Fixture, "A TEST_CASE_METHOD based test run that fails", "[.][class][failing]" )
+ {
+ REQUIRE( m_a == 2 );
+ }
+}
diff --git a/projects/SelfTest/CmdLineTests.cpp b/projects/SelfTest/CmdLineTests.cpp
new file mode 100644
index 0000000..719c89b
--- /dev/null
+++ b/projects/SelfTest/CmdLineTests.cpp
@@ -0,0 +1,264 @@
+/*
+ * Created by Phil on 13/5/2013.
+ * Copyright 2014 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"
+#include "catch_test_spec_parser.hpp"
+
+#ifdef __clang__
+# pragma clang diagnostic ignored "-Wc++98-compat"
+#endif
+
+inline Catch::TestCase fakeTestCase( const char* name, const char* desc = "" ){ return Catch::makeTestCase( CATCH_NULL, "", name, desc, CATCH_INTERNAL_LINEINFO ); }
+
+TEST_CASE( "Parse test names and tags", "" ) {
+
+ using Catch::parseTestSpec;
+ using Catch::TestSpec;
+
+ Catch::TestCase tcA = fakeTestCase( "a", "" );
+ Catch::TestCase tcB = fakeTestCase( "b", "[one][x]" );
+ Catch::TestCase tcC = fakeTestCase( "longer name with spaces", "[two][three][.][x]" );
+ Catch::TestCase tcD = fakeTestCase( "zlonger name with spacesz", "" );
+
+ SECTION( "Empty test spec should have no filters", "" ) {
+ TestSpec spec;
+ CHECK( spec.hasFilters() == false );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ }
+
+ SECTION( "Test spec from empty string should have no filters", "" ) {
+ TestSpec spec = parseTestSpec( "" );
+ CHECK( spec.hasFilters() == false );
+ CHECK( spec.matches(tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ }
+
+ SECTION( "Test spec from just a comma should have no filters", "" ) {
+ TestSpec spec = parseTestSpec( "," );
+ CHECK( spec.hasFilters() == false );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ }
+
+ SECTION( "Test spec from name should have one filter", "" ) {
+ TestSpec spec = parseTestSpec( "b" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == true );
+ }
+
+ SECTION( "Test spec from quoted name should have one filter", "" ) {
+ TestSpec spec = parseTestSpec( "\"b\"" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == true );
+ }
+
+ SECTION( "Test spec from name should have one filter", "" ) {
+ TestSpec spec = parseTestSpec( "b" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == true );
+ CHECK( spec.matches( tcC ) == false );
+ }
+
+ SECTION( "Wildcard at the start", "" ) {
+ TestSpec spec = parseTestSpec( "*spaces" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ CHECK( spec.matches( tcC ) == true );
+ CHECK( spec.matches( tcD ) == false );
+ CHECK( parseTestSpec( "*a" ).matches( tcA ) == true );
+ }
+ SECTION( "Wildcard at the end", "" ) {
+ TestSpec spec = parseTestSpec( "long*" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ CHECK( spec.matches( tcC ) == true );
+ CHECK( spec.matches( tcD ) == false );
+ CHECK( parseTestSpec( "a*" ).matches( tcA ) == true );
+ }
+ SECTION( "Wildcard at both ends", "" ) {
+ TestSpec spec = parseTestSpec( "*name*" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ CHECK( spec.matches( tcC ) == true );
+ CHECK( spec.matches( tcD ) == true );
+ CHECK( parseTestSpec( "*a*" ).matches( tcA ) == true );
+ }
+ SECTION( "Redundant wildcard at the start", "" ) {
+ TestSpec spec = parseTestSpec( "*a" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == true );
+ CHECK( spec.matches( tcB ) == false );
+ }
+ SECTION( "Redundant wildcard at the end", "" ) {
+ TestSpec spec = parseTestSpec( "a*" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == true );
+ CHECK( spec.matches( tcB ) == false );
+ }
+ SECTION( "Redundant wildcard at both ends", "" ) {
+ TestSpec spec = parseTestSpec( "*a*" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == true );
+ CHECK( spec.matches( tcB ) == false );
+ }
+ SECTION( "Wildcard at both ends, redundant at start", "" ) {
+ TestSpec spec = parseTestSpec( "*longer*" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ CHECK( spec.matches( tcC ) == true );
+ CHECK( spec.matches( tcD ) == true );
+ }
+ SECTION( "Just wildcard", "" ) {
+ TestSpec spec = parseTestSpec( "*" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == true );
+ CHECK( spec.matches( tcB ) == true );
+ CHECK( spec.matches( tcC ) == true );
+ CHECK( spec.matches( tcD ) == true );
+ }
+
+ SECTION( "Single tag", "" ) {
+ TestSpec spec = parseTestSpec( "[one]" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == true );
+ CHECK( spec.matches( tcC ) == false );
+ }
+ SECTION( "Single tag, two matches", "" ) {
+ TestSpec spec = parseTestSpec( "[x]" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == true );
+ CHECK( spec.matches( tcC ) == true );
+ }
+ SECTION( "Two tags", "" ) {
+ TestSpec spec = parseTestSpec( "[two][x]" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ CHECK( spec.matches( tcC ) == true );
+ }
+ SECTION( "Two tags, spare separated", "" ) {
+ TestSpec spec = parseTestSpec( "[two] [x]" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ CHECK( spec.matches( tcC ) == true );
+ }
+ SECTION( "Wildcarded name and tag", "" ) {
+ TestSpec spec = parseTestSpec( "*name*[x]" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ CHECK( spec.matches( tcC ) == true );
+ CHECK( spec.matches( tcD ) == false );
+ }
+ SECTION( "Single tag exclusion", "" ) {
+ TestSpec spec = parseTestSpec( "~[one]" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == true );
+ CHECK( spec.matches( tcB ) == false );
+ CHECK( spec.matches( tcC ) == true );
+ }
+ SECTION( "One tag exclusion and one tag inclusion", "" ) {
+ TestSpec spec = parseTestSpec( "~[two][x]" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == true );
+ CHECK( spec.matches( tcC ) == false );
+ }
+ SECTION( "One tag exclusion and one wldcarded name inclusion", "" ) {
+ TestSpec spec = parseTestSpec( "~[two]*name*" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ CHECK( spec.matches( tcC ) == false );
+ CHECK( spec.matches( tcD ) == true );
+ }
+ SECTION( "One tag exclusion, using exclude:, and one wldcarded name inclusion", "" ) {
+ TestSpec spec = parseTestSpec( "exclude:[two]*name*" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ CHECK( spec.matches( tcC ) == false );
+ CHECK( spec.matches( tcD ) == true );
+ }
+ SECTION( "name exclusion", "" ) {
+ TestSpec spec = parseTestSpec( "~b" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == true );
+ CHECK( spec.matches( tcB ) == false );
+ CHECK( spec.matches( tcC ) == true );
+ CHECK( spec.matches( tcD ) == true );
+ }
+ SECTION( "wildcarded name exclusion", "" ) {
+ TestSpec spec = parseTestSpec( "~*name*" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == true );
+ CHECK( spec.matches( tcB ) == true );
+ CHECK( spec.matches( tcC ) == false );
+ CHECK( spec.matches( tcD ) == false );
+ }
+ SECTION( "wildcarded name exclusion with tag inclusion", "" ) {
+ TestSpec spec = parseTestSpec( "~*name*,[three]" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == true );
+ CHECK( spec.matches( tcB ) == true );
+ CHECK( spec.matches( tcC ) == true );
+ CHECK( spec.matches( tcD ) == false );
+ }
+ SECTION( "wildcarded name exclusion, using exclude:, with tag inclusion", "" ) {
+ TestSpec spec = parseTestSpec( "exclude:*name*,[three]" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == true );
+ CHECK( spec.matches( tcB ) == true );
+ CHECK( spec.matches( tcC ) == true );
+ CHECK( spec.matches( tcD ) == false );
+ }
+ SECTION( "two wildcarded names", "" ) {
+ TestSpec spec = parseTestSpec( "\"longer*\"\"*spaces\"" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ CHECK( spec.matches( tcC ) == true );
+ CHECK( spec.matches( tcD ) == false );
+ }
+ SECTION( "empty tag", "" ) {
+ TestSpec spec = parseTestSpec( "[]" );
+ CHECK( spec.hasFilters() == false );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ CHECK( spec.matches( tcC ) == false );
+ CHECK( spec.matches( tcD ) == false );
+ }
+ SECTION( "empty quoted name", "" ) {
+ TestSpec spec = parseTestSpec( "\"\"" );
+ CHECK( spec.hasFilters() == false );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ CHECK( spec.matches( tcC ) == false );
+ CHECK( spec.matches( tcD ) == false );
+ }
+ SECTION( "quoted string followed by tag exclusion", "" ) {
+ TestSpec spec = parseTestSpec( "\"*name*\"~[.]" );
+ CHECK( spec.hasFilters() == true );
+ CHECK( spec.matches( tcA ) == false );
+ CHECK( spec.matches( tcB ) == false );
+ CHECK( spec.matches( tcC ) == false );
+ CHECK( spec.matches( tcD ) == true );
+ }
+
+}
diff --git a/projects/SelfTest/ConditionTests.cpp b/projects/SelfTest/ConditionTests.cpp
new file mode 100644
index 0000000..d1b7ed2
--- /dev/null
+++ b/projects/SelfTest/ConditionTests.cpp
@@ -0,0 +1,335 @@
+/*
+ * Created by Phil on 08/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)
+ */
+#ifdef __clang__
+# pragma clang diagnostic ignored "-Wpadded"
+# pragma clang diagnostic ignored "-Wc++98-compat"
+#endif
+
+#include "catch.hpp"
+
+#include <string>
+#include <limits>
+
+struct TestData {
+ TestData()
+ : int_seven( 7 ),
+ str_hello( "hello" ),
+ float_nine_point_one( 9.1f ),
+ double_pi( 3.1415926535 )
+ {}
+
+ int int_seven;
+ std::string str_hello;
+ float float_nine_point_one;
+ double double_pi;
+};
+
+
+struct TestDef {
+ TestDef& operator + ( const std::string& ) {
+ return *this;
+ }
+ TestDef& operator[]( const std::string& ) {
+ return *this;
+ }
+
+};
+
+// The "failing" tests all use the CHECK macro, which continues if the specific test fails.
+// This allows us to see all results, even if an earlier check fails
+
+// Equality tests
+TEST_CASE( "Equality checks that should succeed", "" )
+{
+
+ TestDef td;
+ td + "hello" + "hello";
+
+ TestData data;
+
+ REQUIRE( data.int_seven == 7 );
+ REQUIRE( data.float_nine_point_one == Approx( 9.1f ) );
+ REQUIRE( data.double_pi == Approx( 3.1415926535 ) );
+ REQUIRE( data.str_hello == "hello" );
+ REQUIRE( "hello" == data.str_hello );
+ REQUIRE( data.str_hello.size() == 5 );
+
+ double x = 1.1 + 0.1 + 0.1;
+ REQUIRE( x == Approx( 1.3 ) );
+}
+
+TEST_CASE( "Equality checks that should fail", "[.][failing][!mayfail]" )
+{
+ TestData data;
+
+ CHECK( data.int_seven == 6 );
+ CHECK( data.int_seven == 8 );
+ CHECK( data.int_seven == 0 );
+ CHECK( data.float_nine_point_one == Approx( 9.11f ) );
+ CHECK( data.float_nine_point_one == Approx( 9.0f ) );
+ CHECK( data.float_nine_point_one == Approx( 1 ) );
+ CHECK( data.float_nine_point_one == Approx( 0 ) );
+ CHECK( data.double_pi == Approx( 3.1415 ) );
+ CHECK( data.str_hello == "goodbye" );
+ CHECK( data.str_hello == "hell" );
+ CHECK( data.str_hello == "hello1" );
+ CHECK( data.str_hello.size() == 6 );
+
+ double x = 1.1 + 0.1 + 0.1;
+ CHECK( x == Approx( 1.301 ) );
+}
+
+TEST_CASE( "Inequality checks that should succeed", "" )
+{
+ TestData data;
+
+ REQUIRE( data.int_seven != 6 );
+ REQUIRE( data.int_seven != 8 );
+ REQUIRE( data.float_nine_point_one != Approx( 9.11f ) );
+ REQUIRE( data.float_nine_point_one != Approx( 9.0f ) );
+ REQUIRE( data.float_nine_point_one != Approx( 1 ) );
+ REQUIRE( data.float_nine_point_one != Approx( 0 ) );
+ REQUIRE( data.double_pi != Approx( 3.1415 ) );
+ REQUIRE( data.str_hello != "goodbye" );
+ REQUIRE( data.str_hello != "hell" );
+ REQUIRE( data.str_hello != "hello1" );
+ REQUIRE( data.str_hello.size() != 6 );
+}
+
+TEST_CASE( "Inequality checks that should fail", "[.][failing]" )
+{
+ TestData data;
+
+ CHECK( data.int_seven != 7 );
+ CHECK( data.float_nine_point_one != Approx( 9.1f ) );
+ CHECK( data.double_pi != Approx( 3.1415926535 ) );
+ CHECK( data.str_hello != "hello" );
+ CHECK( data.str_hello.size() != 5 );
+}
+
+// Ordering comparison tests
+TEST_CASE( "Ordering comparison checks that should succeed", "" )
+{
+ TestData data;
+
+ REQUIRE( data.int_seven < 8 );
+ REQUIRE( data.int_seven > 6 );
+ REQUIRE( data.int_seven > 0 );
+ REQUIRE( data.int_seven > -1 );
+
+ REQUIRE( data.int_seven >= 7 );
+ REQUIRE( data.int_seven >= 6 );
+ REQUIRE( data.int_seven <= 7 );
+ REQUIRE( data.int_seven <= 8 );
+
+ REQUIRE( data.float_nine_point_one > 9 );
+ REQUIRE( data.float_nine_point_one < 10 );
+ REQUIRE( data.float_nine_point_one < 9.2 );
+
+ REQUIRE( data.str_hello <= "hello" );
+ REQUIRE( data.str_hello >= "hello" );
+
+ REQUIRE( data.str_hello < "hellp" );
+ REQUIRE( data.str_hello < "zebra" );
+ REQUIRE( data.str_hello > "hellm" );
+ REQUIRE( data.str_hello > "a" );
+}
+
+TEST_CASE( "Ordering comparison checks that should fail", "[.][failing]" )
+{
+ TestData data;
+
+ CHECK( data.int_seven > 7 );
+ CHECK( data.int_seven < 7 );
+ CHECK( data.int_seven > 8 );
+ CHECK( data.int_seven < 6 );
+ CHECK( data.int_seven < 0 );
+ CHECK( data.int_seven < -1 );
+
+ CHECK( data.int_seven >= 8 );
+ CHECK( data.int_seven <= 6 );
+
+ CHECK( data.float_nine_point_one < 9 );
+ CHECK( data.float_nine_point_one > 10 );
+ CHECK( data.float_nine_point_one > 9.2 );
+
+ CHECK( data.str_hello > "hello" );
+ CHECK( data.str_hello < "hello" );
+ CHECK( data.str_hello > "hellp" );
+ CHECK( data.str_hello > "z" );
+ CHECK( data.str_hello < "hellm" );
+ CHECK( data.str_hello < "a" );
+
+ CHECK( data.str_hello >= "z" );
+ CHECK( data.str_hello <= "a" );
+}
+
+// Comparisons with int literals
+TEST_CASE( "Comparisons with int literals don't warn when mixing signed/ unsigned", "" )
+{
+ int i = 1;
+ unsigned int ui = 2;
+ long l = 3;
+ unsigned long ul = 4;
+ char c = 5;
+ unsigned char uc = 6;
+
+ REQUIRE( i == 1 );
+ REQUIRE( ui == 2 );
+ REQUIRE( l == 3 );
+ REQUIRE( ul == 4 );
+ REQUIRE( c == 5 );
+ REQUIRE( uc == 6 );
+
+ REQUIRE( 1 == i );
+ REQUIRE( 2 == ui );
+ REQUIRE( 3 == l );
+ REQUIRE( 4 == ul );
+ REQUIRE( 5 == c );
+ REQUIRE( 6 == uc );
+
+ REQUIRE( (std::numeric_limits<unsigned long>::max)() > ul );
+}
+
+// Disable warnings about sign conversions for the next two tests
+// (as we are deliberately invoking them)
+// - Currently only disabled for GCC/ LLVM. Should add VC++ too
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wsign-compare"
+#pragma GCC diagnostic ignored "-Wsign-conversion"
+#endif
+#ifdef _MSC_VER
+#pragma warning(disable:4389) // '==' : signed/unsigned mismatch
+#endif
+
+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 );
+}
+
+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 );
+}
+
+TEST_CASE( "Comparisons between unsigned ints and negative signed ints match c++ standard behaviour", "" )
+{
+ CHECK( ( -1 > 2u ) );
+ CHECK( -1 > 2u );
+
+ CHECK( ( 2u < -1 ) );
+ CHECK( 2u < -1 );
+
+ const int minInt = (std::numeric_limits<int>::min)();
+ CHECK( ( minInt > 2u ) );
+ CHECK( minInt > 2u );
+}
+
+template<typename T>
+struct Ex
+{
+ Ex( T ){}
+
+ bool operator == ( const T& ) const { return true; }
+ T operator * ( const T& ) const { return T(); }
+};
+
+TEST_CASE( "Comparisons between ints where one side is computed", "" )
+{
+ CHECK( 54 == 6*9 );
+}
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
+
+inline const char* returnsConstNull(){ return CATCH_NULL; }
+inline char* returnsNull(){ return CATCH_NULL; }
+
+TEST_CASE( "Pointers can be compared to null", "" )
+{
+ TestData* p = CATCH_NULL;
+ TestData* pNULL = CATCH_NULL;
+
+ REQUIRE( p == CATCH_NULL );
+ REQUIRE( p == pNULL );
+
+ TestData data;
+ p = &data;
+
+ REQUIRE( p != CATCH_NULL );
+
+ const TestData* cp = p;
+ REQUIRE( cp != CATCH_NULL );
+
+ const TestData* const cpc = p;
+ REQUIRE( cpc != CATCH_NULL );
+
+ REQUIRE( returnsNull() == CATCH_NULL );
+ REQUIRE( returnsConstNull() == CATCH_NULL );
+
+ REQUIRE( CATCH_NULL != p );
+}
+
+// Not (!) tests
+// The problem with the ! operator is that it has right-to-left associativity.
+// This means we can't isolate it when we decompose. The simple REQUIRE( !false ) form, therefore,
+// cannot have the operand value extracted. The test will work correctly, and the situation
+// is detected and a warning issued.
+// An alternative form of the macros (CHECK_FALSE and REQUIRE_FALSE) can be used instead to capture
+// the operand value.
+TEST_CASE( "'Not' checks that should succeed", "" )
+{
+ bool falseValue = false;
+
+ REQUIRE( false == false );
+ REQUIRE( true == true );
+ REQUIRE( !false );
+ REQUIRE_FALSE( false );
+
+ REQUIRE( !falseValue );
+ REQUIRE_FALSE( falseValue );
+
+ REQUIRE( !(1 == 2) );
+ REQUIRE_FALSE( 1 == 2 );
+}
+
+TEST_CASE( "'Not' checks that should fail", "[.][failing]" )
+{
+ bool trueValue = true;
+
+ CHECK( false != false );
+ CHECK( true != true );
+ CHECK( !true );
+ CHECK_FALSE( true );
+
+ CHECK( !trueValue );
+ CHECK_FALSE( trueValue );
+
+ CHECK( !(1 == 1) );
+ CHECK_FALSE( 1 == 1 );
+}
+
diff --git a/projects/SelfTest/EnumToString.cpp b/projects/SelfTest/EnumToString.cpp
new file mode 100644
index 0000000..6917d8a
--- /dev/null
+++ b/projects/SelfTest/EnumToString.cpp
@@ -0,0 +1,76 @@
+#include "catch.hpp"
+
+/*
+ TODO: maybe ought to check that user-provided specialisations of
+ Catch::toString also do the right thing
+*/
+
+// Enum without user-provided stream operator
+enum Enum1 { Enum1Value0, Enum1Value1 };
+
+TEST_CASE( "toString(enum)", "[toString][enum]" ) {
+ Enum1 e0 = Enum1Value0;
+ CHECK( Catch::toString(e0) == "0" );
+ Enum1 e1 = Enum1Value1;
+ CHECK( Catch::toString(e1) == "1" );
+}
+
+// Enum with user-provided stream operator
+enum Enum2 { Enum2Value0, Enum2Value1 };
+
+inline std::ostream& operator<<( std::ostream& os, Enum2 v ) {
+ return os << "E2{" << static_cast<int>(v) << "}";
+}
+
+TEST_CASE( "toString(enum w/operator<<)", "[toString][enum]" ) {
+ Enum2 e0 = Enum2Value0;
+ CHECK( Catch::toString(e0) == "E2{0}" );
+ Enum2 e1 = Enum2Value1;
+ CHECK( Catch::toString(e1) == "E2{1}" );
+}
+
+#if defined(CATCH_CPP11_OR_GREATER)
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wc++98-compat"
+#endif
+
+// Enum class without user-provided stream operator
+enum class EnumClass1 { EnumClass1Value0, EnumClass1Value1 };
+
+TEST_CASE( "toString(enum class)", "[toString][enum][enumClass]" ) {
+ EnumClass1 e0 = EnumClass1::EnumClass1Value0;
+ CHECK( Catch::toString(e0) == "0" );
+ EnumClass1 e1 = EnumClass1::EnumClass1Value1;
+ CHECK( Catch::toString(e1) == "1" );
+}
+
+// Enum class with user-provided stream operator
+enum class EnumClass2 : short { EnumClass2Value0, EnumClass2Value1 };
+
+inline std::ostream& operator<<( std::ostream& os, EnumClass2 e2 ) {
+ switch( static_cast<int>( e2 ) ) {
+ case static_cast<int>( EnumClass2::EnumClass2Value0 ):
+ return os << "E2/V0";
+ case static_cast<int>( EnumClass2::EnumClass2Value1 ):
+ return os << "E2/V1";
+ default:
+ return os << "Unknown enum value " << static_cast<int>( e2 );
+ }
+}
+
+TEST_CASE( "toString(enum class w/operator<<)", "[toString][enum][enumClass]" ) {
+ EnumClass2 e0 = EnumClass2::EnumClass2Value0;
+ CHECK( Catch::toString(e0) == "E2/V0" );
+ EnumClass2 e1 = EnumClass2::EnumClass2Value1;
+ CHECK( Catch::toString(e1) == "E2/V1" );
+
+ EnumClass2 e3 = static_cast<EnumClass2>(10);
+ CHECK( Catch::toString(e3) == "Unknown enum value 10" );
+}
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+#endif // CATCH_CPP11_OR_GREATER
+
diff --git a/projects/SelfTest/ExceptionTests.cpp b/projects/SelfTest/ExceptionTests.cpp
new file mode 100644
index 0000000..5ef91a1
--- /dev/null
+++ b/projects/SelfTest/ExceptionTests.cpp
@@ -0,0 +1,203 @@
+/*
+ * Created by Phil on 09/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"
+
+#include <string>
+#include <stdexcept>
+
+namespace
+{
+ inline int thisThrows()
+ {
+ if( Catch::alwaysTrue() )
+ throw std::domain_error( "expected exception" );
+ return 1;
+ }
+
+ int thisDoesntThrow()
+ {
+ return 0;
+ }
+}
+
+TEST_CASE( "When checked exceptions are thrown they can be expected or unexpected", "" )
+{
+ 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]" )
+{
+ 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]" )
+{
+ if( Catch::alwaysTrue() )
+ throw std::domain_error( "unexpected exception" );
+}
+
+TEST_CASE( "An unchecked exception reports the line of the last assertion", "[.][failing]" )
+{
+ CHECK( 1 == 1 );
+ if( Catch::alwaysTrue() )
+ throw std::domain_error( "unexpected exception" );
+}
+
+TEST_CASE( "When unchecked exceptions are thrown from sections they are always failures", "[.][failing]" )
+{
+ SECTION( "section name", "" )
+ {
+ if( Catch::alwaysTrue() )
+ throw std::domain_error( "unexpected exception" );
+ }
+}
+
+TEST_CASE( "When unchecked exceptions are thrown from functions they are always failures", "[.][failing]" )
+{
+ CHECK( thisThrows() == 0 );
+}
+
+TEST_CASE( "When unchecked exceptions are thrown during a REQUIRE the test should abort fail", "[.][failing]" )
+{
+ 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]" )
+{
+ CHECK( thisThrows() == 0 );
+ FAIL( "This should never happen" );
+}
+
+TEST_CASE( "When unchecked exceptions are thrown, but caught, they do not affect the test", "" )
+{
+ try
+ {
+ throw std::domain_error( "unexpected exception" );
+ }
+ catch(...)
+ {
+ }
+}
+
+class CustomException
+{
+public:
+ CustomException( const std::string& msg )
+ : m_msg( msg )
+ {}
+
+ std::string getMessage() const
+ {
+ return m_msg;
+ }
+
+private:
+ std::string m_msg;
+};
+
+class CustomStdException : public std::exception
+{
+public:
+ CustomStdException( const std::string& msg )
+ : m_msg( msg )
+ {}
+ ~CustomStdException() CATCH_NOEXCEPT {}
+
+ std::string getMessage() const
+ {
+ return m_msg;
+ }
+
+private:
+ std::string m_msg;
+};
+
+
+CATCH_TRANSLATE_EXCEPTION( CustomException& ex )
+{
+ return ex.getMessage();
+}
+
+CATCH_TRANSLATE_EXCEPTION( CustomStdException& ex )
+{
+ return ex.getMessage();
+}
+
+CATCH_TRANSLATE_EXCEPTION( double& ex )
+{
+ return Catch::toString( ex );
+}
+
+TEST_CASE("Non-std exceptions can be translated", "[.][failing]" )
+{
+ if( Catch::alwaysTrue() )
+ throw CustomException( "custom exception" );
+}
+
+TEST_CASE("Custom std-exceptions can be custom translated", "[.][failing]" )
+{
+ if( Catch::alwaysTrue() )
+ throw CustomException( "custom std exception" );
+}
+
+inline void throwCustom() {
+ if( Catch::alwaysTrue() )
+ throw CustomException( "custom exception - not std" );
+}
+
+TEST_CASE( "Custom exceptions can be translated when testing for nothrow", "[.][failing]" )
+{
+ REQUIRE_NOTHROW( throwCustom() );
+}
+
+TEST_CASE( "Custom exceptions can be translated when testing for throwing as something else", "[.][failing]" )
+{
+ REQUIRE_THROWS_AS( throwCustom(), std::exception );
+}
+
+
+TEST_CASE( "Unexpected exceptions can be translated", "[.][failing]" )
+{
+ if( Catch::alwaysTrue() )
+ throw double( 3.14 );
+}
+
+inline int thisFunctionNotImplemented( int ) {
+ CATCH_NOT_IMPLEMENTED;
+}
+
+TEST_CASE( "NotImplemented exception", "" )
+{
+ REQUIRE_THROWS( thisFunctionNotImplemented( 7 ) );
+}
+
+TEST_CASE( "Exception messages can be tested for", "" ) {
+ using namespace Catch::Matchers;
+ SECTION( "exact match" )
+ REQUIRE_THROWS_WITH( thisThrows(), "expected exception" );
+ SECTION( "different case" )
+ REQUIRE_THROWS_WITH( thisThrows(), Equals( "expecteD Exception", Catch::CaseSensitive::No ) );
+ SECTION( "wildcarded" ) {
+ REQUIRE_THROWS_WITH( thisThrows(), StartsWith( "expected" ) );
+ REQUIRE_THROWS_WITH( thisThrows(), EndsWith( "exception" ) );
+ REQUIRE_THROWS_WITH( thisThrows(), Contains( "except" ) );
+ REQUIRE_THROWS_WITH( thisThrows(), Contains( "exCept", Catch::CaseSensitive::No ) );
+ }
+}
+
+TEST_CASE( "Mismatching exception messages failing the test", "[.][failing]" ) {
+ REQUIRE_THROWS_WITH( thisThrows(), "expected exception" );
+ REQUIRE_THROWS_WITH( thisThrows(), "should fail" );
+ REQUIRE_THROWS_WITH( thisThrows(), "expected exception" );
+}
diff --git a/projects/SelfTest/GeneratorTests.cpp b/projects/SelfTest/GeneratorTests.cpp
new file mode 100644
index 0000000..af08b1d
--- /dev/null
+++ b/projects/SelfTest/GeneratorTests.cpp
@@ -0,0 +1,42 @@
+/*
+ * Created by Phil on 28/01/2011.
+ * Copyright 2011 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)
+ */
+
+// This define means we have to prefix all the CATCH macros with CATCH_
+// We're using it here to test it out
+#define CATCH_CONFIG_PREFIX_ALL
+#include "catch.hpp"
+
+inline int multiply( int a, int b )
+{
+ return a*b;
+}
+
+CATCH_TEST_CASE( "Generators over two ranges", "[generators]" )
+{
+ using namespace Catch::Generators;
+
+ int i = CATCH_GENERATE( between( 1, 5 ).then( values( 15, 20, 21 ).then( 36 ) ) );
+ int j = CATCH_GENERATE( between( 100, 107 ) );
+
+ CATCH_REQUIRE( multiply( i, 2 ) == i*2 );
+ CATCH_REQUIRE( multiply( j, 2 ) == j*2 );
+}
+
+struct IntPair { int first, second; };
+
+CATCH_TEST_CASE( "Generator over a range of pairs", "[generators]" )
+{
+ using namespace Catch::Generators;
+
+ IntPair p[] = { { 0, 1 }, { 2, 3 } };
+
+ IntPair* i = CATCH_GENERATE( between( p, &p[1] ) );
+
+ CATCH_REQUIRE( i->first == i->second-1 );
+
+}
diff --git a/projects/SelfTest/MessageTests.cpp b/projects/SelfTest/MessageTests.cpp
new file mode 100644
index 0000000..87a85a8
--- /dev/null
+++ b/projects/SelfTest/MessageTests.cpp
@@ -0,0 +1,133 @@
+/*
+ * Created by Phil on 09/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"
+#include <iostream>
+
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
+#endif
+
+TEST_CASE( "INFO and WARN do not abort tests", "[messages][.]" )
+{
+ INFO( "this is a " << "message" ); // This should output the message if a failure occurs
+ WARN( "this is a " << "warning" ); // This should always output the message but then continue
+}
+TEST_CASE( "SUCCEED counts as a test pass", "[messages]" )
+{
+ SUCCEED( "this is a " << "success" );
+}
+
+TEST_CASE( "INFO gets logged on failure", "[failing][messages][.]" )
+{
+ INFO( "this message should be logged" );
+ INFO( "so should this" );
+ int a = 2;
+ REQUIRE( a == 1 );
+}
+
+TEST_CASE( "INFO gets logged on failure, even if captured before successful assertions", "[failing][messages][.]" )
+{
+ INFO( "this message may be logged later" );
+ int a = 2;
+ CHECK( a == 2 );
+
+ INFO( "this message should be logged" );
+
+ CHECK( a == 1 );
+
+ INFO( "and this, but later" );
+
+ CHECK( a == 0 );
+
+ INFO( "but not this" );
+
+ CHECK( a == 2 );
+}
+
+TEST_CASE( "FAIL aborts the test", "[failing][messages][.]" )
+{
+ FAIL( "This is a " << "failure" ); // This should output the message and abort
+}
+
+#ifdef CATCH_CONFIG_VARIADIC_MACROS
+TEST_CASE( "FAIL does not require an argument", "[failing][messages][.]" )
+{
+ FAIL();
+}
+TEST_CASE( "SUCCESS does not require an argument", "[messages][.]" )
+{
+ SUCCEED();
+}
+#endif
+
+TEST_CASE( "Output from all sections is reported", "[failing][messages][.]" )
+{
+ SECTION( "one", "" )
+ {
+ FAIL( "Message from section one" );
+ }
+
+ SECTION( "two", "" )
+ {
+ FAIL( "Message from section two" );
+ }
+}
+
+TEST_CASE( "Standard output from all sections is reported", "[messages][.]" )
+{
+ SECTION( "one", "" )
+ {
+ std::cout << "Message from section one" << std::endl;
+ }
+
+ SECTION( "two", "" )
+ {
+ std::cout << "Message from section two" << std::endl;
+ }
+}
+
+TEST_CASE( "SCOPED_INFO is reset for each loop", "[messages][failing][.]" )
+{
+ for( int i=0; i<100; i++ )
+ {
+ SCOPED_INFO( "current counter " << i );
+ SCOPED_CAPTURE( i );
+ REQUIRE( i < 10 );
+ }
+}
+
+TEST_CASE( "The NO_FAIL macro reports a failure but does not fail the test", "[messages]" )
+{
+ CHECK_NOFAIL( 1 == 2 );
+}
+
+TEST_CASE( "just info", "[info][isolated info][messages]" )
+{
+ INFO( "this should never be seen" );
+}
+TEST_CASE( "just failure", "[fail][isolated info][.][messages]" )
+{
+ FAIL( "Previous info should not be seen" );
+}
+
+
+TEST_CASE( "sends information to INFO", "[.][failing]" )
+{
+ INFO( "hi" );
+ int i = 7;
+ CAPTURE( i );
+ REQUIRE( false );
+}
+
+TEST_CASE( "Pointers can be converted to strings", "[messages][.]" )
+{
+ int p;
+ WARN( "actual address of p: " << &p );
+ WARN( "toString(p): " << Catch::toString( &p ) );
+}
diff --git a/projects/SelfTest/MiscTests.cpp b/projects/SelfTest/MiscTests.cpp
new file mode 100644
index 0000000..cf7f48c
--- /dev/null
+++ b/projects/SelfTest/MiscTests.cpp
@@ -0,0 +1,480 @@
+/*
+ * Created by Phil on 29/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"
+
+#ifdef __clang__
+# pragma clang diagnostic ignored "-Wc++98-compat"
+# pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
+#endif
+
+#include "../include/internal/catch_xmlwriter.hpp"
+
+#include <iostream>
+
+TEST_CASE( "random SECTION tests", "[.][sections][failing]" )
+{
+ int a = 1;
+ int b = 2;
+
+ SECTION( "s1", "doesn't equal" )
+ {
+ REQUIRE( a != b );
+ REQUIRE( b != a );
+ }
+
+ SECTION( "s2", "not equal" )
+ {
+ REQUIRE( a != b);
+ }
+}
+
+TEST_CASE( "nested SECTION tests", "[.][sections][failing]" )
+{
+ int a = 1;
+ int b = 2;
+
+ SECTION( "s1", "doesn't equal" )
+ {
+ REQUIRE( a != b );
+ REQUIRE( b != a );
+
+ SECTION( "s2", "not equal" )
+ {
+ REQUIRE( a != b);
+ }
+ }
+}
+
+TEST_CASE( "more nested SECTION tests", "[sections][failing][.]" )
+{
+ int a = 1;
+ int b = 2;
+
+ SECTION( "s1", "doesn't equal" )
+ {
+ SECTION( "s2", "equal" )
+ {
+ REQUIRE( a == b );
+ }
+
+ SECTION( "s3", "not equal" )
+ {
+ REQUIRE( a != b );
+ }
+ SECTION( "s4", "less than" )
+ {
+ REQUIRE( a < b );
+ }
+ }
+}
+
+TEST_CASE( "even more nested SECTION tests", "[sections]" )
+{
+ SECTION( "c", "" )
+ {
+ SECTION( "d (leaf)", "" )
+ {
+ SUCCEED(""); // avoid failing due to no tests
+ }
+
+ SECTION( "e (leaf)", "" )
+ {
+ SUCCEED(""); // avoid failing due to no tests
+ }
+ }
+
+ SECTION( "f (leaf)", "" )
+ {
+ SUCCEED(""); // avoid failing due to no tests
+ }
+}
+
+TEST_CASE( "looped SECTION tests", "[.][failing][sections]" )
+{
+ int a = 1;
+
+ for( int b = 0; b < 10; ++b )
+ {
+ std::ostringstream oss;
+ oss << "b is currently: " << b;
+ SECTION( "s1", oss.str() )
+ {
+ CHECK( b > a );
+ }
+ }
+}
+
+TEST_CASE( "looped tests", "[.][failing]" )
+{
+ static const int fib[] = { 1, 1, 2, 3, 5, 8, 13, 21 };
+
+ for( size_t i=0; i < sizeof(fib)/sizeof(int); ++i )
+ {
+ INFO( "Testing if fib[" << i << "] (" << fib[i] << ") is even" );
+ CHECK( ( fib[i] % 2 ) == 0 );
+ }
+}
+
+TEST_CASE( "Sends stuff to stdout and stderr", "[.]" )
+{
+ std::cout << "A string sent directly to stdout" << std::endl;
+
+ std::cerr << "A string sent directly to stderr" << std::endl;
+}
+
+inline const char* makeString( bool makeNull )
+{
+ return makeNull ? CATCH_NULL : "valid string";
+}
+
+TEST_CASE( "null strings", "" )
+{
+ REQUIRE( makeString( false ) != static_cast<char*>(CATCH_NULL));
+ REQUIRE( makeString( true ) == static_cast<char*>(CATCH_NULL));
+}
+
+
+inline bool testCheckedIf( bool flag )
+{
+ CHECKED_IF( flag )
+ return true;
+ else
+ return false;
+}
+
+TEST_CASE( "checkedIf", "" )
+{
+ REQUIRE( testCheckedIf( true ) );
+}
+
+TEST_CASE( "checkedIf, failing", "[failing][.]" )
+{
+ REQUIRE( testCheckedIf( false ) );
+}
+
+inline bool testCheckedElse( bool flag )
+{
+ CHECKED_ELSE( flag )
+ return false;
+
+ return true;
+}
+
+TEST_CASE( "checkedElse", "" )
+{
+ REQUIRE( testCheckedElse( true ) );
+}
+
+TEST_CASE( "checkedElse, failing", "[failing][.]" )
+{
+ REQUIRE( testCheckedElse( false ) );
+}
+
+TEST_CASE( "xmlentitycheck", "" )
+{
+ SECTION( "embedded xml", "<test>it should be possible to embed xml characters, such as <, \" or &, or even whole <xml>documents</xml> within an attribute</test>" )
+ {
+ SUCCEED(""); // We need this here to stop it failing due to no tests
+ }
+ SECTION( "encoded chars", "these should all be encoded: &&&\"\"\"<<<&\"<<&\"" )
+ {
+ SUCCEED(""); // We need this here to stop it failing due to no tests
+ }
+}
+
+TEST_CASE( "send a single char to INFO", "[failing][.]" )
+{
+ INFO(3);
+ REQUIRE(false);
+}
+
+TEST_CASE( "atomic if", "[failing][0]")
+{
+ size_t x = 0;
+
+ if( x )
+ REQUIRE(x > 0);
+ else
+ REQUIRE(x == 0);
+}
+
+inline const char* testStringForMatching()
+{
+ return "this string contains 'abc' as a substring";
+}
+inline const char* testStringForMatching2()
+{
+ return "some completely different text that contains one common word";
+}
+
+using namespace Catch::Matchers;
+
+TEST_CASE("String matchers", "[matchers]" )
+{
+ REQUIRE_THAT( testStringForMatching(), Contains( "string" ) );
+ CHECK_THAT( testStringForMatching(), Contains( "abc" ) );
+
+ CHECK_THAT( testStringForMatching(), StartsWith( "this" ) );
+ CHECK_THAT( testStringForMatching(), EndsWith( "substring" ) );
+}
+
+TEST_CASE("Contains string matcher", "[.][failing][matchers]")
+{
+ CHECK_THAT( testStringForMatching(), Contains( "not there" ) );
+}
+
+TEST_CASE("StartsWith string matcher", "[.][failing][matchers]")
+{
+ CHECK_THAT( testStringForMatching(), StartsWith( "string" ) );
+}
+
+TEST_CASE("EndsWith string matcher", "[.][failing][matchers]")
+{
+ CHECK_THAT( testStringForMatching(), EndsWith( "this" ) );
+}
+
+TEST_CASE("Equals string matcher", "[.][failing][matchers]")
+{
+ CHECK_THAT( testStringForMatching(), Equals( "something else" ) );
+}
+TEST_CASE("Equals string matcher, with NULL", "[matchers]")
+{
+ REQUIRE_THAT("", Equals(CATCH_NULL));
+}
+TEST_CASE("AllOf matcher", "[matchers]")
+{
+ CHECK_THAT( testStringForMatching(), AllOf( Catch::Contains( "string" ), Catch::Contains( "abc" ) ) );
+}
+TEST_CASE("AnyOf matcher", "[matchers]")
+{
+ CHECK_THAT( testStringForMatching(), AnyOf( Catch::Contains( "string" ), Catch::Contains( "not there" ) ) );
+ CHECK_THAT( testStringForMatching(), AnyOf( Catch::Contains( "not there" ), Catch::Contains( "string" ) ) );
+}
+
+TEST_CASE("Equals", "[matchers]")
+{
+ CHECK_THAT( testStringForMatching(), Equals( "this string contains 'abc' as a substring" ) );
+}
+
+TEST_CASE("Matchers can be (AllOf) composed with the && operator", "[matchers][operators][operator&&]")
+{
+ CHECK_THAT( testStringForMatching(),
+ Contains( "string" ) &&
+ Contains( "abc" ) &&
+ Contains( "substring" ) &&
+ Contains( "contains" ) );
+}
+
+TEST_CASE("Matchers can be (AnyOf) composed with the || operator", "[matchers][operators][operator||]")
+{
+ CHECK_THAT( testStringForMatching(), Contains( "string" ) || Contains( "different" ) || Contains( "random" ) );
+ CHECK_THAT( testStringForMatching2(), Contains( "string" ) || Contains( "different" ) || Contains( "random" ) );
+}
+
+TEST_CASE("Matchers can be composed with both && and ||", "[matchers][operators][operator||][operator&&]")
+{
+ CHECK_THAT( testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) && Contains( "substring" ) );
+}
+
+TEST_CASE("Matchers can be composed with both && and || - failing", "[matchers][operators][operator||][operator&&][.failing]")
+{
+ CHECK_THAT( testStringForMatching(), ( Contains( "string" ) || Contains( "different" ) ) && Contains( "random" ) );
+}
+
+TEST_CASE("Matchers can be negated (Not) with the ! operator", "[matchers][operators][not]")
+{
+ CHECK_THAT( testStringForMatching(), !Contains( "different" ) );
+}
+
+TEST_CASE("Matchers can be negated (Not) with the ! operator - failing", "[matchers][operators][not][.failing]")
+{
+ CHECK_THAT( testStringForMatching(), !Contains( "substring" ) );
+}
+
+
+inline unsigned int Factorial( unsigned int number )
+{
+// return number <= 1 ? number : Factorial(number-1)*number;
+ return number > 1 ? Factorial(number-1)*number : 1;
+}
+
+TEST_CASE( "Factorials are computed", "[factorial]" ) {
+ REQUIRE( Factorial(0) == 1 );
+ REQUIRE( Factorial(1) == 1 );
+ REQUIRE( Factorial(2) == 2 );
+ REQUIRE( Factorial(3) == 6 );
+ REQUIRE( Factorial(10) == 3628800 );
+}
+
+TEST_CASE( "An empty test with no assertions", "[empty]" )
+{
+}
+
+TEST_CASE( "Nice descriptive name", "[tag1][tag2][tag3][.]" )
+{
+ WARN( "This one ran" );
+}
+TEST_CASE( "first tag", "[tag1]" )
+{
+}
+TEST_CASE( "second tag", "[tag2]" )
+{
+}
+//
+//TEST_CASE( "spawn a new process", "[.]" )
+//{
+// // !TBD Work in progress
+// char line[200];
+// FILE* output = popen("./CatchSelfTest ./failing/matchers/StartsWith", "r");
+// while ( fgets(line, 199, output) )
+// std::cout << line;
+//}
+
+TEST_CASE( "vectors can be sized and resized", "[vector]" ) {
+
+ std::vector<int> v( 5 );
+
+ REQUIRE( v.size() == 5 );
+ REQUIRE( v.capacity() >= 5 );
+
+ SECTION( "resizing bigger changes size and capacity", "" ) {
+ v.resize( 10 );
+
+ REQUIRE( v.size() == 10 );
+ REQUIRE( v.capacity() >= 10 );
+ }
+ SECTION( "resizing smaller changes size but not capacity", "" ) {
+ v.resize( 0 );
+
+ REQUIRE( v.size() == 0 );
+ REQUIRE( v.capacity() >= 5 );
+
+ SECTION( "We can use the 'swap trick' to reset the capacity", "" ) {
+ std::vector<int> empty;
+ empty.swap( v );
+
+ REQUIRE( v.capacity() == 0 );
+ }
+ }
+ SECTION( "reserving bigger changes capacity but not size", "" ) {
+ v.reserve( 10 );
+
+ REQUIRE( v.size() == 5 );
+ REQUIRE( v.capacity() >= 10 );
+ }
+ SECTION( "reserving smaller does not change size or capacity", "" ) {
+ v.reserve( 0 );
+
+ REQUIRE( v.size() == 5 );
+ REQUIRE( v.capacity() >= 5 );
+ }
+}
+
+// https://github.com/philsquared/Catch/issues/166
+TEST_CASE("A couple of nested sections followed by a failure", "[failing][.]")
+{
+ SECTION("Outer", "")
+ SECTION("Inner", "")
+ SUCCEED("that's not flying - that's failing in style");
+
+ FAIL("to infinity and beyond");
+}
+
+TEST_CASE("not allowed", "[!throws]")
+{
+ // This test case should not be included if you run with -e on the command line
+ SUCCEED( "" );
+}
+
+//TEST_CASE( "Is big endian" ) {
+// CHECK( Catch::Detail::Endianness::which() == Catch::Detail::Endianness::Little );
+//}
+
+TEST_CASE( "Tabs and newlines show in output", "[.][whitespace][failing]" ) {
+
+ // Based on issue #242
+ std::string s1 = "if ($b == 10) {\n\t\t$a\t= 20;\n}";
+ std::string s2 = "if ($b == 10) {\n\t$a = 20;\n}\n";
+ CHECK( s1 == s2 );
+}
+
+
+TEST_CASE( "toString on const wchar_t const pointer returns the string contents", "[toString]" ) {
+ const wchar_t * const s = L"wide load";
+ std::string result = Catch::toString( s );
+ CHECK( result == "\"wide load\"" );
+}
+
+TEST_CASE( "toString on const wchar_t pointer returns the string contents", "[toString]" ) {
+ const wchar_t * s = L"wide load";
+ std::string result = Catch::toString( s );
+ CHECK( result == "\"wide load\"" );
+}
+
+TEST_CASE( "toString on wchar_t const pointer returns the string contents", "[toString]" ) {
+ wchar_t * const s = const_cast<wchar_t* const>( L"wide load" );
+ std::string result = Catch::toString( s );
+ CHECK( result == "\"wide load\"" );
+}
+
+TEST_CASE( "toString on wchar_t returns the string contents", "[toString]" ) {
+ wchar_t * s = const_cast<wchar_t*>( L"wide load" );
+ std::string result = Catch::toString( s );
+ CHECK( result == "\"wide load\"" );
+}
+
+inline std::string encode( std::string const& str, Catch::XmlEncode::ForWhat forWhat = Catch::XmlEncode::ForTextNodes ) {
+ std::ostringstream oss;
+ oss << Catch::XmlEncode( str, forWhat );
+ return oss.str();
+}
+
+TEST_CASE( "XmlEncode" ) {
+ SECTION( "normal string" ) {
+ REQUIRE( encode( "normal string" ) == "normal string" );
+ }
+ SECTION( "empty string" ) {
+ REQUIRE( encode( "" ) == "" );
+ }
+ SECTION( "string with ampersand" ) {
+ REQUIRE( encode( "smith & jones" ) == "smith &amp; jones" );
+ }
+ SECTION( "string with less-than" ) {
+ REQUIRE( encode( "smith < jones" ) == "smith &lt; jones" );
+ }
+ SECTION( "string with greater-than" ) {
+ REQUIRE( encode( "smith > jones" ) == "smith > jones" );
+ REQUIRE( encode( "smith ]]> jones" ) == "smith ]]&gt; jones" );
+ }
+ SECTION( "string with quotes" ) {
+ std::string stringWithQuotes = "don't \"quote\" me on that";
+ REQUIRE( encode( stringWithQuotes ) == stringWithQuotes );
+ REQUIRE( encode( stringWithQuotes, Catch::XmlEncode::ForAttributes ) == "don't &quot;quote&quot; me on that" );
+ }
+ SECTION( "string with control char (1)" ) {
+ REQUIRE( encode( "[\x01]" ) == "[&#x1]" );
+ }
+ SECTION( "string with control char (x7F)" ) {
+ REQUIRE( encode( "[\x7F]" ) == "[&#x7F]" );
+ }
+}
+
+#ifdef CATCH_CONFIG_CPP11_LONG_LONG
+TEST_CASE( "long long" ) {
+ long long l = std::numeric_limits<long long>::max();
+
+ REQUIRE( l == std::numeric_limits<long long>::max() );
+}
+#endif
+
+//TEST_CASE( "Divide by Zero signal handler", "[.][sig]" ) {
+// int i = 0;
+// int x = 10/i; // This should cause the signal to fire
+// CHECK( x == 0 );
+//}
diff --git a/projects/SelfTest/PartTrackerTests.cpp b/projects/SelfTest/PartTrackerTests.cpp
new file mode 100644
index 0000000..2925635
--- /dev/null
+++ b/projects/SelfTest/PartTrackerTests.cpp
@@ -0,0 +1,328 @@
+/*
+ * Created by Phil on 1/10/2015.
+ * Copyright 2015 Two Blue Cubes Ltd
+ *
+ * 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 "internal/catch_suppress_warnings.h"
+#include "internal/catch_test_case_tracker.hpp"
+
+
+namespace Catch
+{
+ class LocalContext {
+
+ public:
+ TrackerContext& operator()() const {
+ return TrackerContext::instance();
+ }
+ };
+
+} // namespace Catch
+
+inline Catch::TrackerContext& C_A_T_C_H_Context() {
+ return Catch::TrackerContext::instance();
+}
+
+// -------------------
+
+#include "catch.hpp"
+
+using namespace Catch;
+
+//inline void testCase( Catch::LocalContext const& C_A_T_C_H_Context ) {
+//
+// REQUIRE( C_A_T_C_H_Context().i() == 42 );
+//}
+
+TEST_CASE( "Tracker", "" ) {
+
+ TrackerContext ctx;
+ ctx.startRun();
+ ctx.startCycle();
+
+ ITracker& testCase = SectionTracker::acquire( ctx, "Testcase" );
+ REQUIRE( testCase.isOpen() );
+
+ ITracker& s1 = SectionTracker::acquire( ctx, "S1" );
+ REQUIRE( s1.isOpen() );
+
+ SECTION( "successfully close one section", "" ) {
+ s1.close();
+ REQUIRE( s1.isSuccessfullyCompleted() );
+ REQUIRE( testCase.isComplete() == false );
+
+ testCase.close();
+ REQUIRE( ctx.completedCycle() );
+ REQUIRE( testCase.isSuccessfullyCompleted() );
+ }
+
+ SECTION( "fail one section", "" ) {
+ s1.fail();
+ REQUIRE( s1.isComplete() );
+ REQUIRE( s1.isSuccessfullyCompleted() == false );
+ REQUIRE( testCase.isComplete() == false );
+
+ testCase.close();
+ REQUIRE( ctx.completedCycle() );
+ REQUIRE( testCase.isSuccessfullyCompleted() == false );
+
+ SECTION( "re-enter after failed section", "" ) {
+ ctx.startCycle();
+ ITracker& testCase2 = SectionTracker::acquire( ctx, "Testcase" );
+ REQUIRE( testCase2.isOpen() );
+
+ ITracker& s1b = SectionTracker::acquire( ctx, "S1" );
+ REQUIRE( s1b.isOpen() == false );
+
+ testCase2.close();
+ REQUIRE( ctx.completedCycle() );
+ REQUIRE( testCase.isComplete() );
+ REQUIRE( testCase.isSuccessfullyCompleted() );
+ }
+ SECTION( "re-enter after failed section and find next section", "" ) {
+ ctx.startCycle();
+ ITracker& testCase2 = SectionTracker::acquire( ctx, "Testcase" );
+ REQUIRE( testCase2.isOpen() );
+
+ ITracker& s1b = SectionTracker::acquire( ctx, "S1" );
+ REQUIRE( s1b.isOpen() == false );
+
+ ITracker& s2 = SectionTracker::acquire( ctx, "S2" );
+ REQUIRE( s2.isOpen() );
+
+ s2.close();
+ REQUIRE( ctx.completedCycle() );
+
+ testCase2.close();
+ REQUIRE( testCase.isComplete() );
+ REQUIRE( testCase.isSuccessfullyCompleted() );
+ }
+ }
+
+ SECTION( "successfully close one section, then find another", "" ) {
+ s1.close();
+
+ ITracker& s2 = SectionTracker::acquire( ctx, "S2" );
+ REQUIRE( s2.isOpen() == false );
+
+ testCase.close();
+ REQUIRE( testCase.isComplete() == false );
+
+ SECTION( "Re-enter - skips S1 and enters S2", "" ) {
+ ctx.startCycle();
+ ITracker& testCase2 = SectionTracker::acquire( ctx, "Testcase" );
+ REQUIRE( testCase2.isOpen() );
+
+ ITracker& s1b = SectionTracker::acquire( ctx, "S1" );
+ REQUIRE( s1b.isOpen() == false );
+
+ ITracker& s2b = SectionTracker::acquire( ctx, "S2" );
+ REQUIRE( s2b.isOpen() );
+
+ REQUIRE( ctx.completedCycle() == false );
+
+ SECTION ("Successfully close S2") {
+ s2b.close();
+ REQUIRE( ctx.completedCycle() );
+
+ REQUIRE( s2b.isSuccessfullyCompleted() );
+ REQUIRE( testCase2.isComplete() == false );
+
+ testCase2.close();
+ REQUIRE( testCase2.isSuccessfullyCompleted() );
+ }
+ SECTION ("fail S2") {
+ s2b.fail();
+ REQUIRE( ctx.completedCycle() );
+
+ REQUIRE( s2b.isComplete() );
+ REQUIRE( s2b.isSuccessfullyCompleted() == false );
+
+ testCase2.close();
+ REQUIRE( testCase2.isSuccessfullyCompleted() == false );
+
+ // Need a final cycle
+ ctx.startCycle();
+ ITracker& testCase3 = SectionTracker::acquire( ctx, "Testcase" );
+ REQUIRE( testCase3.isOpen() );
+
+ ITracker& s1c = SectionTracker::acquire( ctx, "S1" );
+ REQUIRE( s1c.isOpen() == false );
+
+ ITracker& s2c = SectionTracker::acquire( ctx, "S2" );
+ REQUIRE( s2c.isOpen() == false );
+
+ testCase3.close();
+ REQUIRE( testCase3.isSuccessfullyCompleted() );
+ }
+ }
+ }
+
+ SECTION( "open a nested section", "" ) {
+ ITracker& s2 = SectionTracker::acquire( ctx, "S2" );
+ REQUIRE( s2.isOpen() );
+
+ s2.close();
+ REQUIRE( s2.isComplete() );
+ REQUIRE( s1.isComplete() == false );
+
+ s1.close();
+ REQUIRE( s1.isComplete() );
+ REQUIRE( testCase.isComplete() == false );
+
+ testCase.close();
+ REQUIRE( testCase.isComplete() );
+ }
+
+ SECTION( "start a generator", "" ) {
+ IndexTracker& g1 = IndexTracker::acquire( ctx, "G1", 2 );
+ REQUIRE( g1.isOpen() );
+ REQUIRE( g1.index() == 0 );
+
+ REQUIRE( g1.isComplete() == false );
+ REQUIRE( s1.isComplete() == false );
+
+ SECTION( "close outer section" )
+ {
+ s1.close();
+ REQUIRE( s1.isComplete() == false );
+ testCase.close();
+ REQUIRE( testCase.isSuccessfullyCompleted() == false );
+
+ SECTION( "Re-enter for second generation", "" ) {
+ ctx.startCycle();
+ ITracker& testCase2 = SectionTracker::acquire( ctx, "Testcase" );
+ REQUIRE( testCase2.isOpen() );
+
+ ITracker& s1b = SectionTracker::acquire( ctx, "S1" );
+ REQUIRE( s1b.isOpen() );
+
+
+ IndexTracker& g1b = IndexTracker::acquire( ctx, "G1", 2 );
+ REQUIRE( g1b.isOpen() );
+ REQUIRE( g1b.index() == 1 );
+
+ REQUIRE( s1.isComplete() == false );
+
+ s1b.close();
+ REQUIRE( s1b.isComplete() );
+ REQUIRE( g1b.isComplete() );
+ testCase2.close();
+ REQUIRE( testCase2.isComplete() );
+ }
+ }
+ SECTION( "Start a new inner section", "" ) {
+ ITracker& s2 = SectionTracker::acquire( ctx, "S2" );
+ REQUIRE( s2.isOpen() );
+
+ s2.close();
+ REQUIRE( s2.isComplete() );
+
+ s1.close();
+ REQUIRE( s1.isComplete() == false );
+
+ testCase.close();
+ REQUIRE( testCase.isComplete() == false );
+
+ SECTION( "Re-enter for second generation", "" ) {
+ ctx.startCycle();
+ ITracker& testCase2 = SectionTracker::acquire( ctx, "Testcase" );
+ REQUIRE( testCase2.isOpen() );
+
+ ITracker& s1b = SectionTracker::acquire( ctx, "S1" );
+ REQUIRE( s1b.isOpen() );
+
+ // generator - next value
+ IndexTracker& g1b = IndexTracker::acquire( ctx, "G1", 2 );
+ REQUIRE( g1b.isOpen() );
+ REQUIRE( g1b.index() == 1 );
+
+ // inner section again
+ ITracker& s2b = SectionTracker::acquire( ctx, "S2" );
+ REQUIRE( s2b.isOpen() );
+
+ s2b.close();
+ REQUIRE( s2b.isComplete() );
+
+ s1b.close();
+ REQUIRE( g1b.isComplete() );
+ REQUIRE( s1b.isComplete() );
+
+ testCase2.close();
+ REQUIRE( testCase2.isComplete() );
+ }
+ }
+
+ SECTION( "Fail an inner section", "" ) {
+ ITracker& s2 = SectionTracker::acquire( ctx, "S2" );
+ REQUIRE( s2.isOpen() );
+
+ s2.fail();
+ REQUIRE( s2.isComplete() );
+ REQUIRE( s2.isSuccessfullyCompleted() == false );
+
+ s1.close();
+ REQUIRE( s1.isComplete() == false );
+
+ testCase.close();
+ REQUIRE( testCase.isComplete() == false );
+
+ SECTION( "Re-enter for second generation", "" ) {
+ ctx.startCycle();
+ ITracker& testCase2 = SectionTracker::acquire( ctx, "Testcase" );
+ REQUIRE( testCase2.isOpen() );
+
+ ITracker& s1b = SectionTracker::acquire( ctx, "S1" );
+ REQUIRE( s1b.isOpen() );
+
+ // generator - still same value
+ IndexTracker& g1b = IndexTracker::acquire( ctx, "G1", 2 );
+ REQUIRE( g1b.isOpen() );
+ REQUIRE( g1b.index() == 0 );
+
+ // inner section again - this time won't open
+ ITracker& s2b = SectionTracker::acquire( ctx, "S2" );
+ REQUIRE( s2b.isOpen() == false );
+
+ s1b.close();
+ REQUIRE( g1b.isComplete() == false );
+ REQUIRE( s1b.isComplete() == false );
+
+ testCase2.close();
+ REQUIRE( testCase2.isComplete() == false );
+
+ // Another cycle - now should complete
+ ctx.startCycle();
+ ITracker& testCase3 = SectionTracker::acquire( ctx, "Testcase" );
+ REQUIRE( testCase3.isOpen() );
+
+ ITracker& s1c = SectionTracker::acquire( ctx, "S1" );
+ REQUIRE( s1c.isOpen() );
+
+ // generator - now next value
+ IndexTracker& g1c = IndexTracker::acquire( ctx, "G1", 2 );
+ REQUIRE( g1c.isOpen() );
+ REQUIRE( g1c.index() == 1 );
+
+ // inner section - now should open again
+ ITracker& s2c = SectionTracker::acquire( ctx, "S2" );
+ REQUIRE( s2c.isOpen() );
+
+ s2c.close();
+ REQUIRE( s2c.isComplete() );
+
+ s1c.close();
+ REQUIRE( g1c.isComplete() );
+ REQUIRE( s1c.isComplete() );
+
+ testCase3.close();
+ REQUIRE( testCase3.isComplete() );
+ }
+ }
+ // !TBD"
+ // nested generator
+ // two sections within a generator
+ }
+}
diff --git a/projects/SelfTest/SurrogateCpps/catch_common.cpp b/projects/SelfTest/SurrogateCpps/catch_common.cpp
new file mode 100644
index 0000000..72f90bd
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_common.cpp
@@ -0,0 +1,3 @@
+// This file is only here to verify (to the extent possible) the self sufficiency of the header
+#include "catch_suppress_warnings.h"
+#include "catch_common.h"
diff --git a/projects/SelfTest/SurrogateCpps/catch_console_colour.cpp b/projects/SelfTest/SurrogateCpps/catch_console_colour.cpp
new file mode 100644
index 0000000..e7378c0
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_console_colour.cpp
@@ -0,0 +1,3 @@
+// This file is only here to verify (to the extent possible) the self sufficiency of the header
+#include "catch_suppress_warnings.h"
+#include "catch_console_colour.hpp"
diff --git a/projects/SelfTest/SurrogateCpps/catch_debugger.cpp b/projects/SelfTest/SurrogateCpps/catch_debugger.cpp
new file mode 100644
index 0000000..33f76ae
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_debugger.cpp
@@ -0,0 +1,2 @@
+// This file is only here to verify (to the extent possible) the self sufficiency of the header
+#include "catch_debugger.h"
diff --git a/projects/SelfTest/SurrogateCpps/catch_interfaces_capture.cpp b/projects/SelfTest/SurrogateCpps/catch_interfaces_capture.cpp
new file mode 100644
index 0000000..2d1c8f3
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_interfaces_capture.cpp
@@ -0,0 +1,3 @@
+// This file is only here to verify (to the extent possible) the self sufficiency of the header
+#include "catch_suppress_warnings.h"
+#include "catch_interfaces_capture.h"
diff --git a/projects/SelfTest/SurrogateCpps/catch_interfaces_config.cpp b/projects/SelfTest/SurrogateCpps/catch_interfaces_config.cpp
new file mode 100644
index 0000000..de0f18d
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_interfaces_config.cpp
@@ -0,0 +1,2 @@
+#include "catch_suppress_warnings.h"
+#include "catch_interfaces_config.h"
diff --git a/projects/SelfTest/SurrogateCpps/catch_interfaces_exception.cpp b/projects/SelfTest/SurrogateCpps/catch_interfaces_exception.cpp
new file mode 100644
index 0000000..183d87d
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_interfaces_exception.cpp
@@ -0,0 +1,2 @@
+#include "catch_suppress_warnings.h"
+#include "catch_interfaces_exception.h"
diff --git a/projects/SelfTest/SurrogateCpps/catch_interfaces_generators.cpp b/projects/SelfTest/SurrogateCpps/catch_interfaces_generators.cpp
new file mode 100644
index 0000000..271b1bc
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_interfaces_generators.cpp
@@ -0,0 +1 @@
+#include "catch_interfaces_generators.h"
diff --git a/projects/SelfTest/SurrogateCpps/catch_interfaces_registry_hub.cpp b/projects/SelfTest/SurrogateCpps/catch_interfaces_registry_hub.cpp
new file mode 100644
index 0000000..ffece3b
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_interfaces_registry_hub.cpp
@@ -0,0 +1,3 @@
+// This file is only here to verify (to the extent possible) the self sufficiency of the header
+#include "catch_suppress_warnings.h"
+#include "catch_interfaces_registry_hub.h"
diff --git a/projects/SelfTest/SurrogateCpps/catch_interfaces_reporter.cpp b/projects/SelfTest/SurrogateCpps/catch_interfaces_reporter.cpp
new file mode 100644
index 0000000..544f9d0
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_interfaces_reporter.cpp
@@ -0,0 +1,2 @@
+#include "catch_suppress_warnings.h"
+#include "catch_interfaces_reporter.h"
diff --git a/projects/SelfTest/SurrogateCpps/catch_interfaces_runner.cpp b/projects/SelfTest/SurrogateCpps/catch_interfaces_runner.cpp
new file mode 100644
index 0000000..401de26
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_interfaces_runner.cpp
@@ -0,0 +1 @@
+#include "catch_interfaces_runner.h"
diff --git a/projects/SelfTest/SurrogateCpps/catch_interfaces_testcase.cpp b/projects/SelfTest/SurrogateCpps/catch_interfaces_testcase.cpp
new file mode 100644
index 0000000..733dcb4
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_interfaces_testcase.cpp
@@ -0,0 +1,2 @@
+#include "catch_suppress_warnings.h"
+#include "catch_interfaces_testcase.h"
diff --git a/projects/SelfTest/SurrogateCpps/catch_message.cpp b/projects/SelfTest/SurrogateCpps/catch_message.cpp
new file mode 100644
index 0000000..ad2f5e7
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_message.cpp
@@ -0,0 +1,3 @@
+// This file is only here to verify (to the extent possible) the self sufficiency of the header
+#include "catch_suppress_warnings.h"
+#include "catch_message.h"
diff --git a/projects/SelfTest/SurrogateCpps/catch_option.cpp b/projects/SelfTest/SurrogateCpps/catch_option.cpp
new file mode 100644
index 0000000..35e3282
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_option.cpp
@@ -0,0 +1,3 @@
+// This file is only here to verify (to the extent possible) the self sufficiency of the header
+#include "catch_suppress_warnings.h"
+#include "catch_option.hpp"
diff --git a/projects/SelfTest/SurrogateCpps/catch_ptr.cpp b/projects/SelfTest/SurrogateCpps/catch_ptr.cpp
new file mode 100644
index 0000000..a25ad66
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_ptr.cpp
@@ -0,0 +1,3 @@
+// This file is only here to verify (to the extent possible) the self sufficiency of the header
+#include "catch_suppress_warnings.h"
+#include "catch_ptr.hpp"
diff --git a/projects/SelfTest/SurrogateCpps/catch_stream.cpp b/projects/SelfTest/SurrogateCpps/catch_stream.cpp
new file mode 100644
index 0000000..7aaffa1
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_stream.cpp
@@ -0,0 +1,3 @@
+// This file is only here to verify (to the extent possible) the self sufficiency of the header
+#include "catch_suppress_warnings.h"
+#include "catch_stream.h"
diff --git a/projects/SelfTest/SurrogateCpps/catch_streambuf.cpp b/projects/SelfTest/SurrogateCpps/catch_streambuf.cpp
new file mode 100644
index 0000000..5c0043c
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_streambuf.cpp
@@ -0,0 +1,3 @@
+// This file is only here to verify (to the extent possible) the self sufficiency of the header
+#include "catch_suppress_warnings.h"
+#include "catch_streambuf.h"
diff --git a/projects/SelfTest/SurrogateCpps/catch_test_spec.cpp b/projects/SelfTest/SurrogateCpps/catch_test_spec.cpp
new file mode 100644
index 0000000..46bf89f
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_test_spec.cpp
@@ -0,0 +1,3 @@
+// This file is only here to verify (to the extent possible) the self sufficiency of the header
+#include "catch_suppress_warnings.h"
+#include "catch_test_spec.hpp"
diff --git a/projects/SelfTest/SurrogateCpps/catch_xmlwriter.cpp b/projects/SelfTest/SurrogateCpps/catch_xmlwriter.cpp
new file mode 100644
index 0000000..15328ef
--- /dev/null
+++ b/projects/SelfTest/SurrogateCpps/catch_xmlwriter.cpp
@@ -0,0 +1,4 @@
+// This file is only here to verify (to the extent possible) the self sufficiency of the header
+#include "catch_suppress_warnings.h"
+#include "catch_xmlwriter.hpp"
+#include "catch_reenable_warnings.h"
diff --git a/projects/SelfTest/TagAliasTests.cpp b/projects/SelfTest/TagAliasTests.cpp
new file mode 100644
index 0000000..002a93c
--- /dev/null
+++ b/projects/SelfTest/TagAliasTests.cpp
@@ -0,0 +1,41 @@
+/*
+ * Created by Phil on 27/06/2014.
+ * Copyright 2014 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"
+#include "internal/catch_tag_alias_registry.h"
+
+TEST_CASE( "Tag alias can be registered against tag patterns", "" ) {
+
+ using namespace Catch::Matchers;
+
+ Catch::TagAliasRegistry registry;
+
+ registry.add( "[@zzz]", "[one][two]", Catch::SourceLineInfo( "file", 2 ) );
+
+ SECTION( "The same tag alias can only be registered once", "" ) {
+
+ try {
+ registry.add( "[@zzz]", "[one][two]", Catch::SourceLineInfo( "file", 10 ) );
+ FAIL( "expected exception" );
+ }
+ catch( std::exception& ex ) {
+ std::string what = ex.what();
+ CHECK_THAT( what, Contains( "[@zzz]" ) );
+ CHECK_THAT( what, Contains( "file" ) );
+ CHECK_THAT( what, Contains( "2" ) );
+ CHECK_THAT( what, Contains( "10" ) );
+ }
+ }
+
+ SECTION( "Tag aliases must be of the form [@name]", "" ) {
+ CHECK_THROWS( registry.add( "[no ampersat]", "", Catch::SourceLineInfo( "file", 3 ) ) );
+ CHECK_THROWS( registry.add( "[the @ is not at the start]", "", Catch::SourceLineInfo( "file", 3 ) ) );
+ CHECK_THROWS( registry.add( "@no square bracket at start]", "", Catch::SourceLineInfo( "file", 3 ) ) );
+ CHECK_THROWS( registry.add( "[@no square bracket at end", "", Catch::SourceLineInfo( "file", 3 ) ) );
+ }
+}
diff --git a/projects/SelfTest/TestMain.cpp b/projects/SelfTest/TestMain.cpp
new file mode 100644
index 0000000..c63f469
--- /dev/null
+++ b/projects/SelfTest/TestMain.cpp
@@ -0,0 +1,483 @@
+/*
+ * Created by Phil on 22/10/2010.
+ * Copyright 2010 Two Blue Cubes Ltd
+ *
+ * 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"
+#include "../include/reporters/catch_reporter_teamcity.hpp"
+
+// Some example tag aliases
+CATCH_REGISTER_TAG_ALIAS( "[@nhf]", "[failing]~[.]" )
+CATCH_REGISTER_TAG_ALIAS( "[@tricky]", "[tricky]~[.]" )
+
+
+#ifdef __clang__
+# pragma clang diagnostic ignored "-Wpadded"
+# pragma clang diagnostic ignored "-Wweak-vtables"
+# pragma clang diagnostic ignored "-Wc++98-compat"
+#endif
+
+
+template<size_t size>
+void parseIntoConfig( const char * (&argv)[size], Catch::ConfigData& config ) {
+ Catch::Clara::CommandLine<Catch::ConfigData> parser = Catch::makeCommandLineParser();
+ parser.parseInto( size, argv, config );
+}
+
+template<size_t size>
+std::string parseIntoConfigAndReturnError( const char * (&argv)[size], Catch::ConfigData& config ) {
+ try {
+ parseIntoConfig( argv, config );
+ FAIL( "expected exception" );
+ }
+ catch( std::exception& ex ) {
+ return ex.what();
+ }
+ return "";
+}
+
+inline Catch::TestCase fakeTestCase( const char* name, const char* desc = "" ){ return Catch::makeTestCase( CATCH_NULL, "", name, desc, CATCH_INTERNAL_LINEINFO ); }
+
+TEST_CASE( "Process can be configured on command line", "[config][command-line]" ) {
+
+ using namespace Catch::Matchers;
+
+ Catch::ConfigData config;
+
+ SECTION( "default - no arguments", "" ) {
+ const char* argv[] = { "test" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ CHECK( config.shouldDebugBreak == false );
+ CHECK( config.abortAfter == -1 );
+ CHECK( config.noThrow == false );
+ CHECK( config.reporterNames.empty() );
+ }
+
+ SECTION( "test lists", "" ) {
+ SECTION( "1 test", "Specify one test case using" ) {
+ const char* argv[] = { "test", "test1" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ Catch::Config cfg( config );
+ REQUIRE( cfg.testSpec().matches( fakeTestCase( "notIncluded" ) ) == false );
+ REQUIRE( cfg.testSpec().matches( fakeTestCase( "test1" ) ) );
+ }
+ SECTION( "Specify one test case exclusion using exclude:", "" ) {
+ const char* argv[] = { "test", "exclude:test1" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ Catch::Config cfg( config );
+ REQUIRE( cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false );
+ REQUIRE( cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) ) );
+ }
+
+ SECTION( "Specify one test case exclusion using ~", "" ) {
+ const char* argv[] = { "test", "~test1" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ Catch::Config cfg( config );
+ REQUIRE( cfg.testSpec().matches( fakeTestCase( "test1" ) ) == false );
+ REQUIRE( cfg.testSpec().matches( fakeTestCase( "alwaysIncluded" ) ) );
+ }
+
+ }
+
+ SECTION( "reporter", "" ) {
+ SECTION( "-r/console", "" ) {
+ const char* argv[] = { "test", "-r", "console" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ REQUIRE( config.reporterNames[0] == "console" );
+ }
+ SECTION( "-r/xml", "" ) {
+ const char* argv[] = { "test", "-r", "xml" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ REQUIRE( config.reporterNames[0] == "xml" );
+ }
+ SECTION( "-r xml and junit", "" ) {
+ const char* argv[] = { "test", "-r", "xml", "-r", "junit" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ REQUIRE( config.reporterNames.size() == 2 );
+ REQUIRE( config.reporterNames[0] == "xml" );
+ REQUIRE( config.reporterNames[1] == "junit" );
+ }
+ SECTION( "--reporter/junit", "" ) {
+ const char* argv[] = { "test", "--reporter", "junit" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ REQUIRE( config.reporterNames[0] == "junit" );
+ }
+ }
+
+ SECTION( "debugger", "" ) {
+ SECTION( "-b", "" ) {
+ const char* argv[] = { "test", "-b" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ REQUIRE( config.shouldDebugBreak == true );
+ }
+ SECTION( "--break", "" ) {
+ const char* argv[] = { "test", "--break" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ REQUIRE( config.shouldDebugBreak );
+ }
+ }
+
+ SECTION( "abort", "" ) {
+ SECTION( "-a aborts after first failure", "" ) {
+ const char* argv[] = { "test", "-a" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ REQUIRE( config.abortAfter == 1 );
+ }
+ SECTION( "-x 2 aborts after two failures", "" ) {
+ const char* argv[] = { "test", "-x", "2" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ REQUIRE( config.abortAfter == 2 );
+ }
+ SECTION( "-x must be greater than zero", "" ) {
+ const char* argv[] = { "test", "-x", "0" };
+ REQUIRE_THAT( parseIntoConfigAndReturnError( argv, config ), Contains( "greater than zero" ) );
+ }
+ SECTION( "-x must be numeric", "" ) {
+ const char* argv[] = { "test", "-x", "oops" };
+ REQUIRE_THAT( parseIntoConfigAndReturnError( argv, config ), Contains( "-x" ) );
+ }
+ }
+
+ SECTION( "nothrow", "" ) {
+ SECTION( "-e", "" ) {
+ const char* argv[] = { "test", "-e" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ REQUIRE( config.noThrow == true );
+ }
+ SECTION( "--nothrow", "" ) {
+ const char* argv[] = { "test", "--nothrow" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ REQUIRE( config.noThrow == true );
+ }
+ }
+
+ SECTION( "output filename", "" ) {
+ SECTION( "-o filename", "" ) {
+ const char* argv[] = { "test", "-o", "filename.ext" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ REQUIRE( config.outputFilename == "filename.ext" );
+ }
+ SECTION( "--out", "" ) {
+ const char* argv[] = { "test", "--out", "filename.ext" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ REQUIRE( config.outputFilename == "filename.ext" );
+ }
+ }
+
+ SECTION( "combinations", "" ) {
+ SECTION( "Single character flags can be combined", "" ) {
+ const char* argv[] = { "test", "-abe" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ CHECK( config.abortAfter == 1 );
+ CHECK( config.shouldDebugBreak );
+ CHECK( config.noThrow == true );
+ }
+ }
+
+ SECTION( "use-colour", "") {
+
+ using Catch::UseColour;
+
+ SECTION( "without option", "" ) {
+ const char* argv[] = { "test" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ REQUIRE( config.useColour == UseColour::Auto );
+ }
+
+ SECTION( "auto", "" ) {
+ const char* argv[] = { "test", "--use-colour", "auto" };
+ CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+ REQUIRE( config.useColour == UseColour::Auto );
+ }
+
+ 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 );
+ }
+
+ SECTION( "error", "" ) {
+ const char* argv[] = { "test", "--use-colour", "wrong" };
+ REQUIRE_THROWS_WITH( parseIntoConfig( argv, config ), Contains( "colour mode must be one of" ) );
+ }
+ }
+}
+
+
+TEST_CASE( "Long strings can be wrapped", "[wrap]" ) {
+
+ using namespace Catch;
+ SECTION( "plain string", "" ) {
+ // guide: 123456789012345678
+ std::string testString = "one two three four";
+
+ SECTION( "No wrapping", "" ) {
+ CHECK( Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString );
+ CHECK( Text( testString, TextAttributes().setWidth( 18 ) ).toString() == testString );
+ }
+ SECTION( "Wrapped once", "" ) {
+ CHECK( Text( testString, TextAttributes().setWidth( 17 ) ).toString() == "one two three\nfour" );
+ CHECK( Text( testString, TextAttributes().setWidth( 16 ) ).toString() == "one two three\nfour" );
+ CHECK( Text( testString, TextAttributes().setWidth( 14 ) ).toString() == "one two three\nfour" );
+ CHECK( Text( testString, TextAttributes().setWidth( 13 ) ).toString() == "one two three\nfour" );
+ CHECK( Text( testString, TextAttributes().setWidth( 12 ) ).toString() == "one two\nthree four" );
+ }
+ SECTION( "Wrapped twice", "" ) {
+ CHECK( Text( testString, TextAttributes().setWidth( 9 ) ).toString() == "one two\nthree\nfour" );
+ CHECK( Text( testString, TextAttributes().setWidth( 8 ) ).toString() == "one two\nthree\nfour" );
+ CHECK( Text( testString, TextAttributes().setWidth( 7 ) ).toString() == "one two\nthree\nfour" );
+ }
+ SECTION( "Wrapped three times", "" ) {
+ CHECK( Text( testString, TextAttributes().setWidth( 6 ) ).toString() == "one\ntwo\nthree\nfour" );
+ CHECK( Text( testString, TextAttributes().setWidth( 5 ) ).toString() == "one\ntwo\nthree\nfour" );
+ }
+ SECTION( "Short wrap", "" ) {
+ CHECK( Text( "abcdef", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndef" );
+ CHECK( Text( "abcdefg", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndefg" );
+ CHECK( Text( "abcdefgh", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndef-\ngh" );
+
+ CHECK( Text( testString, TextAttributes().setWidth( 4 ) ).toString() == "one\ntwo\nthr-\nee\nfour" );
+ CHECK( Text( testString, TextAttributes().setWidth( 3 ) ).toString() == "one\ntwo\nth-\nree\nfo-\nur" );
+ }
+ SECTION( "As container", "" ) {
+ Text text( testString, TextAttributes().setWidth( 6 ) );
+ REQUIRE( text.size() == 4 );
+ CHECK( text[0] == "one" );
+ CHECK( text[1] == "two" );
+ CHECK( text[2] == "three" );
+ CHECK( text[3] == "four" );
+ }
+ SECTION( "Indent first line differently", "" ) {
+ Text text( testString, TextAttributes()
+ .setWidth( 10 )
+ .setIndent( 4 )
+ .setInitialIndent( 1 ) );
+ CHECK( text.toString() == " one two\n three\n four" );
+ }
+
+ }
+
+ SECTION( "With newlines", "" ) {
+
+ // guide: 1234567890123456789
+ std::string testString = "one two\nthree four";
+
+ SECTION( "No wrapping" , "" ) {
+ CHECK( Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString );
+ CHECK( Text( testString, TextAttributes().setWidth( 18 ) ).toString() == testString );
+ CHECK( Text( testString, TextAttributes().setWidth( 10 ) ).toString() == testString );
+ }
+ SECTION( "Trailing newline" , "" ) {
+ CHECK( Text( "abcdef\n", TextAttributes().setWidth( 10 ) ).toString() == "abcdef\n" );
+ CHECK( Text( "abcdef", TextAttributes().setWidth( 6 ) ).toString() == "abcdef" );
+ CHECK( Text( "abcdef\n", TextAttributes().setWidth( 6 ) ).toString() == "abcdef\n" );
+ }
+ SECTION( "Wrapped once", "" ) {
+ CHECK( Text( testString, TextAttributes().setWidth( 9 ) ).toString() == "one two\nthree\nfour" );
+ CHECK( Text( testString, TextAttributes().setWidth( 8 ) ).toString() == "one two\nthree\nfour" );
+ CHECK( Text( testString, TextAttributes().setWidth( 7 ) ).toString() == "one two\nthree\nfour" );
+ }
+ SECTION( "Wrapped twice", "" ) {
+ CHECK( Text( testString, TextAttributes().setWidth( 6 ) ).toString() == "one\ntwo\nthree\nfour" );
+ }
+ }
+
+ SECTION( "With tabs", "" ) {
+
+ // guide: 1234567890123456789
+ std::string testString = "one two \tthree four five six";
+
+ CHECK( Text( testString, TextAttributes().setWidth( 15 ) ).toString()
+ == "one two three\n four\n five\n six" );
+ }
+
+
+}
+
+using namespace Catch;
+
+class ColourString {
+public:
+
+ struct ColourIndex {
+ ColourIndex( Colour::Code _colour, std::size_t _fromIndex, std::size_t _toIndex )
+ : colour( _colour ),
+ fromIndex( _fromIndex ),
+ toIndex( _toIndex )
+ {}
+
+ Colour::Code colour;
+ std::size_t fromIndex;
+ std::size_t toIndex;
+ };
+
+ ColourString( std::string const& _string )
+ : string( _string )
+ {}
+ ColourString( std::string const& _string, std::vector<ColourIndex> const& _colours )
+ : string( _string ), colours( _colours )
+ {}
+
+ ColourString& addColour( Colour::Code colour, int _index ) {
+ colours.push_back( ColourIndex( colour,
+ resolveRelativeIndex( _index ),
+ resolveRelativeIndex( _index )+1 ) );
+ return *this;
+ }
+ ColourString& addColour( Colour::Code colour, int _fromIndex, int _toIndex ) {
+ colours.push_back( ColourIndex( colour,
+ resolveRelativeIndex(_fromIndex),
+ resolveLastRelativeIndex( _toIndex ) ) );
+ return *this;
+ }
+
+ void writeToStream( std::ostream& _stream ) const {
+ std::size_t last = 0;
+ for( std::size_t i = 0; i < colours.size(); ++i ) {
+ ColourIndex const& index = colours[i];
+ if( index.fromIndex > last )
+ _stream << string.substr( last, index.fromIndex-last );
+ {
+ Colour colourGuard( index.colour );
+ _stream << string.substr( index.fromIndex, index.toIndex-index.fromIndex );
+ }
+ last = index.toIndex;
+ }
+ if( last < string.size() )
+ _stream << string.substr( last );
+ }
+ friend std::ostream& operator << ( std::ostream& _stream, ColourString const& _colourString ) {
+ _colourString.writeToStream( _stream );
+ return _stream;
+ }
+
+private:
+
+ std::size_t resolveLastRelativeIndex( int _index ) {
+ std::size_t index = resolveRelativeIndex( _index );
+ return index == 0 ? string.size() : index;
+ }
+ std::size_t resolveRelativeIndex( int _index ) {
+ return static_cast<std::size_t>( _index >= 0
+ ? _index
+ : static_cast<int>( string.size() )+_index );
+ }
+ std::string string;
+ std::vector<ColourIndex> colours;
+};
+
+TEST_CASE( "replaceInPlace", "" ) {
+ std::string letters = "abcdefcg";
+ SECTION( "replace single char" ) {
+ CHECK( replaceInPlace( letters, "b", "z" ) );
+ CHECK( letters == "azcdefcg" );
+ }
+ SECTION( "replace two chars" ) {
+ CHECK( replaceInPlace( letters, "c", "z" ) );
+ CHECK( letters == "abzdefzg" );
+ }
+ SECTION( "replace first char" ) {
+ CHECK( replaceInPlace( letters, "a", "z" ) );
+ CHECK( letters == "zbcdefcg" );
+ }
+ SECTION( "replace last char" ) {
+ CHECK( replaceInPlace( letters, "g", "z" ) );
+ CHECK( letters == "abcdefcz" );
+ }
+ SECTION( "replace all chars" ) {
+ CHECK( replaceInPlace( letters, letters, "replaced" ) );
+ CHECK( letters == "replaced" );
+ }
+ SECTION( "replace no chars" ) {
+ CHECK_FALSE( replaceInPlace( letters, "x", "z" ) );
+ CHECK( letters == letters );
+ }
+ SECTION( "escape '" ) {
+ std::string s = "didn't";
+ CHECK( replaceInPlace( s, "'", "|'" ) );
+ CHECK( s == "didn|'t" );
+ }
+}
+
+// !TBD: This will be folded into Text class
+TEST_CASE( "Strings can be rendered with colour", "[.colour]" ) {
+
+ {
+ ColourString cs( "hello" );
+ cs .addColour( Colour::Red, 0 )
+ .addColour( Colour::Green, -1 );
+
+ Catch::cout() << cs << std::endl;
+ }
+
+ {
+ ColourString cs( "hello" );
+ cs .addColour( Colour::Blue, 1, -2 );
+
+ Catch::cout() << cs << std::endl;
+ }
+
+}
+
+TEST_CASE( "Text can be formatted using the Text class", "" ) {
+
+ CHECK( Text( "hi there" ).toString() == "hi there" );
+
+ TextAttributes narrow;
+ narrow.setWidth( 6 );
+
+ CHECK( Text( "hi there", narrow ).toString() == "hi\nthere" );
+}
+
+TEST_CASE( "Long text is truncted", "[Text][Truncated]" ) {
+
+ std::string longLine( 90, '*' );
+
+ std::ostringstream oss;
+ for(int i = 0; i < 600; ++i )
+ oss << longLine << longLine << "\n";
+ Text t( oss.str() );
+ CHECK_THAT( t.toString(), EndsWith( "... message truncated due to excessive size" ) );
+
+}
+
+inline void manuallyRegisteredTestFunction() {
+ SUCCEED( "was called" );
+}
+struct AutoTestReg {
+ AutoTestReg() {
+ REGISTER_TEST_CASE( manuallyRegisteredTestFunction, "ManuallyRegistered", "" );
+ }
+};
+AutoTestReg autoTestReg;
diff --git a/projects/SelfTest/ToStringPair.cpp b/projects/SelfTest/ToStringPair.cpp
new file mode 100644
index 0000000..8f51070
--- /dev/null
+++ b/projects/SelfTest/ToStringPair.cpp
@@ -0,0 +1,47 @@
+#include "catch.hpp"
+
+// === Pair ===
+namespace Catch {
+ // Note: If we put this in the right place in catch_tostring, then
+ // we can make it an overload of Catch::toString
+ template<typename T1, typename T2>
+ struct StringMaker<std::pair<T1,T2> > {
+ static std::string convert( const std::pair<T1,T2>& pair ) {
+ std::ostringstream oss;
+ oss << "{ "
+ << toString( pair.first )
+ << ", "
+ << toString( pair.second )
+ << " }";
+ return oss.str();
+ }
+ };
+}
+
+TEST_CASE( "std::pair<int,std::string> -> toString", "[toString][pair]" ) {
+ std::pair<int,std::string> value( 34, "xyzzy" );
+ REQUIRE( Catch::toString( value ) == "{ 34, \"xyzzy\" }" );
+}
+
+TEST_CASE( "std::pair<int,const std::string> -> toString", "[toString][pair]" ) {
+ std::pair<int,const std::string> value( 34, "xyzzy" );
+ REQUIRE( Catch::toString(value) == "{ 34, \"xyzzy\" }" );
+}
+
+TEST_CASE( "std::vector<std::pair<std::string,int> > -> toString", "[toString][pair]" ) {
+ std::vector<std::pair<std::string,int> > pr;
+ pr.push_back( std::make_pair("green", 55 ) );
+ REQUIRE( Catch::toString( pr ) == "{ { \"green\", 55 } }" );
+}
+
+// This is pretty contrived - I figure if this works, anything will...
+TEST_CASE( "pair<pair<int,const char *,pair<std::string,int> > -> toString", "[toString][pair]" ) {
+ typedef std::pair<int,const char *> left_t;
+ typedef std::pair<std::string,int> right_t;
+
+ left_t left( 42, "Arthur" );
+ right_t right( "Ford", 24 );
+
+ std::pair<left_t,right_t> pair( left, right );
+ REQUIRE( Catch::toString( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" );
+}
diff --git a/projects/SelfTest/ToStringTuple.cpp b/projects/SelfTest/ToStringTuple.cpp
new file mode 100644
index 0000000..80e5453
--- /dev/null
+++ b/projects/SelfTest/ToStringTuple.cpp
@@ -0,0 +1,59 @@
+#include "catch.hpp"
+
+#ifdef CATCH_CPP11_OR_GREATER
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wc++98-compat"
+#endif
+
+TEST_CASE( "tuple<>", "[toString][tuple]" )
+{
+ typedef std::tuple<> type;
+ CHECK( "{ }" == Catch::toString(type{}) );
+ type value {};
+ CHECK( "{ }" == Catch::toString(value) );
+}
+
+TEST_CASE( "tuple<int>", "[toString][tuple]" )
+{
+ typedef std::tuple<int> type;
+ CHECK( "{ 0 }" == Catch::toString(type{0}) );
+}
+
+
+TEST_CASE( "tuple<float,int>", "[toString][tuple]" )
+{
+ 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]" )
+{
+ 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]" )
+{
+ typedef std::tuple<std::tuple<int>,std::tuple<>,float> type;
+ type value { std::tuple<int>{42}, {}, 1.2f };
+ CHECK( "{ { 42 }, { }, 1.2f }" == Catch::toString(value) );
+}
+
+#ifdef CATCH_CONFIG_CPP11_NULLPTR
+TEST_CASE( "tuple<nullptr,int,const char *>", "[toString][tuple]" )
+{
+ typedef std::tuple<std::nullptr_t,int,const char *> type;
+ type value { nullptr, 42, "Catch me" };
+ CHECK( "{ nullptr, 42, \"Catch me\" }" == Catch::toString(value) );
+}
+#endif
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+#endif /* #ifdef CATCH_CPP11_OR_GREATER */
+
diff --git a/projects/SelfTest/ToStringVector.cpp b/projects/SelfTest/ToStringVector.cpp
new file mode 100644
index 0000000..c3a8d4e
--- /dev/null
+++ b/projects/SelfTest/ToStringVector.cpp
@@ -0,0 +1,77 @@
+#include "catch.hpp"
+#include <vector>
+
+
+// vedctor
+TEST_CASE( "vector<int> -> toString", "[toString][vector]" )
+{
+ std::vector<int> vv;
+ REQUIRE( Catch::toString(vv) == "{ }" );
+ vv.push_back( 42 );
+ REQUIRE( Catch::toString(vv) == "{ 42 }" );
+ vv.push_back( 250 );
+ REQUIRE( Catch::toString(vv) == "{ 42, 250 }" );
+}
+
+TEST_CASE( "vector<string> -> toString", "[toString][vector]" )
+{
+ std::vector<std::string> vv;
+ REQUIRE( Catch::toString(vv) == "{ }" );
+ vv.push_back( "hello" );
+ REQUIRE( Catch::toString(vv) == "{ \"hello\" }" );
+ vv.push_back( "world" );
+ REQUIRE( Catch::toString(vv) == "{ \"hello\", \"world\" }" );
+}
+
+#if defined(CATCH_CPP11_OR_GREATER)
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wc++98-compat"
+#endif
+
+/*
+ Note: These tests *can* be made to work with C++ < 11, but the
+ allocator is a lot more work...
+*/
+namespace {
+ /* Minimal Allocator */
+ template<typename T>
+ struct minimal_allocator {
+ typedef T value_type;
+ typedef std::size_t size_type;
+ T *allocate( size_type n ) {
+ return static_cast<T *>( ::operator new( n * sizeof(T) ) );
+ }
+ void deallocate( T *p, size_type /*n*/ ) {
+ ::operator delete( static_cast<void *>(p) );
+ }
+ template<typename U>
+ bool operator==( const minimal_allocator<U>& ) const { return true; }
+ template<typename U>
+ bool operator!=( const minimal_allocator<U>& ) const { return false; }
+ };
+}
+
+TEST_CASE( "vector<int,allocator> -> toString", "[toString][vector,allocator]" ) {
+ std::vector<int,minimal_allocator<int> > vv;
+ REQUIRE( Catch::toString(vv) == "{ }" );
+ vv.push_back( 42 );
+ REQUIRE( Catch::toString(vv) == "{ 42 }" );
+ vv.push_back( 250 );
+ REQUIRE( Catch::toString(vv) == "{ 42, 250 }" );
+}
+
+TEST_CASE( "vec<vec<string,alloc>> -> toString", "[toString][vector,allocator]" ) {
+ typedef std::vector<std::string,minimal_allocator<std::string> > inner;
+ typedef std::vector<inner> vector;
+ vector v;
+ REQUIRE( Catch::toString(v) == "{ }" );
+ v.push_back( inner { "hello" } );
+ v.push_back( inner { "world" } );
+ REQUIRE( Catch::toString(v) == "{ { \"hello\" }, { \"world\" } }" );
+}
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+#endif // CATCH_CPP11_OR_GREATER
diff --git a/projects/SelfTest/ToStringWhich.cpp b/projects/SelfTest/ToStringWhich.cpp
new file mode 100644
index 0000000..1d4aa89
--- /dev/null
+++ b/projects/SelfTest/ToStringWhich.cpp
@@ -0,0 +1,68 @@
+#include "catch.hpp"
+/*
+ Demonstrate which version of toString/StringMaker is being used
+ for various types
+*/
+
+
+struct has_toString { };
+struct has_maker {};
+struct has_maker_and_toString {};
+
+namespace Catch {
+ inline std::string toString( const has_toString& ) {
+ return "toString( has_toString )";
+ }
+ inline std::string toString( const has_maker_and_toString& ) {
+ return "toString( has_maker_and_toString )";
+ }
+ template<>
+ struct StringMaker<has_maker> {
+ static std::string convert( const has_maker& ) {
+ return "StringMaker<has_maker>";
+ }
+ };
+ template<>
+ struct StringMaker<has_maker_and_toString> {
+ static std::string convert( const has_maker_and_toString& ) {
+ return "StringMaker<has_maker_and_toString>";
+ }
+ };
+}
+
+// Call the overload
+TEST_CASE( "toString( has_toString )", "[toString]" ) {
+ has_toString item;
+ REQUIRE( Catch::toString( item ) == "toString( has_toString )" );
+}
+
+// Call the overload
+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]" ) {
+ has_maker_and_toString item;
+ REQUIRE( Catch::toString( item ) == "toString( has_maker_and_toString )" );
+}
+
+// Vectors...
+TEST_CASE( "toString( vectors<has_toString )", "[toString]" ) {
+ std::vector<has_toString> v(1);
+ // This invokes template<T> toString which actually gives us '{ ? }'
+ REQUIRE( Catch::toString( v ) == "{ {?} }" );
+}
+
+TEST_CASE( "toString( vectors<has_maker )", "[toString]" ) {
+ std::vector<has_maker> v(1);
+ REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker> }" );
+}
+
+
+TEST_CASE( "toString( vectors<has_maker_and_toString )", "[toString]" ) {
+ 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/projects/SelfTest/TrickyTests.cpp b/projects/SelfTest/TrickyTests.cpp
new file mode 100644
index 0000000..eb53e42
--- /dev/null
+++ b/projects/SelfTest/TrickyTests.cpp
@@ -0,0 +1,401 @@
+/*
+ * Created by Phil on 09/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)
+ */
+
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wpadded"
+#endif
+
+#include "catch.hpp"
+
+#ifdef __clang__
+#pragma clang diagnostic ignored "-Wc++98-compat"
+#pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
+#endif
+
+namespace Catch
+{
+ template<>
+ std::string toString<std::pair<int, int> >( const std::pair<int, int>& value )
+ {
+ std::ostringstream oss;
+ oss << "std::pair( " << value.first << ", " << value.second << " )";
+ return oss.str();
+
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "Parsing a std::pair",
+ "[Tricky][std::pair]"
+)
+{
+ std::pair<int, int> aNicePair( 1, 2 );
+
+ REQUIRE( (std::pair<int, int>( 1, 2 )) == aNicePair );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "Where there is more to the expression after the RHS",
+ "[Tricky][failing][.]"
+)
+{
+// int a = 1, b = 2;
+// REQUIRE( a == 2 || b == 2 );
+ WARN( "Uncomment the code in this test to check that it gives a sensible compiler error" );
+}
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "Where the LHS is not a simple value",
+ "[Tricky][failing][.]"
+)
+{
+ /*
+ int a = 1;
+ int b = 2;
+
+ // This only captures part of the expression, but issues a warning about the rest
+ REQUIRE( a+1 == b-1 );
+ */
+ WARN( "Uncomment the code in this test to check that it gives a sensible compiler error" );
+}
+
+struct Opaque
+{
+ int val;
+ bool operator ==( const Opaque& o ) const
+ {
+ return val == o.val;
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "A failing expression with a non streamable type is still captured",
+ "[Tricky][failing][.]"
+)
+{
+
+ Opaque o1, o2;
+ o1.val = 7;
+ o2.val = 8;
+
+ CHECK( &o1 == &o2 );
+ CHECK( o1 == o2 );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "string literals of different sizes can be compared",
+ "[Tricky][failing][.]"
+)
+{
+ REQUIRE( std::string( "first" ) == "second" );
+
+}
+
+///////////////////////////////////////////////////////////////////////////////
+TEST_CASE
+(
+ "An expression with side-effects should only be evaluated once",
+ "[Tricky]"
+)
+{
+ int i = 7;
+
+ REQUIRE( i++ == 7 );
+ REQUIRE( i++ == 8 );
+
+}
+
+namespace A {
+ struct X
+ {
+ X() : a(4), b(2), c(7) {}
+ X(int v) : a(v), b(2), c(7) {}
+ int a;
+ int b;
+ int c;
+ };
+}
+
+namespace B {
+ struct Y
+ {
+ Y() : a(4), b(2), c(7) {}
+ Y(int v) : a(v), b(2), c(7) {}
+ int a;
+ int b;
+ int c;
+ };
+}
+
+inline bool operator==(const A::X& lhs, const B::Y& rhs)
+{
+ return (lhs.a == rhs.a);
+}
+
+inline bool operator==(const B::Y& lhs, const A::X& rhs)
+{
+ return (lhs.a == rhs.a);
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+/* This, currently, does not compile with LLVM
+TEST_CASE
+(
+ "Operators at different namespace levels not hijacked by Koenig lookup"
+ "[Tricky]"
+)
+{
+ A::X x;
+ B::Y y;
+ REQUIRE( x == y );
+}
+*/
+
+namespace ObjectWithConversions
+{
+ struct Object
+ {
+ operator unsigned int() {return 0xc0000000;}
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
+ TEST_CASE
+ (
+ "Operators at different namespace levels not hijacked by Koenig lookup",
+ "[Tricky]"
+ )
+ {
+ Object o;
+ REQUIRE(0xc0000000 == o );
+ }
+}
+
+namespace ObjectWithNonConstEqualityOperator
+{
+ struct Test
+ {
+ Test( unsigned int v )
+ : m_value(v)
+ {}
+
+ bool operator==( const Test&rhs )
+ {
+ return (m_value == rhs.m_value);
+ }
+ bool operator==( const Test&rhs ) const
+ {
+ return (m_value != rhs.m_value);
+ }
+ unsigned int m_value;
+ };
+
+ TEST_CASE("Demonstrate that a non-const == is not used", "[Tricky]" )
+ {
+ Test t( 1 );
+ REQUIRE( t == 1u );
+ }
+}
+
+namespace EnumBitFieldTests
+{
+ enum Bits {bit0 = 0x0001, bit1 = 0x0002, bit2 = 0x0004, bit3 = 0x0008, bit1and2 = 0x0006,
+ bit30 = 0x40000000, bit31 = 0x80000000,
+ bit30and31 = 0xc0000000};
+
+ TEST_CASE( "Test enum bit values", "[Tricky]" )
+ {
+ REQUIRE( 0xc0000000 == bit30and31 );
+ }
+}
+
+struct Obj
+{
+ Obj():prop(&p){}
+
+ int p;
+ int* prop;
+};
+
+TEST_CASE("boolean member", "[Tricky]")
+{
+ Obj obj;
+ REQUIRE( obj.prop != CATCH_NULL );
+}
+
+// Tests for a problem submitted by Ralph McArdell
+//
+// The static bool value should not need to be defined outside the
+// struct it is declared in - but when evaluating it in a deduced
+// context it appears to require the extra definition.
+// The issue was fixed by adding bool overloads to bypass the
+// templates that were there to deduce it.
+template <bool B>
+struct is_true
+{
+ static const bool value = B;
+};
+
+TEST_CASE( "(unimplemented) static bools can be evaluated", "[Tricky]" )
+{
+ SECTION("compare to true","")
+ {
+ REQUIRE( is_true<true>::value == true );
+ REQUIRE( true == is_true<true>::value );
+ }
+ SECTION("compare to false","")
+ {
+ REQUIRE( is_true<false>::value == false );
+ REQUIRE( false == is_true<false>::value );
+ }
+
+ SECTION("negation", "")
+ {
+ REQUIRE( !is_true<false>::value );
+ }
+
+ SECTION("double negation","")
+ {
+ REQUIRE( !!is_true<true>::value );
+ }
+
+ SECTION("direct","")
+ {
+ REQUIRE( is_true<true>::value );
+ REQUIRE_FALSE( is_true<false>::value );
+ }
+}
+
+// Uncomment these tests to produce an error at test registration time
+/*
+TEST_CASE( "Tests with the same name are not allowed", "[Tricky]" )
+{
+
+}
+TEST_CASE( "Tests with the same name are not allowed", "[Tricky]" )
+{
+
+}
+*/
+
+struct Boolable
+{
+ explicit Boolable( bool value ) : m_value( value ) {}
+
+ operator Catch::SafeBool::type() const {
+ return Catch::SafeBool::makeSafe( m_value );
+ }
+
+ bool m_value;
+};
+
+TEST_CASE( "Objects that evaluated in boolean contexts can be checked", "[Tricky][SafeBool]" )
+{
+ Boolable True( true );
+ Boolable False( false );
+
+ CHECK( True );
+ CHECK( !False );
+ CHECK_FALSE( False );
+}
+
+TEST_CASE( "Assertions then sections", "[Tricky]" )
+{
+ // This was causing a failure due to the way the console reporter was handling
+ // the current section
+
+ REQUIRE( Catch::alwaysTrue() );
+
+ SECTION( "A section", "" )
+ {
+ REQUIRE( Catch::alwaysTrue() );
+
+ SECTION( "Another section", "" )
+ {
+ REQUIRE( Catch::alwaysTrue() );
+ }
+ SECTION( "Another other section", "" )
+ {
+ REQUIRE( Catch::alwaysTrue() );
+ }
+ }
+}
+
+struct Awkward
+{
+ operator int() const { return 7; }
+};
+
+TEST_CASE( "non streamable - with conv. op", "[Tricky]" )
+{
+ Awkward awkward;
+ std::string s = Catch::toString( awkward );
+ REQUIRE( s == "7" );
+}
+
+inline void foo() {}
+
+typedef void (*fooptr_t)();
+
+TEST_CASE( "Comparing function pointers", "[Tricky][function pointer]" )
+{
+ // This was giving a warning in VS2010
+ // #179
+ fooptr_t a = foo;
+
+ REQUIRE( a );
+ REQUIRE( a == &foo );
+}
+
+struct S
+{
+ void f() {}
+};
+
+
+TEST_CASE( "Comparing member function pointers", "[Tricky][member function pointer]" )
+{
+ typedef void (S::*MF)();
+ MF m = &S::f;
+
+ CHECK( m == &S::f );
+}
+
+class ClassName {};
+
+TEST_CASE( "pointer to class", "[Tricky]" )
+{
+ ClassName *p = 0;
+ REQUIRE( p == 0 );
+}
+
+#ifdef CATCH_CONFIG_CPP11_NULLPTR
+
+#include <memory>
+
+TEST_CASE( "null_ptr", "[Tricky][c++11]" )
+{
+ std::unique_ptr<int> ptr;
+ REQUIRE(ptr.get() == nullptr);
+}
+
+#endif
+
+TEST_CASE( "X/level/0/a", "[Tricky]" ) { SUCCEED(""); }
+TEST_CASE( "X/level/0/b", "[Tricky][fizz]" ){ SUCCEED(""); }
+TEST_CASE( "X/level/1/a", "[Tricky]" ) { SUCCEED(""); }
+TEST_CASE( "X/level/1/b", "[Tricky]" ) { SUCCEED(""); }
diff --git a/projects/SelfTest/VariadicMacrosTests.cpp b/projects/SelfTest/VariadicMacrosTests.cpp
new file mode 100644
index 0000000..b784076
--- /dev/null
+++ b/projects/SelfTest/VariadicMacrosTests.cpp
@@ -0,0 +1,31 @@
+/*
+ * Created by Phil on 15/03/2013.
+ * Copyright 2013 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"
+
+#ifdef CATCH_CONFIG_VARIADIC_MACROS
+
+TEST_CASE()
+{
+ SUCCEED( "anonymous test case" );
+}
+
+TEST_CASE( "Test case with one argument" )
+{
+ SUCCEED( "no assertions" );
+}
+
+TEST_CASE( "Variadic macros", "[variadic][sections]" )
+{
+ SECTION( "Section with one argument" )
+ {
+ SUCCEED( "no assertions" );
+ }
+}
+
+#endif
diff --git a/projects/SelfTest/makefile b/projects/SelfTest/makefile
new file mode 100644
index 0000000..0a29372
--- /dev/null
+++ b/projects/SelfTest/makefile
@@ -0,0 +1,30 @@
+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
+