I need to parse a C++ file for Google Test macros. (I'm aware the
GTEST_ADD_TESTS provided by FindGtest.cmake, but I need the test list
for my own purposes). I had been using a regex similar to the one in
GTEST_ADD_TESTS to match tests:

string (REGEX MATCHALL "TEST_?F?\\([A-Za-z_0-9 ,]+)\\)" found_tests ${contents})

But this doesn't work when the test is split onto two lines, like this:

TEST(SampleTest,\
     MultilineTest)

So, I've been trying to build a regex that will match tests split onto
multiple lines. This should work:

string (REGEX MATCHALL "TEST_?F?\\([A-Za-z_0-9
]+,[\\s\\\\]*[A-Za-z_0-9 ]+\\)" found_tests ${contents})

After the comma, the regex should greedily match all whitespace
(including newlines) via the "\\s" and backslashes via the "\\\\"
(Note that all special characters are escaped). This works in other
regex engines, but fails in CMake.

Is this possible in CMake, or do I need to use another tool?

Here is my test file (named tests.cpp):

TEST(SampleTest, SingleLineTest)
TEST(SampleTest,\
     MultilineTest)
TEST_F(SampleTest, SingleLineFixtureTest)
TEST_F(SampleTest,\
     MultilineFixtureTest)

And my CMakeLists.txt:

cmake_minimum_required (VERSION 2.8)

file (READ "tests.cpp" contents)
string (REGEX MATCHALL "TEST_?F?\\([A-Za-z_0-9
]+,[\\s\\\\]*[A-Za-z_0-9 ]+\\)" found_tests ${contents})
message ("Found tests:")
foreach (test ${found_tests})
    message ("${test}")
endforeach ()

Thanks,
Ben
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to