• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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