support -android mode when running tests, which spews out android specific
formatting for their testing env.



git-svn-id: http://skia.googlecode.com/svn/trunk@152 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tests/Test.cpp b/tests/Test.cpp
index 5b8d439..2de0183 100644
--- a/tests/Test.cpp
+++ b/tests/Test.cpp
@@ -17,6 +17,7 @@
     fCurrTest = test;
     this->onStart(test);
     fTestCount += 1;
+    fCurrTestSuccess = true;    // we're optimistic
 }
 
 void Reporter::report(const char desc[], Result result) {
@@ -25,6 +26,9 @@
     }
     this->onReport(desc, result);
     fResultCount[result] += 1;
+    if (kFailed == result) {
+        fCurrTestSuccess = false;
+    }
 }
 
 void Reporter::endTest(Test* test) {
@@ -52,9 +56,10 @@
     return fName.c_str();
 }
 
-void Test::run() {
+bool Test::run() {
     fReporter->startTest(this);
     this->onRun(fReporter);
     fReporter->endTest(this);
+    return fReporter->getCurrSuccess();
 }
 
diff --git a/tests/Test.h b/tests/Test.h
index d5dc9e3..de51801 100644
--- a/tests/Test.h
+++ b/tests/Test.h
@@ -48,7 +48,11 @@
         void reportFailed(const SkString& desc) {
             this->report(desc.c_str(), kFailed);
         }
-
+        
+        bool getCurrSuccess() const {
+            return fCurrTestSuccess;
+        }
+        
     protected:
         virtual void onStart(Test*) {}
         virtual void onReport(const char desc[], Result) {}
@@ -58,6 +62,7 @@
         Test* fCurrTest;
         int fTestCount;
         int fResultCount[kLastResult+1];
+        bool fCurrTestSuccess;
 
         typedef SkRefCnt INHERITED;
     };
@@ -71,7 +76,7 @@
         void setReporter(Reporter*);
 
         const char* getName();
-        void run();
+        bool run(); // returns true on success
 
     protected:
         virtual void onGetName(SkString*) = 0;
diff --git a/tests/testmain.cpp b/tests/testmain.cpp
index 2e16de3..f09fded 100644
--- a/tests/testmain.cpp
+++ b/tests/testmain.cpp
@@ -49,20 +49,50 @@
 
 class DebugfReporter : public Reporter {
 public:
+    DebugfReporter(bool androidMode) : fAndroidMode(androidMode) {}
+
     void setIndexOfTotal(int index, int total) {
         fIndex = index;
         fTotal = total;
     }
 protected:
     virtual void onStart(Test* test) {
-        SkDebugf("Running [%d/%d] %s...\n", fIndex+1, fTotal, test->getName());
+        this->dumpState(test, kStarting_State);
     }
     virtual void onReport(const char desc[], Reporter::Result result) {
-        SkDebugf("\t%s: %s\n", result2string(result), desc);
+        if (!fAndroidMode) {
+            SkDebugf("\t%s: %s\n", result2string(result), desc);
+        }
     }
-    virtual void onEnd(Test* test) {}
+    virtual void onEnd(Test* test) {
+        this->dumpState(test, this->getCurrSuccess() ?
+                        kSucceeded_State : kFailed_State);
+    }
 private:
+    enum State {
+        kStarting_State = 1,
+        kSucceeded_State = 0,
+        kFailed_State = -2
+    };
+
+    void dumpState(Test* test, State state) {
+        if (fAndroidMode) {
+            SkDebugf("INSTRUMENTATION_STATUS: test=%s\n", test->getName());
+            SkDebugf("INSTRUMENTATION_STATUS: class=com.skia\n");
+            SkDebugf("INSTRUMENTATION_STATUS: current=%d\n", fIndex+1);
+            SkDebugf("INSTRUMENTATION_STATUS: numtests=%d\n", fTotal);
+            SkDebugf("INSTRUMENTATION_STATUS_CODE: %d\n", state);
+        } else {
+            if (kStarting_State == state) {
+                SkDebugf("[%d/%d] %s...\n", fIndex+1, fTotal, test->getName());
+            } else if (kFailed_State == state) {
+                SkDebugf("---- FAILED\n");
+            }
+        }
+    }
+
     int fIndex, fTotal;
+    bool fAndroidMode;
 };
 
 class SkAutoGraphics {
@@ -77,28 +107,31 @@
 
 int main (int argc, char * const argv[]) {
     SkAutoGraphics ag;
+    
+    bool androidMode = false;
+    for (int i = 1; i < argc; i++) {
+        if (!strcmp(argv[i], "-android")) {
+            androidMode = true;
+        }
+    }
 
-    DebugfReporter reporter;
+    DebugfReporter reporter(androidMode);
     Iter iter(&reporter);
     Test* test;
 
     const int count = Iter::Count();
     int index = 0;
+    int successCount = 0;
     while ((test = iter.next()) != NULL) {
         reporter.setIndexOfTotal(index, count);
-        test->run();
+        successCount += test->run();
         SkDELETE(test);
         index += 1;
     }
-    SkDebugf("Finished %d tests.\n", count);
 
-#if 0
-    int total = reporter.countTests();
-    int passed = reporter.countResults(Reporter::kPassed);
-    int failed = reporter.countResults(Reporter::kFailed);
-    SkDebugf("Tests=%d Passed=%d (%g%%) Failed=%d (%g%%)\n", total,
-           passed, passed * 100.f / total,
-           failed, failed * 100.f / total);
-#endif
+    if (!androidMode) {
+        SkDebugf("Finished %d tests, %d failures.\n", count,
+                 count - successCount);
+    }
     return 0;
 }