| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 cr.define('settings-languages', function() { | 5 cr.define('settings-languages', function() { |
| 6 /** | |
| 7 * @constructor | |
| 8 * @implements {settings.LanguagesBrowserProxy} | |
| 9 * @extends {settings.TestBrowserProxy} | |
| 10 */ | |
| 11 var TestLanguagesBrowserProxy = function() { | |
| 12 var methodNames = []; | |
| 13 if (cr.isChromeOS || cr.isWindows) | |
| 14 methodNames.push('getProspectiveUILanguage'); | |
| 15 | |
| 16 settings.TestBrowserProxy.call(this, methodNames); | |
| 17 | |
| 18 /** @private {!LanguageSettingsPrivate} */ | |
| 19 this.languageSettingsPrivate_ = new settings.FakeLanguageSettingsPrivate(); | |
| 20 | |
| 21 /** @private {!InputMethodPrivate} */ | |
| 22 this.inputMethodPrivate_ = new settings.FakeInputMethodPrivate(); | |
| 23 }; | |
| 24 | |
| 25 TestLanguagesBrowserProxy.prototype = { | |
| 26 __proto__: settings.TestBrowserProxy.prototype, | |
| 27 | |
| 28 /** @override */ | |
| 29 getLanguageSettingsPrivate: function() { | |
| 30 return this.languageSettingsPrivate_; | |
| 31 }, | |
| 32 | |
| 33 /** @override */ | |
| 34 getInputMethodPrivate: function() { | |
| 35 return this.inputMethodPrivate_; | |
| 36 }, | |
| 37 }; | |
| 38 | |
| 39 if (cr.isChromeOS || cr.isWindows) { | |
| 40 /** @override */ | |
| 41 TestLanguagesBrowserProxy.prototype.getProspectiveUILanguage = | |
| 42 function() { | |
| 43 this.methodCalled('getProspectiveUILanguage'); | |
| 44 return Promise.resolve('en-US'); | |
| 45 }; | |
| 46 } | |
| 47 | |
| 48 /** | |
| 49 * Data-binds two Polymer properties using the property-changed events and | |
| 50 * set/notifyPath API. Useful for testing components which would normally be | |
| 51 * used together. | |
| 52 * @param {!HTMLElement} el1 | |
| 53 * @param {!HTMLElement} el2 | |
| 54 * @param {string} property | |
| 55 */ | |
| 56 function fakeDataBind(el1, el2, property) { | |
| 57 var forwardChange = function(el, event) { | |
| 58 if (event.detail.hasOwnProperty('path')) | |
| 59 el.notifyPath(event.detail.path, event.detail.value); | |
| 60 else | |
| 61 el.set(property, event.detail.value); | |
| 62 }; | |
| 63 // Add the listeners symmetrically. Polymer will prevent recursion. | |
| 64 el1.addEventListener(property + '-changed', forwardChange.bind(null, el2)); | |
| 65 el2.addEventListener(property + '-changed', forwardChange.bind(null, el1)); | |
| 66 } | |
| 67 | |
| 68 suite('settings-languages', function() { | 6 suite('settings-languages', function() { |
| 69 function getFakePrefs() { | |
| 70 var fakePrefs = [{ | |
| 71 key: 'intl.app_locale', | |
| 72 type: chrome.settingsPrivate.PrefType.STRING, | |
| 73 value: 'en-US', | |
| 74 }, { | |
| 75 key: 'intl.accept_languages', | |
| 76 type: chrome.settingsPrivate.PrefType.STRING, | |
| 77 value: 'en-US,sw', | |
| 78 }, { | |
| 79 key: 'spellcheck.dictionaries', | |
| 80 type: chrome.settingsPrivate.PrefType.LIST, | |
| 81 value: ['en-US'], | |
| 82 }, { | |
| 83 key: 'translate_blocked_languages', | |
| 84 type: chrome.settingsPrivate.PrefType.LIST, | |
| 85 value: ['en-US'], | |
| 86 }]; | |
| 87 if (cr.isChromeOS) { | |
| 88 fakePrefs.push({ | |
| 89 key: 'settings.language.preferred_languages', | |
| 90 type: chrome.settingsPrivate.PrefType.STRING, | |
| 91 value: 'en-US,sw', | |
| 92 }); | |
| 93 fakePrefs.push({ | |
| 94 key: 'settings.language.preload_engines', | |
| 95 type: chrome.settingsPrivate.PrefType.STRING, | |
| 96 value: '_comp_ime_fgoepimhcoialccpbmpnnblemnepkkaoxkb:us::eng,' + | |
| 97 '_comp_ime_fgoepimhcoialccpbmpnnblemnepkkaoxkb:us:dvorak:eng', | |
| 98 }); | |
| 99 fakePrefs.push({ | |
| 100 key: 'settings.language.enabled_extension_imes', | |
| 101 type: chrome.settingsPrivate.PrefType.STRING, | |
| 102 value: '', | |
| 103 }); | |
| 104 } | |
| 105 return fakePrefs; | |
| 106 } | |
| 107 | |
| 108 /** | 7 /** |
| 109 * @param {!Array<string>} expected | 8 * @param {!Array<string>} expected |
| 110 */ | 9 */ |
| 111 function assertLanguageOrder(expected) { | 10 function assertLanguageOrder(expected) { |
| 112 assertEquals(expected.length, languageHelper.languages.enabled.length); | 11 assertEquals(expected.length, languageHelper.languages.enabled.length); |
| 113 for (var i = 0; i < expected.length; i++) { | 12 for (var i = 0; i < expected.length; i++) { |
| 114 assertEquals( | 13 assertEquals( |
| 115 expected[i], languageHelper.languages.enabled[i].language.code); | 14 expected[i], languageHelper.languages.enabled[i].language.code); |
| 116 } | 15 } |
| 117 } | 16 } |
| 118 | 17 |
| 119 /** @type {?settings.LanguagesBrowserProxy} */ | 18 /** @type {?settings.LanguagesBrowserProxy} */ |
| 120 var browserProxy = null; | 19 var browserProxy = null; |
| 121 | 20 |
| 122 var languageHelper; | 21 var languageHelper; |
| 123 | 22 |
| 124 suiteSetup(function() { | 23 suiteSetup(function() { |
| 125 CrSettingsPrefs.deferInitialization = true; | 24 CrSettingsPrefs.deferInitialization = true; |
| 126 PolymerTest.clearBody(); | 25 PolymerTest.clearBody(); |
| 127 }); | 26 }); |
| 128 | 27 |
| 129 setup(function() { | 28 setup(function() { |
| 130 var settingsPrefs = document.createElement('settings-prefs'); | 29 var settingsPrefs = document.createElement('settings-prefs'); |
| 131 var settingsPrivate = new settings.FakeSettingsPrivate(getFakePrefs()); | 30 var settingsPrivate = |
| 31 new settings.FakeSettingsPrivate(settings.getFakeLanguagePrefs()); |
| 132 settingsPrefs.initialize(settingsPrivate); | 32 settingsPrefs.initialize(settingsPrivate); |
| 133 document.body.appendChild(settingsPrefs); | 33 document.body.appendChild(settingsPrefs); |
| 134 | 34 |
| 135 // Setup test browser proxy. | 35 // Setup test browser proxy. |
| 136 browserProxy = new TestLanguagesBrowserProxy(); | 36 browserProxy = new settings.TestLanguagesBrowserProxy(); |
| 137 settings.LanguagesBrowserProxyImpl.instance_ = browserProxy; | 37 settings.LanguagesBrowserProxyImpl.instance_ = browserProxy; |
| 138 | 38 |
| 139 // Setup fake languageSettingsPrivate API. | 39 // Setup fake languageSettingsPrivate API. |
| 140 var languageSettingsPrivate = browserProxy.getLanguageSettingsPrivate(); | 40 var languageSettingsPrivate = browserProxy.getLanguageSettingsPrivate(); |
| 141 languageSettingsPrivate.setSettingsPrefs(settingsPrefs); | 41 languageSettingsPrivate.setSettingsPrefs(settingsPrefs); |
| 142 | 42 |
| 143 languageHelper = document.createElement('settings-languages'); | 43 languageHelper = document.createElement('settings-languages'); |
| 144 | 44 |
| 145 // Prefs would normally be data-bound to settings-languages. | 45 // Prefs would normally be data-bound to settings-languages. |
| 146 fakeDataBind(settingsPrefs, languageHelper, 'prefs'); | 46 test_util.fakeDataBind(settingsPrefs, languageHelper, 'prefs'); |
| 147 | 47 |
| 148 document.body.appendChild(languageHelper); | 48 document.body.appendChild(languageHelper); |
| 149 return languageHelper.whenReady().then(function() { | 49 return languageHelper.whenReady().then(function() { |
| 150 if (cr.isChromeOS || cr.isWindows) | 50 if (cr.isChromeOS || cr.isWindows) |
| 151 return browserProxy.whenCalled('getProspectiveUILanguage'); | 51 return browserProxy.whenCalled('getProspectiveUILanguage'); |
| 152 }); | 52 }); |
| 153 }); | 53 }); |
| 154 | 54 |
| 155 test('languages model', function() { | 55 test('languages model', function() { |
| 156 var languageSettingsPrivate = browserProxy.getLanguageSettingsPrivate(); | 56 var languageSettingsPrivate = browserProxy.getLanguageSettingsPrivate(); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 239 // The US Swahili keyboard should still be enabled, because it supports | 139 // The US Swahili keyboard should still be enabled, because it supports |
| 240 // English which is still enabled. | 140 // English which is still enabled. |
| 241 assertTrue(languageHelper.languages.inputMethods.enabled.some( | 141 assertTrue(languageHelper.languages.inputMethods.enabled.some( |
| 242 function(inputMethod) { | 142 function(inputMethod) { |
| 243 return inputMethod.id == swUS; | 143 return inputMethod.id == swUS; |
| 244 })); | 144 })); |
| 245 }); | 145 }); |
| 246 } | 146 } |
| 247 }); | 147 }); |
| 248 }); | 148 }); |
| OLD | NEW |