Commit 7513e6d7 authored by My Nguyen's avatar My Nguyen Committed by Commit Bot

[CrOS Settings] Add metrics test for os_languages_page

Long overdue tests. Added for https://crrev.com/c/2315728.
Done after polymer3 migration of os_languages_page at
https://crrev.com/c/2308549.

Bug: 1106033
Change-Id: Ibaa2fca8c2ba4def0b4da8287dc984ac1a8d4b09
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2345926Reviewed-by: default avatarKyle Horimoto <khorimoto@chromium.org>
Commit-Queue: My Nguyen <myy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#796770}
parent 4feae4d0
...@@ -20,4 +20,5 @@ import './os_reset_page/os_reset_page.m.js'; ...@@ -20,4 +20,5 @@ import './os_reset_page/os_reset_page.m.js';
export {LanguagesBrowserProxy, LanguagesBrowserProxyImpl} from '../languages_page/languages_browser_proxy.m.js'; export {LanguagesBrowserProxy, LanguagesBrowserProxyImpl} from '../languages_page/languages_browser_proxy.m.js';
export {TimeZoneAutoDetectMethod} from './date_time_page/date_time_types.m.js'; export {TimeZoneAutoDetectMethod} from './date_time_page/date_time_types.m.js';
export {TimeZoneBrowserProxyImpl} from './date_time_page/timezone_browser_proxy.m.js'; export {TimeZoneBrowserProxyImpl} from './date_time_page/timezone_browser_proxy.m.js';
export {LanguagesMetricsProxy, LanguagesMetricsProxyImpl, LanguagesPageInteraction} from './os_languages_page/languages_metrics_proxy.m.js';
export {OsResetBrowserProxyImpl} from './os_reset_page/os_reset_browser_proxy.m.js'; export {OsResetBrowserProxyImpl} from './os_reset_page/os_reset_browser_proxy.m.js';
...@@ -237,7 +237,7 @@ ...@@ -237,7 +237,7 @@
role-description="$i18n{subpageArrowRoleDescription}"></cr-link-row> role-description="$i18n{subpageArrowRoleDescription}"></cr-link-row>
</div> </div>
<settings-toggle-button <settings-toggle-button
class="hr" class="hr" id="showImeMenu"
pref="{{prefs.settings.language.ime_menu_activated}}" pref="{{prefs.settings.language.ime_menu_activated}}"
label="$i18n{showImeMenu}" label="$i18n{showImeMenu}"
on-settings-boolean-control-change="onShowImeMenuChange_"> on-settings-boolean-control-change="onShowImeMenuChange_">
......
...@@ -269,6 +269,7 @@ if (include_js_tests) { ...@@ -269,6 +269,7 @@ if (include_js_tests) {
"$root_gen_dir/chrome/test/data/webui/settings/chromeos/smart_inputs_page_test.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/smart_inputs_page_test.m.js",
"$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_multidevice_browser_proxy.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_multidevice_browser_proxy.m.js",
"$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_os_languages_browser_proxy.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_os_languages_browser_proxy.m.js",
"$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_os_languages_metrics_proxy.m.js",
"$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_os_lifetime_browser_proxy.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_os_lifetime_browser_proxy.m.js",
"$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_os_reset_browser_proxy.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_os_reset_browser_proxy.m.js",
"$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_os_sync_browser_proxy.m.js", "$root_gen_dir/chrome/test/data/webui/settings/chromeos/test_os_sync_browser_proxy.m.js",
......
...@@ -58,6 +58,7 @@ js_modulizer("modulize") { ...@@ -58,6 +58,7 @@ js_modulizer("modulize") {
"personalization_page_test.js", "personalization_page_test.js",
"smart_inputs_page_test.js", "smart_inputs_page_test.js",
"test_os_languages_browser_proxy.js", "test_os_languages_browser_proxy.js",
"test_os_languages_metrics_proxy.js",
"test_os_lifetime_browser_proxy.js", "test_os_lifetime_browser_proxy.js",
"test_multidevice_browser_proxy.js", "test_multidevice_browser_proxy.js",
"test_os_reset_browser_proxy.js", "test_os_reset_browser_proxy.js",
......
...@@ -3,13 +3,14 @@ ...@@ -3,13 +3,14 @@
// found in the LICENSE file. // found in the LICENSE file.
// clang-format off // clang-format off
// #import {LanguagesBrowserProxyImpl} from 'chrome://os-settings/chromeos/lazy_load.js'; // #import {LanguagesBrowserProxyImpl, LanguagesMetricsProxyImpl, LanguagesPageInteraction} from 'chrome://os-settings/chromeos/lazy_load.js';
// #import {CrSettingsPrefs, Router} from 'chrome://os-settings/chromeos/os_settings.js'; // #import {CrSettingsPrefs, Router} from 'chrome://os-settings/chromeos/os_settings.js';
// #import {assert} from 'chrome://resources/js/assert.m.js'; // #import {assert} from 'chrome://resources/js/assert.m.js';
// #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; // #import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
// #import {getFakeLanguagePrefs} from '../fake_language_settings_private.m.js' // #import {getFakeLanguagePrefs} from '../fake_language_settings_private.m.js'
// #import {FakeSettingsPrivate} from '../fake_settings_private.m.js'; // #import {FakeSettingsPrivate} from '../fake_settings_private.m.js';
// #import {TestLanguagesBrowserProxy} from './test_os_languages_browser_proxy.m.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'; // #import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
// #import {fakeDataBind} from '../../test_util.m.js'; // #import {fakeDataBind} from '../../test_util.m.js';
// clang-format on // clang-format on
...@@ -33,6 +34,8 @@ cr.define('os_languages_page_tests', function() { ...@@ -33,6 +34,8 @@ cr.define('os_languages_page_tests', function() {
let actionMenu = null; let actionMenu = null;
/** @type {?settings.LanguagesBrowserProxy} */ /** @type {?settings.LanguagesBrowserProxy} */
let browserProxy = null; let browserProxy = null;
/** @type {!settings.LanguagesMetricsProxy} */
let metricsProxy;
// Enabled language pref name for the platform. // Enabled language pref name for the platform.
const languagesPref = 'settings.language.preferred_languages'; const languagesPref = 'settings.language.preferred_languages';
...@@ -58,6 +61,10 @@ cr.define('os_languages_page_tests', function() { ...@@ -58,6 +61,10 @@ cr.define('os_languages_page_tests', function() {
browserProxy = new settings.TestLanguagesBrowserProxy(); browserProxy = new settings.TestLanguagesBrowserProxy();
settings.LanguagesBrowserProxyImpl.instance_ = browserProxy; settings.LanguagesBrowserProxyImpl.instance_ = browserProxy;
// Sets up test metrics proxy.
metricsProxy = new settings.TestLanguagesMetricsProxy();
settings.LanguagesMetricsProxyImpl.instance_ = metricsProxy;
// Set up fake languageSettingsPrivate API. // Set up fake languageSettingsPrivate API.
const languageSettingsPrivate = browserProxy.getLanguageSettingsPrivate(); const languageSettingsPrivate = browserProxy.getLanguageSettingsPrivate();
languageSettingsPrivate.setSettingsPrefs(settingsPrefs); languageSettingsPrivate.setSettingsPrefs(settingsPrefs);
...@@ -339,6 +346,83 @@ cr.define('os_languages_page_tests', function() { ...@@ -339,6 +346,83 @@ cr.define('os_languages_page_tests', function() {
'_comp_ime_jkghodnilhceideoidjikpgommlajknkxkb:us::eng'); '_comp_ime_jkghodnilhceideoidjikpgommlajknkxkb:us::eng');
}); });
}); });
suite('recordMetrics', function() {
test('records when adding languages', async () => {
languagesPage.$$('#addLanguages').click();
Polymer.dom.flush();
await metricsProxy.whenCalled('recordAddLanguages');
});
test('records when managing input methods', async () => {
languagesPage.$$('#manageInputMethods').click();
Polymer.dom.flush();
await metricsProxy.whenCalled('recordManageInputMethods');
});
test('records when deactivating show ime menu', async () => {
languagesPage.setPrefValue(
'settings.language.ime_menu_activated', true);
languagesPage.$$('#showImeMenu').click();
Polymer.dom.flush();
assertFalse(await metricsProxy.whenCalled(
'recordToggleShowInputOptionsOnShelf'));
});
test('records when activating show ime menu', async () => {
languagesPage.setPrefValue(
'settings.language.ime_menu_activated', false);
languagesPage.$$('#showImeMenu').click();
Polymer.dom.flush();
assertTrue(await metricsProxy.whenCalled(
'recordToggleShowInputOptionsOnShelf'));
});
test(
'records when switching system language and restarting', async () => {
// Adds several languages.
for (const language of ['en-CA', 'en-US', 'tk', 'no']) {
languageHelper.enableLanguage(language);
}
Polymer.dom.flush();
const languagesList = languagesPage.$$('#languagesList');
const menuButtons = languagesList.querySelectorAll(
'.list-item cr-icon-button.icon-more-vert');
// Chooses the second language to switch system language,
// as first language is the default language.
menuButtons[1].click();
const actionMenu = languagesPage.$$('#menu').get();
assertTrue(actionMenu.open);
const menuItems = actionMenu.querySelectorAll('.dropdown-item');
for (const item of menuItems) {
if (item.id === 'uiLanguageItem') {
assertFalse(item.checked);
item.click();
assertEquals(
LanguagesPageInteraction.SWITCH_SYSTEM_LANGUAGE,
await metricsProxy.whenCalled('recordInteraction'));
return;
}
}
actionMenu.close();
// Chooses restart button after switching system language.
const restartButton = languagesPage.$$('#restartButton');
assertTrue(!!restartButton);
restartButton.click();
assertEquals(
LanguagesPageInteraction.RESTART,
await metricsProxy.whenCalled('recordInteraction'));
});
});
}); });
// #cr_define_end // #cr_define_end
......
...@@ -15,6 +15,7 @@ os_test_namespace_rewrites = os_settings_namespace_rewrites + [ ...@@ -15,6 +15,7 @@ os_test_namespace_rewrites = os_settings_namespace_rewrites + [
"settings.getFakeLanguagePrefs|getFakeLanguagePrefs", "settings.getFakeLanguagePrefs|getFakeLanguagePrefs",
"settings.MultiDeviceSettingsMode|MultiDeviceSettingsMode", "settings.MultiDeviceSettingsMode|MultiDeviceSettingsMode",
"settings.TestLanguagesBrowserProxy|TestLanguagesBrowserProxy", "settings.TestLanguagesBrowserProxy|TestLanguagesBrowserProxy",
"settings.TestLanguagesMetricsProxy|TestLanguagesMetricsProxy",
"settings.TestLifetimeBrowserProxy|TestLifetimeBrowserProxy", "settings.TestLifetimeBrowserProxy|TestLifetimeBrowserProxy",
"settings.TestWallpaperBrowserProxy|TestWallpaperBrowserProxy", "settings.TestWallpaperBrowserProxy|TestWallpaperBrowserProxy",
"test_util.eventToPromise|eventToPromise", "test_util.eventToPromise|eventToPromise",
......
...@@ -1365,6 +1365,7 @@ var OSSettingsLanguagesPageTest = class extends OSSettingsBrowserTest { ...@@ -1365,6 +1365,7 @@ var OSSettingsLanguagesPageTest = class extends OSSettingsBrowserTest {
BROWSER_SETTINGS_PATH + '../test_util.js', BROWSER_SETTINGS_PATH + '../test_util.js',
'os_languages_page_tests.js', 'os_languages_page_tests.js',
'test_os_languages_browser_proxy.js', 'test_os_languages_browser_proxy.js',
'test_os_languages_metrics_proxy.js',
]); ]);
} }
}; };
......
// 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.
// clang-format off
// #import {LanguagesMetricsProxy} from 'chrome://os-settings/chromeos/lazy_load.js';
// #import {TestBrowserProxy} from '../../test_browser_proxy.m.js';
// clang-format on
cr.define('settings', function() {
/**
* A test version of LanguagesMetricsProxy.
* @implements {settings.LanguagesMetricsProxy}
*/
/* #export */ class TestLanguagesMetricsProxy extends TestBrowserProxy {
constructor() {
super([
'recordInteraction',
'recordAddLanguages',
'recordManageInputMethods',
'recordToggleShowInputOptionsOnShelf',
]);
}
/** @override */
recordInteraction(interaction) {
this.methodCalled('recordInteraction', interaction);
}
/** @override */
recordAddLanguages() {
this.methodCalled('recordAddLanguages');
}
/** @override */
recordManageInputMethods() {
this.methodCalled('recordManageInputMethods');
}
/** @override */
recordToggleShowInputOptionsOnShelf(value) {
this.methodCalled('recordToggleShowInputOptionsOnShelf', value);
}
}
// #cr_define_end
return {
TestLanguagesMetricsProxy: TestLanguagesMetricsProxy,
};
});
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