1 2 /* 3 * Copyright 2011 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 #ifndef skiatest_Test_DEFINED 9 #define skiatest_Test_DEFINED 10 11 #include "SkRefCnt.h" 12 #include "SkString.h" 13 #include "SkTRegistry.h" 14 15 class GrContext; 16 class SkGLContext; 17 18 namespace skiatest { 19 20 class Test; 21 22 class Reporter : public SkRefCnt { 23 public: 24 Reporter(); 25 26 enum Result { 27 kPassed, // must begin with 0 28 kFailed, 29 ///// 30 kLastResult = kFailed 31 }; 32 33 void resetReporting(); countTests()34 int countTests() const { return fTestCount; } countResults(Result r)35 int countResults(Result r) { 36 SkASSERT((unsigned)r <= kLastResult); 37 return fResultCount[r]; 38 } 39 40 void startTest(Test*); 41 void report(const char testDesc[], Result); 42 void endTest(Test*); 43 44 // helpers for tests assertTrue(bool cond,const char desc[])45 void assertTrue(bool cond, const char desc[]) { 46 if (!cond) { 47 this->report(desc, kFailed); 48 } 49 } assertFalse(bool cond,const char desc[])50 void assertFalse(bool cond, const char desc[]) { 51 if (cond) { 52 this->report(desc, kFailed); 53 } 54 } reportFailed(const char desc[])55 void reportFailed(const char desc[]) { 56 this->report(desc, kFailed); 57 } reportFailed(const SkString & desc)58 void reportFailed(const SkString& desc) { 59 this->report(desc.c_str(), kFailed); 60 } 61 getCurrSuccess()62 bool getCurrSuccess() const { 63 return fCurrTestSuccess; 64 } 65 66 protected: onStart(Test *)67 virtual void onStart(Test*) {} onReport(const char desc[],Result)68 virtual void onReport(const char desc[], Result) {} onEnd(Test *)69 virtual void onEnd(Test*) {} 70 71 private: 72 Test* fCurrTest; 73 int fTestCount; 74 int fResultCount[kLastResult+1]; 75 bool fCurrTestSuccess; 76 77 typedef SkRefCnt INHERITED; 78 }; 79 80 class Test { 81 public: 82 Test(); 83 virtual ~Test(); 84 getReporter()85 Reporter* getReporter() const { return fReporter; } 86 void setReporter(Reporter*); 87 88 const char* getName(); 89 bool run(); // returns true on success 90 91 protected: 92 virtual void onGetName(SkString*) = 0; 93 virtual void onRun(Reporter*) = 0; 94 95 private: 96 Reporter* fReporter; 97 SkString fName; 98 }; 99 100 class GpuTest : public Test{ 101 public: GpuTest()102 GpuTest() : Test() { 103 fContext = GetContext(); 104 } 105 protected: 106 GrContext* fContext; 107 private: 108 static GrContext* GetContext(); 109 }; 110 111 typedef SkTRegistry<Test*, void*> TestRegistry; 112 } 113 114 #define REPORTER_ASSERT(r, cond) \ 115 do { \ 116 if (!(cond)) { \ 117 SkString desc; \ 118 desc.printf("%s:%d: %s", __FILE__, __LINE__, #cond); \ 119 r->reportFailed(desc); \ 120 } \ 121 } while(0) 122 123 #define REPORTER_ASSERT_MESSAGE(r, cond, message) \ 124 do { \ 125 if (!(cond)) { \ 126 SkString desc; \ 127 desc.printf("%s %s:%d: %s", message, __FILE__, __LINE__, #cond); \ 128 r->reportFailed(desc); \ 129 } \ 130 } while(0) 131 132 133 #endif 134