1#ifndef DMTestTask_DEFINED
2#define DMTestTask_DEFINED
3
4#include "DMReporter.h"
5#include "DMTask.h"
6#include "DMTaskRunner.h"
7#include "SkString.h"
8#include "SkTemplates.h"
9#include "Test.h"
10
11// Runs a unit test.
12namespace DM {
13
14class TestReporter : public skiatest::Reporter {
15public:
16  TestReporter() {}
17
18  const char* failure() const { return fFailure.c_str(); }
19
20private:
21  virtual bool allowExtendedTest() const SK_OVERRIDE;
22  virtual bool verbose()           const SK_OVERRIDE;
23
24  virtual void onReportFailed(const SkString& desc) SK_OVERRIDE {
25      fFailure = desc;
26  }
27
28  SkString fFailure;
29};
30
31class CpuTestTask : public CpuTask {
32public:
33    CpuTestTask(Reporter*, TaskRunner*, skiatest::TestRegistry::Factory);
34
35    virtual void draw() SK_OVERRIDE;
36    virtual bool shouldSkip() const SK_OVERRIDE { return false; }
37    virtual SkString name() const SK_OVERRIDE { return fName; }
38
39private:
40    TestReporter fTestReporter;
41    SkAutoTDelete<skiatest::Test> fTest;
42    const SkString fName;
43};
44
45class GpuTestTask : public GpuTask {
46public:
47    GpuTestTask(Reporter*, TaskRunner*, skiatest::TestRegistry::Factory);
48
49    virtual void draw(GrContextFactory*) SK_OVERRIDE;
50    virtual bool shouldSkip() const SK_OVERRIDE;
51    virtual SkString name() const SK_OVERRIDE { return fName; }
52
53private:
54    TestReporter fTestReporter;
55    SkAutoTDelete<skiatest::Test> fTest;
56    const SkString fName;
57};
58
59}  // namespace DM
60
61#endif // DMTestTask_DEFINED
62