Skip to content

Commit

Permalink
Settings: Migrate more tests to TypeScript
Browse files Browse the repository at this point in the history
Migrating category_default_settings_test and fake_settings_private.

Forking fake_settings_private, so that the old (JS) version can still
be used in ChromeOS tests.

Also removing "testTristateCategory" function which was no longer used
anywhere (detected as unused by TS compiler/eslint).

Bug: 1263610
Change-Id: Ie9e383d3ba4025bda8f2682bbf9909171b66ac2f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3541437
Reviewed-by: Demetrios Papadopoulos <dpapad@chromium.org>
Commit-Queue: Rebekah Potter <rbpotter@chromium.org>
Cr-Commit-Position: refs/heads/main@{#984086}
  • Loading branch information
rbpotter authored and Chromium LUCI CQ committed Mar 22, 2022
1 parent c777655 commit 492dd96
Show file tree
Hide file tree
Showing 12 changed files with 179 additions and 144 deletions.
1 change: 1 addition & 0 deletions chrome/browser/resources/settings/lazy_load.ts
Expand Up @@ -171,6 +171,7 @@ export {AllSitesElement} from './site_settings/all_sites.js';
// <if expr="chromeos">
export {AndroidInfoBrowserProxy, AndroidInfoBrowserProxyImpl, AndroidSmsInfo} from './site_settings/android_info_browser_proxy.js';
// </if>
export {CategoryDefaultSettingElement} from './site_settings/category_default_setting.js';
export {CategorySettingExceptionsElement} from './site_settings/category_setting_exceptions.js';
export {ChooserExceptionListElement} from './site_settings/chooser_exception_list.js';
export {ChooserExceptionListEntryElement} from './site_settings/chooser_exception_list_entry.js';
Expand Down
Expand Up @@ -41,6 +41,7 @@ import {assert, assertNotReached} from 'chrome://resources/js/assert.m.js';
import {WebUIListenerMixin} from 'chrome://resources/js/web_ui_listener_mixin.js';
import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';

import {SettingsToggleButtonElement} from '../controls/settings_toggle_button.js';
import {loadTimeData} from '../i18n_setup.js';

import {getTemplate} from './category_default_setting.html.js';
Expand All @@ -56,10 +57,17 @@ enum SubOptionMode {
NONE = 'none',
}

export interface CategoryDefaultSettingElement {
$: {
toggle: SettingsToggleButtonElement,
};
}

const CategoryDefaultSettingElementBase =
WebUIListenerMixin(SiteSettingsMixin(PolymerElement));

class CategoryDefaultSettingElement extends CategoryDefaultSettingElementBase {
export class CategoryDefaultSettingElement extends
CategoryDefaultSettingElementBase {
static get is() {
return 'category-default-setting';
}
Expand Down Expand Up @@ -288,5 +296,12 @@ class CategoryDefaultSettingElement extends CategoryDefaultSettingElementBase {
}
}

declare global {
interface HTMLElementTagNameMap {
'category-default-setting': CategoryDefaultSettingElement;
}
}


customElements.define(
CategoryDefaultSettingElement.is, CategoryDefaultSettingElement);
4 changes: 2 additions & 2 deletions chrome/test/data/webui/settings/BUILD.gn
Expand Up @@ -52,7 +52,7 @@ non_preprocessed_files = [
"autofill_section_test.ts",
"avatar_icon_test.ts",
"basic_page_test.ts",
"category_default_setting_tests.js",
"category_default_setting_tests.ts",
"category_setting_exceptions_tests.ts",
"checkbox_tests.ts",
"chooser_exception_list_entry_tests.ts",
Expand All @@ -64,7 +64,7 @@ non_preprocessed_files = [
"do_not_track_toggle_test.ts",
"dropdown_menu_tests.ts",
"extension_controlled_indicator_tests.ts",
"fake_settings_private.js",
"fake_settings_private.ts",
"help_page_test.ts",
"idle_load_tests.ts",
"multi_store_exception_entry_test.ts",
Expand Down
Expand Up @@ -3,31 +3,30 @@
// found in the LICENSE file.

// clang-format off
import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {ContentSetting,ContentSettingProvider,ContentSettingsTypes,SiteSettingsPrefsBrowserProxyImpl} from 'chrome://settings/lazy_load.js';
import {assertNotReached} from 'chrome://resources/js/assert_ts.js';
import {CategoryDefaultSettingElement,ContentSetting,ContentSettingProvider,ContentSettingsTypes,SiteSettingsPrefsBrowserProxyImpl} from 'chrome://settings/lazy_load.js';
import {assertEquals, assertNotEquals} from 'chrome://webui-test/chai_assert.js';
import {TestSiteSettingsPrefsBrowserProxy} from './test_site_settings_prefs_browser_proxy.js';
import {createContentSettingTypeToValuePair,createDefaultContentSetting,createSiteSettingsPrefs} from './test_util.js';
import {createContentSettingTypeToValuePair,createDefaultContentSetting,createSiteSettingsPrefs,SiteSettingsPref} from './test_util.js';
// clang-format on

/** @fileoverview Suite of tests for category-default-setting. */
suite('CategoryDefaultSetting', function() {
/**
* A site settings category created before each test.
* @type {SiteSettingsCategory}
*/
let testElement;
let testElement: CategoryDefaultSettingElement;

/**
* The mock proxy object to use during test.
* @type {TestSiteSettingsPrefsBrowserProxy}
*/
let browserProxy = null;
let browserProxy: TestSiteSettingsPrefsBrowserProxy;

// Initialize a site-settings-category before each test.
setup(function() {
browserProxy = new TestSiteSettingsPrefsBrowserProxy();
SiteSettingsPrefsBrowserProxyImpl.setInstance(browserProxy);
PolymerTest.clearBody();
document.body.innerHTML = '';
testElement = document.createElement('category-default-setting');
testElement.subOptionLabel = 'test label';
document.body.appendChild(testElement);
Expand Down Expand Up @@ -63,21 +62,22 @@ suite('CategoryDefaultSetting', function() {
// Verifies that the widget works as expected for a given |category|, initial
// |prefs|, and given expectations.
function testCategoryEnabled(
testElement, category, prefs, expectedEnabled,
expectedEnabledContentSetting) {
testElement: CategoryDefaultSettingElement,
category: ContentSettingsTypes, prefs: SiteSettingsPref,
expectedEnabled: boolean, expectedEnabledContentSetting: ContentSetting) {
testElement.category = category;
browserProxy.reset();
browserProxy.setPrefs(prefs);

return browserProxy.whenCalled('getDefaultValueForContentType')
.then(function(contentType) {
.then(function(contentType: ContentSettingsTypes) {
assertEquals(category, contentType);
assertEquals(expectedEnabled, testElement.categoryEnabled);
browserProxy.resetResolver('setDefaultValueForContentType');
testElement.$.toggle.click();
return browserProxy.whenCalled('setDefaultValueForContentType');
})
.then(function(args) {
.then(function(args: ContentSettingsTypes[]) {
assertEquals(category, args[0]);
const oppositeSetting = expectedEnabled ?
ContentSetting.BLOCK :
Expand All @@ -90,9 +90,8 @@ suite('CategoryDefaultSetting', function() {
test('categoryEnabled correctly represents prefs (enabled)', function() {
/**
* An example pref where the location category is enabled.
* @type {SiteSettingsPref}
*/
const prefsLocationEnabled = createSiteSettingsPrefs(
const prefsLocationEnabled: SiteSettingsPref = createSiteSettingsPrefs(
[
createContentSettingTypeToValuePair(
ContentSettingsTypes.GEOLOCATION, createDefaultContentSetting({
Expand All @@ -109,9 +108,8 @@ suite('CategoryDefaultSetting', function() {
test('categoryEnabled correctly represents prefs (disabled)', function() {
/**
* An example pref where the location category is disabled.
* @type {SiteSettingsPref}
*/
const prefsLocationDisabled = createSiteSettingsPrefs(
const prefsLocationDisabled: SiteSettingsPref = createSiteSettingsPrefs(
[createContentSettingTypeToValuePair(
ContentSettingsTypes.GEOLOCATION, createDefaultContentSetting({
setting: ContentSetting.BLOCK,
Expand Down Expand Up @@ -155,110 +153,6 @@ suite('CategoryDefaultSetting', function() {
});
});

function testTristateCategory(
prefs, category, thirdState, secondaryToggleId) {
testElement.category = category;
browserProxy.setPrefs(prefs);

let secondaryToggle = null;

return browserProxy.whenCalled('getDefaultValueForContentType')
.then(function(contentType) {
flush();
secondaryToggle = testElement.$$(secondaryToggleId);
assertTrue(!!secondaryToggle);

assertEquals(category, contentType);
assertTrue(testElement.categoryEnabled);
assertFalse(secondaryToggle.disabled);
assertTrue(secondaryToggle.checked);

browserProxy.resetResolver('setDefaultValueForContentType');
testElement.$.toggle.click();
return browserProxy.whenCalled('setDefaultValueForContentType');
})
.then(function(args) {
// Check THIRD_STATE => BLOCK transition succeeded.
flush();

assertEquals(category, args[0]);
assertEquals(ContentSetting.BLOCK, args[1]);
assertFalse(testElement.categoryEnabled);
assertTrue(secondaryToggle.disabled);
assertTrue(secondaryToggle.checked);

browserProxy.resetResolver('setDefaultValueForContentType');
testElement.$.toggle.click();
return browserProxy.whenCalled('setDefaultValueForContentType');
})
.then(function(args) {
// Check BLOCK => THIRD_STATE transition succeeded.
flush();

assertEquals(category, args[0]);
assertEquals(thirdState, args[1]);
assertTrue(testElement.categoryEnabled);
assertFalse(secondaryToggle.disabled);
assertTrue(secondaryToggle.checked);

browserProxy.resetResolver('setDefaultValueForContentType');
secondaryToggle.click();
return browserProxy.whenCalled('setDefaultValueForContentType');
})
.then(function(args) {
// Check THIRD_STATE => ALLOW transition succeeded.
flush();

assertEquals(category, args[0]);
assertEquals(ContentSetting.ALLOW, args[1]);
assertTrue(testElement.categoryEnabled);
assertFalse(secondaryToggle.disabled);
assertFalse(secondaryToggle.checked);

browserProxy.resetResolver('setDefaultValueForContentType');
testElement.$.toggle.click();
return browserProxy.whenCalled('setDefaultValueForContentType');
})
.then(function(args) {
// Check ALLOW => BLOCK transition succeeded.
flush();

assertEquals(category, args[0]);
assertEquals(ContentSetting.BLOCK, args[1]);
assertFalse(testElement.categoryEnabled);
assertTrue(secondaryToggle.disabled);
assertFalse(secondaryToggle.checked);

browserProxy.resetResolver('setDefaultValueForContentType');
testElement.$.toggle.click();
return browserProxy.whenCalled('setDefaultValueForContentType');
})
.then(function(args) {
// Check BLOCK => ALLOW transition succeeded.
flush();

assertEquals(category, args[0]);
assertEquals(ContentSetting.ALLOW, args[1]);
assertTrue(testElement.categoryEnabled);
assertFalse(secondaryToggle.disabled);
assertFalse(secondaryToggle.checked);

browserProxy.resetResolver('setDefaultValueForContentType');
secondaryToggle.click();
return browserProxy.whenCalled('setDefaultValueForContentType');
})
.then(function(args) {
// Check ALLOW => THIRD_STATE transition succeeded.
flush();

assertEquals(category, args[0]);
assertEquals(thirdState, args[1]);
assertTrue(testElement.categoryEnabled);
assertFalse(secondaryToggle.disabled);
assertTrue(secondaryToggle.checked);
});
}

test('test popups content setting default value', function() {
testElement.category = ContentSettingsTypes.POPUPS;
return browserProxy.getDefaultValueForContentType(testElement.category)
Expand All @@ -269,7 +163,7 @@ suite('CategoryDefaultSetting', function() {
});

test('test popups content setting in BLOCKED state', function() {
const prefs = createSiteSettingsPrefs(
const prefs: SiteSettingsPref = createSiteSettingsPrefs(
[createContentSettingTypeToValuePair(
ContentSettingsTypes.POPUPS, createDefaultContentSetting({
setting: ContentSetting.BLOCK,
Expand All @@ -282,7 +176,7 @@ suite('CategoryDefaultSetting', function() {
});

test('test popups content setting in ALLOWED state', function() {
const prefs = createSiteSettingsPrefs(
const prefs: SiteSettingsPref = createSiteSettingsPrefs(
[createContentSettingTypeToValuePair(
ContentSettingsTypes.POPUPS, createDefaultContentSetting({
setting: ContentSetting.ALLOW,
Expand Down
Expand Up @@ -4,7 +4,7 @@

// clang-format off
import {assertEquals, assertNotEquals} from 'chrome://webui-test/chai_assert.js';
import {FakeChromeEvent} from '../fake_chrome_event.js';
import {FakeChromeEvent} from '../../fake_chrome_event.js';
// clang-format on

/** @fileoverview Fake implementation of chrome.settingsPrivate for testing. */
Expand All @@ -18,12 +18,12 @@ function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj));
}

/**
* Fake of chrome.settingsPrivate API. Use by setting
* CrSettingsPrefs.deferInitialization to true, then passing a
* FakeSettingsPrivate to settings-prefs#initialize().
* @implements {SettingsPrivate}
*/
/**
* Fake of chrome.settingsPrivate API. Use by setting
* CrSettingsPrefs.deferInitialization to true, then passing a
* FakeSettingsPrivate to settings-prefs#initialize().
* @implements {SettingsPrivate}
*/
export class FakeSettingsPrivate {
/** @param {Array<!chrome.settingsPrivate.PrefObject>=} opt_initialPrefs */
constructor(opt_initialPrefs) {
Expand Down
Expand Up @@ -6,7 +6,7 @@
// #import 'chrome://os-settings/chromeos/lazy_load.js';
// #import {CrSettingsPrefs, Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
// #import {FakeSettingsPrivate} from '../fake_settings_private.js';
// #import {FakeSettingsPrivate} from './fake_settings_private.js';
// #import {waitAfterNextRender} from '../../test_util.js';
// clang-format on

Expand Down
Expand Up @@ -8,7 +8,7 @@
// #import {keyDownOn} from 'chrome://resources/polymer/v3_0/iron-test-helpers/mock-interactions.js';
// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
// #import {getFakeLanguagePrefs} from './fake_language_settings_private.js'
// #import {FakeSettingsPrivate} from '../fake_settings_private.js';
// #import {FakeSettingsPrivate} from './fake_settings_private.js';
// #import {TestLanguagesBrowserProxy} from './test_os_languages_browser_proxy.m.js';
// #import {TestLanguagesMetricsProxy} from './test_os_languages_metrics_proxy.m.js';
// #import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
Expand Down
Expand Up @@ -7,7 +7,7 @@
// #import {CrSettingsPrefs} from 'chrome://os-settings/chromeos/os_settings.js';
// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
// #import {FakeLanguageSettingsPrivate} from './fake_language_settings_private.js';
// #import {FakeSettingsPrivate} from '../fake_settings_private.js';
// #import {FakeSettingsPrivate} from './fake_settings_private.js';
// #import {TestLanguagesBrowserProxy} from './test_os_languages_browser_proxy.m.js';
// clang-format on

Expand Down
Expand Up @@ -9,7 +9,7 @@
// #import {keyDownOn} from 'chrome://resources/polymer/v3_0/iron-test-helpers/mock-interactions.js';
// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
// #import {getFakeLanguagePrefs} from './fake_language_settings_private.js'
// #import {FakeSettingsPrivate} from '../fake_settings_private.js';
// #import {FakeSettingsPrivate} from './fake_settings_private.js';
// #import {TestLanguagesBrowserProxy} from './test_os_languages_browser_proxy.m.js';
// #import {TestLanguagesMetricsProxy} from './test_os_languages_metrics_proxy.m.js';
// #import {TestLifetimeBrowserProxy} from './test_os_lifetime_browser_proxy.m.js';
Expand Down
Expand Up @@ -11,7 +11,7 @@
// #import {FakeQuickUnlockPrivate} from './fake_quick_unlock_private.m.js';
// #import {FakeQuickUnlockUma} from './fake_quick_unlock_uma.m.js';
// #import {LockScreenProgress} from 'chrome://resources/cr_components/chromeos/quick_unlock/lock_screen_constants.m.js';
// #import {FakeSettingsPrivate} from 'chrome://test/settings/fake_settings_private.js';
// #import {FakeSettingsPrivate} from 'chrome://test/settings/chromeos/fake_settings_private.js';
// #import {CrSettingsPrefs, Router, routes} from 'chrome://os-settings/chromeos/os_settings.js';
// #import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
// #import {eventToPromise, waitAfterNextRender, waitBeforeNextRender} from '../../../test_util.js';
Expand Down

0 comments on commit 492dd96

Please sign in to comment.