|  | #ifndef DMExpectations_DEFINED | 
|  | #define DMExpectations_DEFINED | 
|  |  | 
|  | #include "DMTask.h" | 
|  | #include "gm_expectations.h" | 
|  |  | 
|  | namespace DM { | 
|  |  | 
|  | struct Expectations { | 
|  | virtual ~Expectations() {} | 
|  |  | 
|  | // Return true if bitmap is the correct output for task, else false. | 
|  | virtual bool check(const Task& task, SkBitmap bitmap) const = 0; | 
|  | }; | 
|  |  | 
|  | class NoExpectations : public Expectations { | 
|  | public: | 
|  | NoExpectations() {} | 
|  | bool check(const Task&, SkBitmap) const SK_OVERRIDE { return true; } | 
|  | }; | 
|  |  | 
|  | class JsonExpectations : public Expectations { | 
|  | public: | 
|  | explicit JsonExpectations(const char* path) : fGMExpectations(path) {} | 
|  |  | 
|  | bool check(const Task& task, SkBitmap bitmap) const SK_OVERRIDE { | 
|  | SkString filename = task.name(); | 
|  | filename.append(".png"); | 
|  | const skiagm::Expectations expectations = fGMExpectations.get(filename.c_str()); | 
|  |  | 
|  | if (expectations.ignoreFailure() || expectations.empty()) { | 
|  | return true; | 
|  | } | 
|  |  | 
|  | // Delay this calculation as long as possible.  It's expensive. | 
|  | const skiagm::GmResultDigest digest(bitmap); | 
|  | return expectations.match(digest); | 
|  | } | 
|  |  | 
|  | private: | 
|  | skiagm::JsonExpectationsSource fGMExpectations; | 
|  | }; | 
|  |  | 
|  | }  // namespace DM | 
|  |  | 
|  | #endif // DMExpectations_DEFINED |