• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef skiatest_Test_DEFINED
2 #define skiatest_Test_DEFINED
3 
4 #include "SkRefCnt.h"
5 #include "SkString.h"
6 #include "SkTRegistry.h"
7 
8 namespace skiatest {
9 
10     class Test;
11 
12     class Reporter : public SkRefCnt {
13     public:
14         Reporter();
15 
16         enum Result {
17             kPassed,    // must begin with 0
18             kFailed,
19             /////
20             kLastResult = kFailed
21         };
22 
23         void resetReporting();
countTests()24         int countTests() const { return fTestCount; }
countResults(Result r)25         int countResults(Result r) {
26             SkASSERT((unsigned)r <= kLastResult);
27             return fResultCount[r];
28         }
29 
30         void startTest(Test*);
31         void report(const char testDesc[], Result);
32         void endTest(Test*);
33 
34         // helpers for tests
assertTrue(bool cond,const char desc[])35         void assertTrue(bool cond, const char desc[]) {
36             if (!cond) {
37                 this->report(desc, kFailed);
38             }
39         }
assertFalse(bool cond,const char desc[])40         void assertFalse(bool cond, const char desc[]) {
41             if (cond) {
42                 this->report(desc, kFailed);
43             }
44         }
reportFailed(const char desc[])45         void reportFailed(const char desc[]) {
46             this->report(desc, kFailed);
47         }
reportFailed(const SkString & desc)48         void reportFailed(const SkString& desc) {
49             this->report(desc.c_str(), kFailed);
50         }
51 
getCurrSuccess()52         bool getCurrSuccess() const {
53             return fCurrTestSuccess;
54         }
55 
56     protected:
onStart(Test *)57         virtual void onStart(Test*) {}
onReport(const char desc[],Result)58         virtual void onReport(const char desc[], Result) {}
onEnd(Test *)59         virtual void onEnd(Test*) {}
60 
61     private:
62         Test* fCurrTest;
63         int fTestCount;
64         int fResultCount[kLastResult+1];
65         bool fCurrTestSuccess;
66 
67         typedef SkRefCnt INHERITED;
68     };
69 
70     class Test {
71     public:
72         Test();
73         virtual ~Test();
74 
getReporter()75         Reporter* getReporter() const { return fReporter; }
76         void setReporter(Reporter*);
77 
78         const char* getName();
79         bool run(); // returns true on success
80 
81     protected:
82         virtual void onGetName(SkString*) = 0;
83         virtual void onRun(Reporter*) = 0;
84 
85     private:
86         Reporter*   fReporter;
87         SkString    fName;
88     };
89 
90     typedef SkTRegistry<Test*, void*> TestRegistry;
91 }
92 
93 #define REPORTER_ASSERT(r, cond)                                        \
94     do {                                                                \
95         if (!(cond)) {                                                  \
96             SkString desc;                                              \
97             desc.printf("%s:%d: %s", __FILE__, __LINE__, #cond);      \
98             r->reportFailed(desc);                                      \
99         }                                                               \
100     } while(0)
101 
102 
103 #endif
104