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 allowThreaded()     const SK_OVERRIDE;
23  virtual bool verbose()           const SK_OVERRIDE;
24
25  virtual void onReportFailed(const SkString& desc) SK_OVERRIDE {
26      fFailure = desc;
27  }
28
29  SkString fFailure;
30};
31
32class CpuTestTask : public CpuTask {
33public:
34    CpuTestTask(Reporter*, TaskRunner*, skiatest::TestRegistry::Factory);
35
36    virtual void draw() SK_OVERRIDE;
37    virtual bool shouldSkip() const SK_OVERRIDE { return false; }
38    virtual SkString name() const SK_OVERRIDE { return fName; }
39
40private:
41    TestReporter fTestReporter;
42    SkAutoTDelete<skiatest::Test> fTest;
43    const SkString fName;
44};
45
46class GpuTestTask : public GpuTask {
47public:
48    GpuTestTask(Reporter*, TaskRunner*, skiatest::TestRegistry::Factory);
49
50    virtual void draw(GrContextFactory*) SK_OVERRIDE;
51    virtual bool shouldSkip() const SK_OVERRIDE;
52    virtual SkString name() const SK_OVERRIDE { return fName; }
53
54private:
55    TestReporter fTestReporter;
56    SkAutoTDelete<skiatest::Test> fTest;
57    const SkString fName;
58};
59
60}  // namespace DM
61
62#endif // DMTestTask_DEFINED
63