the Compartmented Robust Posix C++ Unit Test system

DEFINE_TEST_TAG(tagname)

Introduce a tag for use by tests.

Used in: Global scope with older C++ compilers

In C++98 a tag has the same naming rules and visibility as a C++ type[4].

See the command line option -T {select}{/non-critical} / --tags={select}{/non-critical} for how to use tags when running a test program.

[Tip]Tip
If you compile your test program as C++11, DEFINE_TEST_TAG() is not needed.

Example. The following test program:

     
     #include <crpcut.hpp>
     
     DEFINE_TEST_TAG(known_bug);
     DEFINE_TEST_TAG(uncertain);
     
     TEST(untagged)
     {
       FAIL << "the critical error";
     }
     
     TEST(buggy, WITH_TEST_TAG(known_bug))
     {
       FAIL << "this is a known issue we don't want to be bothered with right now";
     }
     
     TEST(we_dont_know_the_expected_behaviour, WITH_TEST_TAG(uncertain))
     {
       FAIL << "Was this right or wrong?";
     }
     
     int main(int argc, char *argv[])
     {
       return crpcut::run(argc, argv);
     }

        

Shows how tags are defined and used by tests. Running it with --tags=-known_bug/uncertain yields:


     FAILED!: untagged
     phase="running"  --------------------------------------------------------------
     samples/test_tag.cpp:35
     the critical error
     -------------------------------------------------------------------------------
     ===============================================================================
     FAILED?: we_dont_know_the_expected_behaviour
     phase="running"  --------------------------------------------------------------
     samples/test_tag.cpp:45
     Was this right or wrong?
     -------------------------------------------------------------------------------
     ===============================================================================
     3 test cases selected
      tag           run  passed  failed
     ?uncertain       1       0       1
     
                    Sum   Critical   Non-critical
     FAILED   :       2          1              1
     UNTESTED :       1

        

Which shows two tests run, both failed, but one as non-critical. The test buggy is not run since all tests tagged known_bug were filtered out.



[4] In fact, the macro defines a type, and when referring to the tag, the type must be visible.