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