diff options
author | nkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-24 14:48:25 +0000 |
---|---|---|
committer | nkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-24 14:48:25 +0000 |
commit | db489d3692ed822639d4dbc2f03ff8e9ab892573 (patch) | |
tree | 758a5396dbeb8b2588185a2c09443bd1fb18894d | |
parent | 8b1a1acc48e6a55bb0cb0be00734a54d43f0ecd0 (diff) | |
download | chromium_src-db489d3692ed822639d4dbc2f03ff8e9ab892573.zip chromium_src-db489d3692ed822639d4dbc2f03ff8e9ab892573.tar.gz chromium_src-db489d3692ed822639d4dbc2f03ff8e9ab892573.tar.bz2 |
Add basic CrOS login UI test
BUG=278098
Review URL: https://chromiumcodereview.appspot.com/22859055
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@219440 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chromeos/login/login_manager_test.cc | 41 | ||||
-rw-r--r-- | chrome/browser/chromeos/login/login_manager_test.h | 25 | ||||
-rw-r--r-- | chrome/browser/chromeos/login/login_ui_browsertest.cc | 48 | ||||
-rw-r--r-- | chrome/chrome_tests.gypi | 3 |
4 files changed, 116 insertions, 1 deletions
diff --git a/chrome/browser/chromeos/login/login_manager_test.cc b/chrome/browser/chromeos/login/login_manager_test.cc index 6196c83..4f1a149 100644 --- a/chrome/browser/chromeos/login/login_manager_test.cc +++ b/chrome/browser/chromeos/login/login_manager_test.cc @@ -7,25 +7,37 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chromeos/login/existing_user_controller.h" +#include "chrome/browser/chromeos/login/login_display_host_impl.h" #include "chrome/browser/chromeos/login/user_manager.h" +#include "chrome/browser/chromeos/login/webui_login_view.h" #include "chrome/browser/prefs/scoped_user_pref_update.h" #include "chrome/common/chrome_switches.h" #include "chromeos/chromeos_switches.h" #include "content/public/browser/notification_service.h" +#include "content/public/browser/web_contents.h" +#include "content/public/test/browser_test_utils.h" #include "content/public/test/test_utils.h" #include "testing/gtest/include/gtest/gtest.h" namespace chromeos { LoginManagerTest::LoginManagerTest(bool should_launch_browser) - : should_launch_browser_(should_launch_browser) { + : should_launch_browser_(should_launch_browser), + web_contents_(NULL) { set_exit_when_last_browser_closes(false); } +void LoginManagerTest::CleanUpOnMainThread() { + if (LoginDisplayHostImpl::default_host()) + LoginDisplayHostImpl::default_host()->Finalize(); + base::MessageLoop::current()->RunUntilIdle(); +} + void LoginManagerTest::SetUpCommandLine(CommandLine* command_line) { command_line->AppendSwitch(chromeos::switches::kLoginManager); command_line->AppendSwitch(chromeos::switches::kForceLoginManagerInTests); command_line->AppendSwitch(::switches::kMultiProfiles); + InProcessBrowserTest::SetUpCommandLine(command_line); } void LoginManagerTest::SetUpInProcessBrowserTestFixture() { @@ -36,6 +48,13 @@ void LoginManagerTest::SetUpInProcessBrowserTestFixture() { LoginUtils::Set(mock_login_utils_); } +void LoginManagerTest::SetUpOnMainThread() { + content::WindowedNotificationObserver( + chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE, + content::NotificationService::AllSources()).Wait(); + InitializeWebContents(); +} + void LoginManagerTest::RegisterUser(const std::string& username) { ListPrefUpdate users_pref(g_browser_process->local_state(), "LoggedInUsers"); users_pref->AppendIfNotPresent(new base::StringValue(username)); @@ -65,4 +84,24 @@ void LoginManagerTest::LoginUser(const std::string& username) { EXPECT_TRUE(TryToLogin(username, "password")); } +void LoginManagerTest::JSExpect(const std::string& expression) { + bool result; + EXPECT_TRUE(web_contents_ != NULL); + ASSERT_TRUE(content::ExecuteScriptAndExtractBool( + web_contents(), + "window.domAutomationController.send(!!(" + expression + "));", + &result)); + ASSERT_TRUE(result) << expression; +} + +void LoginManagerTest::InitializeWebContents() { + LoginDisplayHost* host = LoginDisplayHostImpl::default_host(); + EXPECT_TRUE(host != NULL); + + content::WebContents* web_contents = + host->GetWebUILoginView()->GetWebContents(); + EXPECT_TRUE(web_contents != NULL); + set_web_contents(web_contents); + } + } // namespace chromeos diff --git a/chrome/browser/chromeos/login/login_manager_test.h b/chrome/browser/chromeos/login/login_manager_test.h index e88634f..c393e53 100644 --- a/chrome/browser/chromeos/login/login_manager_test.h +++ b/chrome/browser/chromeos/login/login_manager_test.h @@ -8,15 +8,27 @@ #include "chrome/browser/chromeos/login/mock_login_utils.h" #include "chrome/test/base/in_process_browser_test.h" +namespace content { +class WebContents; +} // namespace content + namespace chromeos { +// Base class for Chrome OS out-of-box/login WebUI tests. +// If no special configuration is done launches out-of-box WebUI. +// To launch login UI use PRE_* test that will register user(s) and mark +// out-of-box as completed. +// Guarantees that WebUI has been initialized by waiting for +// NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE notification. class LoginManagerTest : public InProcessBrowserTest { public: explicit LoginManagerTest(bool should_launch_browser); // Overriden from InProcessBrowserTest. + virtual void CleanUpOnMainThread() OVERRIDE; virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE; virtual void SetUpInProcessBrowserTestFixture() OVERRIDE; + virtual void SetUpOnMainThread() OVERRIDE; // Registers user with given |username| on device. // Should be called in PRE_* test. @@ -34,11 +46,24 @@ class LoginManagerTest : public InProcessBrowserTest { // Login user with |username|. User should be registered using RegisterUser(). void LoginUser(const std::string& username); + // Executes given JS |expression| in |web_contents_| and checks + // that it is true. + void JSExpect(const std::string& expression); + MockLoginUtils& login_utils() { return *mock_login_utils_; } + content::WebContents* web_contents() { return web_contents_; } + private: + void InitializeWebContents(); + + void set_web_contents(content::WebContents* web_contents) { + web_contents_ = web_contents; + } + MockLoginUtils* mock_login_utils_; bool should_launch_browser_; + content::WebContents* web_contents_; DISALLOW_COPY_AND_ASSIGN(LoginManagerTest); }; diff --git a/chrome/browser/chromeos/login/login_ui_browsertest.cc b/chrome/browser/chromeos/login/login_ui_browsertest.cc new file mode 100644 index 0000000..9b3cabe --- /dev/null +++ b/chrome/browser/chromeos/login/login_ui_browsertest.cc @@ -0,0 +1,48 @@ +// Copyright 2013 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 "chrome/browser/chromeos/login/login_manager_test.h" +#include "chrome/browser/chromeos/login/startup_utils.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using ::testing::_; +using ::testing::AnyNumber; +using ::testing::Return; + +namespace chromeos { + +namespace { + +const char kTestUser1[] = "test-user1@gmail.com"; +const char kTestUser2[] = "test-user2@gmail.com"; + +} // anonymous namespace + +class LoginUITest : public chromeos::LoginManagerTest { + public: + LoginUITest() : LoginManagerTest(false) {} + virtual ~LoginUITest() {} +}; + +IN_PROC_BROWSER_TEST_F(LoginUITest, PRE_LoginUIVisible) { + RegisterUser(kTestUser1); + RegisterUser(kTestUser2); + StartupUtils::MarkOobeCompleted(); +} + +// Verifies basic login UI properties. +IN_PROC_BROWSER_TEST_F(LoginUITest, LoginUIVisible) { + JSExpect("!!document.querySelector('#account-picker')"); + JSExpect("!!document.querySelector('#pod-row')"); + JSExpect( + "document.querySelectorAll('.pod:not(#user-pod-template)').length == 2"); + + JSExpect("document.querySelectorAll('.pod:not(#user-pod-template)')[0]" + ".user.emailAddress == '" + std::string(kTestUser1) + "'"); + JSExpect("document.querySelectorAll('.pod:not(#user-pod-template)')[1]" + ".user.emailAddress == '" + std::string(kTestUser2) + "'"); +} + +} // namespace chromeos diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index 01fdb92..b4cae68 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -403,6 +403,9 @@ 'browser/chromeos/login/captive_portal_window_browsertest.cc', 'browser/chromeos/login/eula_browsertest.cc', 'browser/chromeos/login/login_browsertest.cc', + 'browser/chromeos/login/login_manager_test.cc', + 'browser/chromeos/login/login_manager_test.h', + 'browser/chromeos/login/login_ui_browsertest.cc', 'browser/chromeos/login/oobe_browsertest.cc', 'browser/chromeos/login/screen_locker_browsertest.cc', 'browser/chromeos/login/screen_locker_tester.cc', |