Index: dm/DMExpectations.h |
diff --git a/dm/DMExpectations.h b/dm/DMExpectations.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..238d1c5beab77cf0820ed3dd32e6bf6a15adfa82 |
--- /dev/null |
+++ b/dm/DMExpectations.h |
@@ -0,0 +1,46 @@ |
+#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 |