1#include "Test.h"
2
3using namespace skiatest;
4
5Reporter::Reporter() {
6    this->resetReporting();
7}
8
9void Reporter::resetReporting() {
10    fCurrTest = NULL;
11    fTestCount = 0;
12    sk_bzero(fResultCount, sizeof(fResultCount));
13}
14
15void Reporter::startTest(Test* test) {
16    SkASSERT(NULL == fCurrTest);
17    fCurrTest = test;
18    this->onStart(test);
19    fTestCount += 1;
20    fCurrTestSuccess = true;    // we're optimistic
21}
22
23void Reporter::report(const char desc[], Result result) {
24    if (NULL == desc) {
25        desc = "<no description>";
26    }
27    this->onReport(desc, result);
28    fResultCount[result] += 1;
29    if (kFailed == result) {
30        fCurrTestSuccess = false;
31    }
32}
33
34void Reporter::endTest(Test* test) {
35    SkASSERT(test == fCurrTest);
36    this->onEnd(test);
37    fCurrTest = NULL;
38}
39
40///////////////////////////////////////////////////////////////////////////////
41
42Test::Test() : fReporter(NULL) {}
43
44Test::~Test() {
45    SkSafeUnref(fReporter);
46}
47
48void Test::setReporter(Reporter* r) {
49    SkRefCnt_SafeAssign(fReporter, r);
50}
51
52const char* Test::getName() {
53    if (fName.size() == 0) {
54        this->onGetName(&fName);
55    }
56    return fName.c_str();
57}
58
59bool Test::run() {
60    fReporter->startTest(this);
61    this->onRun(fReporter);
62    fReporter->endTest(this);
63    return fReporter->getCurrSuccess();
64}
65
66