summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views
diff options
context:
space:
mode:
authorsky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-30 00:40:43 +0000
committersky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-30 00:40:43 +0000
commitd4515eb94ad33ac2ab9bfd1094c8e1edd1eefa1b (patch)
treeadd4a98df5bcdbb3ca0e1f4471c77f453d52a1f4 /chrome/browser/views
parent0815731ac884b41853725e51e26b0697449747b4 (diff)
downloadchromium_src-d4515eb94ad33ac2ab9bfd1094c8e1edd1eefa1b.zip
chromium_src-d4515eb94ad33ac2ab9bfd1094c8e1edd1eefa1b.tar.gz
chromium_src-d4515eb94ad33ac2ab9bfd1094c8e1edd1eefa1b.tar.bz2
Provides the ability to write a unit test that brings up a browser. As
a proof of concept I converted FindInPageControllerTest.FindInPageFrames over to this. See the description in InProcessBrowserTest for how it all works. BUG=none TEST=none Review URL: http://codereview.chromium.org/19644 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8934 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views')
-rw-r--r--chrome/browser/views/find_bar_win_uitest.cc52
-rw-r--r--chrome/browser/views/find_bar_win_unittest.cc143
2 files changed, 143 insertions, 52 deletions
diff --git a/chrome/browser/views/find_bar_win_uitest.cc b/chrome/browser/views/find_bar_win_uitest.cc
index 108e7ce..607aa14 100644
--- a/chrome/browser/views/find_bar_win_uitest.cc
+++ b/chrome/browser/views/find_bar_win_uitest.cc
@@ -23,58 +23,6 @@ const std::wstring kUserSelectPage = L"files/find_in_page/user-select.html";
const std::wstring kCrashPage = L"files/find_in_page/crash_1341577.html";
const std::wstring kTooFewMatchesPage = L"files/find_in_page/bug_1155639.html";
-// This test loads a page with frames and starts FindInPage requests
-TEST_F(FindInPageControllerTest, FindInPageFrames) {
- scoped_refptr<HTTPTestServer> server =
- HTTPTestServer::CreateServer(L"chrome/test/data", NULL);
- ASSERT_TRUE(NULL != server.get());
-
- // First we navigate to our frames page.
- GURL url = server->TestServerPageW(kFramePage);
- scoped_ptr<TabProxy> tab(GetActiveTab());
- ASSERT_TRUE(tab->NavigateToURL(url));
- WaitUntilTabCount(1);
-
- // Try incremental search (mimicking user typing in).
- EXPECT_EQ(18, tab->FindInPage(L"g", FWD, IGNORE_CASE, false, NULL));
- EXPECT_EQ(11, tab->FindInPage(L"go", FWD, IGNORE_CASE, false, NULL));
- EXPECT_EQ(04, tab->FindInPage(L"goo", FWD, IGNORE_CASE, false, NULL));
- EXPECT_EQ(03, tab->FindInPage(L"goog", FWD, IGNORE_CASE, false, NULL));
- EXPECT_EQ(02, tab->FindInPage(L"googl", FWD, IGNORE_CASE, false, NULL));
- EXPECT_EQ(01, tab->FindInPage(L"google", FWD, IGNORE_CASE, false, NULL));
- EXPECT_EQ(00, tab->FindInPage(L"google!", FWD, IGNORE_CASE, false, NULL));
-
- // Negative test (no matches should be found).
- EXPECT_EQ(0, tab->FindInPage(L"Non-existing string", FWD, IGNORE_CASE,
- false, NULL));
-
- // 'horse' only exists in the three right frames.
- EXPECT_EQ(3, tab->FindInPage(L"horse", FWD, IGNORE_CASE, false, NULL));
-
- // 'cat' only exists in the first frame.
- EXPECT_EQ(1, tab->FindInPage(L"cat", FWD, IGNORE_CASE, false, NULL));
-
- // Try searching again, should still come up with 1 match.
- EXPECT_EQ(1, tab->FindInPage(L"cat", FWD, IGNORE_CASE, false, NULL));
-
- // Try searching backwards, ignoring case, should still come up with 1 match.
- EXPECT_EQ(1, tab->FindInPage(L"CAT", BACK, IGNORE_CASE, false, NULL));
-
- // Try case sensitive, should NOT find it.
- EXPECT_EQ(0, tab->FindInPage(L"CAT", FWD, CASE_SENSITIVE, false, NULL));
-
- // Try again case sensitive, but this time with right case.
- EXPECT_EQ(1, tab->FindInPage(L"dog", FWD, CASE_SENSITIVE, false, NULL));
-
- // Try non-Latin characters ('Hreggvidur' with 'eth' for 'd' in left frame).
- EXPECT_EQ(1, tab->FindInPage(L"Hreggvi\u00F0ur", FWD, IGNORE_CASE,
- false, NULL));
- EXPECT_EQ(1, tab->FindInPage(L"Hreggvi\u00F0ur", FWD, CASE_SENSITIVE,
- false, NULL));
- EXPECT_EQ(0, tab->FindInPage(L"hreggvi\u00F0ur", FWD, CASE_SENSITIVE,
- false, NULL));
-}
-
// This test loads a single-frame page and makes sure the ordinal returned makes
// sense as we FindNext over all the items.
TEST_F(FindInPageControllerTest, FindInPageOrdinal) {
diff --git a/chrome/browser/views/find_bar_win_unittest.cc b/chrome/browser/views/find_bar_win_unittest.cc
new file mode 100644
index 0000000..0112696
--- /dev/null
+++ b/chrome/browser/views/find_bar_win_unittest.cc
@@ -0,0 +1,143 @@
+// Copyright (c) 2006-2008 The Chromium 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 "base/message_loop.h"
+#include "chrome/browser/browser.h"
+#include "chrome/browser/find_notification_details.h"
+#include "chrome/browser/renderer_host/render_view_host.h"
+#include "chrome/browser/tab_contents/tab_contents.h"
+#include "chrome/browser/tab_contents/web_contents.h"
+#include "chrome/browser/tab_contents/web_contents_view.h"
+#include "chrome/browser/views/find_bar_win.h"
+#include "chrome/test/in_process_browser_test.h"
+#include "chrome/test/ui_test_utils.h"
+
+const std::wstring kFramePage = L"files/find_in_page/frames.html";
+const std::wstring kFrameData = L"files/find_in_page/framedata_general.html";
+const std::wstring kUserSelectPage = L"files/find_in_page/user-select.html";
+const std::wstring kCrashPage = L"files/find_in_page/crash_1341577.html";
+const std::wstring kTooFewMatchesPage = L"files/find_in_page/bug_1155639.html";
+
+class FindInPageNotificationObserver : public NotificationObserver {
+ public:
+ FindInPageNotificationObserver(TabContents* parent_tab)
+ : parent_tab_(parent_tab),
+ active_match_ordinal_(-1),
+ number_of_matches_(0) {
+ registrar_.Add(this, NOTIFY_FIND_RESULT_AVAILABLE,
+ Source<TabContents>(parent_tab_));
+ ui_test_utils::RunMessageLoop();
+ }
+
+ int active_match_ordinal() const { return active_match_ordinal_; }
+
+ int number_of_matches() const { return number_of_matches_; }
+
+ virtual void Observe(NotificationType type, const NotificationSource& source,
+ const NotificationDetails& details) {
+ if (type == NOTIFY_FIND_RESULT_AVAILABLE) {
+ Details<FindNotificationDetails> find_details(details);
+ if (find_details->request_id() == kFindInPageRequestId) {
+ // We get multiple responses and one of those will contain the ordinal.
+ // This message comes to us before the final update is sent.
+ if (find_details->active_match_ordinal() > -1)
+ active_match_ordinal_ = find_details->active_match_ordinal();
+ if (find_details->final_update()) {
+ number_of_matches_ = find_details->number_of_matches();
+ MessageLoopForUI::current()->Quit();
+ } else {
+ DLOG(INFO) << "Ignoring, since we only care about the final message";
+ }
+ }
+ } else {
+ NOTREACHED();
+ }
+ }
+
+ // The Find mechanism is over asynchronous IPC, so a search is kicked off and
+ // we wait for notification to find out what the results are. As the user is
+ // typing, new search requests can be issued and the Request ID helps us make
+ // sense of whether this is the current request or an old one. The unit tests,
+ // however, which uses this constant issues only one search at a time, so we
+ // don't need a rolling id to identify each search. But, we still need to
+ // specify one, so we just use a fixed one - its value does not matter.
+ static const int kFindInPageRequestId;
+
+ private:
+ NotificationRegistrar registrar_;
+ TabContents* parent_tab_;
+ // We will at some point (before final update) be notified of the ordinal and
+ // we need to preserve it so we can send it later.
+ int active_match_ordinal_;
+ int number_of_matches_;
+};
+
+typedef enum FindInPageDirection { BACK = 0, FWD = 1 };
+typedef enum FindInPageCase { IGNORE_CASE = 0, CASE_SENSITIVE = 1 };
+
+class FindInPageControllerTest : public InProcessBrowserTest {
+ public:
+ FindInPageControllerTest() {}
+
+ protected:
+ int FindInPage(const std::wstring& search_string,
+ FindInPageDirection forward,
+ FindInPageCase match_case,
+ bool find_next) {
+ WebContents* web_contents =
+ browser()->GetSelectedTabContents()->AsWebContents();
+ if (web_contents) {
+ web_contents->view()->FindInPage(*browser(), true, forward == FWD);
+ web_contents->render_view_host()->StartFinding(
+ FindInPageNotificationObserver::kFindInPageRequestId,
+ search_string, forward == FWD, match_case == CASE_SENSITIVE, find_next);
+ return FindInPageNotificationObserver(web_contents).number_of_matches();
+ }
+ return 0;
+ }
+};
+
+// This test loads a page with frames and starts FindInPage requests
+IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, FindInPageFrames) {
+ HTTPTestServer* server = StartHTTPServer();
+
+ // First we navigate to our frames page.
+ GURL url = server->TestServerPageW(kFramePage);
+ ui_test_utils::NavigateToURL(browser(), url);
+
+ // Try incremental search (mimicking user typing in).
+ EXPECT_EQ(18, FindInPage(L"g", FWD, IGNORE_CASE, false));
+ EXPECT_EQ(11, FindInPage(L"go", FWD, IGNORE_CASE, false));
+ EXPECT_EQ(04, FindInPage(L"goo", FWD, IGNORE_CASE, false));
+ EXPECT_EQ(03, FindInPage(L"goog", FWD, IGNORE_CASE, false));
+ EXPECT_EQ(02, FindInPage(L"googl", FWD, IGNORE_CASE, false));
+ EXPECT_EQ(01, FindInPage(L"google", FWD, IGNORE_CASE, false));
+ EXPECT_EQ(00, FindInPage(L"google!", FWD, IGNORE_CASE, false));
+
+ // Negative test (no matches should be found).
+ EXPECT_EQ(0, FindInPage(L"Non-existing string", FWD, IGNORE_CASE, false));
+
+ // 'horse' only exists in the three right frames.
+ EXPECT_EQ(3, FindInPage(L"horse", FWD, IGNORE_CASE, false));
+
+ // 'cat' only exists in the first frame.
+ EXPECT_EQ(1, FindInPage(L"cat", FWD, IGNORE_CASE, false));
+
+ // Try searching again, should still come up with 1 match.
+ EXPECT_EQ(1, FindInPage(L"cat", FWD, IGNORE_CASE, false));
+
+ // Try searching backwards, ignoring case, should still come up with 1 match.
+ EXPECT_EQ(1, FindInPage(L"CAT", BACK, IGNORE_CASE, false));
+
+ // Try case sensitive, should NOT find it.
+ EXPECT_EQ(0, FindInPage(L"CAT", FWD, CASE_SENSITIVE, false));
+
+ // Try again case sensitive, but this time with right case.
+ EXPECT_EQ(1, FindInPage(L"dog", FWD, CASE_SENSITIVE, false));
+
+ // Try non-Latin characters ('Hreggvidur' with 'eth' for 'd' in left frame).
+ EXPECT_EQ(1, FindInPage(L"Hreggvi\u00F0ur", FWD, IGNORE_CASE, false));
+ EXPECT_EQ(1, FindInPage(L"Hreggvi\u00F0ur", FWD, CASE_SENSITIVE, false));
+ EXPECT_EQ(0, FindInPage(L"hreggvi\u00F0ur", FWD, CASE_SENSITIVE, false));
+}