2010-11-29 20:40:44 +01: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 09:32:40 +02:00
# include "catch.hpp"
2011-01-07 11:22:24 +01:00
# include <iostream>
2010-11-29 20:40:44 +01:00
2011-01-14 09:47:43 +01:00
TEST_CASE ( " ./succeeding/Misc/Sections " , " random SECTION tests " )
2010-11-29 20:40:44 +01:00
{
int a = 1 ;
int b = 2 ;
SECTION ( " s1 " , " doesn't equal " )
{
2010-12-14 10:00:09 +01:00
REQUIRE ( a ! = b ) ;
REQUIRE ( b ! = a ) ;
2010-11-29 20:40:44 +01:00
}
2010-11-30 07:48:21 +01:00
2010-11-29 20:40:44 +01:00
SECTION ( " s2 " , " not equal " )
{
2011-02-17 21:15:20 +01:00
REQUIRE ( a ! = b ) ;
2010-11-29 20:40:44 +01:00
}
}
2010-11-30 07:48:21 +01:00
2011-01-14 09:47:43 +01:00
TEST_CASE ( " ./succeeding/Misc/Sections/nested " , " nested SECTION tests " )
2010-12-15 20:36:39 +01:00
{
int a = 1 ;
int b = 2 ;
SECTION ( " s1 " , " doesn't equal " )
{
2010-12-28 18:21:29 +01:00
REQUIRE ( a ! = b ) ;
2010-12-15 20:36:39 +01:00
REQUIRE ( b ! = a ) ;
SECTION ( " s2 " , " not equal " )
{
2011-02-17 21:15:20 +01:00
REQUIRE ( a ! = b ) ;
}
}
}
2011-02-21 19:50:35 +01:00
TEST_CASE ( " ./mixed/Misc/Sections/nested2 " , " nested SECTION tests " )
2011-02-17 21:15:20 +01:00
{
int a = 1 ;
int b = 2 ;
SECTION ( " s1 " , " doesn't equal " )
{
SECTION ( " s2 " , " equal " )
{
2011-02-21 09:50:05 +01:00
REQUIRE ( a = = b ) ;
2011-02-17 21:15:20 +01:00
}
SECTION ( " s3 " , " not equal " )
{
2011-02-21 09:50:05 +01:00
REQUIRE ( a ! = b ) ;
}
SECTION ( " s4 " , " less than " )
{
2011-02-28 09:18:52 +01:00
REQUIRE ( a < b ) ;
2010-12-15 20:36:39 +01:00
}
}
}
2011-01-14 09:47:43 +01:00
TEST_CASE ( " ./mixed/Misc/Sections/loops " , " looped SECTION tests " )
2010-12-28 15:41:57 +01: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 09:47:43 +01:00
TEST_CASE ( " ./mixed/Misc/loops " , " looped tests " )
2010-12-28 15:41:57 +01: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 09:47:43 +01:00
TEST_CASE ( " ./succeeding/Misc/stdout,stderr " , " Sends stuff to stdout and stderr " )
2010-11-30 07:48:21 +01:00
{
2012-02-22 10:42:34 +01:00
std : : cout < < " Some information " < < std : : endl ;
2010-11-30 07:48:21 +01:00
2012-02-22 10:42:34 +01:00
std : : cerr < < " An error " < < std : : endl ;
2010-12-28 15:41:57 +01:00
}
2011-02-23 21:02:18 +01:00
2011-12-27 11:59:41 +01:00
inline const char * makeString ( bool makeNull )
2011-02-23 21:02:18 +01: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 20:45:05 +01:00
TEST_CASE ( " ./failing/info " , " sends information to INFO " )
{
INFO ( " hi " ) ;
int i = 7 ;
CAPTURE ( i ) ;
REQUIRE ( false ) ;
}
2012-02-10 09:30:13 +01: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 19:58:06 +01: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 21:04:25 +01:00
TEST_CASE ( " ./manual/onechar " , " send a single char to INFO " )
{
INFO ( 3 ) ;
REQUIRE ( false ) ;
}
2012-02-29 09:39:22 +01:00
TEST_CASE ( " ./succeeding/atomic if " , " " )
{
size_t x = 0 ;
if ( x )
REQUIRE ( x > 0 ) ;
else
REQUIRE ( x = = 0 ) ;
}
2012-03-04 12:14:21 +01:00
namespace Matchers
{
struct ContainsStdString
{
ContainsStdString ( const std : : string & substr ) : m_substr ( substr ) { }
bool operator ( ) ( const std : : string & str ) const
{
return str . find ( m_substr ) ! = std : : string : : npos ;
}
friend std : : ostream & operator < < ( std : : ostream & os , const ContainsStdString & matcher )
{
os < < " contains: \" " < < matcher . m_substr < < " \" " ;
return os ;
}
std : : string m_substr ;
} ;
}
inline Matchers : : ContainsStdString Contains ( const std : : string & substr ) { return Matchers : : ContainsStdString ( substr ) ; }
TEST_CASE ( " ./succeeding/matcher " , " " )
{
const char * actualStr = " this string contains 'abc' as a substring " ;
REQUIRE_THAT ( actualStr , Contains ( " string " ) ) ;
CHECK_THAT ( actualStr , Contains ( " not there " ) ) ;
CHECK_THAT ( actualStr , Contains ( " a2bc " ) ) ;
}