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

#ifdef SK_BUILD_JSON_WRITER
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;
};
#endif

}  // namespace DM

#endif // DMExpectations_DEFINED
