43 SkCanvas* canvas = doc->beginPage(100, 100);
72 SkCanvas* canvas = doc->beginPage(100, 100);
79 FILE* file = fopen(path.c_str(),
"r");
102 SkCanvas* canvas = doc->beginPage(100, 100);
109 FILE* file = fopen(path.c_str(),
"r");
121 SkCanvas* canvas = doc->beginPage(100, 100);
143 SkCanvas* canvas = doc->beginPage(64, 64);
144 canvas->
scale(10000.0f, 10000.0f);
147 const char text[] =
"HELLO";
151static bool contains(
const uint8_t*
result,
size_t size,
const char expectation[]) {
152 size_t len = strlen(expectation);
153 size_t N = 1 + size - len;
154 for (
size_t i = 0; i <
N; ++i) {
155 if (0 == memcmp(
result + i, expectation, len)) {
167 pdfMetadata.
fTitle =
"test document";
168 pdfMetadata.
fCreation = {0, 1999, 12, 5, 31, 23, 59, 59};
169 pdfMetadata.
fPDFA =
true;
177 static const char* expectations[] = {
179 "<dc:title><rdf:Alt><rdf:li xml:lang=\"x-default\">test document",
180 "<xmp:CreateDate>1999-12-31T23:59:59+00:00</xmp:CreateDate>",
182 "/CreationDate (D:19991231235959+00'00')>>",
184 for (
const char* expectation : expectations) {
185 if (!
contains(data->bytes(), data->size(), expectation)) {
186 ERRORF(r,
"PDFA expectation missing: '%s'.", expectation);
189 pdfMetadata.
fProducer =
"phoney library";
190 pdfMetadata.
fPDFA =
true;
194 data =
buffer.detachAsData();
196 static const char* moreExpectations[] = {
197 "/Producer (phoney library)",
198 "<pdf:Producer>phoney library</pdf:Producer>",
200 for (
const char* expectation : moreExpectations) {
201 if (!
contains(data->bytes(), data->size(), expectation)) {
202 ERRORF(r,
"PDFA expectation missing: '%s'.", expectation);
211 pdfMetadata.
fTitle =
"πππππ πππππ";
212 pdfMetadata.
fAuthor =
"ABCDE FGHIJ";
213 pdfMetadata.
fSubject =
"αβγδΡ ΢ηθικ";
214 pdfMetadata.
fPDFA =
true;
221 static const char* expectations[] = {
222 (
"<</Title <FEFFD835DCD0D835DCD1D835DCD2D835DCD3D835DCD40020"
223 "D835DCD5D835DCD6D835DCD7D835DCD8D835DCD9>"),
224 "/Author (ABCDE FGHIJ)",
225 "Subject <FEFF03B103B203B303B403B5002003B603B703B803B903BA>",
226 "/ViewerPreferences",
227 "/DisplayDocTitle true",
229 for (
const char* expectation : expectations) {
230 if (!
contains(data->bytes(), data->size(), expectation)) {
231 ERRORF(r,
"PDF expectation missing: '%s'.", expectation);
242#ifdef SK_PDF_TEST_MULTIPAGE
248 for (
int i = 0; i < n; ++i) {
249 doc->beginPage(612, 792)->drawColor(
250 SkColorSetARGB(0xFF, 0x00, (uint8_t)(255.0f * i / (n - 1)), 0x00));
260 b.eraseColor(0x4F9643A0);
266 doc->beginPage(612, 792)->drawImage(
b.asImage(), 0, 0);
static bool contains(const uint8_t *result, size_t size, const char expectation[])
static void test_close(skiatest::Reporter *reporter)
static void test_abort(skiatest::Reporter *reporter)
static void test_file(skiatest::Reporter *reporter)
static void test_abortWithFile(skiatest::Reporter *reporter)
static void test_empty(skiatest::Reporter *reporter)
constexpr SkColor SK_ColorCYAN
constexpr SkColor SK_ColorRED
static constexpr SkColor SkColorSetARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
#define DEF_TEST(name, reporter)
#define REPORTER_ASSERT(r, cond,...)
#define REQUIRE_PDF_DOCUMENT(TEST_NAME, REPORTER)
void allocN32Pixels(int width, int height, bool isOpaque=false)
void translate(SkScalar dx, SkScalar dy)
void drawColor(SkColor color, SkBlendMode mode=SkBlendMode::kSrcOver)
void rotate(SkScalar degrees)
void scale(SkScalar sx, SkScalar sy)
void drawString(const char str[], SkScalar x, SkScalar y, const SkFont &font, const SkPaint &paint)
sk_sp< SkData > detachAsData()
static std::unique_ptr< SkExecutor > MakeFIFOThreadPool(int threads=0, bool allowBorrowing=true)
static SkString Join(const char *rootPath, const char *relativePath)
const char * c_str() const
static const uint8_t buffer[]
SK_API sk_sp< SkDocument > MakeDocument(SkWStream *stream, const Metadata &metadata)
static const char header[]