1 /* 2 * Copyright 2015 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 #include "SkDocument.h" 8 #include "SkStream.h" 9 #include "SkData.h" 10 #include "Test.h" 11 12 DEF_TEST(SkPDF_Metadata, r) { 13 REQUIRE_PDF_DOCUMENT(SkPDF_Metadata, r); 14 SkTime::DateTime now; 15 SkTime::GetDateTime(&now); 16 SkDocument::PDFMetadata metadata; 17 metadata.fTitle = "A1"; 18 metadata.fAuthor = "A2"; 19 metadata.fSubject = "A3"; 20 metadata.fKeywords = "A4"; 21 metadata.fCreator = "A5"; 22 metadata.fCreation.fEnabled = true; 23 metadata.fCreation.fDateTime = now; 24 metadata.fModified.fEnabled = true; 25 metadata.fModified.fDateTime = now; 26 27 SkDynamicMemoryWStream pdf; 28 sk_sp<SkDocument> doc = SkDocument::MakePDF(&pdf, SK_ScalarDefaultRasterDPI, 29 metadata, nullptr, false); 30 doc->beginPage(612.0f, 792.0f); 31 doc->close(); 32 sk_sp<SkData> data = pdf.detachAsData(); 33 static const char* expectations[] = { 34 "/Title (A1)", 35 "/Author (A2)", 36 "/Subject (A3)", 37 "/Keywords (A4)", 38 "/Creator (A5)", 39 "/Producer (Skia/PDF ", 40 "/CreationDate (D:", 41 "/ModDate (D:" 42 }; 43 const uint8_t* bytes = data->bytes(); 44 for (const char* expectation : expectations) { 45 size_t len = strlen(expectation); 46 bool found = false; 47 size_t N = 1 + data->size() - len; 48 for (size_t i = 0; i < N; ++i) { 49 if (0 == memcmp(bytes + i, expectation, len)) { 50 found = true; 51 break; 52 } 53 } 54 if (!found) { 55 ERRORF(r, "expectation missing: '%s'.", expectation); 56 } 57 } 58 } 59