aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/Test.h
diff options
context:
space:
mode:
authorGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2009-02-27 16:24:51 +0000
committerGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2009-02-27 16:24:51 +0000
commited673310e2551e64d8196f7776d7d4c92085f8c2 (patch)
treeac5a737aaaf66c97be7109eb980beadd35e30e25 /tests/Test.h
parent3469c76c40790b409621fd7eff34f56240718549 (diff)
add initial unittest framework (tests)
move some previous unittests out of core classes and into tests git-svn-id: http://skia.googlecode.com/svn/trunk@96 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tests/Test.h')
-rw-r--r--tests/Test.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/tests/Test.h b/tests/Test.h
new file mode 100644
index 0000000000..8d2eb87468
--- /dev/null
+++ b/tests/Test.h
@@ -0,0 +1,98 @@
+#ifndef skiatest_Test_DEFINED
+#define skiatest_Test_DEFINED
+
+#include "SkRefCnt.h"
+#include "SkString.h"
+#include "SkTRegistry.h"
+
+namespace skiatest {
+
+ class Test;
+
+ class Reporter : public SkRefCnt {
+ public:
+ Reporter();
+
+ enum Result {
+ kPassed, // must begin with 0
+ kFailed,
+ /////
+ kLastResult = kFailed
+ };
+
+ void resetReporting();
+ int countTests() const { return fTestCount; }
+ int countResults(Result r) {
+ SkASSERT((unsigned)r <= kLastResult);
+ return fResultCount[r];
+ }
+
+ void startTest(Test*);
+ void report(const char testDesc[], Result);
+ void endTest(Test*);
+
+ // helpers for tests
+ void assertTrue(bool cond, const char desc[]) {
+ if (!cond) {
+ this->report(desc, kFailed);
+ }
+ }
+ void assertFalse(bool cond, const char desc[]) {
+ if (cond) {
+ this->report(desc, kFailed);
+ }
+ }
+ void reportFailed(const char desc[]) {
+ this->report(desc, kFailed);
+ }
+ void reportFailed(const SkString& desc) {
+ this->report(desc.c_str(), kFailed);
+ }
+
+ protected:
+ virtual void onStart(Test*) {}
+ virtual void onReport(const char desc[], Result) {}
+ virtual void onEnd(Test*) {}
+
+ private:
+ Test* fCurrTest;
+ int fTestCount;
+ int fResultCount[kLastResult+1];
+
+ typedef SkRefCnt INHERITED;
+ };
+
+ class Test {
+ public:
+ Test();
+ virtual ~Test();
+
+ Reporter* getReporter() const { return fReporter; }
+ void setReporter(Reporter*);
+
+ const char* getName();
+ void run();
+
+ protected:
+ virtual void onGetName(SkString*) = 0;
+ virtual void onRun(Reporter*) = 0;
+
+ private:
+ Reporter* fReporter;
+ SkString fName;
+ };
+
+ typedef SkTRegistry<Test*, void*> TestRegistry;
+}
+
+#define REPORTER_ASSERT(r, cond) \
+ do { \
+ if (!(cond)) { \
+ SkString desc; \
+ desc.printf("%s:%d: %s", __FILE__, __LINE__, #cond); \
+ r->reportFailed(desc); \
+ } \
+ } while(0)
+
+
+#endif