2010-11-09 23:24:00 +00:00
/*
* 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)
*/
2011-04-26 08:32:40 +01:00
#include "catch.hpp"
2019-04-17 20:23:24 +02:00
#include <array>
2010-11-09 23:24:00 +00:00
2017-11-15 07:48:21 +00:00
namespace { namespace ClassTests {
#ifndef CLASS_TEST_HELPERS_INCLUDED // Don't compile this more than once per TU
#define CLASS_TEST_HELPERS_INCLUDED
class TestClass
2010-11-09 23:24:00 +00:00
{
2017-11-15 07:48:21 +00:00
std :: string s ;
public :
TestClass ()
: s ( "hello" )
{}
void succeedingCase ()
2010-11-09 23:24:00 +00:00
{
2017-11-15 07:48:21 +00:00
REQUIRE ( s == "hello" );
}
void failingCase ()
{
REQUIRE ( s == "world" );
}
};
2010-12-27 20:51:06 +00:00
struct Fixture
{
Fixture () : m_a ( 1 ) {}
2015-11-04 18:01:28 +00:00
2010-12-27 20:51:06 +00:00
int m_a ;
};
2018-11-08 07:26:39 +01:00
template < typename T >
struct Template_Fixture {
Template_Fixture () : m_a ( 1 ) {}
T m_a ;
};
2018-12-06 19:27:33 +01:00
template < typename T >
struct Template_Fixture_2 {
Template_Fixture_2 () {}
T m_a ;
};
template < typename T >
struct Template_Foo {
size_t size () { return 0 ; }
};
2019-04-17 20:23:24 +02:00
template < typename T , size_t V >
struct Template_Foo_2 {
size_t size () { return V ; }
};
template < int V >
struct Nttp_Fixture {
int value = V ;
};
2017-11-15 07:48:21 +00:00
#endif
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]" )
2013-11-19 07:21:03 +00:00
TEST_CASE_METHOD ( Fixture , "A TEST_CASE_METHOD based test run that succeeds" , "[class]" )
2015-11-04 18:01:28 +00:00
{
REQUIRE ( m_a == 1 );
2010-12-27 20:51:06 +00:00
}
2018-11-08 07:26:39 +01:00
TEMPLATE_TEST_CASE_METHOD ( Template_Fixture , "A TEMPLATE_TEST_CASE_METHOD based test run that succeeds" , "[class][template]" , int , float , double ) {
REQUIRE ( Template_Fixture < TestType >:: m_a == 1 );
}
2019-04-17 20:23:24 +02:00
TEMPLATE_TEST_CASE_METHOD_SIG ( Nttp_Fixture , "A TEMPLATE_TEST_CASE_METHOD_SIG based test run that succeeds" , "[class][template][nttp]" ,(( int V ), V ), 1 , 3 , 6 ) {
REQUIRE ( Nttp_Fixture < V >:: value > 0 );
}
2018-12-06 19:27:33 +01:00
TEMPLATE_PRODUCT_TEST_CASE_METHOD ( Template_Fixture_2 , "A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that succeeds" , "[class][template][product]" ,( std :: vector , Template_Foo ),( int , float ))
{
REQUIRE ( Template_Fixture_2 < TestType >:: m_a . size () == 0 );
}
2019-04-17 20:23:24 +02:00
TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG ( Template_Fixture_2 , "A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that succeeds" , "[class][template][product][nttp]" , (( typename T , size_t S ), T , S ),( std :: array , Template_Foo_2 ), (( int , 2 ), ( float , 6 )))
{
REQUIRE ( Template_Fixture_2 < TestType > {}. m_a . size () >= 2 );
}
2019-05-27 17:25:48 +02:00
using MyTypes = std :: tuple < int , char , double > ;
TEMPLATE_LIST_TEST_CASE_METHOD ( Template_Fixture , "Template test case method with test types specified inside std::tuple" , "[class][template][list]" , MyTypes )
{
REQUIRE ( Template_Fixture < TestType >:: m_a == 1 );
}
2011-04-12 18:44:58 +01:00
// We should be able to write our tests within a different namespace
namespace Inner
{
2013-11-19 07:21:03 +00:00
TEST_CASE_METHOD ( Fixture , "A TEST_CASE_METHOD based test run that fails" , "[.][class][failing]" )
2015-11-04 18:01:28 +00:00
{
REQUIRE ( m_a == 2 );
2011-04-12 18:44:58 +01:00
}
2018-11-08 07:26:39 +01:00
TEMPLATE_TEST_CASE_METHOD ( Template_Fixture , "A TEMPLATE_TEST_CASE_METHOD based test run that fails" , "[.][class][template][failing]" , int , float , double )
{
REQUIRE ( Template_Fixture < TestType >:: m_a == 2 );
}
2018-12-06 19:27:33 +01:00
2019-04-17 20:23:24 +02:00
TEMPLATE_TEST_CASE_METHOD_SIG ( Nttp_Fixture , "A TEMPLATE_TEST_CASE_METHOD_SIG based test run that fails" , "[.][class][template][nttp][failing]" , (( int V ), V ), 1 , 3 , 6 ) {
REQUIRE ( Nttp_Fixture < V >:: value == 0 );
}
2018-12-06 19:27:33 +01:00
TEMPLATE_PRODUCT_TEST_CASE_METHOD ( Template_Fixture_2 , "A TEMPLATE_PRODUCT_TEST_CASE_METHOD based test run that fails" , "[.][class][template][product][failing]" ,( std :: vector , Template_Foo ),( int , float ))
{
REQUIRE ( Template_Fixture_2 < TestType >:: m_a . size () == 1 );
}
2019-04-17 20:23:24 +02:00
TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG ( Template_Fixture_2 , "A TEMPLATE_PRODUCT_TEST_CASE_METHOD_SIG based test run that fails" , "[.][class][template][product][nttp][failing]" , (( typename T , size_t S ), T , S ), ( std :: array , Template_Foo_2 ), (( int , 2 ), ( float , 6 )))
{
REQUIRE ( Template_Fixture_2 < TestType > {}. m_a . size () < 2 );
}
2010-12-27 20:51:06 +00:00
}
2017-11-15 07:48:21 +00:00
2018-11-08 07:26:39 +01:00
2017-11-15 07:48:21 +00:00
}} // namespace ClassTests