1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2019 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker
5*3ac0a46fSAndroid Build Coastguard Worker #include "public/cpp/fpdf_scopers.h"
6*3ac0a46fSAndroid Build Coastguard Worker #include "public/fpdf_searchex.h"
7*3ac0a46fSAndroid Build Coastguard Worker #include "testing/embedder_test.h"
8*3ac0a46fSAndroid Build Coastguard Worker
9*3ac0a46fSAndroid Build Coastguard Worker class FPDFSearchExEmbedderTest : public EmbedderTest {};
10*3ac0a46fSAndroid Build Coastguard Worker
TEST_F(FPDFSearchExEmbedderTest,GetCharIndexFromTextIndex)11*3ac0a46fSAndroid Build Coastguard Worker TEST_F(FPDFSearchExEmbedderTest, GetCharIndexFromTextIndex) {
12*3ac0a46fSAndroid Build Coastguard Worker ASSERT_TRUE(OpenDocument("hello_world.pdf"));
13*3ac0a46fSAndroid Build Coastguard Worker FPDF_PAGE page = LoadPage(0);
14*3ac0a46fSAndroid Build Coastguard Worker ASSERT_TRUE(page);
15*3ac0a46fSAndroid Build Coastguard Worker
16*3ac0a46fSAndroid Build Coastguard Worker {
17*3ac0a46fSAndroid Build Coastguard Worker ScopedFPDFTextPage textpage(FPDFText_LoadPage(page));
18*3ac0a46fSAndroid Build Coastguard Worker ASSERT_TRUE(textpage);
19*3ac0a46fSAndroid Build Coastguard Worker
20*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-2, FPDFText_GetCharIndexFromTextIndex(textpage.get(), -2));
21*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetCharIndexFromTextIndex(textpage.get(), -1));
22*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(0, FPDFText_GetCharIndexFromTextIndex(textpage.get(), 0));
23*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(1, FPDFText_GetCharIndexFromTextIndex(textpage.get(), 1));
24*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(2, FPDFText_GetCharIndexFromTextIndex(textpage.get(), 2));
25*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(5, FPDFText_GetCharIndexFromTextIndex(textpage.get(), 5));
26*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(10, FPDFText_GetCharIndexFromTextIndex(textpage.get(), 10));
27*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(29, FPDFText_GetCharIndexFromTextIndex(textpage.get(), 29));
28*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetCharIndexFromTextIndex(textpage.get(), 30));
29*3ac0a46fSAndroid Build Coastguard Worker }
30*3ac0a46fSAndroid Build Coastguard Worker
31*3ac0a46fSAndroid Build Coastguard Worker UnloadPage(page);
32*3ac0a46fSAndroid Build Coastguard Worker }
33*3ac0a46fSAndroid Build Coastguard Worker
TEST_F(FPDFSearchExEmbedderTest,GetCharIndexFromTextIndexWithNonPrintableChar)34*3ac0a46fSAndroid Build Coastguard Worker TEST_F(FPDFSearchExEmbedderTest,
35*3ac0a46fSAndroid Build Coastguard Worker GetCharIndexFromTextIndexWithNonPrintableChar) {
36*3ac0a46fSAndroid Build Coastguard Worker ASSERT_TRUE(OpenDocument("bug_1139.pdf"));
37*3ac0a46fSAndroid Build Coastguard Worker FPDF_PAGE page = LoadPage(0);
38*3ac0a46fSAndroid Build Coastguard Worker ASSERT_TRUE(page);
39*3ac0a46fSAndroid Build Coastguard Worker
40*3ac0a46fSAndroid Build Coastguard Worker {
41*3ac0a46fSAndroid Build Coastguard Worker ScopedFPDFTextPage textpage(FPDFText_LoadPage(page));
42*3ac0a46fSAndroid Build Coastguard Worker ASSERT_TRUE(textpage);
43*3ac0a46fSAndroid Build Coastguard Worker
44*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetCharIndexFromTextIndex(textpage.get(), -2));
45*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(0, FPDFText_GetCharIndexFromTextIndex(textpage.get(), -1));
46*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(1, FPDFText_GetCharIndexFromTextIndex(textpage.get(), 0));
47*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(2, FPDFText_GetCharIndexFromTextIndex(textpage.get(), 1));
48*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(3, FPDFText_GetCharIndexFromTextIndex(textpage.get(), 2));
49*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(6, FPDFText_GetCharIndexFromTextIndex(textpage.get(), 5));
50*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(11, FPDFText_GetCharIndexFromTextIndex(textpage.get(), 10));
51*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(30, FPDFText_GetCharIndexFromTextIndex(textpage.get(), 29));
52*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetCharIndexFromTextIndex(textpage.get(), 30));
53*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetCharIndexFromTextIndex(textpage.get(), 31));
54*3ac0a46fSAndroid Build Coastguard Worker }
55*3ac0a46fSAndroid Build Coastguard Worker
56*3ac0a46fSAndroid Build Coastguard Worker UnloadPage(page);
57*3ac0a46fSAndroid Build Coastguard Worker }
58*3ac0a46fSAndroid Build Coastguard Worker
TEST_F(FPDFSearchExEmbedderTest,GetCharIndexFromTextIndexInvalid)59*3ac0a46fSAndroid Build Coastguard Worker TEST_F(FPDFSearchExEmbedderTest, GetCharIndexFromTextIndexInvalid) {
60*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetCharIndexFromTextIndex(nullptr, -2));
61*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetCharIndexFromTextIndex(nullptr, -1));
62*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetCharIndexFromTextIndex(nullptr, 0));
63*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetCharIndexFromTextIndex(nullptr, 1));
64*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetCharIndexFromTextIndex(nullptr, 2));
65*3ac0a46fSAndroid Build Coastguard Worker }
66*3ac0a46fSAndroid Build Coastguard Worker
TEST_F(FPDFSearchExEmbedderTest,GetTextIndexFromCharIndex)67*3ac0a46fSAndroid Build Coastguard Worker TEST_F(FPDFSearchExEmbedderTest, GetTextIndexFromCharIndex) {
68*3ac0a46fSAndroid Build Coastguard Worker ASSERT_TRUE(OpenDocument("hello_world.pdf"));
69*3ac0a46fSAndroid Build Coastguard Worker FPDF_PAGE page = LoadPage(0);
70*3ac0a46fSAndroid Build Coastguard Worker ASSERT_TRUE(page);
71*3ac0a46fSAndroid Build Coastguard Worker
72*3ac0a46fSAndroid Build Coastguard Worker {
73*3ac0a46fSAndroid Build Coastguard Worker ScopedFPDFTextPage textpage(FPDFText_LoadPage(page));
74*3ac0a46fSAndroid Build Coastguard Worker ASSERT_TRUE(textpage);
75*3ac0a46fSAndroid Build Coastguard Worker
76*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetTextIndexFromCharIndex(textpage.get(), -2));
77*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetTextIndexFromCharIndex(textpage.get(), -1));
78*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(0, FPDFText_GetTextIndexFromCharIndex(textpage.get(), 0));
79*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(1, FPDFText_GetTextIndexFromCharIndex(textpage.get(), 1));
80*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(2, FPDFText_GetTextIndexFromCharIndex(textpage.get(), 2));
81*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(5, FPDFText_GetTextIndexFromCharIndex(textpage.get(), 5));
82*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(10, FPDFText_GetTextIndexFromCharIndex(textpage.get(), 10));
83*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(29, FPDFText_GetTextIndexFromCharIndex(textpage.get(), 29));
84*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetTextIndexFromCharIndex(textpage.get(), 30));
85*3ac0a46fSAndroid Build Coastguard Worker }
86*3ac0a46fSAndroid Build Coastguard Worker
87*3ac0a46fSAndroid Build Coastguard Worker UnloadPage(page);
88*3ac0a46fSAndroid Build Coastguard Worker }
89*3ac0a46fSAndroid Build Coastguard Worker
TEST_F(FPDFSearchExEmbedderTest,GetTextIndexFromCharIndexWithNonPrintableChar)90*3ac0a46fSAndroid Build Coastguard Worker TEST_F(FPDFSearchExEmbedderTest,
91*3ac0a46fSAndroid Build Coastguard Worker GetTextIndexFromCharIndexWithNonPrintableChar) {
92*3ac0a46fSAndroid Build Coastguard Worker ASSERT_TRUE(OpenDocument("bug_1139.pdf"));
93*3ac0a46fSAndroid Build Coastguard Worker FPDF_PAGE page = LoadPage(0);
94*3ac0a46fSAndroid Build Coastguard Worker ASSERT_TRUE(page);
95*3ac0a46fSAndroid Build Coastguard Worker
96*3ac0a46fSAndroid Build Coastguard Worker {
97*3ac0a46fSAndroid Build Coastguard Worker ScopedFPDFTextPage textpage(FPDFText_LoadPage(page));
98*3ac0a46fSAndroid Build Coastguard Worker ASSERT_TRUE(textpage);
99*3ac0a46fSAndroid Build Coastguard Worker
100*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetTextIndexFromCharIndex(textpage.get(), -2));
101*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetTextIndexFromCharIndex(textpage.get(), -1));
102*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetTextIndexFromCharIndex(textpage.get(), 0));
103*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(0, FPDFText_GetTextIndexFromCharIndex(textpage.get(), 1));
104*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(1, FPDFText_GetTextIndexFromCharIndex(textpage.get(), 2));
105*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(4, FPDFText_GetTextIndexFromCharIndex(textpage.get(), 5));
106*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(9, FPDFText_GetTextIndexFromCharIndex(textpage.get(), 10));
107*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(28, FPDFText_GetTextIndexFromCharIndex(textpage.get(), 29));
108*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(29, FPDFText_GetTextIndexFromCharIndex(textpage.get(), 30));
109*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetTextIndexFromCharIndex(textpage.get(), 31));
110*3ac0a46fSAndroid Build Coastguard Worker }
111*3ac0a46fSAndroid Build Coastguard Worker
112*3ac0a46fSAndroid Build Coastguard Worker UnloadPage(page);
113*3ac0a46fSAndroid Build Coastguard Worker }
114*3ac0a46fSAndroid Build Coastguard Worker
TEST_F(FPDFSearchExEmbedderTest,GetTextIndexFromCharIndexInvalid)115*3ac0a46fSAndroid Build Coastguard Worker TEST_F(FPDFSearchExEmbedderTest, GetTextIndexFromCharIndexInvalid) {
116*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetTextIndexFromCharIndex(nullptr, -2));
117*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetTextIndexFromCharIndex(nullptr, -1));
118*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetTextIndexFromCharIndex(nullptr, 0));
119*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetTextIndexFromCharIndex(nullptr, 1));
120*3ac0a46fSAndroid Build Coastguard Worker EXPECT_EQ(-1, FPDFText_GetTextIndexFromCharIndex(nullptr, 2));
121*3ac0a46fSAndroid Build Coastguard Worker }
122