| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 #include "Test.h" | 7 #include "Test.h" |
| 8 | 8 |
| 9 #include "Resources.h" | 9 #include "Resources.h" |
| 10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 | 98 |
| 99 SkCanvas* canvas = doc->beginPage(100, 100); | 99 SkCanvas* canvas = doc->beginPage(100, 100); |
| 100 canvas->drawColor(SK_ColorRED); | 100 canvas->drawColor(SK_ColorRED); |
| 101 doc->endPage(); | 101 doc->endPage(); |
| 102 | 102 |
| 103 doc->close(); | 103 doc->close(); |
| 104 | 104 |
| 105 REPORTER_ASSERT(reporter, stream.bytesWritten() != 0); | 105 REPORTER_ASSERT(reporter, stream.bytesWritten() != 0); |
| 106 } | 106 } |
| 107 | 107 |
| 108 DEF_TEST(document_tests, reporter) { | 108 DEF_TEST(SkPDF_document_tests, reporter) { |
| 109 REQUIRE_PDF_DOCUMENT(document_tests, reporter); | 109 REQUIRE_PDF_DOCUMENT(document_tests, reporter); |
| 110 test_empty(reporter); | 110 test_empty(reporter); |
| 111 test_abort(reporter); | 111 test_abort(reporter); |
| 112 test_abortWithFile(reporter); | 112 test_abortWithFile(reporter); |
| 113 test_file(reporter); | 113 test_file(reporter); |
| 114 test_close(reporter); | 114 test_close(reporter); |
| 115 } | 115 } |
| 116 | 116 |
| 117 namespace { | 117 namespace { |
| 118 class JPEGSerializer final : public SkPixelSerializer { | 118 class JPEGSerializer final : public SkPixelSerializer { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 140 } else { | 140 } else { |
| 141 doc = SkDocument::MakePDF(&stream); | 141 doc = SkDocument::MakePDF(&stream); |
| 142 } | 142 } |
| 143 SkCanvas* canvas = doc->beginPage(64, 64); | 143 SkCanvas* canvas = doc->beginPage(64, 64); |
| 144 canvas->drawBitmap(bm, 0, 0); | 144 canvas->drawBitmap(bm, 0, 0); |
| 145 doc->endPage(); | 145 doc->endPage(); |
| 146 doc->close(); | 146 doc->close(); |
| 147 return stream.bytesWritten(); | 147 return stream.bytesWritten(); |
| 148 } | 148 } |
| 149 | 149 |
| 150 DEF_TEST(document_dct_encoder, r) { | 150 DEF_TEST(SkPDF_document_dct_encoder, r) { |
| 151 REQUIRE_PDF_DOCUMENT(document_dct_encoder, r); | 151 REQUIRE_PDF_DOCUMENT(SkPDF_document_dct_encoder, r); |
| 152 SkBitmap bm; | 152 SkBitmap bm; |
| 153 if (GetResourceAsBitmap("mandrill_64.png", &bm)) { | 153 if (GetResourceAsBitmap("mandrill_64.png", &bm)) { |
| 154 // Lossy encoding works better on photographs. | 154 // Lossy encoding works better on photographs. |
| 155 REPORTER_ASSERT(r, count_bytes(bm, true) < count_bytes(bm, false)); | 155 REPORTER_ASSERT(r, count_bytes(bm, true) < count_bytes(bm, false)); |
| 156 } | 156 } |
| 157 } | 157 } |
| 158 | 158 |
| 159 DEF_TEST(document_skbug_4734, r) { | 159 DEF_TEST(SkPDF_document_skbug_4734, r) { |
| 160 REQUIRE_PDF_DOCUMENT(document_skbug_4734, r); | 160 REQUIRE_PDF_DOCUMENT(SkPDF_document_skbug_4734, r); |
| 161 SkDynamicMemoryWStream stream; | 161 SkDynamicMemoryWStream stream; |
| 162 sk_sp<SkDocument> doc(SkDocument::MakePDF(&stream)); | 162 sk_sp<SkDocument> doc(SkDocument::MakePDF(&stream)); |
| 163 SkCanvas* canvas = doc->beginPage(64, 64); | 163 SkCanvas* canvas = doc->beginPage(64, 64); |
| 164 canvas->scale(10000.0f, 10000.0f); | 164 canvas->scale(10000.0f, 10000.0f); |
| 165 canvas->translate(20.0f, 10.0f); | 165 canvas->translate(20.0f, 10.0f); |
| 166 canvas->rotate(30.0f); | 166 canvas->rotate(30.0f); |
| 167 const char text[] = "HELLO"; | 167 const char text[] = "HELLO"; |
| 168 canvas->drawText(text, strlen(text), 0, 0, SkPaint()); | 168 canvas->drawText(text, strlen(text), 0, 0, SkPaint()); |
| 169 } | 169 } |
| 170 |
| 171 static bool contains(const uint8_t* result, size_t size, const char expectation[
]) { |
| 172 size_t len = strlen(expectation); |
| 173 size_t N = 1 + size - len; |
| 174 for (size_t i = 0; i < N; ++i) { |
| 175 if (0 == memcmp(result + i, expectation, len)) { |
| 176 return true; |
| 177 } |
| 178 } |
| 179 return false; |
| 180 } |
| 181 |
| 182 // verify that the PDFA flag does something. |
| 183 DEF_TEST(SkPDF_pdfa_document, r) { |
| 184 REQUIRE_PDF_DOCUMENT(SkPDF_pdfa_document, r); |
| 185 |
| 186 SkDocument::PDFMetadata pdfMetadata; |
| 187 pdfMetadata.fTitle = "test document"; |
| 188 pdfMetadata.fCreation.fEnabled = true; |
| 189 pdfMetadata.fCreation.fDateTime = {0, 1999, 12, 5, 31, 23, 59, 59}; |
| 190 |
| 191 SkDynamicMemoryWStream buffer; |
| 192 auto doc = SkDocument::MakePDF(&buffer, SK_ScalarDefaultRasterDPI, |
| 193 pdfMetadata, nullptr, /* pdfa = */ true); |
| 194 doc->beginPage(64, 64)->drawColor(SK_ColorRED); |
| 195 doc->close(); |
| 196 sk_sp<SkData> data(buffer.copyToData()); |
| 197 buffer.reset(); |
| 198 static const char* expectations[] = { |
| 199 "sRGB IEC61966-2.1", |
| 200 "<dc:title><rdf:Alt><rdf:li xml:lang=\"x-default\">test document", |
| 201 "<xmp:CreateDate>1999-12-31T23:59:59+00:00</xmp:CreateDate>", |
| 202 "/Subtype /XML", |
| 203 "/CreationDate (D:19991231235959+00'00')>>", |
| 204 }; |
| 205 for (const char* expectation : expectations) { |
| 206 if (!contains(data->bytes(), data->size(), expectation)) { |
| 207 ERRORF(r, "PDFA expectation missing: '%s'.", expectation); |
| 208 } |
| 209 } |
| 210 pdfMetadata.fProducer = "phoney library"; |
| 211 doc = SkDocument::MakePDF(&buffer, SK_ScalarDefaultRasterDPI, |
| 212 pdfMetadata, nullptr, /* pdfa = */ true); |
| 213 doc->beginPage(64, 64)->drawColor(SK_ColorRED); |
| 214 doc->close(); |
| 215 data.reset(buffer.copyToData()); |
| 216 buffer.reset(); |
| 217 |
| 218 static const char* moreExpectations[] = { |
| 219 "/Producer (phoney library)", |
| 220 "/ProductionLibrary (Skia/PDF m", |
| 221 "<!-- <skia:ProductionLibrary>Skia/PDF m", |
| 222 "<pdf:Producer>phoney library</pdf:Producer>", |
| 223 }; |
| 224 for (const char* expectation : moreExpectations) { |
| 225 if (!contains(data->bytes(), data->size(), expectation)) { |
| 226 ERRORF(r, "PDFA expectation missing: '%s'.", expectation); |
| 227 } |
| 228 } |
| 229 } |
| OLD | NEW |