172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/command_line.h"
63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string16.h"
772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/test/test_timeouts.h"
83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h"
9513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/app/chrome_command_ids.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_switches.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/url_constants.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/browser_proxy.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/tab_proxy.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/window_proxy.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/ui/ui_test.h"
163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "grit/chromium_strings.h"
173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "grit/generated_resources.h"
1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h"
193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass OptionsUITest : public UITest {
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  OptionsUITest() {
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    dom_automation_enabled_ = true;
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void AssertIsOptionsPage(TabProxy* tab) {
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::wstring title;
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(tab->GetTabTitle(&title));
313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    string16 expected_title = l10n_util::GetStringUTF16(IDS_SETTINGS_TITLE);
3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // The only guarantee we can make about the title of a settings tab is that
3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // it should contain IDS_SETTINGS_TITLE somewhere.
3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ASSERT_FALSE(WideToUTF16Hack(title).find(expected_title) == string16::npos);
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Flaky: http://crbug.com/77375
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(OptionsUITest, FLAKY_LoadOptionsByURL) {
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser.get());
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<TabProxy> tab = browser->GetActiveTab();
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(tab.get());
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Go to the options tab via URL.
473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  NavigateToURL(GURL(chrome::kChromeUISettingsURL));
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AssertIsOptionsPage(tab);
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Flaky, and takes very long to fail. http://crbug.com/64619.
5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(OptionsUITest, DISABLED_CommandOpensOptionsTab) {
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser.get());
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int tab_count = -1;
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser->GetTabCount(&tab_count));
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(1, tab_count);
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Bring up the options tab via command.
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser->RunCommand(IDC_OPTIONS));
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser->GetTabCount(&tab_count));
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(2, tab_count);
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<TabProxy> tab = browser->GetActiveTab();
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(tab.get());
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AssertIsOptionsPage(tab);
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Flaky, and takes very long to fail. http://crbug.com/48521
7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(OptionsUITest, DISABLED_CommandAgainGoesBackToOptionsTab) {
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser.get());
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int tab_count = -1;
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser->GetTabCount(&tab_count));
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(1, tab_count);
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Bring up the options tab via command.
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser->RunCommand(IDC_OPTIONS));
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser->GetTabCount(&tab_count));
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(2, tab_count);
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<TabProxy> tab = browser->GetActiveTab();
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(tab.get());
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AssertIsOptionsPage(tab);
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Switch to first tab and run command again.
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser->ActivateTab(0));
9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(browser->WaitForTabToBecomeActive(
9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      0, TestTimeouts::action_max_timeout_ms()));
923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(browser->RunCommand(IDC_OPTIONS));
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Ensure the options ui tab is active.
9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(browser->WaitForTabToBecomeActive(
9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      1, TestTimeouts::action_max_timeout_ms()));
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser->GetTabCount(&tab_count));
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(2, tab_count);
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Flaky, and takes very long to fail. http://crbug.com/48521
10272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(OptionsUITest, DISABLED_TwoCommandsOneTab) {
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser.get());
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int tab_count = -1;
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser->GetTabCount(&tab_count));
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(1, tab_count);
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser->RunCommand(IDC_OPTIONS));
1113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(browser->RunCommand(IDC_OPTIONS));
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser->GetTabCount(&tab_count));
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(2, tab_count);
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
117