Commit 6cf5b9cf authored by Denis Kuznetsov's avatar Denis Kuznetsov Committed by Commit Bot

oobe: add tests for debug overlay

Bug: 1073095
Change-Id: I505c982ee92bf7ef4c58f419989ee64e3a50415c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2260601Reviewed-by: default avatarRenato Silva <rrsilva@google.com>
Commit-Queue: Denis Kuznetsov [CET] <antrim@chromium.org>
Cr-Commit-Position: refs/heads/master@{#781788}
parent ffec9de5
// Copyright 2020 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 "ash/public/cpp/login_screen_test_api.h"
#include "base/bind.h"
#include "base/command_line.h"
#include "base/strings/strcat.h"
#include "chrome/browser/chromeos/login/test/device_state_mixin.h"
#include "chrome/browser/chromeos/login/test/js_checker.h"
#include "chrome/browser/chromeos/login/test/login_manager_mixin.h"
#include "chrome/browser/chromeos/login/test/oobe_base_test.h"
#include "chrome/browser/chromeos/login/test/test_condition_waiter.h"
#include "chromeos/constants/chromeos_switches.h"
#include "content/public/test/browser_test.h"
namespace chromeos {
namespace {
constexpr char kDebugButton[] = "invokeDebuggerButton";
constexpr char kDebugOverlay[] = "debuggerOverlay";
constexpr char kScreensPanel[] = "DebuggerPanelScreens";
constexpr int kOobeScreensCount = 34;
constexpr int kLoginScreensCount = 29;
std::string ElementsInPanel(const std::string& panel) {
return base::StrCat({"$('", panel, "').children.length"});
}
} // namespace
class DebugOverlayTest : public OobeBaseTest {
public:
DebugOverlayTest() {}
~DebugOverlayTest() override = default;
void SetUpCommandLine(base::CommandLine* command_line) override {
command_line->AppendSwitch(::chromeos::switches::kShowOobeDevOverlay);
OobeBaseTest::SetUpCommandLine(command_line);
}
};
class DebugOverlayOnLoginTest : public DebugOverlayTest {
public:
DebugOverlayOnLoginTest() { login_mixin_.AppendRegularUsers(1); }
private:
DeviceStateMixin device_state_{
&mixin_host_, DeviceStateMixin::State::OOBE_COMPLETED_CONSUMER_OWNED};
LoginManagerMixin login_mixin_{&mixin_host_};
};
IN_PROC_BROWSER_TEST_F(DebugOverlayTest, HideAndShow) {
test::OobeJS().ExpectHidden(kDebugOverlay);
test::OobeJS().ExpectVisible(kDebugButton);
test::OobeJS().ClickOn(kDebugButton);
test::OobeJS().CreateVisibilityWaiter(true, kDebugOverlay)->Wait();
test::OobeJS().ExpectVisible(kDebugButton);
test::OobeJS().ClickOn(kDebugButton);
test::OobeJS().CreateVisibilityWaiter(false, kDebugOverlay)->Wait();
}
IN_PROC_BROWSER_TEST_F(DebugOverlayTest, ExpectScreenButtonsCount) {
test::OobeJS().ExpectHidden(kDebugOverlay);
test::OobeJS().ExpectVisible(kDebugButton);
test::OobeJS().ClickOn(kDebugButton);
test::OobeJS().CreateVisibilityWaiter(true, kDebugOverlay)->Wait();
test::OobeJS().ExpectEQ(ElementsInPanel(kScreensPanel), kOobeScreensCount);
}
IN_PROC_BROWSER_TEST_F(DebugOverlayOnLoginTest, ExpectScreenButtonsCount) {
ASSERT_TRUE(ash::LoginScreenTestApi::ClickAddUserButton());
WaitForOobeUI();
test::OobeJS().ExpectHidden(kDebugOverlay);
test::OobeJS().ExpectVisible(kDebugButton);
test::OobeJS().ClickOn(kDebugButton);
test::OobeJS().CreateVisibilityWaiter(true, kDebugOverlay)->Wait();
test::OobeJS().ExpectEQ(ElementsInPanel(kScreensPanel), kLoginScreensCount);
}
} // namespace chromeos
...@@ -788,13 +788,14 @@ cr.define('cr.ui.login.debug', function() { ...@@ -788,13 +788,14 @@ cr.define('cr.ui.login.debug', function() {
} }
class ToolPanel { class ToolPanel {
constructor(parent, title) { constructor(parent, title, id) {
this.titleDiv = this.titleDiv =
/** @type {!HTMLElement} */ (document.createElement('h2')); /** @type {!HTMLElement} */ (document.createElement('h2'));
this.titleDiv.textContent = title; this.titleDiv.textContent = title;
let panel = /** @type {!HTMLElement} */ (document.createElement('div')); let panel = /** @type {!HTMLElement} */ (document.createElement('div'));
panel.className = 'debug-tool-panel'; panel.className = 'debug-tool-panel';
panel.id = id;
parent.appendChild(this.titleDiv); parent.appendChild(this.titleDiv);
parent.appendChild(panel); parent.appendChild(panel);
...@@ -1022,7 +1023,8 @@ cr.define('cr.ui.login.debug', function() { ...@@ -1022,7 +1023,8 @@ cr.define('cr.ui.login.debug', function() {
} }
createLanguagePanel(parent) { createLanguagePanel(parent) {
let langPanel = new ToolPanel(this.debuggerOverlay_, 'Language'); let langPanel = new ToolPanel(
this.debuggerOverlay_, 'Language', 'DebuggerPanelLanguage');
const LANGUAGES = [ const LANGUAGES = [
['English', 'en-US'], ['English', 'en-US'],
['German', 'de'], ['German', 'de'],
...@@ -1040,7 +1042,8 @@ cr.define('cr.ui.login.debug', function() { ...@@ -1040,7 +1042,8 @@ cr.define('cr.ui.login.debug', function() {
} }
createToolsPanel(parent) { createToolsPanel(parent) {
let panel = new ToolPanel(this.debuggerOverlay_, 'Tools'); let panel =
new ToolPanel(this.debuggerOverlay_, 'Tools', 'DebuggerPanelTools');
new DebugButton( new DebugButton(
panel.content, 'Capture screenshot', this.makeScreenshot.bind(this)); panel.content, 'Capture screenshot', this.makeScreenshot.bind(this));
new DebugButton( new DebugButton(
...@@ -1052,14 +1055,16 @@ cr.define('cr.ui.login.debug', function() { ...@@ -1052,14 +1055,16 @@ cr.define('cr.ui.login.debug', function() {
} }
createScreensPanel(parent) { createScreensPanel(parent) {
let panel = new ToolPanel(this.debuggerOverlay_, 'Screens'); let panel = new ToolPanel(
this.debuggerOverlay_, 'Screens', 'DebuggerPanelScreens');
// List of screens will be created later, as not all screens // List of screens will be created later, as not all screens
// might be registered at this point. // might be registered at this point.
this.screensPanel = panel; this.screensPanel = panel;
} }
createStatesPanel(parent) { createStatesPanel(parent) {
let panel = new ToolPanel(this.debuggerOverlay_, 'Screen States'); let panel = new ToolPanel(
this.debuggerOverlay_, 'Screen States', 'DebuggerPanelStates');
// List of states is rebuilt every time to reflect current screen. // List of states is rebuilt every time to reflect current screen.
this.statesPanel = panel; this.statesPanel = panel;
} }
...@@ -1221,6 +1226,7 @@ cr.define('cr.ui.login.debug', function() { ...@@ -1221,6 +1226,7 @@ cr.define('cr.ui.login.debug', function() {
// Create UI Debugger button // Create UI Debugger button
let button = let button =
/** @type {!HTMLElement} */ (document.createElement('div')); /** @type {!HTMLElement} */ (document.createElement('div'));
button.id = 'invokeDebuggerButton';
button.className = 'debugger-button'; button.className = 'debugger-button';
button.textContent = 'Debug'; button.textContent = 'Debug';
button.addEventListener('click', this.toggleDebugUI.bind(this)); button.addEventListener('click', this.toggleDebugUI.bind(this));
...@@ -1231,6 +1237,7 @@ cr.define('cr.ui.login.debug', function() { ...@@ -1231,6 +1237,7 @@ cr.define('cr.ui.login.debug', function() {
// Create base debugger panel. // Create base debugger panel.
let overlay = let overlay =
/** @type {!HTMLElement} */ (document.createElement('div')); /** @type {!HTMLElement} */ (document.createElement('div'));
overlay.id = 'debuggerOverlay';
overlay.className = 'debugger-overlay'; overlay.className = 'debugger-overlay';
overlay.setAttribute('hidden', true); overlay.setAttribute('hidden', true);
this.debuggerOverlay_ = overlay; this.debuggerOverlay_ = overlay;
......
...@@ -2192,6 +2192,7 @@ if (!is_android) { ...@@ -2192,6 +2192,7 @@ if (!is_android) {
"../browser/chromeos/login/challenge_response_auth_keys_loader_browsertest.cc", "../browser/chromeos/login/challenge_response_auth_keys_loader_browsertest.cc",
"../browser/chromeos/login/configuration_based_oobe_browsertest.cc", "../browser/chromeos/login/configuration_based_oobe_browsertest.cc",
"../browser/chromeos/login/crash_restore_browsertest.cc", "../browser/chromeos/login/crash_restore_browsertest.cc",
"../browser/chromeos/login/debug_overlay_browsertest.cc",
"../browser/chromeos/login/demo_mode/demo_app_launcher_browsertest.cc", "../browser/chromeos/login/demo_mode/demo_app_launcher_browsertest.cc",
"../browser/chromeos/login/demo_mode/demo_session_browsertest.cc", "../browser/chromeos/login/demo_mode/demo_session_browsertest.cc",
"../browser/chromeos/login/demo_mode/demo_setup_browsertest.cc", "../browser/chromeos/login/demo_mode/demo_setup_browsertest.cc",
......
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
-AutoEnrollmentWithStatistics.* -AutoEnrollmentWithStatistics.*
-BlockingLoginTest.* -BlockingLoginTest.*
-ChallengeResponseAuthKeysLoaderBrowserTest.* -ChallengeResponseAuthKeysLoaderBrowserTest.*
-DebugOverlayTest.*
-DebugOverlayOnLoginTest.*
-DemoSessionActiveDirectoryDeviceTest.* -DemoSessionActiveDirectoryDeviceTest.*
-DemoSessionConsumerDeviceTest.* -DemoSessionConsumerDeviceTest.*
-DemoSessionDemoDeviceModeTest.* -DemoSessionDemoDeviceModeTest.*
......
...@@ -12,6 +12,8 @@ AutoEnrollmentNoStateKeys.* ...@@ -12,6 +12,8 @@ AutoEnrollmentNoStateKeys.*
AutoEnrollmentWithStatistics.* AutoEnrollmentWithStatistics.*
BlockingLoginTest.* BlockingLoginTest.*
ChallengeResponseAuthKeysLoaderBrowserTest.* ChallengeResponseAuthKeysLoaderBrowserTest.*
DebugOverlayTest.*
DebugOverlayOnLoginTest.*
DemoSessionActiveDirectoryDeviceTest.* DemoSessionActiveDirectoryDeviceTest.*
DemoSessionConsumerDeviceTest.* DemoSessionConsumerDeviceTest.*
DemoSessionDemoDeviceModeTest.* DemoSessionDemoDeviceModeTest.*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment