2010-11-29 19:40:44 +00:00
/*
* 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)
*/
2012-08-16 18:47:41 +01:00
#ifdef __clang__
2012-08-13 07:46:10 +01:00
#pragma clang diagnostic ignored "-Wpadded"
2012-08-16 18:47:41 +01:00
#endif
2010-11-29 19:40:44 +00:00
2011-04-26 08:32:40 +01:00
#include "catch.hpp"
2012-05-04 07:55:11 +01:00
#include "catch_self_test.hpp"
2011-01-07 10:22:24 +00:00
#include <iostream>
2010-11-29 19:40:44 +00:00
2011-01-14 08:47:43 +00:00
TEST_CASE ( "./succeeding/Misc/Sections" , "random SECTION tests" )
2010-11-29 19:40:44 +00:00
{
int a = 1 ;
int b = 2 ;
SECTION ( "s1" , "doesn't equal" )
{
2010-12-14 09:00:09 +00:00
REQUIRE ( a != b );
REQUIRE ( b != a );
2010-11-29 19:40:44 +00:00
}
2010-11-30 06:48:21 +00:00
2010-11-29 19:40:44 +00:00
SECTION ( "s2" , "not equal" )
{
2011-02-17 20:15:20 +00:00
REQUIRE ( a != b );
2010-11-29 19:40:44 +00:00
}
}
2010-11-30 06:48:21 +00:00
2011-01-14 08:47:43 +00:00
TEST_CASE ( "./succeeding/Misc/Sections/nested" , "nested SECTION tests" )
2010-12-15 19:36:39 +00:00
{
int a = 1 ;
int b = 2 ;
SECTION ( "s1" , "doesn't equal" )
{
2010-12-28 17:21:29 +00:00
REQUIRE ( a != b );
2010-12-15 19:36:39 +00:00
REQUIRE ( b != a );
SECTION ( "s2" , "not equal" )
{
2011-02-17 20:15:20 +00:00
REQUIRE ( a != b );
}
}
}
2011-02-21 18:50:35 +00:00
TEST_CASE ( "./mixed/Misc/Sections/nested2" , "nested SECTION tests" )
2011-02-17 20:15:20 +00:00
{
int a = 1 ;
int b = 2 ;
SECTION ( "s1" , "doesn't equal" )
{
SECTION ( "s2" , "equal" )
{
2011-02-21 08:50:05 +00:00
REQUIRE ( a == b );
2011-02-17 20:15:20 +00:00
}
SECTION ( "s3" , "not equal" )
{
2011-02-21 08:50:05 +00:00
REQUIRE ( a != b );
}
SECTION ( "s4" , "less than" )
{
2011-02-28 08:18:52 +00:00
REQUIRE ( a < b );
2010-12-15 19:36:39 +00:00
}
}
}
2012-05-04 07:55:11 +01:00
TEST_CASE ( "./Sections/nested/a/b" , "nested SECTION tests" )
{
SECTION ( "c" , "" )
{
SECTION ( "d (leaf)" , "" )
{
}
SECTION ( "e (leaf)" , "" )
{
}
}
SECTION ( "f (leaf)" , "" )
{
}
}
TEST_CASE ( "Sections/nested3" , "nested SECTION tests" )
{
Catch :: EmbeddedRunner runner ;
runner . runMatching ( "./Sections/nested/a/b" , "mock" );
CHECK ( runner . getLog () ==
2012-07-16 08:58:28 +01:00
" \\ [g] ./Sections/nested/a/b \n "
" \\ [tc] ./Sections/nested/a/b \n "
2012-05-05 19:32:52 +01:00
2012-07-16 08:58:28 +01:00
" \\ [s] c \n "
" \\ [s] d (leaf) \n "
" / [s] d (leaf) \n "
" / [s] c \n "
2012-05-05 19:32:52 +01:00
2012-07-16 08:58:28 +01:00
" \\ [s] c \n "
" \\ [s] e (leaf) \n "
" / [s] e (leaf) \n "
" / [s] c \n "
2012-05-05 19:32:52 +01:00
2012-07-16 08:58:28 +01:00
" \\ [s] c \n "
" / [s] c \n "
2012-05-05 19:32:52 +01:00
2012-07-16 08:58:28 +01:00
" \\ [s] f (leaf) \n "
" / [s] f (leaf) \n "
2012-05-05 19:32:52 +01:00
2012-07-16 08:58:28 +01:00
" /[tc] ./Sections/nested/a/b \n "
"/[g] ./Sections/nested/a/b \n " );
2012-05-04 07:55:11 +01:00
}
2011-01-14 08:47:43 +00:00
TEST_CASE ( "./mixed/Misc/Sections/loops" , "looped SECTION tests" )
2010-12-28 14:41:57 +00:00
{
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 );
}
}
}
2011-01-14 08:47:43 +00:00
TEST_CASE ( "./mixed/Misc/loops" , "looped tests" )
2010-12-28 14:41:57 +00:00
{
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 );
}
}
2011-01-14 08:47:43 +00:00
TEST_CASE ( "./succeeding/Misc/stdout,stderr" , "Sends stuff to stdout and stderr" )
2010-11-30 06:48:21 +00:00
{
2012-02-22 09:42:34 +00:00
std :: cout << "Some information" << std :: endl ;
2010-11-30 06:48:21 +00:00
2012-02-22 09:42:34 +00:00
std :: cerr << "An error" << std :: endl ;
2010-12-28 14:41:57 +00:00
}
2011-02-23 20:02:18 +00:00
2011-12-27 10:59:41 +00:00
inline const char * makeString ( bool makeNull )
2011-02-23 20:02:18 +00:00
{
return makeNull ? NULL : "valid string" ;
}
TEST_CASE ( "./succeeding/Misc/null strings" , "" )
{
REQUIRE ( makeString ( false ) != static_cast < char *> ( NULL ));
REQUIRE ( makeString ( true ) == static_cast < char *> ( NULL ));
}
2011-03-09 19:45:05 +00:00
TEST_CASE ( "./failing/info" , "sends information to INFO" )
{
INFO ( "hi" );
int i = 7 ;
CAPTURE ( i );
REQUIRE ( false );
}
2012-02-10 08:30:13 +00:00
inline bool testCheckedIf ( bool flag )
{
CHECKED_IF ( flag )
return true ;
else
return false ;
}
TEST_CASE ( "./succeeding/checkedif" , "" )
{
REQUIRE ( testCheckedIf ( true ) );
}
TEST_CASE ( "./failing/checkedif" , "" )
{
REQUIRE ( testCheckedIf ( false ) );
}
inline bool testCheckedElse ( bool flag )
{
CHECKED_ELSE ( flag )
return false ;
return true ;
}
TEST_CASE ( "./succeeding/checkedelse" , "" )
{
REQUIRE ( testCheckedElse ( true ) );
}
TEST_CASE ( "./failing/checkedelse" , "" )
{
REQUIRE ( testCheckedElse ( false ) );
}
2012-02-10 18:58:06 +00:00
TEST_CASE ( "./misc/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>" )
{
// No test
}
SECTION ( "encoded chars" , "these should all be encoded: &&& \"\"\" <<<& \" <<& \" " )
{
// No test
}
}
2012-02-28 20:04:25 +00:00
TEST_CASE ( "./manual/onechar" , "send a single char to INFO" )
{
INFO ( 3 );
REQUIRE ( false );
}
2012-02-29 08:39:22 +00:00
TEST_CASE ( "./succeeding/atomic if" , "" )
{
size_t x = 0 ;
if ( x )
REQUIRE ( x > 0 );
else
REQUIRE ( x == 0 );
}
2012-03-04 11:14:21 +00:00
2012-03-04 20:10:36 +00:00
inline const char * testStringForMatching ()
2012-03-04 11:14:21 +00:00
{
2012-03-04 20:10:36 +00:00
return "this string contains 'abc' as a substring" ;
}
TEST_CASE ( "./succeeding/matchers" , "" )
2012-03-17 18:20:06 +00:00
{
2012-03-04 20:10:36 +00:00
REQUIRE_THAT ( testStringForMatching (), Contains ( "string" ) );
CHECK_THAT ( testStringForMatching (), Contains ( "abc" ) );
CHECK_THAT ( testStringForMatching (), StartsWith ( "this" ) );
CHECK_THAT ( testStringForMatching (), EndsWith ( "substring" ) );
}
TEST_CASE ( "./failing/matchers/Contains" , "" )
{
CHECK_THAT ( testStringForMatching (), Contains ( "not there" ) );
}
TEST_CASE ( "./failing/matchers/StartsWith" , "" )
{
CHECK_THAT ( testStringForMatching (), StartsWith ( "string" ) );
}
TEST_CASE ( "./failing/matchers/EndsWith" , "" )
{
CHECK_THAT ( testStringForMatching (), EndsWith ( "this" ) );
2012-03-04 11:14:21 +00:00
}
2012-05-24 08:29:03 +01:00
TEST_CASE ( "./failing/matchers/Equals" , "" )
{
CHECK_THAT ( testStringForMatching (), Equals ( "something else" ) );
}
2012-10-12 07:58:17 +01:00
TEST_CASE ( "/succeeding/matchers/AllOf" , "" )
{
CHECK_THAT ( testStringForMatching (), AllOf ( Catch :: Contains ( "string" ), Catch :: Contains ( "abc" ) ) );
}
TEST_CASE ( "/succeeding/matchers/AnyOf" , "" )
{
CHECK_THAT ( testStringForMatching (), AnyOf ( Catch :: Contains ( "string" ), Catch :: Contains ( "not there" ) ) );
CHECK_THAT ( testStringForMatching (), AnyOf ( Catch :: Contains ( "not there" ), Catch :: Contains ( "string" ) ) );
}
2012-05-24 08:29:03 +01:00
TEST_CASE ( "./succeeding/matchers/Equals" , "" )
{
CHECK_THAT ( testStringForMatching (), Equals ( "this string contains 'abc' as a substring" ) );
}
2012-05-31 19:40:26 +01:00
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 ( "example/factorial" , "The Factorial function should return the factorial of the number passed in" )
{
REQUIRE ( Factorial ( 0 ) == 1 );
REQUIRE ( Factorial ( 1 ) == 1 );
REQUIRE ( Factorial ( 2 ) == 2 );
REQUIRE ( Factorial ( 3 ) == 6 );
REQUIRE ( Factorial ( 10 ) == 3628800 );
}
2012-08-31 08:10:36 +01:00
TEST_CASE ( "empty" , "An empty test with no assertions" )
{
}
2012-09-15 17:53:27 +01:00
2012-09-26 18:38:26 +01:00
TEST_CASE ( "Nice descriptive name" , "[tag1][tag2][tag3][hide]" )
2012-09-15 17:53:27 +01:00
{
WARN ( "This one ran" );
}
2012-09-26 18:38:26 +01:00
TEST_CASE ( "first tag" , "[tag1]" )
{
}
TEST_CASE ( "second tag" , "[tag2]" )
{
}
2012-10-04 08:19:09 +01:00
//
//TEST_CASE( "spawn a new process", "[hide]" )
//{
// // !TBD Work in progress
// char line[200];
// FILE* output = popen("./CatchSelfTest ./failing/matchers/StartsWith", "r");
// while ( fgets(line, 199, output) )
// std::cout << line;
//}