Index: chrome/test/data/webui/settings/dropdown_menu_tests.js |
diff --git a/chrome/test/data/webui/settings/dropdown_menu_tests.js b/chrome/test/data/webui/settings/dropdown_menu_tests.js |
index a10a09f51d98e939201e9f0b450c79b98dcd095c..c3e588be71afbfa74c7d20af86d0da888739b29a 100644 |
--- a/chrome/test/data/webui/settings/dropdown_menu_tests.js |
+++ b/chrome/test/data/webui/settings/dropdown_menu_tests.js |
@@ -10,16 +10,25 @@ cr.define('settings_dropdown_menu', function() { |
var dropdown; |
/** |
- * The IronSelectable (paper-listbox) used internally by the dropdown |
- * menu. |
- * @type {Polymer.IronSelectableBehavior} |
+ * The <select> used internally by the dropdown menu. |
+ * @type {HTMLSelectElement} |
*/ |
- var selectable; |
+ var selectElement; |
+ |
+ function waitForFlush() { |
Dan Beam
2016/10/04 01:59:45
nit: waitUntilDropdownRendered() or something less
dpapad
2016/10/04 20:38:12
Done.
|
+ return new Promise(function(resolve) { dropdown.async(resolve); }); |
+ } |
+ |
+ function simulateChangeEvent(value) { |
+ selectElement.value = value; |
+ selectElement.dispatchEvent(new CustomEvent('change')); |
+ return waitForFlush(); |
+ } |
setup(function() { |
PolymerTest.clearBody(); |
dropdown = document.createElement('settings-dropdown-menu'); |
- selectable = dropdown.$$('paper-listbox'); |
+ selectElement = dropdown.$$('select'); |
document.body.appendChild(dropdown); |
}); |
@@ -34,19 +43,23 @@ cr.define('settings_dropdown_menu', function() { |
{value: 300, name: 'Option 300'}, |
{value: 400, name: 'Option 400'}]; |
- // IronSelectable uses a DOM observer, which uses a debouncer. |
- Polymer.dom.flush(); |
- |
- // Initially selected item. |
- assertEquals('Option 100', selectable.selectedItem.textContent.trim()); |
- |
- // Selecting an item updates the pref. |
- selectable.selected = '200'; |
- assertEquals(200, dropdown.pref.value); |
- |
- // Updating the pref selects an item. |
- dropdown.set('pref.value', 400); |
- assertEquals('400', selectable.selected); |
+ return waitForFlush().then(function() { |
+ // Initially selected item. |
+ assertEquals( |
+ 'Option 100', |
+ selectElement.selectedOptions[0].textContent.trim()); |
+ |
+ // Selecting an item updates the pref. |
+ return simulateChangeEvent('200'); |
+ }).then(function() { |
+ assertEquals(200, dropdown.pref.value); |
+ |
+ // Updating the pref selects an item. |
+ dropdown.set('pref.value', 400); |
+ return waitForFlush(); |
+ }).then(function() { |
+ assertEquals('400', selectElement.value); |
+ }); |
}); |
test('with string options', function testStringOptions() { |
@@ -60,18 +73,23 @@ cr.define('settings_dropdown_menu', function() { |
{value: 'b', name: 'BBB'}, |
{value: 'c', name: 'CCC'}, |
{value: 'd', name: 'DDD'}]; |
- Polymer.dom.flush(); |
- // Initially selected item. |
- assertEquals('CCC', selectable.selectedItem.textContent.trim()); |
- |
- // Selecting an item updates the pref. |
- selectable.selected = 'a'; |
- assertEquals('a', dropdown.pref.value); |
- |
- // Updating the pref selects an item. |
- dropdown.set('pref.value', 'b'); |
- assertEquals('b', selectable.selected); |
+ return waitForFlush().then(function() { |
+ // Initially selected item. |
+ assertEquals( |
+ 'CCC', selectElement.selectedOptions[0].textContent.trim()); |
+ |
+ // Selecting an item updates the pref. |
+ return simulateChangeEvent('a'); |
+ }).then(function() { |
+ assertEquals('a', dropdown.pref.value); |
+ |
+ // Updating the pref selects an item. |
+ dropdown.set('pref.value', 'b'); |
+ return waitForFlush(); |
+ }).then(function() { |
+ assertEquals('b', selectElement.value); |
+ }); |
}); |
test('with custom value', function testCustomValue() { |
@@ -85,39 +103,44 @@ cr.define('settings_dropdown_menu', function() { |
{value: 'b', name: 'BBB'}, |
{value: 'c', name: 'CCC'}, |
{value: 'd', name: 'DDD'}]; |
- Polymer.dom.flush(); |
- // "Custom" initially selected. |
- assertEquals(dropdown.notFoundValue_, selectable.selected); |
- // Pref should not have changed. |
- assertEquals('f', dropdown.pref.value); |
+ return waitForFlush().then(function() { |
+ // "Custom" initially selected. |
+ assertEquals(dropdown.notFoundValue_, selectElement.value); |
+ // Pref should not have changed. |
+ assertEquals('f', dropdown.pref.value); |
+ }); |
}); |
- test('delay setting options', function testDelayedOptions(done) { |
+ function waitForTimeout(timeMs) { |
+ return new Promise(function(resolve) { setTimeout(resolve, timeMs); }); |
+ } |
+ |
+ test('delay setting options', function testDelayedOptions() { |
dropdown.pref = { |
key: 'test.number2', |
type: chrome.settingsPrivate.PrefType.NUMBER, |
value: 200, |
}; |
- setTimeout(function() { |
- assertEquals( |
- loadTimeData.getValue('loading'), dropdown.$.dropdownMenu.label); |
+ console.log('running test'); |
+ return waitForTimeout(100).then(function() { |
+ return waitForFlush(); |
+ }).then(function() { |
assertTrue(dropdown.$.dropdownMenu.disabled); |
- assertEquals(undefined, selectable.selected); |
+ assertEquals('SETTINGS_DROPDOWN_NOT_FOUND_ITEM', selectElement.value); |
dropdown.menuOptions = [{value: 100, name: 'Option 100'}, |
{value: 200, name: 'Option 200'}, |
{value: 300, name: 'Option 300'}, |
{value: 400, name: 'Option 400'}]; |
- Polymer.dom.flush(); |
- |
+ return waitForFlush(); |
+ }).then(function() { |
// Dropdown menu enables itself and selects the new menu option |
// correpsonding to the pref value. |
assertFalse(dropdown.$.dropdownMenu.disabled); |
- assertEquals('200', selectable.selected); |
- done(); |
- }, 100); |
+ assertEquals('200', selectElement.value); |
+ }); |
}); |
}); |
} |