| 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 |