Commit bfbf7940 authored by Demetrios Papadopoulos's avatar Demetrios Papadopoulos Committed by Commit Bot

Settings: Remove unnecessary wrapper functions in search engines tests.

Specifically removing:
 - cr.define wrapper
 - registerDialogTests
 - registerSearchEngineEntryTests,
 - registerOmniboxExtensionEntryTests,
 - registerPageTests

In preparation of migrating to Polymer 3.

Bug: 1026426
Change-Id: Ida9a6a4201f970d20475a0a5861702c6e5531eed
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2036637
Auto-Submit: Demetrios Papadopoulos <dpapad@chromium.org>
Commit-Queue: Rebekah Potter <rbpotter@chromium.org>
Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Cr-Commit-Position: refs/heads/master@{#738017}
parent 0080c863
...@@ -2,538 +2,515 @@ ...@@ -2,538 +2,515 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
cr.define('settings_search_engines_page', function() { /**
/** * @param {number} id
* @param {number} id * @param {string} name
* @param {string} name * @param {boolean} canBeDefault
* @param {boolean} canBeDefault * @param {boolean} canBeEdited
* @param {boolean} canBeEdited * @param {boolean} canBeRemoved
* @param {boolean} canBeRemoved * @return {!SearchEngine}
* @return {!SearchEngine} */
*/ function createSampleSearchEngine(
function createSampleSearchEngine( id, name, canBeDefault, canBeEdited, canBeRemoved) {
id, name, canBeDefault, canBeEdited, canBeRemoved) { return {
return { canBeDefault: canBeDefault,
canBeDefault: canBeDefault, canBeEdited: canBeEdited,
canBeEdited: canBeEdited, canBeRemoved: canBeRemoved,
canBeRemoved: canBeRemoved, default: false,
default: false, displayName: name + ' displayName',
displayName: name + ' displayName', iconURL: 'http://www.google.com/favicon.ico',
iconURL: 'http://www.google.com/favicon.ico', id: id,
id: id, isOmniboxExtension: false,
isOmniboxExtension: false, keyword: name,
keyword: name, modelIndex: 0,
modelIndex: 0, name: name,
name: name, url: 'https://' + name + '.com/search?p=%s',
url: 'https://' + name + '.com/search?p=%s', urlLocked: false,
urlLocked: false, };
}; }
}
/** @return {!SearchEngine} */
/** @return {!SearchEngine} */ function createSampleOmniboxExtension() {
function createSampleOmniboxExtension() { return {
return { canBeDefault: false,
canBeDefault: false, canBeEdited: false,
canBeEdited: false, canBeRemoved: false,
canBeRemoved: false, default: false,
default: false, displayName: 'Omnibox extension displayName',
displayName: 'Omnibox extension displayName', extension: {
extension: { icon: 'chrome://extension-icon/some-extension-icon',
icon: 'chrome://extension-icon/some-extension-icon', id: 'dummyextensionid',
id: 'dummyextensionid', name: 'Omnibox extension'
name: 'Omnibox extension' },
}, id: 0,
id: 0, isOmniboxExtension: true,
isOmniboxExtension: true, keyword: 'oe',
keyword: 'oe', modelIndex: 6,
modelIndex: 6, name: 'Omnibox extension',
name: 'Omnibox extension', url: 'chrome-extension://dummyextensionid/?q=%s',
url: 'chrome-extension://dummyextensionid/?q=%s', urlLocked: false
urlLocked: false };
}
suite('AddSearchEngineDialogTests', function() {
/** @type {?SettingsAddSearchEngineDialog} */
let dialog = null;
let browserProxy = null;
setup(function() {
browserProxy = new settings_search.TestSearchEnginesBrowserProxy();
settings.SearchEnginesBrowserProxyImpl.instance_ = browserProxy;
PolymerTest.clearBody();
dialog = document.createElement('settings-search-engine-dialog');
document.body.appendChild(dialog);
});
teardown(function() {
dialog.remove();
});
// Tests that the dialog calls 'searchEngineEditStarted' and
// 'searchEngineEditCancelled' when closed from the 'cancel' button.
test('DialogOpenAndCancel', function() {
return browserProxy.whenCalled('searchEngineEditStarted').then(function() {
dialog.$.cancel.click();
return browserProxy.whenCalled('searchEngineEditCancelled');
});
});
// Tests the dialog to add a new search engine. Specifically
// - cr-input elements are empty initially.
// - action button initially disabled.
// - validation is triggered on 'input' event.
// - action button is enabled when all fields are valid.
// - action button triggers appropriate browser signal when tapped.
test('DialogAddSearchEngine', function() {
/**
* Triggers an 'input' event on the cr-input element and checks that
* validation is triggered.
* @param {string} inputId
* @return {!Promise}
*/
const inputAndValidate = inputId => {
const inputElement = dialog.$[inputId];
browserProxy.resetResolver('validateSearchEngineInput');
inputElement.fire('input');
return inputElement.value != '' ?
// Expecting validation only on non-empty values.
browserProxy.whenCalled('validateSearchEngineInput') :
Promise.resolve();
}; };
}
function registerDialogTests() { const actionButton = dialog.$.actionButton;
suite('AddSearchEngineDialogTests', function() {
/** @type {?SettingsAddSearchEngineDialog} */ return browserProxy.whenCalled('searchEngineEditStarted')
let dialog = null; .then(() => {
let browserProxy = null; assertEquals('', dialog.$.searchEngine.value);
assertEquals('', dialog.$.keyword.value);
setup(function() { assertEquals('', dialog.$.queryUrl.value);
browserProxy = new settings_search.TestSearchEnginesBrowserProxy(); assertTrue(actionButton.disabled);
settings.SearchEnginesBrowserProxyImpl.instance_ = browserProxy; })
PolymerTest.clearBody(); .then(() => inputAndValidate('searchEngine'))
dialog = document.createElement('settings-search-engine-dialog'); .then(() => inputAndValidate('keyword'))
document.body.appendChild(dialog); .then(() => inputAndValidate('queryUrl'))
}); .then(() => {
// Manually set the text to a non-empty string for all fields.
teardown(function() { dialog.$.searchEngine.value = 'foo';
dialog.remove(); dialog.$.keyword.value = 'bar';
}); dialog.$.queryUrl.value = 'baz';
// Tests that the dialog calls 'searchEngineEditStarted' and return inputAndValidate('searchEngine');
// 'searchEngineEditCancelled' when closed from the 'cancel' button. })
test('DialogOpenAndCancel', function() { .then(() => {
return browserProxy.whenCalled('searchEngineEditStarted') // Assert that the action button has been enabled now that all
.then(function() { // input is valid and non-empty.
dialog.$.cancel.click(); assertFalse(actionButton.disabled);
return browserProxy.whenCalled('searchEngineEditCancelled'); actionButton.click();
}); return browserProxy.whenCalled('searchEngineEditCompleted');
});
// Tests the dialog to add a new search engine. Specifically
// - cr-input elements are empty initially.
// - action button initially disabled.
// - validation is triggered on 'input' event.
// - action button is enabled when all fields are valid.
// - action button triggers appropriate browser signal when tapped.
test('DialogAddSearchEngine', function() {
/**
* Triggers an 'input' event on the cr-input element and checks that
* validation is triggered.
* @param {string} inputId
* @return {!Promise}
*/
const inputAndValidate = inputId => {
const inputElement = dialog.$[inputId];
browserProxy.resetResolver('validateSearchEngineInput');
inputElement.fire('input');
return inputElement.value != '' ?
// Expecting validation only on non-empty values.
browserProxy.whenCalled('validateSearchEngineInput') :
Promise.resolve();
};
const actionButton = dialog.$.actionButton;
return browserProxy.whenCalled('searchEngineEditStarted')
.then(() => {
assertEquals('', dialog.$.searchEngine.value);
assertEquals('', dialog.$.keyword.value);
assertEquals('', dialog.$.queryUrl.value);
assertTrue(actionButton.disabled);
})
.then(() => inputAndValidate('searchEngine'))
.then(() => inputAndValidate('keyword'))
.then(() => inputAndValidate('queryUrl'))
.then(() => {
// Manually set the text to a non-empty string for all fields.
dialog.$.searchEngine.value = 'foo';
dialog.$.keyword.value = 'bar';
dialog.$.queryUrl.value = 'baz';
return inputAndValidate('searchEngine');
})
.then(() => {
// Assert that the action button has been enabled now that all
// input is valid and non-empty.
assertFalse(actionButton.disabled);
actionButton.click();
return browserProxy.whenCalled('searchEngineEditCompleted');
});
});
test('DialogCloseWhenEnginesChangedModelEngineNotFound', function() {
dialog.set(
'model', createSampleSearchEngine(0, 'G', false, false, false));
cr.webUIListenerCallback('search-engines-changed', {
defaults: [],
others: [createSampleSearchEngine(1, 'H', false, false, false)],
extensions: [],
}); });
return browserProxy.whenCalled('searchEngineEditCancelled'); });
});
test('DialogCloseWhenEnginesChangedModelEngineNotFound', function() {
test('DialogValidateInputsWhenEnginesChanged', function() { dialog.set('model', createSampleSearchEngine(0, 'G', false, false, false));
dialog.set( cr.webUIListenerCallback('search-engines-changed', {
'model', createSampleSearchEngine(0, 'G', false, false, false)); defaults: [],
dialog.set('keyword_', 'G'); others: [createSampleSearchEngine(1, 'H', false, false, false)],
cr.webUIListenerCallback('search-engines-changed', { extensions: [],
defaults: [],
others: [createSampleSearchEngine(0, 'G', false, false, false)],
extensions: [],
});
return browserProxy.whenCalled('validateSearchEngineInput');
});
}); });
} return browserProxy.whenCalled('searchEngineEditCancelled');
});
function registerSearchEngineEntryTests() {
suite('SearchEngineEntryTests', function() { test('DialogValidateInputsWhenEnginesChanged', function() {
/** @type {?SettingsSearchEngineEntryElement} */ dialog.set('model', createSampleSearchEngine(0, 'G', false, false, false));
let entry = null; dialog.set('keyword_', 'G');
cr.webUIListenerCallback('search-engines-changed', {
/** @type {!settings_search.TestSearchEnginesBrowserProxy} */ defaults: [],
let browserProxy = null; others: [createSampleSearchEngine(0, 'G', false, false, false)],
extensions: [],
/** @type {!SearchEngine} */
const searchEngine = createSampleSearchEngine(0, 'G', true, true, true);
setup(function() {
browserProxy = new settings_search.TestSearchEnginesBrowserProxy();
settings.SearchEnginesBrowserProxyImpl.instance_ = browserProxy;
PolymerTest.clearBody();
entry = document.createElement('settings-search-engine-entry');
entry.set('engine', searchEngine);
document.body.appendChild(entry);
});
teardown(function() {
entry.remove();
});
// Test that the <search-engine-entry> is populated according to its
// underlying SearchEngine model.
test('Initialization', function() {
assertEquals(
searchEngine.displayName,
entry.root.querySelector('#name-column').textContent.trim());
assertEquals(
searchEngine.keyword,
entry.root.querySelector('#keyword-column').textContent);
assertEquals(
searchEngine.url,
entry.root.querySelector('#url-column').textContent);
});
test('Remove_Enabled', function() {
// Open action menu.
entry.$$('cr-icon-button').click();
const menu = entry.$$('cr-action-menu');
assertTrue(menu.open);
const deleteButton = entry.$.delete;
assertTrue(!!deleteButton);
assertFalse(deleteButton.hidden);
deleteButton.click();
return browserProxy.whenCalled('removeSearchEngine')
.then(function(modelIndex) {
assertFalse(menu.open);
assertEquals(entry.engine.modelIndex, modelIndex);
});
});
test('MakeDefault_Enabled', function() {
// Open action menu.
entry.$$('cr-icon-button').click();
const menu = entry.$$('cr-action-menu');
assertTrue(menu.open);
const makeDefaultButton = entry.$.makeDefault;
assertTrue(!!makeDefaultButton);
makeDefaultButton.click();
return browserProxy.whenCalled('setDefaultSearchEngine')
.then(function(modelIndex) {
assertFalse(menu.open);
assertEquals(entry.engine.modelIndex, modelIndex);
});
});
// Test that clicking the "edit" fires edit event.
test('Edit_Enabled', function() {
// Open action menu.
entry.$$('cr-icon-button').click();
const menu = entry.$$('cr-action-menu');
assertTrue(menu.open);
const engine = entry.engine;
const editButton = entry.$.edit;
assertTrue(!!editButton);
assertFalse(editButton.hidden);
const promise =
test_util.eventToPromise('edit-search-engine', entry).then(e => {
assertEquals(engine, e.detail.engine);
assertEquals(entry.$$('cr-icon-button'), e.detail.anchorElement);
});
editButton.click();
return promise;
});
/**
* Checks that the given button is disabled (by being hidden), for the
* given search engine.
* @param {!SearchEngine} searchEngine
* @param {string} buttonId
*/
function testButtonDisabled(searchEngine, buttonId) {
entry.engine = searchEngine;
const button = entry.$[buttonId];
assertTrue(!!button);
assertTrue(button.hidden);
}
test('Remove_Disabled', function() {
testButtonDisabled(
createSampleSearchEngine(0, 'G', true, true, false), 'delete');
});
test('MakeDefault_Disabled', function() {
testButtonDisabled(
createSampleSearchEngine(0, 'G', false, true, true), 'makeDefault');
});
test('Edit_Disabled', function() {
testButtonDisabled(
createSampleSearchEngine(0, 'G', true, false, true), 'edit');
});
test('All_Disabled', function() {
entry.engine = createSampleSearchEngine(0, 'G', true, false, false);
Polymer.dom.flush();
assertTrue(entry.hasAttribute('show-dots_'));
entry.engine = createSampleSearchEngine(1, 'G', false, false, false);
Polymer.dom.flush();
assertFalse(entry.hasAttribute('show-dots_'));
});
}); });
} return browserProxy.whenCalled('validateSearchEngineInput');
});
});
function registerPageTests() { suite('SearchEngineEntryTests', function() {
suite('SearchEnginePageTests', function() { /** @type {?SettingsSearchEngineEntryElement} */
/** @type {?SettingsSearchEnginesPageElement} */ let entry = null;
let page = null;
/** @type {!settings_search.TestSearchEnginesBrowserProxy} */
let browserProxy = null; let browserProxy = null;
/** @type {!SearchEnginesInfo} */ /** @type {!SearchEngine} */
const searchEnginesInfo = { const searchEngine = createSampleSearchEngine(0, 'G', true, true, true);
defaults: [createSampleSearchEngine(
0, 'search_engine_G', false, false, false)], setup(function() {
others: [ browserProxy = new settings_search.TestSearchEnginesBrowserProxy();
createSampleSearchEngine(1, 'search_engine_B', false, false, false), settings.SearchEnginesBrowserProxyImpl.instance_ = browserProxy;
createSampleSearchEngine(2, 'search_engine_A', false, false, false), PolymerTest.clearBody();
], entry = document.createElement('settings-search-engine-entry');
extensions: [createSampleOmniboxExtension()], entry.set('engine', searchEngine);
}; document.body.appendChild(entry);
});
setup(function() {
browserProxy = new settings_search.TestSearchEnginesBrowserProxy(); teardown(function() {
entry.remove();
// Purposefully pass a clone of |searchEnginesInfo| to avoid any });
// mutations on ground truth data.
browserProxy.setSearchEnginesInfo({ // Test that the <search-engine-entry> is populated according to its
defaults: searchEnginesInfo.defaults.slice(), // underlying SearchEngine model.
others: searchEnginesInfo.others.slice(), test('Initialization', function() {
extensions: searchEnginesInfo.extensions.slice(), assertEquals(
searchEngine.displayName,
entry.root.querySelector('#name-column').textContent.trim());
assertEquals(
searchEngine.keyword,
entry.root.querySelector('#keyword-column').textContent);
assertEquals(
searchEngine.url, entry.root.querySelector('#url-column').textContent);
});
test('Remove_Enabled', function() {
// Open action menu.
entry.$$('cr-icon-button').click();
const menu = entry.$$('cr-action-menu');
assertTrue(menu.open);
const deleteButton = entry.$.delete;
assertTrue(!!deleteButton);
assertFalse(deleteButton.hidden);
deleteButton.click();
return browserProxy.whenCalled('removeSearchEngine')
.then(function(modelIndex) {
assertFalse(menu.open);
assertEquals(entry.engine.modelIndex, modelIndex);
});
});
test('MakeDefault_Enabled', function() {
// Open action menu.
entry.$$('cr-icon-button').click();
const menu = entry.$$('cr-action-menu');
assertTrue(menu.open);
const makeDefaultButton = entry.$.makeDefault;
assertTrue(!!makeDefaultButton);
makeDefaultButton.click();
return browserProxy.whenCalled('setDefaultSearchEngine')
.then(function(modelIndex) {
assertFalse(menu.open);
assertEquals(entry.engine.modelIndex, modelIndex);
}); });
settings.SearchEnginesBrowserProxyImpl.instance_ = browserProxy; });
PolymerTest.clearBody();
page = document.createElement('settings-search-engines-page'); // Test that clicking the "edit" fires edit event.
document.body.appendChild(page); test('Edit_Enabled', function() {
return browserProxy.whenCalled('getSearchEnginesList'); // Open action menu.
}); entry.$$('cr-icon-button').click();
const menu = entry.$$('cr-action-menu');
teardown(function() { assertTrue(menu.open);
page.remove();
}); const engine = entry.engine;
const editButton = entry.$.edit;
// Tests that the page is querying and displaying search engine info on assertTrue(!!editButton);
// startup. assertFalse(editButton.hidden);
test('Initialization', function() {
const searchEnginesLists = const promise =
page.shadowRoot.querySelectorAll('settings-search-engines-list'); test_util.eventToPromise('edit-search-engine', entry).then(e => {
assertEquals(2, searchEnginesLists.length); assertEquals(engine, e.detail.engine);
assertEquals(entry.$$('cr-icon-button'), e.detail.anchorElement);
// Note: iron-list may create hidden children, so test the length
// if IronList.items instead of the child nodes.
Polymer.dom.flush();
const defaultsList = searchEnginesLists[0];
const defaultsEntries =
defaultsList.shadowRoot.querySelector('iron-list').items;
assertEquals(searchEnginesInfo.defaults.length, defaultsEntries.length);
const othersList = searchEnginesLists[1];
const othersEntries =
othersList.shadowRoot.querySelector('iron-list').items;
assertEquals(searchEnginesInfo.others.length, othersEntries.length);
// Ensure that the search engines have reverse alphabetical order in the
// model.
assertGT(
searchEnginesInfo.others[0].name, searchEnginesInfo.others[1].name);
// Ensure that they are displayed in alphabetical order.
assertEquals(searchEnginesInfo.others[1].name, othersEntries[0].name);
assertEquals(searchEnginesInfo.others[0].name, othersEntries[1].name);
const extensionEntries =
page.shadowRoot.querySelector('iron-list').items;
assertEquals(
searchEnginesInfo.extensions.length, extensionEntries.length);
});
// Test that the "no other search engines" message is shown/hidden as
// expected.
test('NoOtherSearchEnginesMessage', function() {
cr.webUIListenerCallback('search-engines-changed', {
defaults: [],
others: [],
extensions: [],
}); });
editButton.click();
return promise;
});
const message = page.root.querySelector('#noOtherEngines'); /**
assertTrue(!!message); * Checks that the given button is disabled (by being hidden), for the
assertFalse(message.hasAttribute('hidden')); * given search engine.
* @param {!SearchEngine} searchEngine
* @param {string} buttonId
*/
function testButtonDisabled(searchEngine, buttonId) {
entry.engine = searchEngine;
const button = entry.$[buttonId];
assertTrue(!!button);
assertTrue(button.hidden);
}
cr.webUIListenerCallback('search-engines-changed', { test('Remove_Disabled', function() {
defaults: [], testButtonDisabled(
others: [createSampleSearchEngine(0, 'G', false, false, false)], createSampleSearchEngine(0, 'G', true, true, false), 'delete');
extensions: [], });
});
assertTrue(message.hasAttribute('hidden')); test('MakeDefault_Disabled', function() {
}); testButtonDisabled(
createSampleSearchEngine(0, 'G', false, true, true), 'makeDefault');
// Tests that the add search engine dialog opens when the corresponding });
// button is tapped.
test('AddSearchEngineDialog', function() { test('Edit_Disabled', function() {
assertFalse(!!page.$$('settings-search-engine-dialog')); testButtonDisabled(
const addSearchEngineButton = page.$.addSearchEngine; createSampleSearchEngine(0, 'G', true, false, true), 'edit');
assertTrue(!!addSearchEngineButton); });
addSearchEngineButton.click(); test('All_Disabled', function() {
Polymer.dom.flush(); entry.engine = createSampleSearchEngine(0, 'G', true, false, false);
assertTrue(!!page.$$('settings-search-engine-dialog')); Polymer.dom.flush();
}); assertTrue(entry.hasAttribute('show-dots_'));
test('EditSearchEngineDialog', function() { entry.engine = createSampleSearchEngine(1, 'G', false, false, false);
const engine = searchEnginesInfo.others[0]; Polymer.dom.flush();
page.fire( assertFalse(entry.hasAttribute('show-dots_'));
'edit-search-engine', });
{engine, anchorElement: page.$.addSearchEngine}); });
return browserProxy.whenCalled('searchEngineEditStarted')
.then(modelIndex => { suite('SearchEnginePageTests', function() {
assertEquals(engine.modelIndex, modelIndex); /** @type {?SettingsSearchEnginesPageElement} */
const dialog = page.$$('settings-search-engine-dialog'); let page = null;
assertTrue(!!dialog);
let browserProxy = null;
// Check that the cr-input fields are pre-populated.
assertEquals(engine.name, dialog.$.searchEngine.value); /** @type {!SearchEnginesInfo} */
assertEquals(engine.keyword, dialog.$.keyword.value); const searchEnginesInfo = {
assertEquals(engine.url, dialog.$.queryUrl.value); defaults:
[createSampleSearchEngine(0, 'search_engine_G', false, false, false)],
assertFalse(dialog.$.actionButton.disabled); others: [
}); createSampleSearchEngine(1, 'search_engine_B', false, false, false),
}); createSampleSearchEngine(2, 'search_engine_A', false, false, false),
],
// Tests that filtering the three search engines lists works, and that the extensions: [createSampleOmniboxExtension()],
// "no search results" message is shown as expected. };
test('FilterSearchEngines', function() {
Polymer.dom.flush(); setup(function() {
browserProxy = new settings_search.TestSearchEnginesBrowserProxy();
function getListItems(listIndex) {
const ironList = listIndex == 2 /* extensions */ ? // Purposefully pass a clone of |searchEnginesInfo| to avoid any
page.shadowRoot.querySelector('iron-list') : // mutations on ground truth data.
page.shadowRoot browserProxy.setSearchEnginesInfo({
.querySelectorAll('settings-search-engines-list')[listIndex] defaults: searchEnginesInfo.defaults.slice(),
.shadowRoot.querySelector('iron-list'); others: searchEnginesInfo.others.slice(),
extensions: searchEnginesInfo.extensions.slice(),
return ironList.items; });
} settings.SearchEnginesBrowserProxyImpl.instance_ = browserProxy;
PolymerTest.clearBody();
function getDefaultEntries() { page = document.createElement('settings-search-engines-page');
return getListItems(0); document.body.appendChild(page);
} return browserProxy.whenCalled('getSearchEnginesList');
function getOtherEntries() { });
return getListItems(1);
} teardown(function() {
page.remove();
function assertSearchResults( });
defaultsCount, othersCount, extensionsCount) {
assertEquals(defaultsCount, getListItems(0).length); // Tests that the page is querying and displaying search engine info on
assertEquals(othersCount, getListItems(1).length); // startup.
assertEquals(extensionsCount, getListItems(2).length); test('Initialization', function() {
const searchEnginesLists =
const noResultsElements = Array.from( page.shadowRoot.querySelectorAll('settings-search-engines-list');
page.shadowRoot.querySelectorAll('.no-search-results')); assertEquals(2, searchEnginesLists.length);
assertEquals(defaultsCount > 0, noResultsElements[0].hidden);
assertEquals(othersCount > 0, noResultsElements[1].hidden); // Note: iron-list may create hidden children, so test the length
assertEquals(extensionsCount > 0, noResultsElements[2].hidden); // if IronList.items instead of the child nodes.
} Polymer.dom.flush();
const defaultsList = searchEnginesLists[0];
assertSearchResults(1, 2, 1); const defaultsEntries =
defaultsList.shadowRoot.querySelector('iron-list').items;
// Search by name assertEquals(searchEnginesInfo.defaults.length, defaultsEntries.length);
page.filter = searchEnginesInfo.defaults[0].name;
Polymer.dom.flush(); const othersList = searchEnginesLists[1];
assertSearchResults(1, 0, 0); const othersEntries =
othersList.shadowRoot.querySelector('iron-list').items;
// Search by displayName assertEquals(searchEnginesInfo.others.length, othersEntries.length);
page.filter = searchEnginesInfo.others[0].displayName;
Polymer.dom.flush(); // Ensure that the search engines have reverse alphabetical order in the
assertSearchResults(0, 1, 0); // model.
assertGT(
// Search by keyword searchEnginesInfo.others[0].name, searchEnginesInfo.others[1].name);
page.filter = searchEnginesInfo.others[1].keyword;
Polymer.dom.flush(); // Ensure that they are displayed in alphabetical order.
assertSearchResults(0, 1, 0); assertEquals(searchEnginesInfo.others[1].name, othersEntries[0].name);
assertEquals(searchEnginesInfo.others[0].name, othersEntries[1].name);
// Search by URL
page.filter = 'search?'; const extensionEntries = page.shadowRoot.querySelector('iron-list').items;
Polymer.dom.flush(); assertEquals(searchEnginesInfo.extensions.length, extensionEntries.length);
assertSearchResults(1, 2, 0); });
// Test case where none of the sublists have results. // Test that the "no other search engines" message is shown/hidden as
page.filter = 'does not exist'; // expected.
Polymer.dom.flush(); test('NoOtherSearchEnginesMessage', function() {
assertSearchResults(0, 0, 0); cr.webUIListenerCallback('search-engines-changed', {
defaults: [],
// Test case where an 'extension' search engine matches. others: [],
page.filter = 'extension'; extensions: [],
Polymer.dom.flush();
assertSearchResults(0, 0, 1);
});
}); });
}
function registerOmniboxExtensionEntryTests() { const message = page.root.querySelector('#noOtherEngines');
suite('OmniboxExtensionEntryTests', function() { assertTrue(!!message);
/** @type {?SettingsOmniboxExtensionEntryElement} */ assertFalse(message.hasAttribute('hidden'));
let entry = null;
cr.webUIListenerCallback('search-engines-changed', {
let browserProxy = null; defaults: [],
others: [createSampleSearchEngine(0, 'G', false, false, false)],
setup(function() { extensions: [],
browserProxy = new TestExtensionControlBrowserProxy();
settings.ExtensionControlBrowserProxyImpl.instance_ = browserProxy;
PolymerTest.clearBody();
entry = document.createElement('settings-omnibox-extension-entry');
entry.set('engine', createSampleOmniboxExtension());
document.body.appendChild(entry);
// Open action menu.
entry.$$('cr-icon-button').click();
});
teardown(function() {
entry.remove();
});
test('Manage', function() {
const manageButton = entry.$.manage;
assertTrue(!!manageButton);
manageButton.click();
return browserProxy.whenCalled('manageExtension')
.then(function(extensionId) {
assertEquals(entry.engine.extension.id, extensionId);
});
});
test('Disable', function() {
const disableButton = entry.$.disable;
assertTrue(!!disableButton);
disableButton.click();
return browserProxy.whenCalled('disableExtension')
.then(function(extensionId) {
assertEquals(entry.engine.extension.id, extensionId);
});
});
}); });
} assertTrue(message.hasAttribute('hidden'));
});
// Tests that the add search engine dialog opens when the corresponding
// button is tapped.
test('AddSearchEngineDialog', function() {
assertFalse(!!page.$$('settings-search-engine-dialog'));
const addSearchEngineButton = page.$.addSearchEngine;
assertTrue(!!addSearchEngineButton);
addSearchEngineButton.click();
Polymer.dom.flush();
assertTrue(!!page.$$('settings-search-engine-dialog'));
});
test('EditSearchEngineDialog', function() {
const engine = searchEnginesInfo.others[0];
page.fire(
'edit-search-engine', {engine, anchorElement: page.$.addSearchEngine});
return browserProxy.whenCalled('searchEngineEditStarted')
.then(modelIndex => {
assertEquals(engine.modelIndex, modelIndex);
const dialog = page.$$('settings-search-engine-dialog');
assertTrue(!!dialog);
// Check that the cr-input fields are pre-populated.
assertEquals(engine.name, dialog.$.searchEngine.value);
assertEquals(engine.keyword, dialog.$.keyword.value);
assertEquals(engine.url, dialog.$.queryUrl.value);
assertFalse(dialog.$.actionButton.disabled);
});
});
// Tests that filtering the three search engines lists works, and that the
// "no search results" message is shown as expected.
test('FilterSearchEngines', function() {
Polymer.dom.flush();
function getListItems(listIndex) {
const ironList = listIndex == 2 /* extensions */ ?
page.shadowRoot.querySelector('iron-list') :
page.shadowRoot
.querySelectorAll('settings-search-engines-list')[listIndex]
.shadowRoot.querySelector('iron-list');
return ironList.items;
}
function getDefaultEntries() {
return getListItems(0);
}
function getOtherEntries() {
return getListItems(1);
}
function assertSearchResults(defaultsCount, othersCount, extensionsCount) {
assertEquals(defaultsCount, getListItems(0).length);
assertEquals(othersCount, getListItems(1).length);
assertEquals(extensionsCount, getListItems(2).length);
const noResultsElements =
Array.from(page.shadowRoot.querySelectorAll('.no-search-results'));
assertEquals(defaultsCount > 0, noResultsElements[0].hidden);
assertEquals(othersCount > 0, noResultsElements[1].hidden);
assertEquals(extensionsCount > 0, noResultsElements[2].hidden);
}
assertSearchResults(1, 2, 1);
// Search by name
page.filter = searchEnginesInfo.defaults[0].name;
Polymer.dom.flush();
assertSearchResults(1, 0, 0);
// Search by displayName
page.filter = searchEnginesInfo.others[0].displayName;
Polymer.dom.flush();
assertSearchResults(0, 1, 0);
// Search by keyword
page.filter = searchEnginesInfo.others[1].keyword;
Polymer.dom.flush();
assertSearchResults(0, 1, 0);
// Search by URL
page.filter = 'search?';
Polymer.dom.flush();
assertSearchResults(1, 2, 0);
// Test case where none of the sublists have results.
page.filter = 'does not exist';
Polymer.dom.flush();
assertSearchResults(0, 0, 0);
// Test case where an 'extension' search engine matches.
page.filter = 'extension';
Polymer.dom.flush();
assertSearchResults(0, 0, 1);
});
});
registerDialogTests(); suite('OmniboxExtensionEntryTests', function() {
registerSearchEngineEntryTests(); /** @type {?SettingsOmniboxExtensionEntryElement} */
registerOmniboxExtensionEntryTests(); let entry = null;
registerPageTests();
let browserProxy = null;
setup(function() {
browserProxy = new TestExtensionControlBrowserProxy();
settings.ExtensionControlBrowserProxyImpl.instance_ = browserProxy;
PolymerTest.clearBody();
entry = document.createElement('settings-omnibox-extension-entry');
entry.set('engine', createSampleOmniboxExtension());
document.body.appendChild(entry);
// Open action menu.
entry.$$('cr-icon-button').click();
});
teardown(function() {
entry.remove();
});
test('Manage', function() {
const manageButton = entry.$.manage;
assertTrue(!!manageButton);
manageButton.click();
return browserProxy.whenCalled('manageExtension')
.then(function(extensionId) {
assertEquals(entry.engine.extension.id, extensionId);
});
});
test('Disable', function() {
const disableButton = entry.$.disable;
assertTrue(!!disableButton);
disableButton.click();
return browserProxy.whenCalled('disableExtension')
.then(function(extensionId) {
assertEquals(entry.engine.extension.id, extensionId);
});
});
}); });
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