blob: 8d2eb8746829d4172ab4f0b192d42ce4292698d6 [file] [log] [blame]
reed@android.comed673312009-02-27 16:24:51 +00001#ifndef skiatest_Test_DEFINED
2#define skiatest_Test_DEFINED
3
4#include "SkRefCnt.h"
5#include "SkString.h"
6#include "SkTRegistry.h"
7
8namespace 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();
24 int countTests() const { return fTestCount; }
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
35 void assertTrue(bool cond, const char desc[]) {
36 if (!cond) {
37 this->report(desc, kFailed);
38 }
39 }
40 void assertFalse(bool cond, const char desc[]) {
41 if (cond) {
42 this->report(desc, kFailed);
43 }
44 }
45 void reportFailed(const char desc[]) {
46 this->report(desc, kFailed);
47 }
48 void reportFailed(const SkString& desc) {
49 this->report(desc.c_str(), kFailed);
50 }
51
52 protected:
53 virtual void onStart(Test*) {}
54 virtual void onReport(const char desc[], Result) {}
55 virtual void onEnd(Test*) {}
56
57 private:
58 Test* fCurrTest;
59 int fTestCount;
60 int fResultCount[kLastResult+1];
61
62 typedef SkRefCnt INHERITED;
63 };
64
65 class Test {
66 public:
67 Test();
68 virtual ~Test();
69
70 Reporter* getReporter() const { return fReporter; }
71 void setReporter(Reporter*);
72
73 const char* getName();
74 void run();
75
76 protected:
77 virtual void onGetName(SkString*) = 0;
78 virtual void onRun(Reporter*) = 0;
79
80 private:
81 Reporter* fReporter;
82 SkString fName;
83 };
84
85 typedef SkTRegistry<Test*, void*> TestRegistry;
86}
87
88#define REPORTER_ASSERT(r, cond) \
89 do { \
90 if (!(cond)) { \
91 SkString desc; \
92 desc.printf("%s:%d: %s", __FILE__, __LINE__, #cond); \
93 r->reportFailed(desc); \
94 } \
95 } while(0)
96
97
98#endif