TEST_F(FPDFDocEmbedderTest, DestGetLocationInPage) { EXPECT_TRUE(OpenDocument("named_dests.pdf")); FPDF_DEST dest = FPDF_GetNamedDestByName(document(), "First"); EXPECT_TRUE(dest); FPDF_BOOL hasX = 0; FPDF_BOOL hasY = 0; FPDF_BOOL hasZoom = 0; FS_FLOAT x = -1.0f; FS_FLOAT y = -1.0f; FS_FLOAT zoom = -1.0f; // NULL argument case EXPECT_FALSE(FPDFDest_GetLocationInPage(nullptr, &hasX, &hasY, &hasZoom, &x, &y, &zoom)); // Actual argument case. EXPECT_TRUE( FPDFDest_GetLocationInPage(dest, &hasX, &hasY, &hasZoom, &x, &y, &zoom)); EXPECT_TRUE(hasX); EXPECT_TRUE(hasY); EXPECT_TRUE(hasZoom); EXPECT_EQ(0, x); EXPECT_EQ(0, y); EXPECT_EQ(1, zoom); }
TEST_F(PDFDocTest, GetLocationInPage) { auto array = pdfium::MakeUnique<CPDF_Array>(); array->AddNew<CPDF_Number>(0); // Page Index. array->AddNew<CPDF_Name>("XYZ"); array->AddNew<CPDF_Number>(4); // X array->AddNew<CPDF_Number>(5); // Y array->AddNew<CPDF_Number>(6); // Zoom. FPDF_BOOL hasX; FPDF_BOOL hasY; FPDF_BOOL hasZoom; FS_FLOAT x; FS_FLOAT y; FS_FLOAT zoom; EXPECT_TRUE(FPDFDest_GetLocationInPage(array.get(), &hasX, &hasY, &hasZoom, &x, &y, &zoom)); EXPECT_TRUE(hasX); EXPECT_TRUE(hasY); EXPECT_TRUE(hasZoom); EXPECT_EQ(4, x); EXPECT_EQ(5, y); EXPECT_EQ(6, zoom); array->SetNewAt<CPDF_Null>(2); array->SetNewAt<CPDF_Null>(3); array->SetNewAt<CPDF_Null>(4); EXPECT_TRUE(FPDFDest_GetLocationInPage(array.get(), &hasX, &hasY, &hasZoom, &x, &y, &zoom)); EXPECT_FALSE(hasX); EXPECT_FALSE(hasY); EXPECT_FALSE(hasZoom); array = pdfium::MakeUnique<CPDF_Array>(); EXPECT_FALSE(FPDFDest_GetLocationInPage(array.get(), &hasX, &hasY, &hasZoom, &x, &y, &zoom)); }
TEST_F(FPDFDocEmbedderTest, BUG_821454) { EXPECT_TRUE(OpenDocument("bug_821454.pdf")); FPDF_PAGE page = LoadPage(0); ASSERT_TRUE(page); // Cover some NULL arg cases while we're at it. EXPECT_FALSE(FPDFLink_GetLinkAtPoint(nullptr, 150, 360)); EXPECT_EQ(-1, FPDFLink_GetLinkZOrderAtPoint(nullptr, 150, 360)); FPDF_LINK link1 = FPDFLink_GetLinkAtPoint(page, 150, 360); ASSERT_TRUE(link1); FPDF_LINK link2 = FPDFLink_GetLinkAtPoint(page, 150, 420); ASSERT_TRUE(link2); EXPECT_EQ(0, FPDFLink_GetLinkZOrderAtPoint(page, 150, 360)); EXPECT_EQ(1, FPDFLink_GetLinkZOrderAtPoint(page, 150, 420)); FPDF_DEST dest1 = FPDFLink_GetDest(document(), link1); ASSERT_TRUE(dest1); FPDF_DEST dest2 = FPDFLink_GetDest(document(), link2); ASSERT_TRUE(dest2); EXPECT_EQ(0, FPDFDest_GetDestPageIndex(document(), dest1)); EXPECT_EQ(0, FPDFDest_GetDestPageIndex(document(), dest2)); { FPDF_BOOL has_x_coord; FPDF_BOOL has_y_coord; FPDF_BOOL has_zoom; FS_FLOAT x; FS_FLOAT y; FS_FLOAT zoom; FPDF_BOOL success = FPDFDest_GetLocationInPage( dest1, &has_x_coord, &has_y_coord, &has_zoom, &x, &y, &zoom); ASSERT_TRUE(success); EXPECT_TRUE(has_x_coord); EXPECT_TRUE(has_y_coord); EXPECT_FALSE(has_zoom); EXPECT_FLOAT_EQ(100.0f, x); EXPECT_FLOAT_EQ(200.0f, y); } { FPDF_BOOL has_x_coord; FPDF_BOOL has_y_coord; FPDF_BOOL has_zoom; FS_FLOAT x; FS_FLOAT y; FS_FLOAT zoom; FPDF_BOOL success = FPDFDest_GetLocationInPage( dest2, &has_x_coord, &has_y_coord, &has_zoom, &x, &y, &zoom); ASSERT_TRUE(success); EXPECT_TRUE(has_x_coord); EXPECT_TRUE(has_y_coord); EXPECT_FALSE(has_zoom); EXPECT_FLOAT_EQ(150.0f, x); EXPECT_FLOAT_EQ(250.0f, y); } UnloadPage(page); }