Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / tests / DocumentTest.cpp
1 #include "Test.h"
2
3 #include "SkCanvas.h"
4 #include "SkDocument.h"
5 #include "SkOSFile.h"
6 #include "SkStream.h"
7
8 static void test_empty(skiatest::Reporter* reporter) {
9     SkDynamicMemoryWStream stream;
10
11     SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(&stream));
12
13     doc->close();
14
15     REPORTER_ASSERT(reporter, stream.bytesWritten() == 0);
16 }
17
18 static void test_abort(skiatest::Reporter* reporter) {
19     SkDynamicMemoryWStream stream;
20     SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(&stream));
21
22     SkCanvas* canvas = doc->beginPage(100, 100);
23     canvas->drawColor(SK_ColorRED);
24     doc->endPage();
25
26     doc->abort();
27
28     REPORTER_ASSERT(reporter, stream.bytesWritten() == 0);
29 }
30
31 static void test_abortWithFile(skiatest::Reporter* reporter) {
32     SkString tmpDir = skiatest::Test::GetTmpDir();
33
34     if (tmpDir.isEmpty()) {
35         return;  // TODO(edisonn): unfortunatelly this pattern is used in other
36                  // tests, but if GetTmpDir() starts returning and empty dir
37                  // allways, then all these tests will be disabled.
38     }
39
40     SkString path = SkOSPath::Join(tmpDir.c_str(), "aborted.pdf");
41
42     // Make sure doc's destructor is called to flush.
43     {
44         SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(path.c_str()));
45
46         SkCanvas* canvas = doc->beginPage(100, 100);
47         canvas->drawColor(SK_ColorRED);
48         doc->endPage();
49
50         doc->abort();
51     }
52
53     FILE* file = fopen(path.c_str(), "r");
54     // The created file should be empty.
55     char buffer[100];
56     REPORTER_ASSERT(reporter, fread(buffer, 1, 1, file) == 0);
57     fclose(file);
58 }
59
60 static void test_file(skiatest::Reporter* reporter) {
61     SkString tmpDir = skiatest::Test::GetTmpDir();
62     if (tmpDir.isEmpty()) {
63         return;  // TODO(edisonn): unfortunatelly this pattern is used in other
64                  // tests, but if GetTmpDir() starts returning and empty dir
65                  // allways, then all these tests will be disabled.
66     }
67
68     SkString path = SkOSPath::Join(tmpDir.c_str(), "file.pdf");
69
70     SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(path.c_str()));
71
72     SkCanvas* canvas = doc->beginPage(100, 100);
73
74     canvas->drawColor(SK_ColorRED);
75     doc->endPage();
76     doc->close();
77
78     FILE* file = fopen(path.c_str(), "r");
79     REPORTER_ASSERT(reporter, file != NULL);
80     char header[100];
81     REPORTER_ASSERT(reporter, fread(header, 4, 1, file) != 0);
82     REPORTER_ASSERT(reporter, strncmp(header, "%PDF", 4) == 0);
83     fclose(file);
84 }
85
86 static void test_close(skiatest::Reporter* reporter) {
87     SkDynamicMemoryWStream stream;
88     SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(&stream));
89
90     SkCanvas* canvas = doc->beginPage(100, 100);
91     canvas->drawColor(SK_ColorRED);
92     doc->endPage();
93
94     doc->close();
95
96     REPORTER_ASSERT(reporter, stream.bytesWritten() != 0);
97 }
98
99 DEF_TEST(document_tests, reporter) {
100     test_empty(reporter);
101     test_abort(reporter);
102     test_abortWithFile(reporter);
103     test_file(reporter);
104     test_close(reporter);
105 }