Chromium Code Reviews| Index: tests/Test.h |
| diff --git a/tests/Test.h b/tests/Test.h |
| index 4f838f501ce850d8d02ac756d33a3897f50ae716..ff9912b268fcd722968fb32e46be864767056359 100644 |
| --- a/tests/Test.h |
| +++ b/tests/Test.h |
| @@ -8,122 +8,57 @@ |
| #ifndef skiatest_Test_DEFINED |
| #define skiatest_Test_DEFINED |
| -#include "SkRefCnt.h" |
| #include "SkString.h" |
| #include "SkTRegistry.h" |
| -#include "SkThread.h" |
| #include "SkTypes.h" |
| class GrContextFactory; |
| namespace skiatest { |
| - class Test; |
| - |
| - /** |
| - * Information about a single failure from a Test. |
| - * |
| - * Not intended to be created/modified directly. To create one, use one of |
| - * |
| - * REPORTER_ASSERT |
| - * REPORTER_ASSERT_MESSAGE |
| - * ERRORF |
| - * |
| - * described in more detail further down in this file. |
| - */ |
| - struct Failure { |
| - const char* fileName; |
| - int lineNo; |
| - const char* condition; |
| - SkString message; |
| - |
| - // Helper to combine the failure info into one string. |
| - void getFailureString(SkString* result) const { |
| - if (!result) { |
| - return; |
| - } |
| - result->printf("%s:%d\t", fileName, lineNo); |
| - if (!message.isEmpty()) { |
| - result->append(message); |
| - if (strlen(condition) > 0) { |
| - result->append(": "); |
| - } |
| - } |
| - result->append(condition); |
| - } |
| - }; |
| - |
| - |
| - class Reporter : public SkRefCnt { |
| - public: |
| - SK_DECLARE_INST_COUNT(Reporter) |
| - Reporter(); |
| - |
| - int countTests() const { return fTestCount; } |
| - |
| - void startTest(Test*); |
| - void reportFailed(const Failure&); |
| - void endTest(Test*); |
| - |
| - virtual bool allowExtendedTest() const { return false; } |
| - virtual bool verbose() const { return false; } |
| - virtual void bumpTestCount() { sk_atomic_inc(&fTestCount); } |
| - |
| - protected: |
| - virtual void onStart(Test*) {} |
| - virtual void onReportFailed(const Failure&) {} |
| - virtual void onEnd(Test*) {} |
| - |
| - private: |
| - int32_t fTestCount; |
| - |
| - typedef SkRefCnt INHERITED; |
| - }; |
| - |
| - class Test { |
| - public: |
| - Test(); |
| - virtual ~Test(); |
| - |
| - Reporter* getReporter() const { return fReporter; } |
| - void setReporter(Reporter*); |
| - |
| - const char* getName(); |
| - void run(); |
| - bool passed() const { return fPassed; } |
| - SkMSec elapsedMs() const { return fElapsed; } |
| - |
| - static SkString GetTmpDir(); |
| - |
| - virtual bool isGPUTest() const { return false; } |
| - virtual void setGrContextFactory(GrContextFactory* factory) {} |
| - |
| - protected: |
| - virtual void onGetName(SkString*) = 0; |
| - virtual void onRun(Reporter*) = 0; |
| - |
| - private: |
| - Reporter* fReporter; |
| - SkString fName; |
| - bool fPassed; |
| - SkMSec fElapsed; |
| - }; |
| +struct Failure { |
| + Failure(const char* f, int l, const char* c, const SkString& m) |
| + : fileName(f), lineNo(l), condition(c), message(m) { |
| + } |
| + const char* fileName; |
| + int lineNo; |
| + const char* condition; |
| + SkString message; |
| +}; |
| + |
| +SkString FailureToString(const skiatest::Failure& failure); |
|
mtklein
2015/01/15 23:46:46
I don't really see the harm of this being a method
hal.canary
2015/01/16 15:31:57
Done.
|
| + |
| +class Reporter : SkNoncopyable { |
| +public: |
| + virtual ~Reporter(); |
| + virtual void bumpTestCount() { |
|
mtklein
2015/01/15 23:46:46
One line for all these trivial guys? Just a sugge
hal.canary
2015/01/16 15:31:57
Done (AllowShortFunctionsOnASingleLine: true).
|
| + } |
| + virtual void reportFailed(const skiatest::Failure&) = 0; |
| + virtual bool allowExtendedTest() const { |
| + return false; |
| + } |
| + virtual bool verbose() const { |
| + return false; |
| + } |
| + virtual SkString getTmpDir() const { |
| + return SkString(); |
| + } |
| +}; |
| - class GpuTest : public Test{ |
| - public: |
| - GpuTest() : Test(), fGrContextFactory(NULL) {} |
| +#define REPORT_FAILURE(reporter, cond, message) \ |
| + reporter->reportFailed(skiatest::Failure(__FILE__, __LINE__, cond, message)) |
| - virtual bool isGPUTest() const { return true; } |
| - virtual void setGrContextFactory(GrContextFactory* factory) { |
| - fGrContextFactory = factory; |
| - } |
| +typedef void (*TestProc)(skiatest::Reporter*, GrContextFactory*); |
| - protected: |
| - GrContextFactory* fGrContextFactory; // Unowned. |
| - }; |
| +struct Test { |
| + Test(const char* n, bool g, TestProc p) : name(n), needsGpu(g), proc(p) { |
| + } |
| + const char* const name; |
| + const bool needsGpu; |
| + const TestProc proc; |
| +}; |
| - typedef SkTRegistry<Test*(*)(void*)> TestRegistry; |
| -} // namespace skiatest |
| +typedef SkTRegistry<Test> TestRegistry; |
| /* |
| Use the following macros to make use of the skiatest classes, e.g. |
| @@ -143,66 +78,37 @@ namespace skiatest { |
| ... |
| } |
| */ |
| +} // namespace skiatest |
| -#define REPORTER_ASSERT(r, cond) \ |
| - do { \ |
| - if (!(cond)) { \ |
| - skiatest::Failure failure = { __FILE__, __LINE__, \ |
| - #cond, SkString() }; \ |
| - r->reportFailed(failure); \ |
| - } \ |
| - } while(0) |
| - |
| -#define REPORTER_ASSERT_MESSAGE(r, cond, message) \ |
| - do { \ |
| - if (!(cond)) { \ |
| - skiatest::Failure failure = { __FILE__, __LINE__, \ |
| - #cond, SkString(message) }; \ |
| - r->reportFailed(failure); \ |
| - } \ |
| - } while(0) |
| - |
| -#define ERRORF(r, ...) \ |
| - do { \ |
| - SkString desc; \ |
| - desc.appendf(__VA_ARGS__) ; \ |
| - skiatest::Failure failure = { __FILE__, __LINE__, \ |
| - "", SkString(desc) }; \ |
| - r->reportFailed(failure); \ |
| - } while(0) |
| - |
| -#define DEF_TEST(name, reporter) \ |
| - static void test_##name(skiatest::Reporter*); \ |
| - namespace skiatest { \ |
| - class name##Class : public Test { \ |
| - public: \ |
| - static Test* Factory(void*) { return SkNEW(name##Class); } \ |
| - protected: \ |
| - void onGetName(SkString* name) SK_OVERRIDE { \ |
| - name->set(#name); \ |
| - } \ |
| - void onRun(Reporter* r) SK_OVERRIDE { test_##name(r); } \ |
| - }; \ |
| - static TestRegistry gReg_##name##Class(name##Class::Factory); \ |
| - } \ |
| - static void test_##name(skiatest::Reporter* reporter) |
| - |
| -#define DEF_GPUTEST(name, reporter, factory) \ |
| - static void test_##name(skiatest::Reporter*, GrContextFactory*); \ |
| - namespace skiatest { \ |
| - class name##Class : public GpuTest { \ |
| - public: \ |
| - static Test* Factory(void*) { return SkNEW(name##Class); } \ |
| - protected: \ |
| - void onGetName(SkString* name) SK_OVERRIDE { \ |
| - name->set(#name); \ |
| - } \ |
| - void onRun(Reporter* r) SK_OVERRIDE { \ |
| - test_##name(r, fGrContextFactory); \ |
| - } \ |
| - }; \ |
| - static TestRegistry gReg_##name##Class(name##Class::Factory); \ |
| - } \ |
| - static void test_##name(skiatest::Reporter* reporter, GrContextFactory* factory) |
| +#define REPORTER_ASSERT(r, cond) \ |
| + do { \ |
| + if (!(cond)) { \ |
| + REPORT_FAILURE(r, #cond, SkString()); \ |
| + } \ |
| + } while (0) |
| + |
| +#define REPORTER_ASSERT_MESSAGE(r, cond, message) \ |
| + do { \ |
| + if (!(cond)) { \ |
| + REPORT_FAILURE(r, #cond, SkString(message)); \ |
| + } \ |
| + } while (0) |
| + |
| +#define ERRORF(r, ...) \ |
| + do { \ |
| + REPORT_FAILURE(r, "", SkStringPrintf(__VA_ARGS__)); \ |
| + } while (0) |
| + |
| +#define DEF_TEST(name, reporter) \ |
| + static void test_##name(skiatest::Reporter*, GrContextFactory*); \ |
| + skiatest::TestRegistry name##TestRegistry( \ |
| + skiatest::Test(#name, false, test_##name)); \ |
| + void test_##name(skiatest::Reporter* reporter, GrContextFactory*) |
| + |
| +#define DEF_GPUTEST(name, reporter, factory) \ |
| + static void test_##name(skiatest::Reporter*, GrContextFactory*); \ |
| + skiatest::TestRegistry name##TestRegistry( \ |
| + skiatest::Test(#name, true, test_##name)); \ |
| + void test_##name(skiatest::Reporter* reporter, GrContextFactory* factory) |
| #endif |