1#ifndef DMWriteTask_DEFINED
2#define DMWriteTask_DEFINED
3
4#include "DMExpectations.h"
5#include "DMTask.h"
6#include "SkBitmap.h"
7#include "SkString.h"
8#include "SkTArray.h"
9
10
11// Writes a bitmap to a file.
12
13namespace DM {
14
15class WriteTask : public CpuTask {
16
17public:
18    WriteTask(const Task& parent,  // WriteTask must be a child task.
19              SkBitmap bitmap);    // Bitmap to encode to PNG and write to disk.
20
21    WriteTask(const Task& parent,   // WriteTask must be a child task.
22              SkData *data,         // Pre-encoded data to write to disk.
23              const char* ext);     // File extension.
24
25    virtual void draw() SK_OVERRIDE;
26    virtual bool shouldSkip() const SK_OVERRIDE;
27    virtual SkString name() const SK_OVERRIDE;
28
29    // Reads image files WriteTask wrote under root and compares them with bitmap.
30    class Expectations : public DM::Expectations {
31    public:
32        explicit Expectations(const char* root) : fRoot(root) {}
33
34        bool check(const Task& task, SkBitmap bitmap) const SK_OVERRIDE;
35    private:
36        const char* fRoot;
37    };
38
39private:
40    SkTArray<SkString> fSuffixes;
41    const SkString fGmName;
42    const SkBitmap fBitmap;
43    SkAutoTUnref<SkData> fData;
44    const char* fExtension;
45
46    void makeDirOrFail(SkString dir);
47};
48
49}  // namespace DM
50
51#endif  // DMWriteTask_DEFINED
52