OLD | NEW |
1 // Copyright 2015 PDFium Authors. All rights reserved. | 1 // Copyright 2015 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "public/fpdf_text.h" | 5 #include "public/fpdf_text.h" |
6 #include "public/fpdfview.h" | 6 #include "public/fpdfview.h" |
7 #include "testing/embedder_test.h" | 7 #include "testing/embedder_test.h" |
8 #include "testing/test_support.h" | 8 #include "testing/test_support.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 } | 137 } |
138 | 138 |
139 TEST_F(FPDFTextEmbeddertest, TextSearch) { | 139 TEST_F(FPDFTextEmbeddertest, TextSearch) { |
140 EXPECT_TRUE(OpenDocument("hello_world.pdf")); | 140 EXPECT_TRUE(OpenDocument("hello_world.pdf")); |
141 FPDF_PAGE page = LoadPage(0); | 141 FPDF_PAGE page = LoadPage(0); |
142 EXPECT_NE(nullptr, page); | 142 EXPECT_NE(nullptr, page); |
143 | 143 |
144 FPDF_TEXTPAGE textpage = FPDFText_LoadPage(page); | 144 FPDF_TEXTPAGE textpage = FPDFText_LoadPage(page); |
145 EXPECT_NE(nullptr, textpage); | 145 EXPECT_NE(nullptr, textpage); |
146 | 146 |
147 FPDF_WIDESTRING nope = GetFPDFWideString(L"nope"); | 147 std::unique_ptr<unsigned short, pdfium::FreeDeleter> nope = |
148 FPDF_WIDESTRING world = GetFPDFWideString(L"world"); | 148 GetFPDFWideString(L"nope"); |
149 FPDF_WIDESTRING world_caps = GetFPDFWideString(L"WORLD"); | 149 std::unique_ptr<unsigned short, pdfium::FreeDeleter> world = |
150 FPDF_WIDESTRING world_substr = GetFPDFWideString(L"orld"); | 150 GetFPDFWideString(L"world"); |
| 151 std::unique_ptr<unsigned short, pdfium::FreeDeleter> world_caps = |
| 152 GetFPDFWideString(L"WORLD"); |
| 153 std::unique_ptr<unsigned short, pdfium::FreeDeleter> world_substr = |
| 154 GetFPDFWideString(L"orld"); |
151 | 155 |
152 // No occurences of "nope" in test page. | 156 // No occurences of "nope" in test page. |
153 FPDF_SCHHANDLE search = FPDFText_FindStart(textpage, nope, 0, 0); | 157 FPDF_SCHHANDLE search = FPDFText_FindStart(textpage, nope.get(), 0, 0); |
154 EXPECT_NE(nullptr, search); | 158 EXPECT_NE(nullptr, search); |
155 EXPECT_EQ(0, FPDFText_GetSchResultIndex(search)); | 159 EXPECT_EQ(0, FPDFText_GetSchResultIndex(search)); |
156 EXPECT_EQ(0, FPDFText_GetSchCount(search)); | 160 EXPECT_EQ(0, FPDFText_GetSchCount(search)); |
157 | 161 |
158 // Advancing finds nothing. | 162 // Advancing finds nothing. |
159 EXPECT_FALSE(FPDFText_FindNext(search)); | 163 EXPECT_FALSE(FPDFText_FindNext(search)); |
160 EXPECT_EQ(0, FPDFText_GetSchResultIndex(search)); | 164 EXPECT_EQ(0, FPDFText_GetSchResultIndex(search)); |
161 EXPECT_EQ(0, FPDFText_GetSchCount(search)); | 165 EXPECT_EQ(0, FPDFText_GetSchCount(search)); |
162 | 166 |
163 // Retreating finds nothing. | 167 // Retreating finds nothing. |
164 EXPECT_FALSE(FPDFText_FindPrev(search)); | 168 EXPECT_FALSE(FPDFText_FindPrev(search)); |
165 EXPECT_EQ(0, FPDFText_GetSchResultIndex(search)); | 169 EXPECT_EQ(0, FPDFText_GetSchResultIndex(search)); |
166 EXPECT_EQ(0, FPDFText_GetSchCount(search)); | 170 EXPECT_EQ(0, FPDFText_GetSchCount(search)); |
167 FPDFText_FindClose(search); | 171 FPDFText_FindClose(search); |
168 | 172 |
169 // Two occurences of "world" in test page. | 173 // Two occurences of "world" in test page. |
170 search = FPDFText_FindStart(textpage, world, 0, 2); | 174 search = FPDFText_FindStart(textpage, world.get(), 0, 2); |
171 EXPECT_NE(nullptr, search); | 175 EXPECT_NE(nullptr, search); |
172 | 176 |
173 // Remains not found until advanced. | 177 // Remains not found until advanced. |
174 EXPECT_EQ(0, FPDFText_GetSchResultIndex(search)); | 178 EXPECT_EQ(0, FPDFText_GetSchResultIndex(search)); |
175 EXPECT_EQ(0, FPDFText_GetSchCount(search)); | 179 EXPECT_EQ(0, FPDFText_GetSchCount(search)); |
176 | 180 |
177 // First occurence of "world" in this test page. | 181 // First occurence of "world" in this test page. |
178 EXPECT_TRUE(FPDFText_FindNext(search)); | 182 EXPECT_TRUE(FPDFText_FindNext(search)); |
179 EXPECT_EQ(7, FPDFText_GetSchResultIndex(search)); | 183 EXPECT_EQ(7, FPDFText_GetSchResultIndex(search)); |
180 EXPECT_EQ(5, FPDFText_GetSchCount(search)); | 184 EXPECT_EQ(5, FPDFText_GetSchCount(search)); |
(...skipping 13 matching lines...) Expand all Loading... |
194 EXPECT_EQ(7, FPDFText_GetSchResultIndex(search)); | 198 EXPECT_EQ(7, FPDFText_GetSchResultIndex(search)); |
195 EXPECT_EQ(5, FPDFText_GetSchCount(search)); | 199 EXPECT_EQ(5, FPDFText_GetSchCount(search)); |
196 | 200 |
197 // Found position unchanged when fails to retreat. | 201 // Found position unchanged when fails to retreat. |
198 EXPECT_FALSE(FPDFText_FindPrev(search)); | 202 EXPECT_FALSE(FPDFText_FindPrev(search)); |
199 EXPECT_EQ(7, FPDFText_GetSchResultIndex(search)); | 203 EXPECT_EQ(7, FPDFText_GetSchResultIndex(search)); |
200 EXPECT_EQ(5, FPDFText_GetSchCount(search)); | 204 EXPECT_EQ(5, FPDFText_GetSchCount(search)); |
201 FPDFText_FindClose(search); | 205 FPDFText_FindClose(search); |
202 | 206 |
203 // Exact search unaffected by case sensitiity and whole word flags. | 207 // Exact search unaffected by case sensitiity and whole word flags. |
204 search = FPDFText_FindStart(textpage, world, | 208 search = FPDFText_FindStart(textpage, world.get(), |
205 FPDF_MATCHCASE | FPDF_MATCHWHOLEWORD, 0); | 209 FPDF_MATCHCASE | FPDF_MATCHWHOLEWORD, 0); |
206 EXPECT_NE(nullptr, search); | 210 EXPECT_NE(nullptr, search); |
207 EXPECT_TRUE(FPDFText_FindNext(search)); | 211 EXPECT_TRUE(FPDFText_FindNext(search)); |
208 EXPECT_EQ(7, FPDFText_GetSchResultIndex(search)); | 212 EXPECT_EQ(7, FPDFText_GetSchResultIndex(search)); |
209 EXPECT_EQ(5, FPDFText_GetSchCount(search)); | 213 EXPECT_EQ(5, FPDFText_GetSchCount(search)); |
210 FPDFText_FindClose(search); | 214 FPDFText_FindClose(search); |
211 | 215 |
212 // Default is case-insensitive, so matching agaist caps works. | 216 // Default is case-insensitive, so matching agaist caps works. |
213 search = FPDFText_FindStart(textpage, world_caps, 0, 0); | 217 search = FPDFText_FindStart(textpage, world_caps.get(), 0, 0); |
214 EXPECT_NE(nullptr, search); | 218 EXPECT_NE(nullptr, search); |
215 EXPECT_TRUE(FPDFText_FindNext(search)); | 219 EXPECT_TRUE(FPDFText_FindNext(search)); |
216 EXPECT_EQ(7, FPDFText_GetSchResultIndex(search)); | 220 EXPECT_EQ(7, FPDFText_GetSchResultIndex(search)); |
217 EXPECT_EQ(5, FPDFText_GetSchCount(search)); | 221 EXPECT_EQ(5, FPDFText_GetSchCount(search)); |
218 FPDFText_FindClose(search); | 222 FPDFText_FindClose(search); |
219 | 223 |
220 // But can be made case sensitive, in which case this fails. | 224 // But can be made case sensitive, in which case this fails. |
221 search = FPDFText_FindStart(textpage, world_caps, FPDF_MATCHCASE, 0); | 225 search = FPDFText_FindStart(textpage, world_caps.get(), FPDF_MATCHCASE, 0); |
222 EXPECT_FALSE(FPDFText_FindNext(search)); | 226 EXPECT_FALSE(FPDFText_FindNext(search)); |
223 EXPECT_EQ(0, FPDFText_GetSchResultIndex(search)); | 227 EXPECT_EQ(0, FPDFText_GetSchResultIndex(search)); |
224 EXPECT_EQ(0, FPDFText_GetSchCount(search)); | 228 EXPECT_EQ(0, FPDFText_GetSchCount(search)); |
225 FPDFText_FindClose(search); | 229 FPDFText_FindClose(search); |
226 | 230 |
227 // Default is match anywhere within word, so matching substirng works. | 231 // Default is match anywhere within word, so matching substirng works. |
228 search = FPDFText_FindStart(textpage, world_substr, 0, 0); | 232 search = FPDFText_FindStart(textpage, world_substr.get(), 0, 0); |
229 EXPECT_TRUE(FPDFText_FindNext(search)); | 233 EXPECT_TRUE(FPDFText_FindNext(search)); |
230 EXPECT_EQ(8, FPDFText_GetSchResultIndex(search)); | 234 EXPECT_EQ(8, FPDFText_GetSchResultIndex(search)); |
231 EXPECT_EQ(4, FPDFText_GetSchCount(search)); | 235 EXPECT_EQ(4, FPDFText_GetSchCount(search)); |
232 FPDFText_FindClose(search); | 236 FPDFText_FindClose(search); |
233 | 237 |
234 // But can be made to mach word boundaries, in which case this fails. | 238 // But can be made to mach word boundaries, in which case this fails. |
235 search = FPDFText_FindStart(textpage, world_substr, FPDF_MATCHWHOLEWORD, 0); | 239 search = |
| 240 FPDFText_FindStart(textpage, world_substr.get(), FPDF_MATCHWHOLEWORD, 0); |
236 EXPECT_FALSE(FPDFText_FindNext(search)); | 241 EXPECT_FALSE(FPDFText_FindNext(search)); |
237 // TODO(tsepez): investigate strange index/count values in this state. | 242 // TODO(tsepez): investigate strange index/count values in this state. |
238 FPDFText_FindClose(search); | 243 FPDFText_FindClose(search); |
239 | 244 |
240 FPDFText_ClosePage(textpage); | 245 FPDFText_ClosePage(textpage); |
241 UnloadPage(page); | 246 UnloadPage(page); |
242 | |
243 // Alas, the typedef includes the "const". | |
244 free(const_cast<unsigned short*>(nope)); | |
245 free(const_cast<unsigned short*>(world)); | |
246 free(const_cast<unsigned short*>(world_caps)); | |
247 free(const_cast<unsigned short*>(world_substr)); | |
248 } | 247 } |
249 | 248 |
250 // Test that the page has characters despite a bad stream length. | 249 // Test that the page has characters despite a bad stream length. |
251 TEST_F(FPDFTextEmbeddertest, StreamLengthPastEndOfFile) { | 250 TEST_F(FPDFTextEmbeddertest, StreamLengthPastEndOfFile) { |
252 EXPECT_TRUE(OpenDocument("bug_57.pdf")); | 251 EXPECT_TRUE(OpenDocument("bug_57.pdf")); |
253 FPDF_PAGE page = LoadPage(0); | 252 FPDF_PAGE page = LoadPage(0); |
254 EXPECT_NE(nullptr, page); | 253 EXPECT_NE(nullptr, page); |
255 | 254 |
256 FPDF_TEXTPAGE textpage = FPDFText_LoadPage(page); | 255 FPDF_TEXTPAGE textpage = FPDFText_LoadPage(page); |
257 EXPECT_NE(nullptr, textpage); | 256 EXPECT_NE(nullptr, textpage); |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 FPDFLink_GetRect(pagelink, -1, 0, &left, &top, &right, &bottom); | 360 FPDFLink_GetRect(pagelink, -1, 0, &left, &top, &right, &bottom); |
362 EXPECT_EQ(-2.0, left); | 361 EXPECT_EQ(-2.0, left); |
363 EXPECT_EQ(-2.0, right); | 362 EXPECT_EQ(-2.0, right); |
364 EXPECT_EQ(-2.0, bottom); | 363 EXPECT_EQ(-2.0, bottom); |
365 EXPECT_EQ(-2.0, top); | 364 EXPECT_EQ(-2.0, top); |
366 | 365 |
367 FPDFLink_CloseWebLinks(pagelink); | 366 FPDFLink_CloseWebLinks(pagelink); |
368 FPDFText_ClosePage(textpage); | 367 FPDFText_ClosePage(textpage); |
369 UnloadPage(page); | 368 UnloadPage(page); |
370 } | 369 } |
OLD | NEW |