| 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_search_engines_page', function() { | 5 cr.define('settings_search_engines_page', function() { |
| 6 /** | 6 /** |
| 7 * @param {string} name |
| 7 * @param {boolean} canBeDefault | 8 * @param {boolean} canBeDefault |
| 8 * @param {boolean} canBeEdited | 9 * @param {boolean} canBeEdited |
| 9 * @param {boolean} canBeRemoved | 10 * @param {boolean} canBeRemoved |
| 10 * @return {!SearchEngine} | 11 * @return {!SearchEngine} |
| 11 */ | 12 */ |
| 12 var createSampleSearchEngine = function( | 13 function createSampleSearchEngine( |
| 13 canBeDefault, canBeEdited, canBeRemoved) { | 14 name, canBeDefault, canBeEdited, canBeRemoved) { |
| 14 return { | 15 return { |
| 15 canBeDefault: canBeDefault, | 16 canBeDefault: canBeDefault, |
| 16 canBeEdited: canBeEdited, | 17 canBeEdited: canBeEdited, |
| 17 canBeRemoved: canBeRemoved, | 18 canBeRemoved: canBeRemoved, |
| 18 default: false, | 19 default: false, |
| 19 displayName: "Google displayName", | 20 displayName: name + " displayName", |
| 20 iconURL: "http://www.google.com/favicon.ico", | 21 iconURL: "http://www.google.com/favicon.ico", |
| 21 isOmniboxExtension: false, | 22 isOmniboxExtension: false, |
| 22 keyword: "google.com", | 23 keyword: "google.com", |
| 23 modelIndex: 0, | 24 modelIndex: 0, |
| 24 name: "Google", | 25 name: name, |
| 25 url: "https://search.foo.com/search?p=%s", | 26 url: "https://search.foo.com/search?p=%s", |
| 26 urlLocked: false, | 27 urlLocked: false, |
| 27 }; | 28 }; |
| 28 }; | 29 } |
| 29 | 30 |
| 30 /** @return {!SearchEngine} */ | 31 /** @return {!SearchEngine} */ |
| 31 var createSampleOmniboxExtension = function() { | 32 function createSampleOmniboxExtension() { |
| 32 return { | 33 return { |
| 33 canBeDefault: false, | 34 canBeDefault: false, |
| 34 canBeEdited: false, | 35 canBeEdited: false, |
| 35 canBeRemoved: false, | 36 canBeRemoved: false, |
| 36 default: false, | 37 default: false, |
| 37 displayName: "Omnibox extension displayName", | 38 displayName: "Omnibox extension displayName", |
| 38 extension: { | 39 extension: { |
| 39 icon: "chrome://extension-icon/some-extension-icon", | 40 icon: "chrome://extension-icon/some-extension-icon", |
| 40 id: "dummyextensionid", | 41 id: "dummyextensionid", |
| 41 name: "Omnibox extension" | 42 name: "Omnibox extension" |
| 42 }, | 43 }, |
| 43 isOmniboxExtension: true, | 44 isOmniboxExtension: true, |
| 44 keyword: "oe", | 45 keyword: "oe", |
| 45 modelIndex: 6, | 46 modelIndex: 6, |
| 46 name: "Omnibox extension", | 47 name: "Omnibox extension", |
| 47 url: "chrome-extension://dummyextensionid/?q=%s", | 48 url: "chrome-extension://dummyextensionid/?q=%s", |
| 48 urlLocked: false | 49 urlLocked: false |
| 49 }; | 50 }; |
| 50 }; | 51 } |
| 51 | 52 |
| 52 function registerDialogTests() { | 53 function registerDialogTests() { |
| 53 suite('AddSearchEngineDialogTests', function() { | 54 suite('AddSearchEngineDialogTests', function() { |
| 54 /** @type {?SettingsAddSearchEngineDialog} */ | 55 /** @type {?SettingsAddSearchEngineDialog} */ |
| 55 var dialog = null; | 56 var dialog = null; |
| 56 var browserProxy = null; | 57 var browserProxy = null; |
| 57 | 58 |
| 58 setup(function() { | 59 setup(function() { |
| 59 browserProxy = new settings_search.TestSearchEnginesBrowserProxy(); | 60 browserProxy = new settings_search.TestSearchEnginesBrowserProxy(); |
| 60 settings.SearchEnginesBrowserProxyImpl.instance_ = browserProxy; | 61 settings.SearchEnginesBrowserProxyImpl.instance_ = browserProxy; |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 | 140 |
| 140 function registerSearchEngineEntryTests() { | 141 function registerSearchEngineEntryTests() { |
| 141 suite('SearchEngineEntryTests', function() { | 142 suite('SearchEngineEntryTests', function() { |
| 142 /** @type {?SettingsSearchEngineEntryElement} */ | 143 /** @type {?SettingsSearchEngineEntryElement} */ |
| 143 var entry = null; | 144 var entry = null; |
| 144 | 145 |
| 145 /** @type {!settings_search.TestSearchEnginesBrowserProxy} */ | 146 /** @type {!settings_search.TestSearchEnginesBrowserProxy} */ |
| 146 var browserProxy = null; | 147 var browserProxy = null; |
| 147 | 148 |
| 148 /** @type {!SearchEngine} */ | 149 /** @type {!SearchEngine} */ |
| 149 var searchEngine = createSampleSearchEngine(true, true, true); | 150 var searchEngine = createSampleSearchEngine('G', true, true, true); |
| 150 | 151 |
| 151 setup(function() { | 152 setup(function() { |
| 152 browserProxy = new settings_search.TestSearchEnginesBrowserProxy(); | 153 browserProxy = new settings_search.TestSearchEnginesBrowserProxy(); |
| 153 settings.SearchEnginesBrowserProxyImpl.instance_ = browserProxy; | 154 settings.SearchEnginesBrowserProxyImpl.instance_ = browserProxy; |
| 154 PolymerTest.clearBody(); | 155 PolymerTest.clearBody(); |
| 155 entry = document.createElement('settings-search-engine-entry'); | 156 entry = document.createElement('settings-search-engine-entry'); |
| 156 entry.set('engine', searchEngine); | 157 entry.set('engine', searchEngine); |
| 157 document.body.appendChild(entry); | 158 document.body.appendChild(entry); |
| 158 }); | 159 }); |
| 159 | 160 |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 */ | 242 */ |
| 242 function testButtonDisabled(searchEngine, buttonId) { | 243 function testButtonDisabled(searchEngine, buttonId) { |
| 243 entry.engine = searchEngine; | 244 entry.engine = searchEngine; |
| 244 var button = entry.$[buttonId]; | 245 var button = entry.$[buttonId]; |
| 245 assertTrue(!!button); | 246 assertTrue(!!button); |
| 246 assertTrue(button.hidden); | 247 assertTrue(button.hidden); |
| 247 } | 248 } |
| 248 | 249 |
| 249 test('Remove_Disabled', function() { | 250 test('Remove_Disabled', function() { |
| 250 testButtonDisabled( | 251 testButtonDisabled( |
| 251 createSampleSearchEngine(true, true, false), 'delete'); | 252 createSampleSearchEngine('G', true, true, false), 'delete'); |
| 252 }); | 253 }); |
| 253 | 254 |
| 254 test('MakeDefault_Disabled', function() { | 255 test('MakeDefault_Disabled', function() { |
| 255 testButtonDisabled( | 256 testButtonDisabled( |
| 256 createSampleSearchEngine(false, true, true), 'makeDefault'); | 257 createSampleSearchEngine('G', false, true, true), 'makeDefault'); |
| 257 }); | 258 }); |
| 258 | 259 |
| 259 test('Edit_Disabled', function() { | 260 test('Edit_Disabled', function() { |
| 260 testButtonDisabled(createSampleSearchEngine(true, false, true), 'edit'); | 261 testButtonDisabled( |
| 262 createSampleSearchEngine('G', true, false, true), 'edit'); |
| 261 }); | 263 }); |
| 262 | 264 |
| 263 test('All_Disabled', function() { | 265 test('All_Disabled', function() { |
| 264 entry.engine = createSampleSearchEngine(true, false, false); | 266 entry.engine = createSampleSearchEngine('G', true, false, false); |
| 265 Polymer.dom.flush(); | 267 Polymer.dom.flush(); |
| 266 assertTrue(entry.hasAttribute('show-dots_')); | 268 assertTrue(entry.hasAttribute('show-dots_')); |
| 267 | 269 |
| 268 entry.engine = createSampleSearchEngine(false, false, false); | 270 entry.engine = createSampleSearchEngine('G', false, false, false); |
| 269 Polymer.dom.flush(); | 271 Polymer.dom.flush(); |
| 270 assertFalse(entry.hasAttribute('show-dots_')); | 272 assertFalse(entry.hasAttribute('show-dots_')); |
| 271 }); | 273 }); |
| 272 }); | 274 }); |
| 273 } | 275 } |
| 274 | 276 |
| 275 function registerPageTests() { | 277 function registerPageTests() { |
| 276 suite('SearchEnginePageTests', function() { | 278 suite('SearchEnginePageTests', function() { |
| 277 /** @type {?SettingsSearchEnginesPageElement} */ | 279 /** @type {?SettingsSearchEnginesPageElement} */ |
| 278 var page = null; | 280 var page = null; |
| 279 | 281 |
| 280 var browserProxy = null; | 282 var browserProxy = null; |
| 281 | 283 |
| 282 /** @type {!SearchEnginesInfo} */ | 284 /** @type {!SearchEnginesInfo} */ |
| 283 var searchEnginesInfo = { | 285 var searchEnginesInfo = { |
| 284 defaults: [createSampleSearchEngine()], | 286 defaults: [createSampleSearchEngine('G', false, false, false)], |
| 285 others: [], | 287 others: [ |
| 288 createSampleSearchEngine('B', false, false, false), |
| 289 createSampleSearchEngine('A', false, false, false), |
| 290 ], |
| 286 extensions: [createSampleOmniboxExtension()], | 291 extensions: [createSampleOmniboxExtension()], |
| 287 }; | 292 }; |
| 288 | 293 |
| 289 setup(function() { | 294 setup(function() { |
| 290 browserProxy = new settings_search.TestSearchEnginesBrowserProxy(); | 295 browserProxy = new settings_search.TestSearchEnginesBrowserProxy(); |
| 291 browserProxy.setSearchEnginesInfo(searchEnginesInfo); | 296 |
| 297 // Purposefully pass a clone of |searchEnginesInfo| to avoid any |
| 298 // mutations on ground truth data. |
| 299 browserProxy.setSearchEnginesInfo({ |
| 300 defaults: searchEnginesInfo.defaults.slice(), |
| 301 others: searchEnginesInfo.others.slice(), |
| 302 extensions: searchEnginesInfo.extensions.slice(), |
| 303 }); |
| 292 settings.SearchEnginesBrowserProxyImpl.instance_ = browserProxy; | 304 settings.SearchEnginesBrowserProxyImpl.instance_ = browserProxy; |
| 293 PolymerTest.clearBody(); | 305 PolymerTest.clearBody(); |
| 294 page = document.createElement('settings-search-engines-page'); | 306 page = document.createElement('settings-search-engines-page'); |
| 295 document.body.appendChild(page); | 307 document.body.appendChild(page); |
| 296 return browserProxy.whenCalled('getSearchEnginesList'); | 308 return browserProxy.whenCalled('getSearchEnginesList'); |
| 297 }); | 309 }); |
| 298 | 310 |
| 299 teardown(function() { page.remove(); }); | 311 teardown(function() { page.remove(); }); |
| 300 | 312 |
| 301 // Tests that the page is querying and displaying search engine info on | 313 // Tests that the page is querying and displaying search engine info on |
| (...skipping 11 matching lines...) Expand all Loading... |
| 313 querySelector('iron-list').items; | 325 querySelector('iron-list').items; |
| 314 assertEquals( | 326 assertEquals( |
| 315 searchEnginesInfo.defaults.length, defaultsEntries.length); | 327 searchEnginesInfo.defaults.length, defaultsEntries.length); |
| 316 | 328 |
| 317 var othersList = searchEnginesLists[1]; | 329 var othersList = searchEnginesLists[1]; |
| 318 var othersEntries = Polymer.dom(othersList.shadowRoot). | 330 var othersEntries = Polymer.dom(othersList.shadowRoot). |
| 319 querySelector('iron-list').items; | 331 querySelector('iron-list').items; |
| 320 assertEquals( | 332 assertEquals( |
| 321 searchEnginesInfo.others.length, othersEntries.length); | 333 searchEnginesInfo.others.length, othersEntries.length); |
| 322 | 334 |
| 335 // Ensure that the search engines have reverse alphabetical order in the |
| 336 // model. |
| 337 assertGT( |
| 338 searchEnginesInfo.others[0].name, searchEnginesInfo.others[1].name); |
| 339 |
| 340 // Ensure that they are displayed in alphabetical order. |
| 341 assertEquals(searchEnginesInfo.others[1].name, othersEntries[0].name); |
| 342 assertEquals(searchEnginesInfo.others[0].name, othersEntries[1].name); |
| 343 |
| 323 var extensionEntries = Polymer.dom(page.shadowRoot). | 344 var extensionEntries = Polymer.dom(page.shadowRoot). |
| 324 querySelector('iron-list').items; | 345 querySelector('iron-list').items; |
| 325 assertEquals( | 346 assertEquals( |
| 326 searchEnginesInfo.extensions.length, extensionEntries.length); | 347 searchEnginesInfo.extensions.length, extensionEntries.length); |
| 327 }); | 348 }); |
| 328 | 349 |
| 329 // Test that the "no other search engines" message is shown/hidden as | 350 // Test that the "no other search engines" message is shown/hidden as |
| 330 // expected. | 351 // expected. |
| 331 test('NoOtherSearchEnginesMessage', function() { | 352 test('NoOtherSearchEnginesMessage', function() { |
| 353 cr.webUIListenerCallback('search-engines-changed', { |
| 354 defaults: [], others: [], extensions: [], |
| 355 }); |
| 356 |
| 332 var message = page.root.querySelector('#noOtherEngines'); | 357 var message = page.root.querySelector('#noOtherEngines'); |
| 333 assertTrue(!!message); | 358 assertTrue(!!message); |
| 334 assertFalse(message.hasAttribute('hidden')); | 359 assertFalse(message.hasAttribute('hidden')); |
| 335 | 360 |
| 336 cr.webUIListenerCallback('search-engines-changed', { | 361 cr.webUIListenerCallback('search-engines-changed', { |
| 337 defaults: [], | 362 defaults: [], |
| 338 others: [createSampleSearchEngine()], | 363 others: [createSampleSearchEngine('G', false, false, false)], |
| 339 extensions: [], | 364 extensions: [], |
| 340 }); | 365 }); |
| 341 assertTrue(message.hasAttribute('hidden')); | 366 assertTrue(message.hasAttribute('hidden')); |
| 342 }); | 367 }); |
| 343 | 368 |
| 344 // Tests that the add search engine dialog opens when the corresponding | 369 // Tests that the add search engine dialog opens when the corresponding |
| 345 // button is tapped. | 370 // button is tapped. |
| 346 test('AddSearchEngineDialog', function() { | 371 test('AddSearchEngineDialog', function() { |
| 347 assertFalse(!!page.$$('settings-search-engine-dialog')); | 372 assertFalse(!!page.$$('settings-search-engine-dialog')); |
| 348 var addSearchEngineButton = page.$.addSearchEngine; | 373 var addSearchEngineButton = page.$.addSearchEngine; |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 | 425 |
| 401 return { | 426 return { |
| 402 registerTests: function() { | 427 registerTests: function() { |
| 403 registerDialogTests(); | 428 registerDialogTests(); |
| 404 registerSearchEngineEntryTests(); | 429 registerSearchEngineEntryTests(); |
| 405 registerOmniboxExtensionEntryTests(); | 430 registerOmniboxExtensionEntryTests(); |
| 406 registerPageTests(); | 431 registerPageTests(); |
| 407 }, | 432 }, |
| 408 }; | 433 }; |
| 409 }); | 434 }); |
| OLD | NEW |