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
diff --git a/tests/Test.cpp b/tests/Test.cpp
new file mode 100644
index 0000000..5b8d439
--- /dev/null
+++ b/tests/Test.cpp
@@ -0,0 +1,60 @@
+#include "Test.h"
+
+using namespace skiatest;
+
+Reporter::Reporter() {
+    this->resetReporting();
+}
+
+void Reporter::resetReporting() {
+    fCurrTest = NULL;
+    fTestCount = 0;
+    bzero(fResultCount, sizeof(fResultCount));
+}
+
+void Reporter::startTest(Test* test) {
+    SkASSERT(NULL == fCurrTest);
+    fCurrTest = test;
+    this->onStart(test);
+    fTestCount += 1;
+}
+
+void Reporter::report(const char desc[], Result result) {
+    if (NULL == desc) {
+        desc = "<no description>";
+    }
+    this->onReport(desc, result);
+    fResultCount[result] += 1;
+}
+
+void Reporter::endTest(Test* test) {
+    SkASSERT(test == fCurrTest);
+    this->onEnd(test);
+    fCurrTest = NULL;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+Test::Test() : fReporter(NULL) {}
+
+Test::~Test() {
+    fReporter->safeUnref();
+}
+
+void Test::setReporter(Reporter* r) {
+    SkRefCnt_SafeAssign(fReporter, r);
+}
+
+const char* Test::getName() {
+    if (fName.size() == 0) {
+        this->onGetName(&fName);
+    }
+    return fName.c_str();
+}
+
+void Test::run() {
+    fReporter->startTest(this);
+    this->onRun(fReporter);
+    fReporter->endTest(this);
+}
+