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 |