• Advertisement
Sign in to follow this  

Quick help with a macro (preprocessor)

This topic is 1409 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm using gtest (google's testing framework), and use the following code for my test fixtures:

#define TEST_NAME test_foo

TEST( TEST_NAME, bar )
{
    reset_ports();
    /* test body begins here */
}

The function reset_ports is part of some very primitive micro controller hardware emulation code, and I'd like it to be called between every test fixture to ensure a clean state. I tried writing a small macro for doing this for me, but I can't get it to work:

#define BEGIN(x) (TEST((TEST_NAME), (x)) { reset_ports();)
#define END }

BEGIN( bar )
    /* test body begins here */
END

The errors I'm getting are:

error: pasting ")" and "_" does not give a valid preprocessing token|
error: pasting "_" and "(" does not give a valid preprocessing token|
error: pasting ")" and "_Test" does not give a valid preprocessing token|
error: pasting ")" and "_" does not give a valid preprocessing token|
error: pasting "_" and "(" does not give a valid preprocessing token|
error: pasting ")" and "_Test" does not give a valid preprocessing token|
error: pasting ")" and "_" does not give a valid preprocessing token|
...

Any help? I've not practiced my preprocessor-voodoo enough to understand what's wrong.

Share this post


Link to post
Share on other sites
Advertisement

UPDATE

 

The following appears to be closer to solving the problem:

#define TEST_NAME test_regulator_getters_and_setters
#define BEGIN(x) (TEST(TEST_NAME, x)) { reset_ports();
#define END }

Now I'm only getting two errors:

error: expected unqualified-id before 'class'|
error: expected ')' before 'class'|

Also some more helpful information: the TEST macro is defined as:

#define GTEST_TEST(test_case_name, test_name)\
  GTEST_TEST_(test_case_name, test_name, \
              ::testing::Test, ::testing::internal::GetTestTypeId())

#if !GTEST_DONT_DEFINE_TEST
# define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name)
#endif

Share this post


Link to post
Share on other sites

Looks to me like you're trying to reinvent, using a 1960's era text processor, what's already available in the test fixture SetUp() and TearDown() function.  Have you tried using those to set up and tear down your fixture instead?

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement