blob: 13f8817b70b58acc2a1714b214bcf4a4a7213759 [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
31private:
32 Reporter* fReporter;
33 const TestRegistry* fReg;
34};
35
36static const char* result2string(Reporter::Result result) {
37 return result == Reporter::kPassed ? "passed" : "FAILED";
38}
39
reed@android.comd252db02009-04-01 18:31:44 +000040class DebugfReporter : public Reporter {
reed@android.comed673312009-02-27 16:24:51 +000041protected:
42 virtual void onStart(Test* test) {
reed@android.comd252db02009-04-01 18:31:44 +000043 SkDebugf("Running %s...\n", test->getName());
reed@android.comed673312009-02-27 16:24:51 +000044 }
45 virtual void onReport(const char desc[], Reporter::Result result) {
reed@android.comd252db02009-04-01 18:31:44 +000046 SkDebugf("\t%s: %s\n", result2string(result), desc);
reed@android.comed673312009-02-27 16:24:51 +000047 }
48 virtual void onEnd(Test* test) {}
49};
50
reed@android.com5e5adfd2009-03-07 03:39:23 +000051class SkAutoGraphics {
52public:
53 SkAutoGraphics() {
54 SkGraphics::Init();
55 }
56 ~SkAutoGraphics() {
57 SkGraphics::Term();
58 }
59};
60
reed@android.comed673312009-02-27 16:24:51 +000061int main (int argc, char * const argv[]) {
reed@android.com5e5adfd2009-03-07 03:39:23 +000062 SkAutoGraphics ag;
63
reed@android.comd252db02009-04-01 18:31:44 +000064 DebugfReporter reporter;
reed@android.comed673312009-02-27 16:24:51 +000065 Iter iter(&reporter);
66 Test* test;
67
68 while ((test = iter.next()) != NULL) {
69 test->run();
70 SkDELETE(test);
71 }
72
73 int total = reporter.countTests();
74 int passed = reporter.countResults(Reporter::kPassed);
75 int failed = reporter.countResults(Reporter::kFailed);
reed@android.comd252db02009-04-01 18:31:44 +000076 SkDebugf("Tests=%d Passed=%d (%g%%) Failed=%d (%g%%)\n", total,
reed@android.comed673312009-02-27 16:24:51 +000077 passed, passed * 100.f / total,
78 failed, failed * 100.f / total);
79
80 return 0;
81}