#ifndef DMWriteTask_DEFINED
#define DMWriteTask_DEFINED

#include "DMExpectations.h"
#include "DMTask.h"
#include "SkBitmap.h"
#include "SkString.h"
#include "SkTArray.h"


// Writes a bitmap to a file.

namespace DM {

class WriteTask : public CpuTask {

public:
    WriteTask(const Task& parent,    // WriteTask must be a child Task.  Pass its parent here.
              SkBitmap bitmap);      // Bitmap to write.

    virtual void draw() SK_OVERRIDE;
    virtual bool shouldSkip() const SK_OVERRIDE;
    virtual SkString name() const SK_OVERRIDE;

    // Reads image files WriteTask wrote under root and compares them with bitmap.
    class Expectations : public DM::Expectations {
    public:
        explicit Expectations(const char* root) : fRoot(root) {}

        bool check(const Task& task, SkBitmap bitmap) const SK_OVERRIDE;
    private:
        const char* fRoot;
    };

private:
    SkTArray<SkString> fSuffixes;
    SkString fGmName;
    const SkBitmap fBitmap;

    void makeDirOrFail(SkString dir);
};

}  // namespace DM

#endif  // DMWriteTask_DEFINED
