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

Unified Diff: chrome/browser/ui/webui/options/chromeos/shared_options_browsertest.cc

Issue 290453006: Quick & dirty example of a WebUIBrowserTest using LoginManagerTestHelper. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: broken test Created 6 years, 7 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: chrome/browser/ui/webui/options/chromeos/shared_options_browsertest.cc
diff --git a/chrome/browser/ui/webui/options/chromeos/shared_options_browsertest.cc b/chrome/browser/ui/webui/options/chromeos/shared_options_browsertest.cc
index ac9841bf511c73a21b5ad137694a5d3cb2afefbd..dced64106d2a69021e50a87ade90cfb7b4666edd 100644
--- a/chrome/browser/ui/webui/options/chromeos/shared_options_browsertest.cc
+++ b/chrome/browser/ui/webui/options/chromeos/shared_options_browsertest.cc
@@ -2,113 +2,196 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
+#include "chrome/browser/ui/webui/options/chromeos/shared_options_browsertest.h"
+
+// todo
#include "base/prefs/pref_service.h"
-#include "chrome/browser/chromeos/login/login_manager_test.h"
#include "chrome/browser/chromeos/login/startup_utils.h"
#include "chrome/browser/chromeos/login/ui/user_adding_screen.h"
#include "chrome/browser/chromeos/login/users/user_manager.h"
#include "chrome/browser/chromeos/settings/cros_settings.h"
#include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h"
#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
#include "chrome/test/base/ui_test_utils.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chromeos/settings/cros_settings_names.h"
#include "content/public/browser/web_contents.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/test_utils.h"
+#include "base/bind.h"
+#include "base/prefs/pref_service.h"
+#include "base/values.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "content/public/browser/navigation_controller.h"
+#include "content/public/browser/navigation_entry.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_ui.h"
+#include "url/gurl.h"
+
+#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/test_utils.h"
+
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using ::testing::AnyNumber;
+using ::testing::Invoke;
+using ::testing::InvokeWithoutArgs;
+using ::testing::Return;
+using ::testing::ReturnNull;
+using ::testing::Sequence;
+using ::testing::WithArg;
+using ::testing::_;
+
namespace chromeos {
namespace {
-const char* kTestUsers[] = { "test-user1@gmail.com", "test-user2@gmail.com" };
+const char* kTestOwner = "test-user0@example.com";
} // namespace
-class SharedOptionsTest : public LoginManagerTest {
- public:
- SharedOptionsTest()
- : LoginManagerTest(false),
- device_settings_provider_(NULL) {
- stub_settings_provider_.Set(kDeviceOwner, base::StringValue(kTestUsers[0]));
- }
+SharedOptionsTest::SharedOptionsTest()
+ : device_settings_provider_(NULL),
+ login_manager_test_helper_(new LoginManagerTestHelper) {
+ set_exit_when_last_browser_closes(false);
+ stub_settings_provider_.Set(kDeviceOwner, base::StringValue(kTestOwner));
+}
- virtual ~SharedOptionsTest() {
- }
+SharedOptionsTest::~SharedOptionsTest() {
+}
- virtual void SetUpOnMainThread() OVERRIDE {
- LoginManagerTest::SetUpOnMainThread();
- CrosSettings* settings = CrosSettings::Get();
- device_settings_provider_ = settings->GetProvider(kDeviceOwner);
- settings->RemoveSettingsProvider(device_settings_provider_);
- settings->AddSettingsProvider(&stub_settings_provider_);
- }
+void SharedOptionsTest::RegisterMessages() {
+ web_ui()->RegisterMessageCallback(
+ "sharedOptionsTestRegisterUsers",
+ base::Bind(&SharedOptionsTest::RegisterUsers,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
+ "sharedOptionsTestLogInUser",
+ base::Bind(&SharedOptionsTest::LogInUser,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
+ "sharedOptionsTestAddUser",
+ base::Bind(&SharedOptionsTest::AddUser,
+ base::Unretained(this)));
+}
- virtual void CleanUpOnMainThread() OVERRIDE {
- CrosSettings* settings = CrosSettings::Get();
- settings->RemoveSettingsProvider(&stub_settings_provider_);
- settings->AddSettingsProvider(device_settings_provider_);
- LoginManagerTest::CleanUpOnMainThread();
- }
+void SharedOptionsTest::SetUpLoginDisplay() {
+ // for existing_user_controller.cc:login_display_.get()
+ /* EXPECT_CALL(*mock_login_display_host_.get(), CreateLoginDisplay(_))
+ .Times(1)
+ .WillOnce(Return(mock_login_display_));*/
+}
- virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
- LoginManagerTest::SetUpCommandLine(command_line);
- command_line->AppendSwitch(::switches::kMultiProfiles);
- }
+void SharedOptionsTest::SetUpOnMainThread() {
+ /*
+ // Create a mock login display host so we can create an
+ // ExistingUserController.
michaelpg 2014/05/20 00:41:37 This is similar to what existing_user_controller_b
+ mock_login_display_host_.reset(new MockLoginDisplayHost);
+ mock_login_display_ = new MockLoginDisplay();
+ SetUpLoginDisplay();
+
+ // Create an ExistingUserController. Otherwise
+ // ExistingUserController::current_controller() won't exist and test fails.
+ // Umm, now this isn't true anymore.
+ // existing_user_controller_.reset(
michaelpg 2014/05/20 00:41:37 I'm confused, because at first the test wouldn't r
+ // new ExistingUserController(mock_login_display_host_.get()));
+ */
+
+ // login_manager_test_helper_->WaitForLoginWebUI();
michaelpg 2014/05/20 00:41:37 Normally a LoginManagerTest would wait for the Log
+ CrosSettings* settings = CrosSettings::Get();
+ device_settings_provider_ = settings->GetProvider(kDeviceOwner);
+ settings->RemoveSettingsProvider(device_settings_provider_);
+ settings->AddSettingsProvider(&stub_settings_provider_);
+ WebUIBrowserTest::SetUpOnMainThread();
+ LOG(ERROR) << "Set up";
+}
- protected:
- void CheckOptionsUI(const User* user, bool is_primary) {
- Profile* profile = UserManager::Get()->GetProfileByUser(user);
- profile->GetPrefs()->SetString(prefs::kGoogleServicesUsername,
- user->email());
-
- ui_test_utils::BrowserAddedObserver observer;
- Browser* browser = CreateBrowser(profile);
- observer.WaitForSingleNewBrowser();
-
- ui_test_utils::NavigateToURL(browser,
- GURL("chrome://settings-frame"));
- content::WebContents* contents =
- browser->tab_strip_model()->GetActiveWebContents();
-
- bool banner_visible;
- ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
- contents,
- "var e = document.getElementById('secondary-user-banner');"
- "var visible = e.offsetWidth > 0 && e.offsetHeight > 0;"
- "window.domAutomationController.send(visible);",
- &banner_visible));
- EXPECT_EQ(is_primary, !banner_visible);
- }
+void SharedOptionsTest::CleanUpOnMainThread() {
+ existing_user_controller_.reset();
+ CrosSettings* settings = CrosSettings::Get();
+ settings->RemoveSettingsProvider(&stub_settings_provider_);
+ settings->AddSettingsProvider(device_settings_provider_);
+ login_manager_test_helper_->CloseLoginWebUI();
+ WebUIBrowserTest::CleanUpOnMainThread();
+}
+
+void SharedOptionsTest::SetUpCommandLine(CommandLine* command_line) {
+ // Don't add kLoginManager switches, or running PRE_ test will fail with no
+ // error message.
+ // login_manager_test_helper_->SetUpCommandLine(command_line);
michaelpg 2014/05/20 00:41:37 This would add kLoginManager and kForceLoginManage
Nikita (slow) 2014/05/20 12:50:35 As far as I remember the issue with WebUIBrowserTe
+ command_line->AppendSwitch(::switches::kMultiProfiles);
+ WebUIBrowserTest::SetUpCommandLine(command_line);
+}
+
+void SharedOptionsTest::SetUpInProcessBrowserTestFixture() {
+ LOG(ERROR) << "Setting up in process browser test fixture";
+ login_manager_test_helper_->SetUpLoginUtils(false /* ? */);
+}
+
+void SharedOptionsTest::RegisterUsers(const base::ListValue* list_value) {
+ LOG(ERROR) << "Register users called";
+ int num_users;
+ ASSERT_TRUE(list_value->GetInteger(0, &num_users));
- StubCrosSettingsProvider stub_settings_provider_;
- CrosSettingsProvider* device_settings_provider_;
+ LOG(ERROR) << "num users: " << num_users;;
- private:
- DISALLOW_COPY_AND_ASSIGN(SharedOptionsTest);
-};
+ char user_name[28];
+ for (int i = 0; i < num_users; i++) {
+ sprintf(user_name, "test-user%d@example.com", i);
+ login_manager_test_helper_->RegisterUser(user_name);
+ LOG(ERROR) << "Registered " << user_name;
+ }
-IN_PROC_BROWSER_TEST_F(SharedOptionsTest, PRE_SharedOptions) {
- RegisterUser(kTestUsers[0]);
- RegisterUser(kTestUsers[1]);
StartupUtils::MarkOobeCompleted();
+
+ web_ui()->CallJavascriptFunction(
+ "SharedOptionsTest.registerUsersCallback");
}
-IN_PROC_BROWSER_TEST_F(SharedOptionsTest, SharedOptions) {
- LoginUser(kTestUsers[0]);
+void SharedOptionsTest::LogInUser(const base::ListValue* list_value) {
+ int user_num;
+ ASSERT_TRUE(list_value->GetInteger(0, &user_num));
+
+ char user_name[28];
+ sprintf(user_name, "test-user%d@example.com", user_num);
+ login_manager_test_helper_->LogInUser(user_name);
+
UserAddingScreen::Get()->Start();
content::RunAllPendingInMessageLoop();
- AddUser(kTestUsers[1]);
- UserManager* manager = UserManager::Get();
- ASSERT_EQ(2u, manager->GetLoggedInUsers().size());
+ web_ui()->CallJavascriptFunction(
+ "SharedOptionsTest.logInUserCallback");
+}
+
+void SharedOptionsTest::AddUser(const base::ListValue* list_value) {
+ int user_num;
+ LOG(ERROR) << "Adding user";
+ ASSERT_TRUE(list_value->GetInteger(0, &user_num));
+
+ char user_name[28];
+ sprintf(user_name, "test-user%d@example.com", user_num);
+ LOG(ERROR) << "Adding user " << user_name;
+
+ login_manager_test_helper_->AddUser(user_name);
michaelpg 2014/05/20 00:41:37 This is where the test is failing now.
+
+ // There are 3 of these lines output.
+ // I don't know if that's causing this test to fail:
+ // [22018:22018:0519/172540:INFO:CONSOLE(1)] "Uncaught ReferenceError:
+ // cr is not defined", source: (1)
+
+ LOG(ERROR) << "Calling addUserCallback";
+ web_ui()->CallJavascriptFunction(
+ "SharedOptionsTest.addUserCallback");
+}
- CheckOptionsUI(manager->FindUser(kTestUsers[0]), true /* is_primary */);
- CheckOptionsUI(manager->FindUser(kTestUsers[1]), false /* is_primary */);
+content::WebUIMessageHandler* SharedOptionsTest::GetMockMessageHandler() {
+ return this;
}
} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698