C++程序  |  47行  |  1.22 KB

#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