// Copyright 2018 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "public/fpdf_transformpage.h" #include "testing/embedder_test.h" class FPDFTransformEmbedderTest : public EmbedderTest {}; TEST_F(FPDFTransformEmbedderTest, GetBoundingBoxes) { ASSERT_TRUE(OpenDocument("cropped_text.pdf")); ASSERT_EQ(4, FPDF_GetPageCount(document())); { FPDF_PAGE page = LoadPage(1); ASSERT_TRUE(page); FS_RECTF mediabox; EXPECT_TRUE(FPDFPage_GetMediaBox(page, &mediabox.left, &mediabox.bottom, &mediabox.right, &mediabox.top)); EXPECT_EQ(-50, mediabox.left); EXPECT_EQ(-50, mediabox.bottom); EXPECT_EQ(200, mediabox.right); EXPECT_EQ(200, mediabox.top); FS_RECTF cropbox; EXPECT_TRUE(FPDFPage_GetCropBox(page, &cropbox.left, &cropbox.bottom, &cropbox.right, &cropbox.top)); EXPECT_EQ(50, cropbox.left); EXPECT_EQ(50, cropbox.bottom); EXPECT_EQ(150, cropbox.right); EXPECT_EQ(150, cropbox.top); FS_RECTF bleedbox; EXPECT_TRUE(FPDFPage_GetBleedBox(page, &bleedbox.left, &bleedbox.bottom, &bleedbox.right, &bleedbox.top)); EXPECT_EQ(0, bleedbox.left); EXPECT_EQ(10, bleedbox.bottom); EXPECT_EQ(150, bleedbox.right); EXPECT_EQ(145, bleedbox.top); FS_RECTF trimbox; EXPECT_TRUE(FPDFPage_GetTrimBox(page, &trimbox.left, &trimbox.bottom, &trimbox.right, &trimbox.top)); EXPECT_EQ(25, trimbox.left); EXPECT_EQ(30, trimbox.bottom); EXPECT_EQ(140, trimbox.right); EXPECT_EQ(145, trimbox.top); FS_RECTF artbox; EXPECT_TRUE(FPDFPage_GetArtBox(page, &artbox.left, &artbox.bottom, &artbox.right, &artbox.top)); EXPECT_EQ(50, artbox.left); EXPECT_EQ(60, artbox.bottom); EXPECT_EQ(135, artbox.right); EXPECT_EQ(140, artbox.top); UnloadPage(page); } { FPDF_PAGE page = LoadPage(3); ASSERT_TRUE(page); FS_RECTF mediabox; EXPECT_TRUE(FPDFPage_GetMediaBox(page, &mediabox.left, &mediabox.bottom, &mediabox.right, &mediabox.top)); EXPECT_EQ(0, mediabox.left); EXPECT_EQ(0, mediabox.bottom); EXPECT_EQ(200, mediabox.right); EXPECT_EQ(200, mediabox.top); FS_RECTF cropbox; EXPECT_TRUE(FPDFPage_GetCropBox(page, &cropbox.left, &cropbox.bottom, &cropbox.right, &cropbox.top)); EXPECT_EQ(150, cropbox.left); EXPECT_EQ(150, cropbox.bottom); EXPECT_EQ(60, cropbox.right); EXPECT_EQ(60, cropbox.top); EXPECT_FALSE(FPDFPage_GetCropBox(page, nullptr, &cropbox.bottom, &cropbox.right, &cropbox.top)); EXPECT_FALSE(FPDFPage_GetCropBox(page, &cropbox.left, nullptr, &cropbox.right, &cropbox.top)); EXPECT_FALSE(FPDFPage_GetCropBox(page, &cropbox.left, &cropbox.bottom, nullptr, &cropbox.top)); EXPECT_FALSE(FPDFPage_GetCropBox(page, &cropbox.left, &cropbox.bottom, &cropbox.right, nullptr)); EXPECT_FALSE(FPDFPage_GetCropBox(page, nullptr, nullptr, nullptr, nullptr)); FS_RECTF bleedbox; EXPECT_TRUE(FPDFPage_GetBleedBox(page, &bleedbox.left, &bleedbox.bottom, &bleedbox.right, &bleedbox.top)); EXPECT_EQ(160, bleedbox.left); EXPECT_EQ(165, bleedbox.bottom); EXPECT_EQ(0, bleedbox.right); EXPECT_EQ(10, bleedbox.top); FS_RECTF trimbox; EXPECT_TRUE(FPDFPage_GetTrimBox(page, &trimbox.left, &trimbox.bottom, &trimbox.right, &trimbox.top)); EXPECT_EQ(155, trimbox.left); EXPECT_EQ(165, trimbox.bottom); EXPECT_EQ(25, trimbox.right); EXPECT_EQ(30, trimbox.top); FS_RECTF artbox; EXPECT_TRUE(FPDFPage_GetArtBox(page, &artbox.left, &artbox.bottom, &artbox.right, &artbox.top)); EXPECT_EQ(140, artbox.left); EXPECT_EQ(145, artbox.bottom); EXPECT_EQ(65, artbox.right); EXPECT_EQ(70, artbox.top); UnloadPage(page); } } TEST_F(FPDFTransformEmbedderTest, NoCropBox) { ASSERT_TRUE(OpenDocument("hello_world.pdf")); ASSERT_EQ(1, FPDF_GetPageCount(document())); FPDF_PAGE page = LoadPage(0); ASSERT_TRUE(page); FS_RECTF cropbox = {-1.0f, 0.0f, 3.0f, -2.0f}; EXPECT_FALSE(FPDFPage_GetCropBox(page, &cropbox.left, &cropbox.bottom, &cropbox.right, &cropbox.top)); EXPECT_EQ(-1.0f, cropbox.left); EXPECT_EQ(-2.0f, cropbox.bottom); EXPECT_EQ(3.0f, cropbox.right); EXPECT_EQ(0.0f, cropbox.top); UnloadPage(page); } TEST_F(FPDFTransformEmbedderTest, NoBleedBox) { ASSERT_TRUE(OpenDocument("hello_world.pdf")); ASSERT_EQ(1, FPDF_GetPageCount(document())); FPDF_PAGE page = LoadPage(0); ASSERT_TRUE(page); FS_RECTF bleedbox = {-1.0f, 10.f, 3.0f, -1.0f}; EXPECT_FALSE(FPDFPage_GetBleedBox(page, &bleedbox.left, &bleedbox.bottom, &bleedbox.right, &bleedbox.top)); EXPECT_EQ(-1.0f, bleedbox.left); EXPECT_EQ(-1.0f, bleedbox.bottom); EXPECT_EQ(3.0f, bleedbox.right); EXPECT_EQ(10.0f, bleedbox.top); UnloadPage(page); } TEST_F(FPDFTransformEmbedderTest, NoTrimBox) { ASSERT_TRUE(OpenDocument("hello_world.pdf")); ASSERT_EQ(1, FPDF_GetPageCount(document())); FPDF_PAGE page = LoadPage(0); ASSERT_TRUE(page); FS_RECTF trimbox = {-11.0f, 0.0f, 3.0f, -10.0f}; EXPECT_FALSE(FPDFPage_GetTrimBox(page, &trimbox.left, &trimbox.bottom, &trimbox.right, &trimbox.top)); EXPECT_EQ(-11.0f, trimbox.left); EXPECT_EQ(-10.0f, trimbox.bottom); EXPECT_EQ(3.0f, trimbox.right); EXPECT_EQ(0.0f, trimbox.top); UnloadPage(page); } TEST_F(FPDFTransformEmbedderTest, NoArtBox) { ASSERT_TRUE(OpenDocument("hello_world.pdf")); ASSERT_EQ(1, FPDF_GetPageCount(document())); FPDF_PAGE page = LoadPage(0); ASSERT_TRUE(page); FS_RECTF artbox = {-1.0f, 0.0f, 3.0f, -1.0f}; EXPECT_FALSE(FPDFPage_GetArtBox(page, &artbox.left, &artbox.bottom, &artbox.right, &artbox.top)); EXPECT_EQ(-1.0f, artbox.left); EXPECT_EQ(-1.0f, artbox.bottom); EXPECT_EQ(3.0f, artbox.right); EXPECT_EQ(0.0f, artbox.top); UnloadPage(page); } TEST_F(FPDFTransformEmbedderTest, ClipPath) { ASSERT_TRUE(OpenDocument("hello_world.pdf")); FPDF_PAGE page = LoadPage(0); ASSERT_TRUE(page); FPDF_CLIPPATH clip = FPDF_CreateClipPath(10.0f, 10.0f, 90.0f, 90.0f); EXPECT_TRUE(clip); // NULL arg call is a no-op. FPDFPage_InsertClipPath(nullptr, clip); // Do actual work. FPDFPage_InsertClipPath(page, clip); // TODO(tsepez): test how inserting path affects page rendering. FPDF_DestroyClipPath(clip); UnloadPage(page); }