diff options
Diffstat (limited to 'chromium/pdf/pdfium/pdfium_engine_unittest.cc')
-rw-r--r-- | chromium/pdf/pdfium/pdfium_engine_unittest.cc | 156 |
1 files changed, 151 insertions, 5 deletions
diff --git a/chromium/pdf/pdfium/pdfium_engine_unittest.cc b/chromium/pdf/pdfium/pdfium_engine_unittest.cc index 4aa29dd8451..978be627972 100644 --- a/chromium/pdf/pdfium/pdfium_engine_unittest.cc +++ b/chromium/pdf/pdfium/pdfium_engine_unittest.cc @@ -4,8 +4,10 @@ #include "pdf/pdfium/pdfium_engine.h" +#include "base/strings/utf_string_conversions.h" #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" +#include "pdf/document_attachment_info.h" #include "pdf/document_layout.h" #include "pdf/document_metadata.h" #include "pdf/pdf_features.h" @@ -185,6 +187,53 @@ TEST_F(PDFiumEngineTest, ApplyDocumentLayoutAvoidsInfiniteLoop) { CompareSize({343, 1463}, engine->ApplyDocumentLayout(options)); } +TEST_F(PDFiumEngineTest, GetDocumentAttachmentInfo) { + NiceMock<MockTestClient> client; + std::unique_ptr<PDFiumEngine> engine = + InitializeEngine(&client, FILE_PATH_LITERAL("embedded_attachments.pdf")); + ASSERT_TRUE(engine); + + const std::vector<DocumentAttachmentInfo>& attachments = + engine->GetDocumentAttachmentInfoList(); + ASSERT_EQ(3u, attachments.size()); + + { + const DocumentAttachmentInfo& attachment = attachments[0]; + EXPECT_EQ("1.txt", base::UTF16ToUTF8(attachment.name)); + EXPECT_EQ(4u, attachment.size_bytes); + EXPECT_EQ("D:20170712214438-07'00'", + base::UTF16ToUTF8(attachment.creation_date)); + EXPECT_EQ("D:20160115091400", base::UTF16ToUTF8(attachment.modified_date)); + } + + { + const DocumentAttachmentInfo& attachment = attachments[1]; + EXPECT_EQ("attached.pdf", base::UTF16ToUTF8(attachment.name)); + EXPECT_EQ(5869u, attachment.size_bytes); + EXPECT_EQ("D:20170712214443-07'00'", + base::UTF16ToUTF8(attachment.creation_date)); + EXPECT_EQ("D:20170712214410", base::UTF16ToUTF8(attachment.modified_date)); + } + + { + // Test attachments with no creation date or last modified date. + const DocumentAttachmentInfo& attachment = attachments[2]; + EXPECT_EQ("附錄.txt", base::UTF16ToUTF8(attachment.name)); + EXPECT_EQ(5u, attachment.size_bytes); + EXPECT_THAT(attachment.creation_date, IsEmpty()); + EXPECT_THAT(attachment.modified_date, IsEmpty()); + } +} + +TEST_F(PDFiumEngineTest, NoDocumentAttachmentInfo) { + NiceMock<MockTestClient> client; + std::unique_ptr<PDFiumEngine> engine = + InitializeEngine(&client, FILE_PATH_LITERAL("hello_world2.pdf")); + ASSERT_TRUE(engine); + + EXPECT_EQ(0u, engine->GetDocumentAttachmentInfoList().size()); +} + TEST_F(PDFiumEngineTest, GetDocumentMetadata) { NiceMock<MockTestClient> client; std::unique_ptr<PDFiumEngine> engine = @@ -229,6 +278,17 @@ TEST_F(PDFiumEngineTest, GetBadPdfVersion) { } // namespace +class TabbingTestClient : public TestClient { + public: + TabbingTestClient() = default; + ~TabbingTestClient() override = default; + TabbingTestClient(const TabbingTestClient&) = delete; + TabbingTestClient& operator=(const TabbingTestClient&) = delete; + + // Mock PDFEngine::Client methods. + MOCK_METHOD1(DocumentFocusChanged, void(bool)); +}; + class PDFiumEngineTabbingTest : public PDFiumTestBase { public: PDFiumEngineTabbingTest() = default; @@ -269,6 +329,10 @@ class PDFiumEngineTabbingTest : public PDFiumTestBase { return engine->link_under_cursor_; } + void ScrollFocusedAnnotationIntoView(PDFiumEngine* engine) { + engine->ScrollFocusedAnnotationIntoView(); + } + protected: base::test::TaskEnvironment task_environment_{ base::test::TaskEnvironment::TimeSource::MOCK_TIME}; @@ -378,13 +442,20 @@ TEST_F(PDFiumEngineTabbingTest, TabbingForwardTest) { * ++ Page 2 * ++++ Annotation */ - TestClient client; + TabbingTestClient client; std::unique_ptr<PDFiumEngine> engine = InitializeEngine( &client, FILE_PATH_LITERAL("annotation_form_fields.pdf")); ASSERT_TRUE(engine); ASSERT_EQ(2, engine->GetNumberOfPages()); + static constexpr bool kExpectedFocusState[] = {true, false}; + { + InSequence sequence; + for (auto focused : kExpectedFocusState) + EXPECT_CALL(client, DocumentFocusChanged(focused)); + } + ASSERT_EQ(PDFiumEngine::FocusElementType::kNone, GetFocusedElementType(engine.get())); EXPECT_EQ(-1, GetLastFocusedPage(engine.get())); @@ -423,13 +494,20 @@ TEST_F(PDFiumEngineTabbingTest, TabbingBackwardTest) { * ++ Page 2 * ++++ Annotation */ - TestClient client; + TabbingTestClient client; std::unique_ptr<PDFiumEngine> engine = InitializeEngine( &client, FILE_PATH_LITERAL("annotation_form_fields.pdf")); ASSERT_TRUE(engine); ASSERT_EQ(2, engine->GetNumberOfPages()); + static constexpr bool kExpectedFocusState[] = {true, false}; + { + InSequence sequence; + for (auto focused : kExpectedFocusState) + EXPECT_CALL(client, DocumentFocusChanged(focused)); + } + ASSERT_EQ(PDFiumEngine::FocusElementType::kNone, GetFocusedElementType(engine.get())); EXPECT_EQ(-1, GetLastFocusedPage(engine.get())); @@ -512,13 +590,20 @@ TEST_F(PDFiumEngineTabbingTest, NoFocusableItemTabbingTest) { * ++ Page 1 * ++ Page 2 */ - TestClient client; + TabbingTestClient client; std::unique_ptr<PDFiumEngine> engine = InitializeEngine(&client, FILE_PATH_LITERAL("hello_world2.pdf")); ASSERT_TRUE(engine); ASSERT_EQ(2, engine->GetNumberOfPages()); + static constexpr bool kExpectedFocusState[] = {true, false, true, false}; + { + InSequence sequence; + for (auto focused : kExpectedFocusState) + EXPECT_CALL(client, DocumentFocusChanged(focused)); + } + ASSERT_EQ(PDFiumEngine::FocusElementType::kNone, GetFocusedElementType(engine.get())); EXPECT_EQ(-1, GetLastFocusedPage(engine.get())); @@ -552,13 +637,20 @@ TEST_F(PDFiumEngineTabbingTest, RestoringDocumentFocusTest) { * ++ Page 2 * ++++ Annotation */ - TestClient client; + TabbingTestClient client; std::unique_ptr<PDFiumEngine> engine = InitializeEngine( &client, FILE_PATH_LITERAL("annotation_form_fields.pdf")); ASSERT_TRUE(engine); ASSERT_EQ(2, engine->GetNumberOfPages()); + static constexpr bool kExpectedFocusState[] = {true, false, true}; + { + InSequence sequence; + for (auto focused : kExpectedFocusState) + EXPECT_CALL(client, DocumentFocusChanged(focused)); + } + EXPECT_EQ(PDFiumEngine::FocusElementType::kNone, GetFocusedElementType(engine.get())); EXPECT_EQ(-1, GetLastFocusedPage(engine.get())); @@ -590,13 +682,20 @@ TEST_F(PDFiumEngineTabbingTest, RestoringAnnotFocusTest) { * ++ Page 2 * ++++ Annotation */ - TestClient client; + TabbingTestClient client; std::unique_ptr<PDFiumEngine> engine = InitializeEngine( &client, FILE_PATH_LITERAL("annotation_form_fields.pdf")); ASSERT_TRUE(engine); ASSERT_EQ(2, engine->GetNumberOfPages()); + static constexpr bool kExpectedFocusState[] = {true, false}; + { + InSequence sequence; + for (auto focused : kExpectedFocusState) + EXPECT_CALL(client, DocumentFocusChanged(focused)); + } + EXPECT_EQ(PDFiumEngine::FocusElementType::kNone, GetFocusedElementType(engine.get())); EXPECT_EQ(-1, GetLastFocusedPage(engine.get())); @@ -773,4 +872,51 @@ TEST_F(PDFiumEngineTabbingTest, MaintainViewportWhenFocusIsUpdated) { EXPECT_EQ(0, GetLastFocusedPage(engine.get())); } +TEST_F(PDFiumEngineTabbingTest, ScrollFocusedAnnotationIntoView) { + StrictMock<ScrollingTestClient> client; + std::unique_ptr<PDFiumEngine> engine = InitializeEngine( + &client, FILE_PATH_LITERAL("annotation_form_fields.pdf")); + ASSERT_TRUE(engine); + ASSERT_EQ(2, engine->GetNumberOfPages()); + engine->PluginSizeUpdated(pp::Size(60, 40)); + + { + InSequence sequence; + static constexpr PP_Point kScrollValues[] = {{510, 478}, {510, 478}}; + + for (const auto& scroll_value : kScrollValues) { + EXPECT_CALL(client, ScrollToY(scroll_value.y, false)) + .WillOnce(Invoke([&engine, &scroll_value]() { + engine->ScrolledToYPosition(scroll_value.y); + })); + EXPECT_CALL(client, ScrollToX(scroll_value.x)) + .WillOnce(Invoke([&engine, &scroll_value]() { + engine->ScrolledToXPosition(scroll_value.x); + })); + } + } + + EXPECT_EQ(PDFiumEngine::FocusElementType::kNone, + GetFocusedElementType(engine.get())); + EXPECT_EQ(-1, GetLastFocusedPage(engine.get())); + + // Tabbing to bring the document into focus. + ASSERT_TRUE(HandleTabEvent(engine.get(), 0)); + EXPECT_EQ(PDFiumEngine::FocusElementType::kDocument, + GetFocusedElementType(engine.get())); + + // Tab to an annotation. + ASSERT_TRUE(HandleTabEvent(engine.get(), 0)); + EXPECT_EQ(PDFiumEngine::FocusElementType::kPage, + GetFocusedElementType(engine.get())); + + // Scroll focused annotation out of viewport. + static constexpr PP_Point kScrollPosition = {242, 746}; + engine->ScrolledToXPosition(kScrollPosition.x); + engine->ScrolledToYPosition(kScrollPosition.y); + + // Scroll the focused annotation into view. + ScrollFocusedAnnotationIntoView(engine.get()); +} + } // namespace chrome_pdf |