* Richard
[Please do not mail me a copy of your followup]
boost-users@lists.boost.org spake the secret code <20140525080836.GI5022@w3.org> thusly:
boost/libs/test/example/external_main_example_1.cpp provides an example of a dynamical test suite tree. The invocation of add( BOOST_TEST_CASE(boost::bind(&free_test_function, 1, 1))); results in unpleasant names like "boost::bind( &free_test_function, 1, 2 )"
Do you really need to build the test case tree by hand?
Generally, yes. I'm working from standard test suites and it makes more sense to read them from the manifest than to write some emacs macro to turn the manifest into procedural code.
In your example this could just as easily have been done with BOOST_AUTO_TEST_CASE.
. I used the preprocessor output to override the 2nd arg to make_test_case with a name of my choosing: ts->add(boost::unit_test::make_test_case (boost::unit_test::callback0<> (boost::bind( &free_test_function, 1, 2)), boost::unit_test::const_string( minor, 1)));
This works (pretty names and invocable with the logical run_test) but I have no particular confidence that this will survive version changes as well as would BOOST_TEST_CASE. Is there a better way to do this?
IMO, while passing a functor to BOOST_TEST_CASE works, it was intended to be used with a free function that has an intention-revealing name for the test case. See http://user.xmission.com/~legalize/boost.test/libs/test/doc/html/test/refere...
That makes sense when you know the intentional names a priori. In my case, I'd have something like std::ifstream man("Manifest.txt"); std::string name, check, expect; int lineNo = 1; while (tsv >> name >> check >> expect) { name = name.substr(1,name.length()-2); check = check.substr(1,check.length()-2); ts->add(BOOST_TEST_CASE (boost::bind(&parseAndCompare, name, check, expect, "Manifest.txt", lineNo))); ++lineNo; } , which results in names that are neither informative nor easy to type as an argument to --run_test. As I alluded to above, I have in the past used a script to rewrite the entries in some manifests as a series of BOOST_AUTO_TEST_CASE( name_with_underbars ) { MY_TEST_MACRO("checkFile1", "expectFile1"); } . This meant that every time someone in the working group proposed adding a test to the manifest, I had to run the script and recompile. With this approach, I can just pull the manifest and run the tests in less than a couple seconds. For this, I incur the danger that the BOOST_TEST_CASE macro may shift underneath me and I'll have to play some catchup.
-- "The Direct3D Graphics Pipeline" free book http://tinyurl.com/d3d-pipeline The Computer Graphics Museum http://computergraphicsmuseum.org The Terminals Wiki http://terminals.classiccmp.org Legalize Adulthood! (my blog) http://legalizeadulthood.wordpress.com
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- -ericP office: +1.617.599.3509 mobile: +33.6.80.80.35.59 (eric@w3.org) Feel free to forward this message to any list for any purpose other than email address distribution. There are subtle nuances encoded in font variation and clever layout which can only be seen by printing this message on high-clay paper.