| Index: ppapi/tests/test_case.h
|
| diff --git a/ppapi/tests/test_case.h b/ppapi/tests/test_case.h
|
| index 05e0d32a6b816510156462457ff8c1cfd1116d8d..e974c507811f212ee8e20088f41904052c9b9d20 100644
|
| --- a/ppapi/tests/test_case.h
|
| +++ b/ppapi/tests/test_case.h
|
| @@ -37,9 +37,12 @@ class TestCase {
|
| // Default implementation just returns true.
|
| virtual bool Init();
|
|
|
| - // Override to implement the test. It will be called after the plugin is
|
| - // first displayed.
|
| - virtual void RunTest() = 0;
|
| + // Override to implement the test case. It will be called after the plugin is
|
| + // first displayed, passing a string. If the string is empty, the
|
| + // should run all tests for this test case. Otherwise, it should run the test
|
| + // whose name matches test_filter exactly (if there is one). This should
|
| + // generally be implemented using the RUN_TEST* macros.
|
| + virtual void RunTests(const std::string& test_filter) = 0;
|
|
|
| static std::string MakeFailureMessage(const char* file, int line,
|
| const char* cmd);
|
| @@ -83,6 +86,10 @@ class TestCase {
|
| // Makes sure the test is run over HTTP.
|
| bool EnsureRunningOverHTTP();
|
|
|
| + // Return true if the given test name matches the filter. This is true if
|
| + // (a) filter is empty or (b) test_name and filter match exactly.
|
| + bool MatchesFilter(const std::string& test_name, const std::string& filter);
|
| +
|
| // Pointer to the instance that owns us.
|
| TestingInstance* instance_;
|
|
|
| @@ -140,24 +147,24 @@ class TestCaseFactory {
|
| // Helper macro for calling functions implementing specific tests in the
|
| // RunTest function. This assumes the function name is TestFoo where Foo is the
|
| // test |name|.
|
| -#define RUN_TEST(name) \
|
| - do { \
|
| +#define RUN_TEST(name, test_filter) \
|
| + if (MatchesFilter(#name, test_filter)) { \
|
| force_async_ = false; \
|
| instance_->LogTest(#name, Test##name()); \
|
| - } while (false)
|
| + }
|
|
|
| // Like RUN_TEST above but forces functions taking callbacks to complete
|
| // asynchronously on success or error.
|
| -#define RUN_TEST_FORCEASYNC(name) \
|
| - do { \
|
| +#define RUN_TEST_FORCEASYNC(name, test_filter) \
|
| + if (MatchesFilter(#name"ForceAsync", test_filter)) { \
|
| force_async_ = true; \
|
| instance_->LogTest(#name"ForceAsync", Test##name()); \
|
| - } while (false)
|
| + }
|
|
|
| -#define RUN_TEST_FORCEASYNC_AND_NOT(name) \
|
| +#define RUN_TEST_FORCEASYNC_AND_NOT(name, test_filter) \
|
| do { \
|
| - RUN_TEST_FORCEASYNC(name); \
|
| - RUN_TEST(name); \
|
| + RUN_TEST_FORCEASYNC(name, test_filter); \
|
| + RUN_TEST(name, test_filter); \
|
| } while (false)
|
|
|
|
|
|
|