summaryrefslogtreecommitdiff
path: root/fpdfsdk/fpdf_text_embeddertest.cpp
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2018-08-07 21:45:34 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-08-07 21:45:34 +0000
commit3bee9c60f013b8b7e99c39ee35699d132b330334 (patch)
treefc00b16bf5c6b84af3c4683e43a2652b80db173b /fpdfsdk/fpdf_text_embeddertest.cpp
parente1c2f6d7fe7a50280161832799550a3ee8f98088 (diff)
downloadpdfium-3bee9c60f013b8b7e99c39ee35699d132b330334.tar.xz
Add FPDFTextObj_GetText() API
Generalize CPDF_TextPage::GetTextByRect(), so that it's possible to get the text from a text page using a predicate, that way we can easily get the text that belongs to single text object as well. Change-Id: Ia457af0f41184694dc1481709be72b35685bce7f Reviewed-on: https://pdfium-review.googlesource.com/39530 Reviewed-by: Henrique Nakashima <hnakashima@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
Diffstat (limited to 'fpdfsdk/fpdf_text_embeddertest.cpp')
-rw-r--r--fpdfsdk/fpdf_text_embeddertest.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/fpdfsdk/fpdf_text_embeddertest.cpp b/fpdfsdk/fpdf_text_embeddertest.cpp
index eafe1a2d11..bf064d672a 100644
--- a/fpdfsdk/fpdf_text_embeddertest.cpp
+++ b/fpdfsdk/fpdf_text_embeddertest.cpp
@@ -5,6 +5,7 @@
#include <algorithm>
#include <memory>
#include <utility>
+#include <vector>
#include "core/fxcrt/fx_memory.h"
#include "public/cpp/fpdf_scopers.h"
@@ -762,6 +763,50 @@ TEST_F(FPDFTextEmbeddertest, CountRects) {
UnloadPage(page);
}
+TEST_F(FPDFTextEmbeddertest, GetText) {
+ ASSERT_TRUE(OpenDocument("hello_world.pdf"));
+ FPDF_PAGE page = LoadPage(0);
+ ASSERT_TRUE(page);
+
+ FPDF_TEXTPAGE text_page = FPDFText_LoadPage(page);
+ ASSERT_TRUE(text_page);
+
+ EXPECT_EQ(2, FPDFPage_CountObjects(page));
+ FPDF_PAGEOBJECT text_object = FPDFPage_GetObject(page, 0);
+ ASSERT_TRUE(text_object);
+
+ // Positive testing.
+ constexpr char kHelloText[] = "Hello, world!";
+ // Return value includes the terminating NUL that is provided.
+ constexpr unsigned long kHelloUTF16Size = FX_ArraySize(kHelloText) * 2;
+ constexpr wchar_t kHelloWideText[] = L"Hello, world!";
+ unsigned long size = FPDFTextObj_GetText(text_object, text_page, nullptr, 0);
+ ASSERT_EQ(kHelloUTF16Size, size);
+
+ std::vector<unsigned short> buffer(size);
+ ASSERT_EQ(size,
+ FPDFTextObj_GetText(text_object, text_page, buffer.data(), size));
+ ASSERT_EQ(kHelloWideText, GetPlatformWString(buffer.data()));
+
+ // Negative testing.
+ ASSERT_EQ(0U, FPDFTextObj_GetText(nullptr, text_page, nullptr, 0));
+ ASSERT_EQ(0U, FPDFTextObj_GetText(text_object, nullptr, nullptr, 0));
+ ASSERT_EQ(0U, FPDFTextObj_GetText(nullptr, nullptr, nullptr, 0));
+
+ // Buffer is too small, ensure it's not modified.
+ buffer.resize(2);
+ buffer[0] = 'x';
+ buffer[1] = '\0';
+ size =
+ FPDFTextObj_GetText(text_object, text_page, buffer.data(), buffer.size());
+ ASSERT_EQ(kHelloUTF16Size, size);
+ ASSERT_EQ('x', buffer[0]);
+ ASSERT_EQ('\0', buffer[1]);
+
+ FPDFText_ClosePage(text_page);
+ UnloadPage(page);
+}
+
TEST_F(FPDFTextEmbeddertest, CroppedText) {
static constexpr int kPageCount = 4;
static constexpr FS_RECTF kBoxes[kPageCount] = {