#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