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 } 106