blob: d995fe0ddaa60d19b55ea53b7e2a05af1e96d69e [file]
// Copyright 2016 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.
/** @fileoverview Runs tests for the settings menu. */
// clang-format off
// #import {pageVisibility, Router, routes} from 'chrome://settings/settings.js';
// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
// #import {isChromeOS} from 'chrome://resources/js/cr.m.js';
// clang-format on
suite('SettingsMenu', function() {
let settingsMenu = null;
suiteSetup(function() {
loadTimeData.overrideValues({
privacySettingsRedesignEnabled: true,
});
});
setup(function() {
PolymerTest.clearBody();
settingsMenu = document.createElement('settings-menu');
settingsMenu.pageVisibility = settings.pageVisibility;
document.body.appendChild(settingsMenu);
});
teardown(function() {
settingsMenu.remove();
});
test('advancedOpenedBinding', function() {
assertFalse(settingsMenu.advancedOpened);
settingsMenu.advancedOpened = true;
Polymer.dom.flush();
assertTrue(settingsMenu.$.advancedSubmenu.opened);
settingsMenu.advancedOpened = false;
Polymer.dom.flush();
assertFalse(settingsMenu.$.advancedSubmenu.opened);
});
test('tapAdvanced', function() {
assertFalse(settingsMenu.advancedOpened);
const advancedToggle = settingsMenu.$$('#advancedButton');
assertTrue(!!advancedToggle);
advancedToggle.click();
Polymer.dom.flush();
assertTrue(settingsMenu.$.advancedSubmenu.opened);
advancedToggle.click();
Polymer.dom.flush();
assertFalse(settingsMenu.$.advancedSubmenu.opened);
});
test('upAndDownIcons', function() {
// There should be different icons for a top level menu being open
// vs. being closed. E.g. arrow-drop-up and arrow-drop-down.
const ironIconElement = settingsMenu.$$('#advancedButton iron-icon');
assertTrue(!!ironIconElement);
settingsMenu.advancedOpened = true;
Polymer.dom.flush();
const openIcon = ironIconElement.icon;
assertTrue(!!openIcon);
settingsMenu.advancedOpened = false;
Polymer.dom.flush();
assertNotEquals(openIcon, ironIconElement.icon);
});
// Test that navigating via the paper menu always clears the current
// search URL parameter.
test('clearsUrlSearchParam', function() {
// As of iron-selector 2.x, need to force iron-selector to update before
// clicking items on it, or wait for 'iron-items-changed'
const ironSelector = settingsMenu.$$('iron-selector');
ironSelector.forceSynchronousItemUpdate();
const urlParams = new URLSearchParams('search=foo');
settings.Router.getInstance().navigateTo(settings.routes.BASIC, urlParams);
assertEquals(
urlParams.toString(),
settings.Router.getInstance().getQueryParameters().toString());
settingsMenu.$.people.click();
assertEquals(
'', settings.Router.getInstance().getQueryParameters().toString());
});
});
suite('SettingsMenuReset', function() {
let settingsMenu = null;
setup(function() {
PolymerTest.clearBody();
settings.Router.getInstance().navigateTo(settings.routes.RESET, '');
settingsMenu = document.createElement('settings-menu');
document.body.appendChild(settingsMenu);
});
teardown(function() {
settingsMenu.remove();
});
test('openResetSection', function() {
const selector = settingsMenu.$.subMenu;
const path = new window.URL(selector.selected).pathname;
assertEquals('/reset', path);
});
test('navigateToAnotherSection', function() {
const selector = settingsMenu.$.subMenu;
let path = new window.URL(selector.selected).pathname;
assertEquals('/reset', path);
settings.Router.getInstance().navigateTo(settings.routes.PEOPLE, '');
Polymer.dom.flush();
path = new window.URL(selector.selected).pathname;
assertEquals('/people', path);
});
test('navigateToBasic', function() {
const selector = settingsMenu.$.subMenu;
const path = new window.URL(selector.selected).pathname;
assertEquals('/reset', path);
settings.Router.getInstance().navigateTo(settings.routes.BASIC, '');
Polymer.dom.flush();
// BASIC has no sub page selected.
assertFalse(!!selector.selected);
});
test('pageVisibility', function() {
function assertPageVisibility(expectedHidden) {
assertEquals(expectedHidden, settingsMenu.$$('#people').hidden);
assertEquals(expectedHidden, settingsMenu.$$('#appearance').hidden);
assertEquals(expectedHidden, settingsMenu.$$('#onStartup').hidden);
assertEquals(expectedHidden, settingsMenu.$$('#advancedButton').hidden);
assertEquals(expectedHidden, settingsMenu.$$('#advancedSubmenu').hidden);
assertEquals(expectedHidden, settingsMenu.$$('#reset').hidden);
if (!cr.isChromeOS) {
assertEquals(expectedHidden, settingsMenu.$$('#defaultBrowser').hidden);
}
}
// The default pageVisibility should not cause menu items to be hidden.
assertPageVisibility(false);
// Set the visibility of the pages under test to "false".
settingsMenu.pageVisibility = Object.assign(settings.pageVisibility || {}, {
advancedSettings: false,
appearance: false,
defaultBrowser: false,
multidevice: false,
onStartup: false,
people: false,
reset: false
});
Polymer.dom.flush();
// Now, the menu items should be hidden.
assertPageVisibility(true);
});
test('safetyCheckInMenu', function() {
Polymer.dom.flush();
assertTrue(!!settingsMenu.$$('#safetyCheck'));
});
});
suite('SettingsMenuPrivacyRedesignFlagOff', function() {
let settingsMenu = null;
suiteSetup(function() {
loadTimeData.overrideValues({
privacySettingsRedesignEnabled: false,
});
});
setup(function() {
PolymerTest.clearBody();
settingsMenu = document.createElement('settings-menu');
settingsMenu.pageVisibility = settings.pageVisibility;
document.body.appendChild(settingsMenu);
});
teardown(function() {
settingsMenu.remove();
});
test('safetyCheckNotInMenu', function() {
Polymer.dom.flush();
assertFalse(!!settingsMenu.$$('#safetyCheck'));
});
});