Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(110)

Unified Diff: ios/chrome/browser/find_in_page/find_tab_helper_unittest.mm

Issue 2724683002: [ios] Moves the Find in Page APIs into FindTabHelper. (Closed)
Patch Set: Review Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ios/chrome/browser/find_in_page/find_tab_helper_unittest.mm
diff --git a/ios/chrome/browser/find_in_page/find_tab_helper_unittest.mm b/ios/chrome/browser/find_in_page/find_tab_helper_unittest.mm
index 414d8ad1e175b0a50d191b912dea3878c92542a5..91b3f6d47d8d89d7195d0f8ee9db6daace30fc90 100644
--- a/ios/chrome/browser/find_in_page/find_tab_helper_unittest.mm
+++ b/ios/chrome/browser/find_in_page/find_tab_helper_unittest.mm
@@ -5,6 +5,10 @@
#import "ios/chrome/browser/find_in_page/find_tab_helper.h"
#include "base/macros.h"
+#include "base/run_loop.h"
+#import "base/test/ios/wait_util.h"
+#import "ios/chrome/browser/find_in_page/find_in_page_model.h"
+#import "ios/chrome/browser/web/chrome_web_test.h"
#import "ios/web/public/test/fakes/test_web_state.h"
#import "ios/web/public/test/web_test.h"
@@ -12,20 +16,214 @@
#error "This file requires ARC support."
#endif
+namespace {
+const NSString* kTestString = @"Test string";
+}
+
// Test fixture for the FindTabHelper class.
-class FindTabHelperTest : public web::WebTest {
+class FindTabHelperTest : public ChromeWebTest {
public:
- FindTabHelperTest() { FindTabHelper::CreateForWebState(&web_state_, nil); }
+ FindTabHelperTest() = default;
~FindTabHelperTest() override = default;
protected:
- web::TestWebState web_state_;
+ void SetUp() override {
+ ChromeWebTest::SetUp();
+ FindTabHelper::CreateForWebState(web_state(), nil);
+ }
+
+ void TearDown() override {
+ // Stop any in-progress find operations when the test completes.
+ __block BOOL completion_handler_block_was_called = NO;
+ FindTabHelper::FromWebState(web_state())->StopFinding(^() {
+ completion_handler_block_was_called = YES;
+ });
+ base::test::ios::WaitUntilCondition(^bool() {
+ return completion_handler_block_was_called;
+ });
+
+ ChromeWebTest::TearDown();
+ }
+
+ // Loads a test html page with the given number of repetitions of
+ // |kTestString}.
+ void LoadTestHtml(int test_string_count) {
+ NSString* html = @"<html><body>";
+ for (int ii = 0; ii < test_string_count; ++ii) {
+ NSString* test_string = [NSString
+ stringWithFormat:@"%@ %d <br>", kTestString, test_string_count];
+ html = [html stringByAppendingString:test_string];
+ }
+ html = [html stringByAppendingString:@"</body></html>"];
+
+ LoadHtml(html);
+ }
private:
DISALLOW_COPY_AND_ASSIGN(FindTabHelperTest);
};
-// Tests that the helper's FindInPageController exists.
-TEST_F(FindTabHelperTest, ControllerExists) {
- DCHECK(FindTabHelper::FromWebState(&web_state_)->GetController());
+// Tests the StartFinding(), ContinueFinding(), and StopFinding() methods.
+TEST_F(FindTabHelperTest, FindInPage) {
+ LoadTestHtml(5);
+ auto* helper = FindTabHelper::FromWebState(web_state());
+ ASSERT_TRUE(helper);
+
+ __block BOOL completion_handler_block_was_called = NO;
+ id wait_block = ^bool() {
+ // Waits for |completion_handler_block_was_called| to be YES, but resets it
+ // to NO before returning.
+ BOOL success = completion_handler_block_was_called;
+ if (success) {
+ completion_handler_block_was_called = NO;
+ }
+ return success;
+ };
+
+ // Search for "Test string" and verify that there are five matches.
+ helper->StartFinding(@"Test string", ^(FindInPageModel* model) {
+ EXPECT_EQ(5U, model.matches);
+ EXPECT_EQ(1U, model.currentIndex);
+ completion_handler_block_was_called = YES;
+ });
+ base::test::ios::WaitUntilCondition(wait_block);
+
+ // Search forward in the page for additional matches and verify that
+ // |currentIndex| is updated.
+ helper->ContinueFinding(FindTabHelper::FORWARD, ^(FindInPageModel* model) {
+ EXPECT_EQ(5U, model.matches);
+ EXPECT_EQ(2U, model.currentIndex);
+ completion_handler_block_was_called = YES;
+ });
+ base::test::ios::WaitUntilCondition(wait_block);
+
+ helper->ContinueFinding(FindTabHelper::FORWARD, ^(FindInPageModel* model) {
+ EXPECT_EQ(5U, model.matches);
+ EXPECT_EQ(3U, model.currentIndex);
+ completion_handler_block_was_called = YES;
+ });
+ base::test::ios::WaitUntilCondition(wait_block);
+
+ // Search backwards in the page for previous matches and verify that
+ // |currentIndex| is updated.
+ helper->ContinueFinding(FindTabHelper::REVERSE, ^(FindInPageModel* model) {
+ EXPECT_EQ(5U, model.matches);
+ EXPECT_EQ(2U, model.currentIndex);
+ completion_handler_block_was_called = YES;
+ });
+ base::test::ios::WaitUntilCondition(wait_block);
+
+ // Stop finding and verify that the completion block was called properly.
+ helper->StopFinding(^() {
+ completion_handler_block_was_called = YES;
+ });
+ base::test::ios::WaitUntilCondition(wait_block);
+}
+
+// Tests that ContinueFinding() wraps around when it reaches the last match.
+TEST_F(FindTabHelperTest, ContinueFindingWrapsAround) {
+ LoadTestHtml(2);
+ auto* helper = FindTabHelper::FromWebState(web_state());
+ ASSERT_TRUE(helper);
+
+ __block BOOL completion_handler_block_was_called = NO;
+ id wait_block = ^bool() {
+ // Waits for |completion_handler_block_was_called| to be YES, but resets it
+ // to NO before returning.
+ BOOL success = completion_handler_block_was_called;
+ if (success) {
+ completion_handler_block_was_called = NO;
+ }
+ return success;
+ };
+
+ // Search for "Test string".
+ helper->StartFinding(@"Test string", ^(FindInPageModel* model) {
+ EXPECT_EQ(2U, model.matches);
+ EXPECT_EQ(1U, model.currentIndex);
+ completion_handler_block_was_called = YES;
+ });
+ base::test::ios::WaitUntilCondition(wait_block);
+
+ // Search backwards in the page and verify that |currentIndex| wraps around to
+ // the last match.
+ helper->ContinueFinding(FindTabHelper::REVERSE, ^(FindInPageModel* model) {
+ EXPECT_EQ(2U, model.matches);
+ EXPECT_EQ(2U, model.currentIndex);
+ completion_handler_block_was_called = YES;
+ });
+ base::test::ios::WaitUntilCondition(wait_block);
+
+ // Search forward in the page and verify that |currentIndex| wraps around to
+ // the first match.
+ helper->ContinueFinding(FindTabHelper::FORWARD, ^(FindInPageModel* model) {
+ EXPECT_EQ(2U, model.matches);
+ EXPECT_EQ(1U, model.currentIndex);
+ completion_handler_block_was_called = YES;
+ });
+ base::test::ios::WaitUntilCondition(wait_block);
+}
+
+// Tests that the FindInPageModel returned by GetFindResults() is updated to
+// reflect the results of the latest find operation.
+TEST_F(FindTabHelperTest, GetFindResults) {
+ LoadTestHtml(2);
+ auto* helper = FindTabHelper::FromWebState(web_state());
+ ASSERT_TRUE(helper);
+
+ __block BOOL completion_handler_block_was_called = NO;
+ id wait_block = ^bool() {
+ // Waits for |completion_handler_block_was_called| to be YES, but resets it
+ // to NO before returning.
+ BOOL success = completion_handler_block_was_called;
+ if (success) {
+ completion_handler_block_was_called = NO;
+ }
+ return success;
+ };
+
+ // Search for "Test string".
+ helper->StartFinding(@"Test string", ^(FindInPageModel* model) {
+ completion_handler_block_was_called = YES;
+ });
+ base::test::ios::WaitUntilCondition(wait_block);
+ {
+ FindInPageModel* model = helper->GetFindResult();
+ EXPECT_EQ(2U, model.matches);
+ EXPECT_EQ(1U, model.currentIndex);
+ }
+
+ // Search forward in the page and verify that |currentIndex| wraps around to
+ // the first match.
+ helper->ContinueFinding(FindTabHelper::FORWARD, ^(FindInPageModel* model) {
+ completion_handler_block_was_called = YES;
+ });
+ base::test::ios::WaitUntilCondition(wait_block);
+ {
+ FindInPageModel* model = helper->GetFindResult();
+ EXPECT_EQ(2U, model.matches);
+ EXPECT_EQ(2U, model.currentIndex);
+ }
+}
+
+// Tests the IsFindUIActive() getter and setter.
+TEST_F(FindTabHelperTest, IsFindUIActive) {
+ auto* helper = FindTabHelper::FromWebState(web_state());
+
+ helper->SetFindUIActive(true);
+ EXPECT_TRUE(helper->IsFindUIActive());
+
+ helper->SetFindUIActive(false);
+ EXPECT_FALSE(helper->IsFindUIActive());
+}
+
+// Tests that IsFindUIActive() is reset to false on page navigation.
+TEST_F(FindTabHelperTest, FindUIActiveIsResetOnPageNavigation) {
+ LoadTestHtml(2);
+ auto* helper = FindTabHelper::FromWebState(web_state());
+ helper->SetFindUIActive(true);
+ EXPECT_TRUE(helper->IsFindUIActive());
+
+ LoadTestHtml(3);
+ EXPECT_FALSE(helper->IsFindUIActive());
}
« no previous file with comments | « ios/chrome/browser/find_in_page/find_tab_helper.mm ('k') | ios/chrome/browser/ui/browser_view_controller.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698