Modify

Opened 2 years ago

Closed 21 months ago

#11854 closed Feature Requests (fixed)

Add fixture support in BOOST_DATA_TEST_CASE

Reported by: mikhail@… Owned by: Gennadiy Rozental
Milestone: Boost 1.61.0 Component: test
Version: Boost 1.59.0 Severity: Problem
Keywords: Cc:

Description

Now BOOST_DATA_TEST_CASE doesn't support test fixture at all. There is the ability to support this:

#define BOOST_FIXTURE_DATA_TEST_CASE_IMPL( arity, test_name, F, dataset, params )  \
struct test_name : public F {                                                      \
    template<BOOST_PP_ENUM_PARAMS(arity, typename Arg)>                            \
    static void test_method( BOOST_DATA_TEST_CASE_PARAMS( params ) )               \
    {                                                                              \
        BOOST_TEST_CHECKPOINT('"' << #test_name << "\" fixture entry.");           \
        test_name t;                                                               \
        BOOST_TEST_CHECKPOINT('"' << #test_name << "\" entry.");                   \
        BOOST_TEST_CONTEXT( ""                                                     \
            BOOST_PP_SEQ_FOR_EACH(BOOST_DATA_TEST_CONTEXT, _, params))             \
        t._impl(BOOST_PP_SEQ_ENUM(params));                                        \
        BOOST_TEST_CHECKPOINT('"' << #test_name << "\" exit.");                    \
    }                                                                              \
private:                                                                           \
    template<BOOST_PP_ENUM_PARAMS(arity, typename Arg)>                            \
    void _impl(BOOST_DATA_TEST_CASE_PARAMS( params ));                             \
};                                                                                 \
                                                                                   \
BOOST_AUTO_TU_REGISTRAR( test_name )(                                              \
    boost::unit_test::data::ds_detail::make_test_case_gen<test_name>(              \
          BOOST_STRINGIZE( test_name ),                                            \
          __FILE__, __LINE__,                                                      \
          boost::unit_test::data::make(dataset) ),                                 \
    boost::unit_test::decorator::collector::instance() );                          \
                                                                                   \
template<BOOST_PP_ENUM_PARAMS(arity, typename Arg)>                                \
void test_name::_impl( BOOST_DATA_TEST_CASE_PARAMS( params ) )                     \
/**/

#define BOOST_AUTO_DATA_TEST_CASE_WITH_PARAMS( test_name, dataset, ... )          \
    BOOST_FIXTURE_DATA_TEST_CASE_IMPL( BOOST_PP_VARIADIC_SIZE(__VA_ARGS__),       \
                               test_name, BOOST_AUTO_TEST_CASE_FIXTURE, dataset,  \
                               BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__) )            \
/**/
#define BOOST_AUTO_DATA_TEST_CASE_NO_PARAMS( test_name, dataset )       \
    BOOST_AUTO_DATA_TEST_CASE_WITH_PARAMS( test_name, dataset, sample ) \
/**/

#if BOOST_PP_VARIADICS_MSVC

#define BOOST_AUTO_DATA_TEST_CASE( ... )                                     \
    BOOST_PP_CAT(                                                            \
    BOOST_PP_IIF(BOOST_PP_EQUAL(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__),2),      \
                     BOOST_AUTO_DATA_TEST_CASE_NO_PARAMS,                    \
                     BOOST_AUTO_DATA_TEST_CASE_WITH_PARAMS) (__VA_ARGS__), ) \
/**/
#else

#define BOOST_AUTO_DATA_TEST_CASE( ... )                                     \
    BOOST_PP_IIF(BOOST_PP_EQUAL(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__),2),      \
                     BOOST_AUTO_DATA_TEST_CASE_NO_PARAMS,                    \
                     BOOST_AUTO_DATA_TEST_CASE_WITH_PARAMS) (__VA_ARGS__)    \
/**/
#endif

Attachments (0)

Change History (2)

comment:1 Changed 22 months ago by Raffi Enficiaud

Milestone: To Be DeterminedBoost 1.61.0

comment:2 Changed 21 months ago by Raffi Enficiaud

Resolution: fixed
Status: newclosed

Merged to master rev 6a3a616

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain Gennadiy Rozental.
The resolution will be deleted.

Add Comment


E-mail address and name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.