Commit 706ac3cd authored by My Nguyen's avatar My Nguyen Committed by Commit Bot

Add languages_page_metrics_test_cros for closure compile

Bug: 1000989
Change-Id: I7ae5d8279cb46866e28a4393d8cdc0d3ae21bcd0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2315901Reviewed-by: default avatardpapad <dpapad@chromium.org>
Commit-Queue: My Nguyen <myy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#791994}
parent f308ccfa
......@@ -253,7 +253,9 @@ js_library("lazy_load") {
deps = [
"autofill_page:autofill_section",
"autofill_page:payments_section",
"languages_page:languages_browser_proxy.m",
"languages_page:languages_metrics_proxy",
"languages_page:languages_page",
"privacy_page:cookies_page",
"privacy_page:security_page",
"site_settings:local_data_browser_proxy",
......
......@@ -68,7 +68,7 @@ export {DownloadsBrowserProxyImpl} from './downloads_page/downloads_browser_prox
// <if expr="_google_chrome and is_win">
export {IncompatibleApplication, IncompatibleApplicationsBrowserProxyImpl} from './incompatible_applications_page/incompatible_applications_browser_proxy.js';
// </if>
export {LanguagesBrowserProxyImpl} from './languages_page/languages_browser_proxy.m.js';
export {LanguagesBrowserProxy, LanguagesBrowserProxyImpl} from './languages_page/languages_browser_proxy.m.js';
// <if expr="chromeos">
export {LanguagesMetricsProxy, LanguagesMetricsProxyImpl, LanguagesPageInteraction} from './languages_page/languages_metrics_proxy.js';
// </if>
......
......@@ -393,6 +393,7 @@ js_type_check("closure_compile_local") {
]
deps = [
":chai_assert",
":fake_chrome_event.m",
":mock_timer.m",
":test_browser_proxy.m",
":test_plural_string_proxy",
......@@ -400,6 +401,12 @@ js_type_check("closure_compile_local") {
]
}
js_library("fake_chrome_event.m") {
sources = [ "$root_gen_dir/chrome/test/data/webui/fake_chrome_event.m.js" ]
deps = [ ":chai_assert" ]
extra_deps = [ ":modulize_local" ]
}
js_library("mock_controller.m") {
sources = [ "$root_gen_dir/chrome/test/data/webui/mock_controller.m.js" ]
extra_deps = [ ":modulize_local" ]
......
......@@ -6,13 +6,15 @@
* @fileoverview Fake implementations of ChromeEvent.
*/
// #import {assertFalse, assertTrue} from '../chai_assert.js';
/* #export */ class FakeChromeEvent {
constructor() {
/** @type {!Set<!Function>} */
this.listeners_ = new Set();
}
/** @param {Function} listener */
/** @param {!Function} listener */
addListener(listener) {
assertFalse(
this.listeners_.has(listener),
......@@ -20,7 +22,7 @@
this.listeners_.add(listener);
}
/** @param {Function} listener */
/** @param {!Function} listener */
removeListener(listener) {
assertTrue(
this.listeners_.has(listener),
......@@ -29,9 +31,9 @@
}
/** @param {...} args */
callListeners(...var_args) {
callListeners(...args) {
this.listeners_.forEach(function(l) {
l.apply(null, var_args);
l(...args);
});
}
}
......@@ -97,14 +97,16 @@ js_type_check("closure_compile") {
#":edit_dictionary_page_test",
#":ensure_lazy_loaded",
#":extension_controlled_indicator_tests",
#":fake_input_method_private",
#":fake_language_settings_private",
#":fake_settings_private",
":fake_input_method_private.m",
":fake_language_settings_private.m",
":fake_settings_private.m",
#":help_page_v3_test",
#":idle_load_tests",
#":import_data_dialog_test",
#":incompatible_applications_page_test",
#":languages_page_metrics_test_cros",
":languages_page_metrics_test_cros",
#":languages_page_tests",
#":languages_tests",
#":metrics_reporting_tests",
......@@ -180,8 +182,7 @@ js_type_check("closure_compile") {
#":test_clear_browsing_data_browser_proxy",
#":test_extension_control_browser_proxy",
":test_hats_browser_proxy",
#":test_languages_browser_proxy",
":test_languages_browser_proxy.m",
":test_languages_metrics_proxy",
":test_lifetime_browser_proxy.m",
":test_local_data_browser_proxy",
......@@ -235,6 +236,47 @@ js_library("cookies_page_test") {
externs_list = [ "$externs_path/mocha-2.5.js" ]
}
js_library("fake_language_settings_private.m") {
sources = [ "$root_gen_dir/chrome/test/data/webui/settings/fake_language_settings_private.m.js" ]
deps = [
"..:chai_assert",
"..:fake_chrome_event.m",
"..:test_browser_proxy.m",
"//ui/webui/resources/js:cr.m",
]
extra_deps = [ ":modulize_local" ]
}
js_library("fake_input_method_private.m") {
sources = [ "$root_gen_dir/chrome/test/data/webui/settings/fake_input_method_private.m.js" ]
extra_deps = [ ":modulize_local" ]
}
js_library("fake_settings_private.m") {
sources = [
"$root_gen_dir/chrome/test/data/webui/settings/fake_settings_private.m.js",
]
deps = [
"..:chai_assert",
"..:fake_chrome_event.m",
]
extra_deps = [ ":modulize_local" ]
}
js_library("languages_page_metrics_test_cros") {
deps = [
":fake_language_settings_private.m",
":fake_settings_private.m",
":test_languages_browser_proxy.m",
":test_languages_metrics_proxy",
"..:chai_assert",
"..:test_util.m",
"//chrome/browser/resources/settings:lazy_load",
"//chrome/browser/resources/settings:settings",
]
externs_list = [ "$externs_path/mocha-2.5.js" ]
}
js_library("passwords_and_autofill_fake_data") {
deps = [
"..:chai_assert",
......@@ -391,6 +433,18 @@ js_library("test_hats_browser_proxy") {
]
}
js_library("test_languages_browser_proxy.m") {
sources = [ "$root_gen_dir/chrome/test/data/webui/settings/test_languages_browser_proxy.m.js" ]
deps = [
":fake_input_method_private.m",
":fake_language_settings_private.m",
"..:test_browser_proxy.m",
"//chrome/browser/resources/settings:lazy_load",
"//ui/webui/resources/js:cr.m",
]
extra_deps = [ ":modulize_local" ]
}
js_library("test_languages_metrics_proxy") {
deps = [
"..:test_browser_proxy.m",
......
......@@ -12,7 +12,6 @@ cr.define('settings', function() {
* during testing have been implemented.
*
* @constructor
* @implements {InputMethodPrivate}
*/
/* #export */ function FakeInputMethodPrivate() {}
......
......@@ -7,10 +7,10 @@
* for testing.
*/
// #import {assert} from 'chrome://resources/js/assert.m.js';
// #import {assert, assertNotReached} from 'chrome://resources/js/assert.m.js';
// #import {isChromeOS} from 'chrome://resources/js/cr.m.js';
// #import {FakeChromeEvent} from 'chrome://test/fake_chrome_event.m.js';
// #import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.m.js';
// #import {FakeChromeEvent} from '../fake_chrome_event.m.js';
// #import {TestBrowserProxy} from '../test_browser_proxy.m.js';
cr.define('settings', function() {
/**
......@@ -24,31 +24,38 @@ cr.define('settings', function() {
'getSpellcheckWords',
]);
// /** @type {!SettingsPrefsElement} */
this.settingsPrefs_ = null;
/**
* Called when the pref for the dictionaries used for spell checking
* changes or the status of one of the spell check dictionaries changes.
* @type {ChromeEvent}
* @type {!ChromeEvent}
*/
this.onSpellcheckDictionariesChanged = new FakeChromeEvent();
this.onSpellcheckDictionariesChanged =
/** @type {!ChromeEvent} */ (new FakeChromeEvent());
/**
* Called when words are added to and/or removed from the custom spell
* check dictionary.
* @type {ChromeEvent}
* @type {!ChromeEvent}
*/
this.onCustomDictionaryChanged = new FakeChromeEvent();
this.onCustomDictionaryChanged =
/** @type {!ChromeEvent} */ (new FakeChromeEvent());
/**
* Called when an input method is added.
* @type {ChromeEvent}
* @type {!ChromeEvent}
*/
this.onInputMethodAdded = new FakeChromeEvent();
this.onInputMethodAdded =
/** @type {!ChromeEvent} */ (new FakeChromeEvent());
/**
* Called when an input method is removed.
* @type {ChromeEvent}
* @type {!ChromeEvent}
*/
this.onInputMethodRemoved = new FakeChromeEvent();
this.onInputMethodRemoved =
/** @type {!ChromeEvent} */ (new FakeChromeEvent());
/** @type {!Array<!chrome.languageSettingsPrivate.Language>} */
this.languages = [
......@@ -160,7 +167,7 @@ cr.define('settings', function() {
];
}
/** @param {SettingsPrefsElement} */
/** @param {SettingsPrefsElement} settingsPrefs */
setSettingsPrefs(settingsPrefs) {
this.settingsPrefs_ = settingsPrefs;
}
......@@ -174,7 +181,9 @@ cr.define('settings', function() {
*/
getLanguageList(callback) {
setTimeout(function() {
callback(JSON.parse(JSON.stringify(this.languages)));
callback(
/** @type {!Array<!chrome.languageSettingsPrivate.Language>} */ (
JSON.parse(JSON.stringify(this.languages))));
}.bind(this));
}
......@@ -184,7 +193,8 @@ cr.define('settings', function() {
* @param {string} languageCode
*/
enableLanguage(languageCode) {
let languageCodes = this.settingsPrefs_.prefs.intl.accept_languages.value;
let languageCodes =
this.settingsPrefs_.get('prefs.intl.accept_languages.value');
const languages = languageCodes.split(',');
if (languages.indexOf(languageCode) !== -1) {
return;
......@@ -204,7 +214,8 @@ cr.define('settings', function() {
* @param {string} languageCode
*/
disableLanguage(languageCode) {
let languageCodes = this.settingsPrefs_.prefs.intl.accept_languages.value;
let languageCodes =
this.settingsPrefs_.get('prefs.intl.accept_languages.value');
const languages = languageCodes.split(',');
const index = languages.indexOf(languageCode);
if (index === -1) {
......@@ -229,8 +240,8 @@ cr.define('settings', function() {
*/
setEnableTranslationForLanguage(languageCode, enable) {
const index =
this.settingsPrefs_.prefs.translate_blocked_languages.value.indexOf(
languageCode);
this.settingsPrefs_.get('prefs.translate_blocked_languages.value')
.indexOf(languageCode);
if (enable) {
if (index === -1) {
return;
......@@ -253,7 +264,8 @@ cr.define('settings', function() {
* @param {chrome.languageSettingsPrivate.MoveType} moveType
*/
moveLanguage(languageCode, moveType) {
let languageCodes = this.settingsPrefs_.prefs.intl.accept_languages.value;
let languageCodes =
this.settingsPrefs_.get('prefs.intl.accept_languages.value');
const languages = languageCodes.split(',');
const index = languages.indexOf(languageCode);
......@@ -315,7 +327,8 @@ cr.define('settings', function() {
* @param {string} word
*/
addSpellcheckWord(word) {
this.onCustomDictionaryChanged.callListeners([word], []);
/** @type {FakeChromeEvent} */ (this.onCustomDictionaryChanged)
.callListeners([word], []);
}
/**
......@@ -323,7 +336,8 @@ cr.define('settings', function() {
* @param {string} word
*/
removeSpellcheckWord(word) {
this.onCustomDictionaryChanged.callListeners([], [word]);
/** @type {FakeChromeEvent} */ (this.onCustomDictionaryChanged)
.callListeners([], [word]);
}
/**
......@@ -346,7 +360,8 @@ cr.define('settings', function() {
}
callback({
componentExtensionImes:
JSON.parse(JSON.stringify(this.componentExtensionImes)),
/** @type {!Array<!chrome.languageSettingsPrivate.InputMethod>} */ (
JSON.parse(JSON.stringify(this.componentExtensionImes))),
thirdPartyExtensionImes: [],
});
}
......@@ -383,7 +398,8 @@ cr.define('settings', function() {
inputMethod.enabled = false;
this.settingsPrefs_.set(
'prefs.settings.language.preload_engines.value',
this.settingsPrefs_.prefs.settings.language.preload_engines.value
this.settingsPrefs_
.get('prefs.settings.language.preload_engines.value')
.replace(inputMethodId, ''));
}
......@@ -392,12 +408,14 @@ cr.define('settings', function() {
* @param {string} languageCode
*/
retryDownloadDictionary(languageCode) {
this.onSpellcheckDictionariesChanged.callListeners([
{languageCode, isReady: false, isDownlading: true},
]);
this.onSpellcheckDictionariesChanged.callListeners([
{languageCode, isReady: false, downloadFailed: true},
]);
/** @type {FakeChromeEvent} */ (this.onSpellcheckDictionariesChanged)
.callListeners([
{languageCode, isReady: false, isDownlading: true},
]);
/** @type {FakeChromeEvent} */ (this.onSpellcheckDictionariesChanged)
.callListeners([
{languageCode, isReady: false, downloadFailed: true},
]);
}
}
......
......@@ -3,13 +3,14 @@
// found in the LICENSE file.
// clang-format off
// #import {FakeChromeEvent} from 'chrome://test/fake_chrome_event.m.js';
// #import {assertEquals, assertNotEquals} from '../chai_assert.js';
// #import {FakeChromeEvent} from '../fake_chrome_event.m.js';
// clang-format on
/** @fileoverview Fake implementation of chrome.settingsPrivate for testing. */
cr.define('settings', function() {
/**
* @type {Array<{key: string,
* @typedef {Array<{key: string,
* type: chrome.settingsPrivate.PrefType,
* values: !Array<*>}>}
*/
......@@ -17,8 +18,8 @@ cr.define('settings', function() {
/**
* Creates a deep copy of the object.
* @param {!Object} obj
* @return {!Object}
* @param {*} obj
* @return {*}
*/
function deepCopy(obj) {
return JSON.parse(JSON.stringify(obj));
......@@ -46,7 +47,7 @@ cr.define('settings', function() {
}
// chrome.settingsPrivate override.
this.onPrefsChanged = new FakeChromeEvent();
this.onPrefsChanged = /** @type {!ChromeEvent} */ (new FakeChromeEvent());
}
// chrome.settingsPrivate overrides.
......@@ -88,7 +89,8 @@ cr.define('settings', function() {
getPref(key, callback) {
const pref = this.prefs[key];
assertNotEquals(undefined, pref);
callback(deepCopy(pref));
callback(
/** @type {!chrome.settingsPrivate.PrefObject} */ (deepCopy(pref)));
}
// Functions used by tests.
......@@ -109,7 +111,7 @@ cr.define('settings', function() {
/**
* Notifies the listeners of pref changes.
* @param {!Object<{key: string, value: *}>} changes
* @param {!Array<{key: string, value: *}>} changes
*/
sendPrefChanges(changes) {
const prefs = [];
......@@ -119,9 +121,15 @@ cr.define('settings', function() {
pref.value = change.value;
prefs.push(deepCopy(pref));
}
this.onPrefsChanged.callListeners(prefs);
/** @type {FakeChromeEvent} */ (this.onPrefsChanged).callListeners(prefs);
}
/** @override */
getDefaultZoom() {}
/** @override */
setDefaultZoom() {}
// Private methods for use by the fake API.
/**
......
......@@ -6,6 +6,7 @@ import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min
import {LanguagesBrowserProxyImpl, LanguagesMetricsProxyImpl, LanguagesPageInteraction} from 'chrome://settings/lazy_load.js';
import {CrSettingsPrefs} from 'chrome://settings/settings.js';
import {assertEquals, assertFalse, assertTrue} from '../chai_assert.js';
import {fakeDataBind} from '../test_util.m.js';
import {getFakeLanguagePrefs} from './fake_language_settings_private.m.js';
......@@ -14,21 +15,21 @@ import {TestLanguagesBrowserProxy} from './test_languages_browser_proxy.m.js';
import {TestLanguagesMetricsProxy} from './test_languages_metrics_proxy.js';
suite('LanguagesPageMetricsChromeOS', function() {
/** @type {?LanguageHelper} */
let languageHelper = null;
/** @type {?SettingsLanguagesPageElement} */
let languagesPage = null;
/** @type {?LanguagesBrowserProxy} */
let browserProxy = null;
/** @type {?LanguagesMetricsProxy} */
let languagesMetricsProxy = null;
/** @type {!LanguageHelper} */
let languageHelper;
/** @type {!SettingsLanguagesPageElement} */
let languagesPage;
/** @type {!TestLanguagesBrowserProxy} */
let browserProxy;
/** @type {!TestLanguagesMetricsProxy} */
let languagesMetricsProxy;
suiteSetup(function() {
PolymerTest.clearBody();
CrSettingsPrefs.deferInitialization = true;
});
setup(function() {
document.body.innerHTML = '';
const settingsPrefs = document.createElement('settings-prefs');
const settingsPrivate = new FakeSettingsPrivate(getFakeLanguagePrefs());
settingsPrefs.initialize(settingsPrivate);
......@@ -46,7 +47,8 @@ suite('LanguagesPageMetricsChromeOS', function() {
const languageSettingsPrivate = browserProxy.getLanguageSettingsPrivate();
languageSettingsPrivate.setSettingsPrefs(settingsPrefs);
languagesPage = document.createElement('settings-languages-page');
languagesPage = /** @type {!SettingsLanguagesPageElement} */ (
document.createElement('settings-languages-page'));
// Prefs would normally be data-bound to settings-languages-page.
languagesPage.prefs = settingsPrefs.prefs;
......@@ -58,19 +60,15 @@ suite('LanguagesPageMetricsChromeOS', function() {
});
});
teardown(function() {
PolymerTest.clearBody();
});
test('records when adding languages', async () => {
languagesPage.$.addLanguages.click();
languagesPage.$$('#addLanguages').click();
flush();
await languagesMetricsProxy.whenCalled('recordAddLanguages');
});
test('records when clicking edit dictionary', async () => {
languagesPage.$.spellCheckSubpageTrigger.click();
languagesPage.$$('#spellCheckSubpageTrigger').click();
flush();
assertEquals(
......@@ -79,8 +77,8 @@ suite('LanguagesPageMetricsChromeOS', function() {
});
test('records when disabling translate.enable toggle', async () => {
languageHelper.setPrefValue('translate.enabled', true);
languagesPage.$.offerTranslateOtherLanguages.click();
languagesPage.setPrefValue('translate.enabled', true);
languagesPage.$$('#offerTranslateOtherLanguages').click();
flush();
assertFalse(
......@@ -88,16 +86,16 @@ suite('LanguagesPageMetricsChromeOS', function() {
});
test('records when enabling translate.enable toggle', async () => {
languageHelper.setPrefValue('translate.enabled', false);
languagesPage.$.offerTranslateOtherLanguages.click();
languagesPage.setPrefValue('translate.enabled', false);
languagesPage.$$('#offerTranslateOtherLanguages').click();
flush();
assertTrue(await languagesMetricsProxy.whenCalled('recordToggleTranslate'));
});
test('records when disabling spell check toggle', async () => {
languageHelper.setPrefValue('browser.enable_spellchecking', true);
languagesPage.$.enableSpellcheckingToggle.click();
languagesPage.setPrefValue('browser.enable_spellchecking', true);
languagesPage.$$('#enableSpellcheckingToggle').click();
flush();
assertFalse(
......@@ -105,8 +103,8 @@ suite('LanguagesPageMetricsChromeOS', function() {
});
test('records when enabling spell check toggle', async () => {
languageHelper.setPrefValue('browser.enable_spellchecking', false);
languagesPage.$.enableSpellcheckingToggle.click();
languagesPage.setPrefValue('browser.enable_spellchecking', false);
languagesPage.$$('#enableSpellcheckingToggle').click();
flush();
assertTrue(
......@@ -121,7 +119,7 @@ suite('LanguagesPageMetricsChromeOS', function() {
flush();
const languagesCollapse = languagesPage.$.languagesCollapse;
const languagesCollapse = languagesPage.$$('#languagesCollapse');
languagesCollapse.opened = true;
const menuButtons = languagesCollapse.querySelectorAll(
......@@ -130,7 +128,7 @@ suite('LanguagesPageMetricsChromeOS', function() {
// Chooses the second language to switch system language,
// as first language is the default language.
menuButtons[1].click();
const actionMenu = languagesPage.$.menu.get();
const actionMenu = languagesPage.$$('#menu').get();
assertTrue(actionMenu.open);
const menuItems = actionMenu.querySelectorAll('.dropdown-item');
for (const item of menuItems) {
......@@ -147,7 +145,7 @@ suite('LanguagesPageMetricsChromeOS', function() {
actionMenu.close();
// Chooses restart button after switching system language.
const restartButton = languagesPage.$.restartButton;
const restartButton = languagesPage.$$('#restartButton');
assertTrue(!!restartButton);
restartButton.click();
......
......@@ -3,10 +3,11 @@
// found in the LICENSE file.
// clang-format off
// #import {FakeInputMethodPrivate} from 'chrome://test/settings/fake_input_method_private.m.js';
// #import {FakeLanguageSettingsPrivate} from 'chrome://test/settings/fake_language_settings_private.m.js';
// #import {FakeInputMethodPrivate} from './fake_input_method_private.m.js';
// #import {FakeLanguageSettingsPrivate} from './fake_language_settings_private.m.js';
// #import {isChromeOS, isWindows} from 'chrome://resources/js/cr.m.js';
// #import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.m.js';
// #import {LanguagesBrowserProxy} from 'chrome://settings/lazy_load.js';
// #import {TestBrowserProxy} from '../test_browser_proxy.m.js';
// clang-format on
cr.define('settings', function() {
......@@ -26,7 +27,8 @@ cr.define('settings', function() {
new settings.FakeLanguageSettingsPrivate();
/** @private {!InputMethodPrivate} */
this.inputMethodPrivate_ = new settings.FakeInputMethodPrivate();
this.inputMethodPrivate_ = /** @type{!InputMethodPrivate} */ (
new settings.FakeInputMethodPrivate());
}
/** @override */
......@@ -34,11 +36,6 @@ cr.define('settings', function() {
return this.languageSettingsPrivate_;
}
/** @override */
getInputMethodPrivate() {
return this.inputMethodPrivate_;
}
/** @param {!LanguageSettingsPrivate} languageSettingsPrivate */
setLanguageSettingsPrivate(languageSettingsPrivate) {
this.languageSettingsPrivate_ = languageSettingsPrivate;
......@@ -59,6 +56,13 @@ cr.define('settings', function() {
};
}
if (cr.isChromeOS) {
/** @override */
TestLanguagesBrowserProxy.prototype.getInputMethodPrivate = function() {
return this.inputMethodPrivate_;
};
}
// #cr_define_end
return {
TestLanguagesBrowserProxy: TestLanguagesBrowserProxy,
......
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