| #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 |