Home | History | Annotate | Download | only in dm
      1 #ifndef DMExpectations_DEFINED
      2 #define DMExpectations_DEFINED
      3 
      4 #include "DMTask.h"
      5 #include "gm_expectations.h"
      6 
      7 namespace DM {
      8 
      9 struct Expectations {
     10     virtual ~Expectations() {}
     11 
     12     // Return true if bitmap is the correct output for task, else false.
     13     virtual bool check(const Task& task, SkBitmap bitmap) const = 0;
     14 };
     15 
     16 class NoExpectations : public Expectations {
     17 public:
     18     NoExpectations() {}
     19     bool check(const Task&, SkBitmap) const SK_OVERRIDE { return true; }
     20 };
     21 
     22 class JsonExpectations : public Expectations {
     23 public:
     24     explicit JsonExpectations(const char* path) : fGMExpectations(path) {}
     25 
     26     bool check(const Task& task, SkBitmap bitmap) const SK_OVERRIDE {
     27         SkString filename = task.name();
     28         filename.append(".png");
     29         const skiagm::Expectations expectations = fGMExpectations.get(filename.c_str());
     30 
     31         if (expectations.ignoreFailure() || expectations.empty()) {
     32             return true;
     33         }
     34 
     35         // Delay this calculation as long as possible.  It's expensive.
     36         const skiagm::GmResultDigest digest(bitmap);
     37         return expectations.match(digest);
     38     }
     39 
     40 private:
     41     skiagm::JsonExpectationsSource fGMExpectations;
     42 };
     43 
     44 }  // namespace DM
     45 
     46 #endif // DMExpectations_DEFINED
     47