summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-24 14:48:25 +0000
committernkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-24 14:48:25 +0000
commitdb489d3692ed822639d4dbc2f03ff8e9ab892573 (patch)
tree758a5396dbeb8b2588185a2c09443bd1fb18894d
parent8b1a1acc48e6a55bb0cb0be00734a54d43f0ecd0 (diff)
downloadchromium_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.cc41
-rw-r--r--chrome/browser/chromeos/login/login_manager_test.h25
-rw-r--r--chrome/browser/chromeos/login/login_ui_browsertest.cc48
-rw-r--r--chrome/chrome_tests.gypi3
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',