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