1#include "Test.h" 2 3#include "SkCanvas.h" 4#include "SkDocument.h" 5#include "SkOSFile.h" 6#include "SkStream.h" 7 8static 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 18static 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 31static void test_abortWithFile(skiatest::Reporter* reporter) { 32 SkString tmpDir = skiatest::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 60static void test_file(skiatest::Reporter* reporter) { 61 SkString tmpDir = skiatest::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 86static 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 99DEF_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} 106