blob: 57d7c041a2235e9a21a8093dfcb4ac5e6340ad80 [file] [log] [blame]
reed@android.com5e5adfd2009-03-07 03:39:23 +00001#include "SkGraphics.h"
reed@android.comed673312009-02-27 16:24:51 +00002#include "Test.h"
3
4using namespace skiatest;
5
reed@android.comd252db02009-04-01 18:31:44 +00006// need to explicitly declare this, or we get some weird infinite loop llist
7template TestRegistry* TestRegistry::gHead;
8
reed@android.comed673312009-02-27 16:24:51 +00009class Iter {
10public:
11 Iter(Reporter* r) : fReporter(r) {
12 r->ref();
13 fReg = TestRegistry::Head();
14 }
15
16 ~Iter() {
17 fReporter->unref();
18 }
19
20 Test* next() {
21 if (fReg) {
22 TestRegistry::Factory fact = fReg->factory();
23 fReg = fReg->next();
24 Test* test = fact(NULL);
25 test->setReporter(fReporter);
26 return test;
27 }
28 return NULL;
29 }
30
reed@android.com57b799e2009-04-01 20:26:42 +000031 static int Count() {
32 const TestRegistry* reg = TestRegistry::Head();
33 int count = 0;
34 while (reg) {
35 count += 1;
36 reg = reg->next();
37 }
38 return count;
39 }
40
reed@android.comed673312009-02-27 16:24:51 +000041private:
42 Reporter* fReporter;
43 const TestRegistry* fReg;
44};
45
46static const char* result2string(Reporter::Result result) {
47 return result == Reporter::kPassed ? "passed" : "FAILED";
48}
49
reed@android.comd252db02009-04-01 18:31:44 +000050class DebugfReporter : public Reporter {
reed@android.com57b799e2009-04-01 20:26:42 +000051public:
52 void setIndexOfTotal(int index, int total) {
53 fIndex = index;
54 fTotal = total;
55 }
reed@android.comed673312009-02-27 16:24:51 +000056protected:
57 virtual void onStart(Test* test) {
reed@android.com57b799e2009-04-01 20:26:42 +000058 SkDebugf("Running [%d/%d] %s...\n", fIndex+1, fTotal, test->getName());
reed@android.comed673312009-02-27 16:24:51 +000059 }
60 virtual void onReport(const char desc[], Reporter::Result result) {
reed@android.comd252db02009-04-01 18:31:44 +000061 SkDebugf("\t%s: %s\n", result2string(result), desc);
reed@android.comed673312009-02-27 16:24:51 +000062 }
63 virtual void onEnd(Test* test) {}
reed@android.com57b799e2009-04-01 20:26:42 +000064private:
65 int fIndex, fTotal;
reed@android.comed673312009-02-27 16:24:51 +000066};
67
reed@android.com5e5adfd2009-03-07 03:39:23 +000068class SkAutoGraphics {
69public:
70 SkAutoGraphics() {
71 SkGraphics::Init();
72 }
73 ~SkAutoGraphics() {
74 SkGraphics::Term();
75 }
76};
77
reed@android.comed673312009-02-27 16:24:51 +000078int main (int argc, char * const argv[]) {
reed@android.com5e5adfd2009-03-07 03:39:23 +000079 SkAutoGraphics ag;
80
reed@android.comd252db02009-04-01 18:31:44 +000081 DebugfReporter reporter;
reed@android.comed673312009-02-27 16:24:51 +000082 Iter iter(&reporter);
83 Test* test;
84
reed@android.com57b799e2009-04-01 20:26:42 +000085 const int count = Iter::Count();
86 int index = 0;
reed@android.comed673312009-02-27 16:24:51 +000087 while ((test = iter.next()) != NULL) {
reed@android.com57b799e2009-04-01 20:26:42 +000088 reporter.setIndexOfTotal(index, count);
reed@android.comed673312009-02-27 16:24:51 +000089 test->run();
90 SkDELETE(test);
reed@android.com57b799e2009-04-01 20:26:42 +000091 index += 1;
reed@android.comed673312009-02-27 16:24:51 +000092 }
reed@android.com57b799e2009-04-01 20:26:42 +000093 SkDebugf("Finished %d tests.\n", count);
94
95#if 0
reed@android.comed673312009-02-27 16:24:51 +000096 int total = reporter.countTests();
97 int passed = reporter.countResults(Reporter::kPassed);
98 int failed = reporter.countResults(Reporter::kFailed);
reed@android.comd252db02009-04-01 18:31:44 +000099 SkDebugf("Tests=%d Passed=%d (%g%%) Failed=%d (%g%%)\n", total,
reed@android.comed673312009-02-27 16:24:51 +0000100 passed, passed * 100.f / total,
101 failed, failed * 100.f / total);
reed@android.com57b799e2009-04-01 20:26:42 +0000102#endif
reed@android.comed673312009-02-27 16:24:51 +0000103 return 0;
104}