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 /** | 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 /** |
7 * Data-binds two Polymer properties using the property-changed events and | 49 * Data-binds two Polymer properties using the property-changed events and |
8 * set/notifyPath API. Useful for testing components which would normally be | 50 * set/notifyPath API. Useful for testing components which would normally be |
9 * used together. | 51 * used together. |
10 * @param {!HTMLElement} el1 | 52 * @param {!HTMLElement} el1 |
11 * @param {!HTMLElement} el2 | 53 * @param {!HTMLElement} el2 |
12 * @param {string} property | 54 * @param {string} property |
13 */ | 55 */ |
14 function fakeDataBind(el1, el2, property) { | 56 function fakeDataBind(el1, el2, property) { |
15 var forwardChange = function(el, event) { | 57 var forwardChange = function(el, event) { |
16 if (event.detail.hasOwnProperty('path')) | 58 if (event.detail.hasOwnProperty('path')) |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 * @param {!Array<string>} expected | 109 * @param {!Array<string>} expected |
68 */ | 110 */ |
69 function assertLanguageOrder(expected) { | 111 function assertLanguageOrder(expected) { |
70 assertEquals(expected.length, languageHelper.languages.enabled.length); | 112 assertEquals(expected.length, languageHelper.languages.enabled.length); |
71 for (var i = 0; i < expected.length; i++) { | 113 for (var i = 0; i < expected.length; i++) { |
72 assertEquals( | 114 assertEquals( |
73 expected[i], languageHelper.languages.enabled[i].language.code); | 115 expected[i], languageHelper.languages.enabled[i].language.code); |
74 } | 116 } |
75 } | 117 } |
76 | 118 |
| 119 /** @type {?settings.LanguagesBrowserProxy} */ |
| 120 var browserProxy = null; |
| 121 |
77 var languageHelper; | 122 var languageHelper; |
78 var languageSettingsPrivate; | |
79 | 123 |
80 suiteSetup(function() { | 124 suiteSetup(function() { |
81 CrSettingsPrefs.deferInitialization = true; | 125 CrSettingsPrefs.deferInitialization = true; |
82 PolymerTest.clearBody(); | 126 PolymerTest.clearBody(); |
83 }); | 127 }); |
84 | 128 |
85 setup(function() { | 129 setup(function() { |
86 var settingsPrefs = document.createElement('settings-prefs'); | 130 var settingsPrefs = document.createElement('settings-prefs'); |
87 var settingsPrivate = new settings.FakeSettingsPrivate(getFakePrefs()); | 131 var settingsPrivate = new settings.FakeSettingsPrivate(getFakePrefs()); |
88 settingsPrefs.initialize(settingsPrivate); | 132 settingsPrefs.initialize(settingsPrivate); |
89 document.body.appendChild(settingsPrefs); | 133 document.body.appendChild(settingsPrefs); |
90 | 134 |
91 languageSettingsPrivate = new settings.FakeLanguageSettingsPrivate(); | 135 // Setup test browser proxy. |
| 136 browserProxy = new TestLanguagesBrowserProxy(); |
| 137 settings.LanguagesBrowserProxyImpl.instance_ = browserProxy; |
| 138 |
| 139 // Setup fake languageSettingsPrivate API. |
| 140 var languageSettingsPrivate = browserProxy.getLanguageSettingsPrivate(); |
92 languageSettingsPrivate.setSettingsPrefs(settingsPrefs); | 141 languageSettingsPrivate.setSettingsPrefs(settingsPrefs); |
93 settings.languageSettingsPrivateApiForTest = languageSettingsPrivate; | |
94 | |
95 var getProspectiveUILanguageCalled = false; | |
96 registerMessageCallback('getProspectiveUILanguage', null, | |
97 function(callbackId) { | |
98 assertFalse(getProspectiveUILanguageCalled); | |
99 getProspectiveUILanguageCalled = true; | |
100 cr.webUIResponse(callbackId, true, 'en-US'); | |
101 }); | |
102 | 142 |
103 languageHelper = document.createElement('settings-languages'); | 143 languageHelper = document.createElement('settings-languages'); |
104 | 144 |
105 // Prefs would normally be data-bound to settings-languages. | 145 // Prefs would normally be data-bound to settings-languages. |
106 fakeDataBind(settingsPrefs, languageHelper, 'prefs'); | 146 fakeDataBind(settingsPrefs, languageHelper, 'prefs'); |
107 | 147 |
108 document.body.appendChild(languageHelper); | 148 document.body.appendChild(languageHelper); |
109 return languageHelper.whenReady().then(function() { | 149 return languageHelper.whenReady().then(function() { |
110 assertEquals( | 150 if (cr.isChromeOS || cr.isWindows) |
111 cr.isChromeOS || cr.isWindows, getProspectiveUILanguageCalled); | 151 return browserProxy.whenCalled('getProspectiveUILanguage'); |
112 }); | 152 }); |
113 }); | 153 }); |
114 | 154 |
115 test('languages model', function() { | 155 test('languages model', function() { |
| 156 var languageSettingsPrivate = browserProxy.getLanguageSettingsPrivate(); |
116 for (var i = 0; i < languageSettingsPrivate.languages.length; | 157 for (var i = 0; i < languageSettingsPrivate.languages.length; |
117 i++) { | 158 i++) { |
118 assertEquals(languageSettingsPrivate.languages[i].code, | 159 assertEquals(languageSettingsPrivate.languages[i].code, |
119 languageHelper.languages.supported[i].code); | 160 languageHelper.languages.supported[i].code); |
120 } | 161 } |
121 assertLanguageOrder(['en-US', 'sw']); | 162 assertLanguageOrder(['en-US', 'sw']); |
122 assertEquals('en', languageHelper.languages.translateTarget); | 163 assertEquals('en', languageHelper.languages.translateTarget); |
123 | 164 |
124 // TODO(michaelpg): Test other aspects of the model. | 165 // TODO(michaelpg): Test other aspects of the model. |
125 }); | 166 }); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 // The US Swahili keyboard should still be enabled, because it supports | 239 // The US Swahili keyboard should still be enabled, because it supports |
199 // English which is still enabled. | 240 // English which is still enabled. |
200 assertTrue(languageHelper.languages.inputMethods.enabled.some( | 241 assertTrue(languageHelper.languages.inputMethods.enabled.some( |
201 function(inputMethod) { | 242 function(inputMethod) { |
202 return inputMethod.id == swUS; | 243 return inputMethod.id == swUS; |
203 })); | 244 })); |
204 }); | 245 }); |
205 } | 246 } |
206 }); | 247 }); |
207 }); | 248 }); |
OLD | NEW |