diff options
author | 2009-02-27 16:24:51 +0000 | |
---|---|---|
committer | 2009-02-27 16:24:51 +0000 | |
commit | ed673310e2551e64d8196f7776d7d4c92085f8c2 (patch) | |
tree | ac5a737aaaf66c97be7109eb980beadd35e30e25 /tests/Test.h | |
parent | 3469c76c40790b409621fd7eff34f56240718549 (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.h | 98 |
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 |