// Test that the page has characters despite a bad stream length. TEST_F(FPDFTextEmbeddertest, StreamLengthPastEndOfFile) { EXPECT_TRUE(OpenDocument("testing/resources/bug_57.pdf")); FPDF_PAGE page = LoadPage(0); EXPECT_NE(nullptr, page); FPDF_TEXTPAGE textpage = FPDFText_LoadPage(page); EXPECT_NE(nullptr, textpage); EXPECT_EQ(13, FPDFText_CountChars(textpage)); FPDFText_ClosePage(textpage); UnloadPage(page); }
TEST_F(FPDFTextEmbeddertest, ToUnicode) { EXPECT_TRUE(OpenDocument("bug_583.pdf")); FPDF_PAGE page = LoadPage(0); EXPECT_TRUE(page); FPDF_TEXTPAGE textpage = FPDFText_LoadPage(page); EXPECT_TRUE(textpage); ASSERT_EQ(1, FPDFText_CountChars(textpage)); EXPECT_EQ(static_cast<unsigned int>(0), FPDFText_GetUnicode(textpage, 0)); FPDFText_ClosePage(textpage); UnloadPage(page); }
TEST_F(FPDFTextEmbeddertest, GetFontSize) { EXPECT_TRUE(OpenDocument("hello_world.pdf")); FPDF_PAGE page = LoadPage(0); EXPECT_TRUE(page); FPDF_TEXTPAGE textpage = FPDFText_LoadPage(page); EXPECT_TRUE(textpage); const double kExpectedFontsSizes[] = {12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 1, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16}; int count = FPDFText_CountChars(textpage); ASSERT_EQ(FX_ArraySize(kExpectedFontsSizes), static_cast<size_t>(count)); for (int i = 0; i < count; ++i) EXPECT_EQ(kExpectedFontsSizes[i], FPDFText_GetFontSize(textpage, i)) << i; FPDFText_ClosePage(textpage); UnloadPage(page); }
TEST_F(FPDFTextEmbeddertest, Text) { EXPECT_TRUE(OpenDocument("testing/resources/hello_world.pdf")); FPDF_PAGE page = LoadPage(0); EXPECT_NE(nullptr, page); FPDF_TEXTPAGE textpage = FPDFText_LoadPage(page); EXPECT_NE(nullptr, textpage); static const char expected[] = "Hello, world!\r\nGoodbye, world!"; unsigned short fixed_buffer[128]; memset(fixed_buffer, 0xbd, sizeof(fixed_buffer)); // Check includes the terminating NUL that is provided. int num_chars = FPDFText_GetText(textpage, 0, 128, fixed_buffer); ASSERT_GE(num_chars, 0); EXPECT_EQ(sizeof(expected), static_cast<size_t>(num_chars)); EXPECT_TRUE(check_unsigned_shorts(expected, fixed_buffer, sizeof(expected))); // Count does not include the terminating NUL in the string literal. EXPECT_EQ(sizeof(expected) - 1, FPDFText_CountChars(textpage)); for (size_t i = 0; i < sizeof(expected) - 1; ++i) { EXPECT_EQ(static_cast<unsigned int>(expected[i]), FPDFText_GetUnicode(textpage, i)) << " at " << i; } EXPECT_EQ(12.0, FPDFText_GetFontSize(textpage, 0)); EXPECT_EQ(16.0, FPDFText_GetFontSize(textpage, 15)); double left = 0.0; double right = 0.0; double bottom = 0.0; double top = 0.0; FPDFText_GetCharBox(textpage, 4, &left, &right, &bottom, &top); EXPECT_NEAR(41.071, left, 0.001); EXPECT_NEAR(46.243, right, 0.001); EXPECT_NEAR(49.844, bottom, 0.001); EXPECT_NEAR(55.520, top, 0.001); EXPECT_EQ(4, FPDFText_GetCharIndexAtPos(textpage, 42.0, 50.0, 1.0, 1.0)); EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(textpage, 0.0, 0.0, 1.0, 1.0)); EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(textpage, 199.0, 199.0, 1.0, 1.0)); // Test out of range indicies. EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(textpage, 42.0, 10000000.0, 1.0, 1.0)); EXPECT_EQ(-1, FPDFText_GetCharIndexAtPos(textpage, -1.0, 50.0, 1.0, 1.0)); // Count does not include the terminating NUL in the string literal. EXPECT_EQ(2, FPDFText_CountRects(textpage, 0, sizeof(expected) - 1)); left = 0.0; right = 0.0; bottom = 0.0; top = 0.0; FPDFText_GetRect(textpage, 1, &left, &top, &right, &bottom); EXPECT_NEAR(20.847, left, 0.001); EXPECT_NEAR(135.167, right, 0.001); EXPECT_NEAR(96.655, bottom, 0.001); EXPECT_NEAR(116.000, top, 0.001); // Test out of range indicies set outputs to (0.0, 0.0, 0.0, 0.0). left = -1.0; right = -1.0; bottom = -1.0; top = -1.0; FPDFText_GetRect(textpage, -1, &left, &top, &right, &bottom); EXPECT_EQ(0.0, left); EXPECT_EQ(0.0, right); EXPECT_EQ(0.0, bottom); EXPECT_EQ(0.0, top); left = -2.0; right = -2.0; bottom = -2.0; top = -2.0; FPDFText_GetRect(textpage, 2, &left, &top, &right, &bottom); EXPECT_EQ(0.0, left); EXPECT_EQ(0.0, right); EXPECT_EQ(0.0, bottom); EXPECT_EQ(0.0, top); EXPECT_EQ(9, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0, 0, 0)); // Extract starting at character 4 as above. memset(fixed_buffer, 0xbd, sizeof(fixed_buffer)); EXPECT_EQ(1, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0, fixed_buffer, 1)); EXPECT_TRUE(check_unsigned_shorts(expected + 4, fixed_buffer, 1)); EXPECT_EQ(0xbdbd, fixed_buffer[1]); memset(fixed_buffer, 0xbd, sizeof(fixed_buffer)); EXPECT_EQ(9, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0, fixed_buffer, 9)); EXPECT_TRUE(check_unsigned_shorts(expected + 4, fixed_buffer, 9)); EXPECT_EQ(0xbdbd, fixed_buffer[9]); memset(fixed_buffer, 0xbd, sizeof(fixed_buffer)); EXPECT_EQ(10, FPDFText_GetBoundedText(textpage, 41.0, 56.0, 82.0, 48.0, fixed_buffer, 128)); EXPECT_TRUE(check_unsigned_shorts(expected + 4, fixed_buffer, 9)); EXPECT_EQ(0u, fixed_buffer[9]); EXPECT_EQ(0xbdbd, fixed_buffer[10]); FPDFText_ClosePage(textpage); UnloadPage(page); }