| // Copyright 2015 PDFium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "public/fpdf_formfill.h" | |
| #include "testing/embedder_test.h" | |
| #include "testing/embedder_test_mock_delegate.h" | |
| #include "testing/embedder_test_timer_handling_delegate.h" | |
| #include "testing/gmock/include/gmock/gmock.h" | |
| #include "testing/gtest/include/gtest/gtest.h" | |
| using testing::_; | |
| using testing::Return; | |
| class FPDFFormFillEmbeddertest : public EmbedderTest {}; | |
| TEST_F(FPDFFormFillEmbeddertest, FirstTest) { | |
| EmbedderTestMockDelegate mock; | |
| EXPECT_CALL(mock, Alert(_, _, _, _)).Times(0); | |
| EXPECT_CALL(mock, UnsupportedHandler(_)).Times(0); | |
| EXPECT_CALL(mock, SetTimer(_, _)).Times(0); | |
| EXPECT_CALL(mock, KillTimer(_)).Times(0); | |
| SetDelegate(&mock); | |
| EXPECT_TRUE(OpenDocument("hello_world.pdf")); | |
| FPDF_PAGE page = LoadPage(0); | |
| EXPECT_TRUE(page); | |
| UnloadPage(page); | |
| } | |
| TEST_F(FPDFFormFillEmbeddertest, BUG_487928) { | |
| EmbedderTestTimerHandlingDelegate delegate; | |
| SetDelegate(&delegate); | |
| EXPECT_TRUE(OpenDocument("bug_487928.pdf")); | |
| FPDF_PAGE page = LoadPage(0); | |
| EXPECT_TRUE(page); | |
| DoOpenActions(); | |
| delegate.AdvanceTime(5000); | |
| UnloadPage(page); | |
| } | |
| TEST_F(FPDFFormFillEmbeddertest, BUG_507316) { | |
| EmbedderTestTimerHandlingDelegate delegate; | |
| SetDelegate(&delegate); | |
| EXPECT_TRUE(OpenDocument("bug_507316.pdf")); | |
| FPDF_PAGE page = LoadPage(2); | |
| EXPECT_TRUE(page); | |
| DoOpenActions(); | |
| delegate.AdvanceTime(4000); | |
| UnloadPage(page); | |
| } | |
| TEST_F(FPDFFormFillEmbeddertest, BUG_514690) { | |
| EXPECT_TRUE(OpenDocument("hello_world.pdf")); | |
| FPDF_PAGE page = LoadPage(0); | |
| EXPECT_TRUE(page); | |
| // Test that FORM_OnMouseMove() etc. permit null HANDLES and PAGES. | |
| FORM_OnMouseMove(nullptr, page, 0, 10.0, 10.0); | |
| FORM_OnMouseMove(form_handle(), nullptr, 0, 10.0, 10.0); | |
| UnloadPage(page); | |
| } | |
| #ifdef PDF_ENABLE_V8 | |
| TEST_F(FPDFFormFillEmbeddertest, BUG_551248) { | |
| // Test that timers fire once and intervals fire repeatedly. | |
| EmbedderTestTimerHandlingDelegate delegate; | |
| SetDelegate(&delegate); | |
| EXPECT_TRUE(OpenDocument("bug_551248.pdf")); | |
| FPDF_PAGE page = LoadPage(0); | |
| EXPECT_TRUE(page); | |
| DoOpenActions(); | |
| const auto& alerts = delegate.GetAlerts(); | |
| EXPECT_EQ(0U, alerts.size()); | |
| delegate.AdvanceTime(1000); | |
| EXPECT_EQ(0U, alerts.size()); // nothing fired. | |
| delegate.AdvanceTime(1000); | |
| EXPECT_EQ(1U, alerts.size()); // interval fired. | |
| delegate.AdvanceTime(1000); | |
| EXPECT_EQ(2U, alerts.size()); // timer fired. | |
| delegate.AdvanceTime(1000); | |
| EXPECT_EQ(3U, alerts.size()); // interval fired again. | |
| delegate.AdvanceTime(1000); | |
| EXPECT_EQ(3U, alerts.size()); // nothing fired. | |
| delegate.AdvanceTime(1000); | |
| EXPECT_EQ(4U, alerts.size()); // interval fired again. | |
| delegate.AdvanceTime(1000); | |
| EXPECT_EQ(4U, alerts.size()); // nothing fired. | |
| UnloadPage(page); | |
| ASSERT_EQ(4U, alerts.size()); // nothing else fired. | |
| EXPECT_STREQ(L"interval fired", alerts[0].message.c_str()); | |
| EXPECT_STREQ(L"Alert", alerts[0].title.c_str()); | |
| EXPECT_EQ(0, alerts[0].type); | |
| EXPECT_EQ(0, alerts[0].icon); | |
| EXPECT_STREQ(L"timer fired", alerts[1].message.c_str()); | |
| EXPECT_STREQ(L"Alert", alerts[1].title.c_str()); | |
| EXPECT_EQ(0, alerts[1].type); | |
| EXPECT_EQ(0, alerts[1].icon); | |
| EXPECT_STREQ(L"interval fired", alerts[2].message.c_str()); | |
| EXPECT_STREQ(L"Alert", alerts[2].title.c_str()); | |
| EXPECT_EQ(0, alerts[2].type); | |
| EXPECT_EQ(0, alerts[2].icon); | |
| EXPECT_STREQ(L"interval fired", alerts[3].message.c_str()); | |
| EXPECT_STREQ(L"Alert", alerts[3].title.c_str()); | |
| EXPECT_EQ(0, alerts[3].type); | |
| EXPECT_EQ(0, alerts[3].icon); | |
| } | |
| TEST_F(FPDFFormFillEmbeddertest, BUG_620428) { | |
| // Test that timers and intervals are cancelable. | |
| EmbedderTestTimerHandlingDelegate delegate; | |
| SetDelegate(&delegate); | |
| EXPECT_TRUE(OpenDocument("bug_620428.pdf")); | |
| FPDF_PAGE page = LoadPage(0); | |
| EXPECT_TRUE(page); | |
| DoOpenActions(); | |
| delegate.AdvanceTime(5000); | |
| UnloadPage(page); | |
| const auto& alerts = delegate.GetAlerts(); | |
| ASSERT_EQ(1U, alerts.size()); | |
| EXPECT_STREQ(L"done", alerts[0].message.c_str()); | |
| } | |
| TEST_F(FPDFFormFillEmbeddertest, BUG_634394) { | |
| // Cancel timer inside timer callback. | |
| EmbedderTestTimerHandlingDelegate delegate; | |
| SetDelegate(&delegate); | |
| EXPECT_TRUE(OpenDocument("bug_634394.pdf")); | |
| FPDF_PAGE page = LoadPage(0); | |
| EXPECT_TRUE(page); | |
| DoOpenActions(); | |
| // Timers fire at most once per AdvanceTime(), allow intervals | |
| // to fire several times if possible. | |
| delegate.AdvanceTime(1000); | |
| delegate.AdvanceTime(1000); | |
| delegate.AdvanceTime(1000); | |
| delegate.AdvanceTime(1000); | |
| delegate.AdvanceTime(1000); | |
| UnloadPage(page); | |
| const auto& alerts = delegate.GetAlerts(); | |
| EXPECT_EQ(2U, alerts.size()); | |
| } | |
| TEST_F(FPDFFormFillEmbeddertest, BUG_634716) { | |
| EmbedderTestTimerHandlingDelegate delegate; | |
| SetDelegate(&delegate); | |
| EXPECT_TRUE(OpenDocument("bug_634716.pdf")); | |
| FPDF_PAGE page = LoadPage(0); | |
| EXPECT_TRUE(page); | |
| DoOpenActions(); | |
| // Timers fire at most once per AdvanceTime(), allow intervals | |
| // to fire several times if possible. | |
| delegate.AdvanceTime(1000); | |
| delegate.AdvanceTime(1000); | |
| delegate.AdvanceTime(1000); | |
| delegate.AdvanceTime(1000); | |
| delegate.AdvanceTime(1000); | |
| UnloadPage(page); | |
| const auto& alerts = delegate.GetAlerts(); | |
| EXPECT_EQ(2U, alerts.size()); | |
| } | |
| #endif // PDF_ENABLE_V8 |