2010-11-29 14:40:44 -05:00
/*
* MiscTests . cpp
* Catch - Test
*
* 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)
*
*/
2011-04-26 03:32:40 -04:00
# include "catch.hpp"
2012-05-04 02:55:11 -04:00
# include "catch_self_test.hpp"
2011-01-07 05:22:24 -05:00
# include <iostream>
2010-11-29 14:40:44 -05:00
2011-01-14 03:47:43 -05:00
TEST_CASE ( " ./succeeding/Misc/Sections " , " random SECTION tests " )
2010-11-29 14:40:44 -05:00
{
int a = 1 ;
int b = 2 ;
SECTION ( " s1 " , " doesn't equal " )
{
2010-12-14 04:00:09 -05:00
REQUIRE ( a ! = b ) ;
REQUIRE ( b ! = a ) ;
2010-11-29 14:40:44 -05:00
}
2010-11-30 01:48:21 -05:00
2010-11-29 14:40:44 -05:00
SECTION ( " s2 " , " not equal " )
{
2011-02-17 15:15:20 -05:00
REQUIRE ( a ! = b ) ;
2010-11-29 14:40:44 -05:00
}
}
2010-11-30 01:48:21 -05:00
2011-01-14 03:47:43 -05:00
TEST_CASE ( " ./succeeding/Misc/Sections/nested " , " nested SECTION tests " )
2010-12-15 14:36:39 -05:00
{
int a = 1 ;
int b = 2 ;
SECTION ( " s1 " , " doesn't equal " )
{
2010-12-28 12:21:29 -05:00
REQUIRE ( a ! = b ) ;
2010-12-15 14:36:39 -05:00
REQUIRE ( b ! = a ) ;
SECTION ( " s2 " , " not equal " )
{
2011-02-17 15:15:20 -05:00
REQUIRE ( a ! = b ) ;
}
}
}
2011-02-21 13:50:35 -05:00
TEST_CASE ( " ./mixed/Misc/Sections/nested2 " , " nested SECTION tests " )
2011-02-17 15:15:20 -05:00
{
int a = 1 ;
int b = 2 ;
SECTION ( " s1 " , " doesn't equal " )
{
SECTION ( " s2 " , " equal " )
{
2011-02-21 03:50:05 -05:00
REQUIRE ( a = = b ) ;
2011-02-17 15:15:20 -05:00
}
SECTION ( " s3 " , " not equal " )
{
2011-02-21 03:50:05 -05:00
REQUIRE ( a ! = b ) ;
}
SECTION ( " s4 " , " less than " )
{
2011-02-28 03:18:52 -05:00
REQUIRE ( a < b ) ;
2010-12-15 14:36:39 -05:00
}
}
}
2012-05-04 02:55:11 -04: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-05-05 14:32:52 -04:00
" \\ [tc] ./Sections/nested/a/b \n "
" \\ [g] test case run \n "
" \\ [s] c \n "
" \\ [s] d (leaf) \n "
" / [s] d (leaf) \n "
" / [s] c \n "
" /[g] test case run \n "
" \\ [g] test case run \n "
" \\ [s] c \n "
" \\ [s] e (leaf) \n "
" / [s] e (leaf) \n "
" / [s] c \n "
" /[g] test case run \n "
" \\ [g] test case run \n "
" \\ [s] c \n "
" / [s] c \n "
" /[g] test case run \n "
" \\ [g] test case run \n "
" \\ [s] f (leaf) \n "
" / [s] f (leaf) \n "
" /[g] test case run \n "
" /[tc] ./Sections/nested/a/b \n " ) ;
2012-05-04 02:55:11 -04:00
}
2011-01-14 03:47:43 -05:00
TEST_CASE ( " ./mixed/Misc/Sections/loops " , " looped SECTION tests " )
2010-12-28 09:41:57 -05: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 03:47:43 -05:00
TEST_CASE ( " ./mixed/Misc/loops " , " looped tests " )
2010-12-28 09:41:57 -05: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 03:47:43 -05:00
TEST_CASE ( " ./succeeding/Misc/stdout,stderr " , " Sends stuff to stdout and stderr " )
2010-11-30 01:48:21 -05:00
{
2012-02-22 04:42:34 -05:00
std : : cout < < " Some information " < < std : : endl ;
2010-11-30 01:48:21 -05:00
2012-02-22 04:42:34 -05:00
std : : cerr < < " An error " < < std : : endl ;
2010-12-28 09:41:57 -05:00
}
2011-02-23 15:02:18 -05:00
2011-12-27 05:59:41 -05:00
inline const char * makeString ( bool makeNull )
2011-02-23 15:02:18 -05: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 14:45:05 -05:00
TEST_CASE ( " ./failing/info " , " sends information to INFO " )
{
INFO ( " hi " ) ;
int i = 7 ;
CAPTURE ( i ) ;
REQUIRE ( false ) ;
}
2012-02-10 03:30:13 -05: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 13:58:06 -05: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 15:04:25 -05:00
TEST_CASE ( " ./manual/onechar " , " send a single char to INFO " )
{
INFO ( 3 ) ;
REQUIRE ( false ) ;
}
2012-02-29 03:39:22 -05:00
TEST_CASE ( " ./succeeding/atomic if " , " " )
{
size_t x = 0 ;
if ( x )
REQUIRE ( x > 0 ) ;
else
REQUIRE ( x = = 0 ) ;
}
2012-03-04 06:14:21 -05:00
2012-03-04 15:10:36 -05:00
inline const char * testStringForMatching ( )
{
return " this string contains 'abc' as a substring " ;
}
using namespace Catch : : Matchers ;
TEST_CASE ( " ./succeeding/matchers " , " " )
2012-03-17 14:20:06 -04:00
{
2012-03-04 15:10:36 -05:00
REQUIRE_THAT ( testStringForMatching ( ) , Contains ( " string " ) ) ;
CHECK_THAT ( testStringForMatching ( ) , Contains ( " abc " ) ) ;
CHECK_THAT ( testStringForMatching ( ) , StartsWith ( " this " ) ) ;
CHECK_THAT ( testStringForMatching ( ) , EndsWith ( " substring " ) ) ;
2012-03-04 06:14:21 -05:00
}
2012-03-04 15:10:36 -05:00
TEST_CASE ( " ./failing/matchers/Contains " , " " )
{
CHECK_THAT ( testStringForMatching ( ) , Contains ( " not there " ) ) ;
}
2012-03-04 06:14:21 -05:00
2012-03-04 15:10:36 -05:00
TEST_CASE ( " ./failing/matchers/StartsWith " , " " )
{
CHECK_THAT ( testStringForMatching ( ) , StartsWith ( " string " ) ) ;
}
2012-03-04 06:14:21 -05:00
2012-03-04 15:10:36 -05:00
TEST_CASE ( " ./failing/matchers/EndsWith " , " " )
2012-03-04 06:14:21 -05:00
{
2012-03-04 15:10:36 -05:00
CHECK_THAT ( testStringForMatching ( ) , EndsWith ( " this " ) ) ;
2012-03-04 06:14:21 -05:00
}