| Index: tests/skia_test.cpp
|
| ===================================================================
|
| --- tests/skia_test.cpp (revision 10283)
|
| +++ tests/skia_test.cpp (working copy)
|
| @@ -159,6 +159,44 @@
|
| int32_t* fFailCount;
|
| };
|
|
|
| +/* Takes a list of the form [~][^]match[$]
|
| + ~ causes a matching test to always be skipped
|
| + ^ requires the start of the test to match
|
| + $ requires the end of the test to match
|
| + ^ and $ requires an exact match
|
| + If a test does not match any list entry, it is skipped unless some list entry starts with ~
|
| + */
|
| +static bool shouldSkip(const char* testName) {
|
| + int count = FLAGS_match.count();
|
| + size_t testLen = strlen(testName);
|
| + bool anyExclude = count == 0;
|
| + for (int index = 0; index < count; ++index) {
|
| + const char* matchName = FLAGS_match[index];
|
| + size_t matchLen = strlen(matchName);
|
| + bool matchExclude, matchStart, matchEnd;
|
| + if ((matchExclude = matchName[0] == '~')) {
|
| + anyExclude = true;
|
| + matchName++;
|
| + matchLen--;
|
| + }
|
| + if ((matchStart = matchName[0] == '^')) {
|
| + matchName++;
|
| + matchLen--;
|
| + }
|
| + if ((matchEnd = matchName[matchLen - 1] == '$')) {
|
| + matchLen--;
|
| + }
|
| + if (matchStart ? (!matchEnd || matchLen == testLen)
|
| + && strncmp(testName, matchName, matchLen) == 0
|
| + : matchEnd ? matchLen <= testLen
|
| + && strncmp(testName + testLen - matchLen, matchName, matchLen) == 0
|
| + : strstr(testName, matchName) != 0) {
|
| + return matchExclude;
|
| + }
|
| + }
|
| + return !anyExclude;
|
| +}
|
| +
|
| int tool_main(int argc, char** argv);
|
| int tool_main(int argc, char** argv) {
|
| SkCommandLineFlags::SetUsage("");
|
| @@ -206,16 +244,9 @@
|
| int total = 0;
|
| int toRun = 0;
|
| Test* test;
|
| -
|
| - SkTDArray<const char*> matchStrs;
|
| - for(int i = 0; i < FLAGS_match.count(); ++i) {
|
| - matchStrs.push(FLAGS_match[i]);
|
| - }
|
| -
|
| while ((test = iter.next()) != NULL) {
|
| SkAutoTDelete<Test> owned(test);
|
| -
|
| - if(!SkCommandLineFlags::ShouldSkip(matchStrs, test->getName())) {
|
| + if(!shouldSkip(test->getName())) {
|
| toRun++;
|
| }
|
| total++;
|
| @@ -231,7 +262,7 @@
|
| SkTArray<Test*> unsafeTests; // Always passes ownership to an SkTestRunnable
|
| for (int i = 0; i < total; i++) {
|
| SkAutoTDelete<Test> test(iter.next());
|
| - if (SkCommandLineFlags::ShouldSkip(matchStrs, test->getName())) {
|
| + if (shouldSkip(test->getName())) {
|
| ++skipCount;
|
| } else if (!test->isThreadsafe()) {
|
| unsafeTests.push_back() = test.detach();
|
|
|