Index: tests/Test.h |
diff --git a/tests/Test.h b/tests/Test.h |
index 4f838f501ce850d8d02ac756d33a3897f50ae716..ed5de0f8607201e818c2abdca6d436164359e787 100644 |
--- a/tests/Test.h |
+++ b/tests/Test.h |
@@ -8,122 +8,48 @@ |
#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; |
- }; |
- |
- class GpuTest : public Test{ |
- public: |
- GpuTest() : Test(), fGrContextFactory(NULL) {} |
- |
- virtual bool isGPUTest() const { return true; } |
- virtual void setGrContextFactory(GrContextFactory* factory) { |
- fGrContextFactory = factory; |
- } |
- |
- protected: |
- GrContextFactory* fGrContextFactory; // Unowned. |
- }; |
- |
- typedef SkTRegistry<Test*(*)(void*)> TestRegistry; |
-} // namespace skiatest |
+SkString GetTmpDir(); |
+ |
+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 toString() const; |
+}; |
+ |
+class Reporter : SkNoncopyable { |
+public: |
+ virtual ~Reporter() {} |
+ virtual void bumpTestCount(); |
+ virtual void reportFailed(const skiatest::Failure&) = 0; |
+ virtual bool allowExtendedTest() const; |
+ virtual bool verbose() const; |
+}; |
+ |
+#define REPORT_FAILURE(reporter, cond, message) \ |
+ reporter->reportFailed(skiatest::Failure(__FILE__, __LINE__, cond, message)) |
+ |
+typedef void (*TestProc)(skiatest::Reporter*, GrContextFactory*); |
+ |
+struct Test { |
+ Test(const char* n, bool g, TestProc p) : name(n), needsGpu(g), proc(p) {} |
+ const char* name; |
+ bool needsGpu; |
+ TestProc proc; |
+}; |
+ |
+typedef SkTRegistry<Test> TestRegistry; |
/* |
Use the following macros to make use of the skiatest classes, e.g. |
@@ -143,66 +69,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 |