Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(73)

Side by Side Diff: chrome/test/data/webui/settings/dropdown_menu_tests.js

Issue 2374253012: MD Settings: Migrating settings-dropdown-menu to use native select. (Closed)
Patch Set: Remove Polymer.dom.flush, simplify. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 /** @fileoverview Suite of tests for settings-dropdown-menu. */ 5 /** @fileoverview Suite of tests for settings-dropdown-menu. */
6 cr.define('settings_dropdown_menu', function() { 6 cr.define('settings_dropdown_menu', function() {
7 function registerTests() { 7 function registerTests() {
8 suite('SettingsDropdownMenu', function() { 8 suite('SettingsDropdownMenu', function() {
9 /** @type {SettingsDropdownMenu} */ 9 /** @type {SettingsDropdownMenu} */
10 var dropdown; 10 var dropdown;
11 11
12 /** 12 /**
13 * The IronSelectable (paper-listbox) used internally by the dropdown 13 * The <select> used internally by the dropdown menu.
14 * menu. 14 * @type {HTMLSelectElement}
15 * @type {Polymer.IronSelectableBehavior}
16 */ 15 */
17 var selectable; 16 var selectElement;
17
18 function waitForFlush() {
Dan Beam 2016/10/04 01:59:45 nit: waitUntilDropdownRendered() or something less
dpapad 2016/10/04 20:38:12 Done.
19 return new Promise(function(resolve) { dropdown.async(resolve); });
20 }
21
22 function simulateChangeEvent(value) {
23 selectElement.value = value;
24 selectElement.dispatchEvent(new CustomEvent('change'));
25 return waitForFlush();
26 }
18 27
19 setup(function() { 28 setup(function() {
20 PolymerTest.clearBody(); 29 PolymerTest.clearBody();
21 dropdown = document.createElement('settings-dropdown-menu'); 30 dropdown = document.createElement('settings-dropdown-menu');
22 selectable = dropdown.$$('paper-listbox'); 31 selectElement = dropdown.$$('select');
23 document.body.appendChild(dropdown); 32 document.body.appendChild(dropdown);
24 }); 33 });
25 34
26 test('with number options', function testNumberOptions() { 35 test('with number options', function testNumberOptions() {
27 dropdown.pref = { 36 dropdown.pref = {
28 key: 'test.number', 37 key: 'test.number',
29 type: chrome.settingsPrivate.PrefType.NUMBER, 38 type: chrome.settingsPrivate.PrefType.NUMBER,
30 value: 100, 39 value: 100,
31 }; 40 };
32 dropdown.menuOptions = [{value: 100, name: 'Option 100'}, 41 dropdown.menuOptions = [{value: 100, name: 'Option 100'},
33 {value: 200, name: 'Option 200'}, 42 {value: 200, name: 'Option 200'},
34 {value: 300, name: 'Option 300'}, 43 {value: 300, name: 'Option 300'},
35 {value: 400, name: 'Option 400'}]; 44 {value: 400, name: 'Option 400'}];
36 45
37 // IronSelectable uses a DOM observer, which uses a debouncer. 46 return waitForFlush().then(function() {
38 Polymer.dom.flush(); 47 // Initially selected item.
48 assertEquals(
49 'Option 100',
50 selectElement.selectedOptions[0].textContent.trim());
39 51
40 // Initially selected item. 52 // Selecting an item updates the pref.
41 assertEquals('Option 100', selectable.selectedItem.textContent.trim()); 53 return simulateChangeEvent('200');
54 }).then(function() {
55 assertEquals(200, dropdown.pref.value);
42 56
43 // Selecting an item updates the pref. 57 // Updating the pref selects an item.
44 selectable.selected = '200'; 58 dropdown.set('pref.value', 400);
45 assertEquals(200, dropdown.pref.value); 59 return waitForFlush();
46 60 }).then(function() {
47 // Updating the pref selects an item. 61 assertEquals('400', selectElement.value);
48 dropdown.set('pref.value', 400); 62 });
49 assertEquals('400', selectable.selected);
50 }); 63 });
51 64
52 test('with string options', function testStringOptions() { 65 test('with string options', function testStringOptions() {
53 dropdown.pref = { 66 dropdown.pref = {
54 key: 'test.string', 67 key: 'test.string',
55 type: chrome.settingsPrivate.PrefType.STRING, 68 type: chrome.settingsPrivate.PrefType.STRING,
56 value: 'c', 69 value: 'c',
57 }; 70 };
58 dropdown.menuOptions = 71 dropdown.menuOptions =
59 [{value: 'a', name: 'AAA'}, 72 [{value: 'a', name: 'AAA'},
60 {value: 'b', name: 'BBB'}, 73 {value: 'b', name: 'BBB'},
61 {value: 'c', name: 'CCC'}, 74 {value: 'c', name: 'CCC'},
62 {value: 'd', name: 'DDD'}]; 75 {value: 'd', name: 'DDD'}];
63 Polymer.dom.flush();
64 76
65 // Initially selected item. 77 return waitForFlush().then(function() {
66 assertEquals('CCC', selectable.selectedItem.textContent.trim()); 78 // Initially selected item.
79 assertEquals(
80 'CCC', selectElement.selectedOptions[0].textContent.trim());
67 81
68 // Selecting an item updates the pref. 82 // Selecting an item updates the pref.
69 selectable.selected = 'a'; 83 return simulateChangeEvent('a');
70 assertEquals('a', dropdown.pref.value); 84 }).then(function() {
85 assertEquals('a', dropdown.pref.value);
71 86
72 // Updating the pref selects an item. 87 // Updating the pref selects an item.
73 dropdown.set('pref.value', 'b'); 88 dropdown.set('pref.value', 'b');
74 assertEquals('b', selectable.selected); 89 return waitForFlush();
90 }).then(function() {
91 assertEquals('b', selectElement.value);
92 });
75 }); 93 });
76 94
77 test('with custom value', function testCustomValue() { 95 test('with custom value', function testCustomValue() {
78 dropdown.pref = { 96 dropdown.pref = {
79 key: 'test.string', 97 key: 'test.string',
80 type: chrome.settingsPrivate.PrefType.STRING, 98 type: chrome.settingsPrivate.PrefType.STRING,
81 value: 'f', 99 value: 'f',
82 }; 100 };
83 dropdown.menuOptions = 101 dropdown.menuOptions =
84 [{value: 'a', name: 'AAA'}, 102 [{value: 'a', name: 'AAA'},
85 {value: 'b', name: 'BBB'}, 103 {value: 'b', name: 'BBB'},
86 {value: 'c', name: 'CCC'}, 104 {value: 'c', name: 'CCC'},
87 {value: 'd', name: 'DDD'}]; 105 {value: 'd', name: 'DDD'}];
88 Polymer.dom.flush();
89 106
90 // "Custom" initially selected. 107 return waitForFlush().then(function() {
91 assertEquals(dropdown.notFoundValue_, selectable.selected); 108 // "Custom" initially selected.
92 // Pref should not have changed. 109 assertEquals(dropdown.notFoundValue_, selectElement.value);
93 assertEquals('f', dropdown.pref.value); 110 // Pref should not have changed.
111 assertEquals('f', dropdown.pref.value);
112 });
94 }); 113 });
95 114
96 test('delay setting options', function testDelayedOptions(done) { 115 function waitForTimeout(timeMs) {
116 return new Promise(function(resolve) { setTimeout(resolve, timeMs); });
117 }
118
119 test('delay setting options', function testDelayedOptions() {
97 dropdown.pref = { 120 dropdown.pref = {
98 key: 'test.number2', 121 key: 'test.number2',
99 type: chrome.settingsPrivate.PrefType.NUMBER, 122 type: chrome.settingsPrivate.PrefType.NUMBER,
100 value: 200, 123 value: 200,
101 }; 124 };
102 125
103 setTimeout(function() { 126 console.log('running test');
104 assertEquals( 127 return waitForTimeout(100).then(function() {
105 loadTimeData.getValue('loading'), dropdown.$.dropdownMenu.label); 128 return waitForFlush();
129 }).then(function() {
106 assertTrue(dropdown.$.dropdownMenu.disabled); 130 assertTrue(dropdown.$.dropdownMenu.disabled);
107 assertEquals(undefined, selectable.selected); 131 assertEquals('SETTINGS_DROPDOWN_NOT_FOUND_ITEM', selectElement.value);
108 132
109 dropdown.menuOptions = [{value: 100, name: 'Option 100'}, 133 dropdown.menuOptions = [{value: 100, name: 'Option 100'},
110 {value: 200, name: 'Option 200'}, 134 {value: 200, name: 'Option 200'},
111 {value: 300, name: 'Option 300'}, 135 {value: 300, name: 'Option 300'},
112 {value: 400, name: 'Option 400'}]; 136 {value: 400, name: 'Option 400'}];
113 Polymer.dom.flush(); 137 return waitForFlush();
114 138 }).then(function() {
115 // Dropdown menu enables itself and selects the new menu option 139 // Dropdown menu enables itself and selects the new menu option
116 // correpsonding to the pref value. 140 // correpsonding to the pref value.
117 assertFalse(dropdown.$.dropdownMenu.disabled); 141 assertFalse(dropdown.$.dropdownMenu.disabled);
118 assertEquals('200', selectable.selected); 142 assertEquals('200', selectElement.value);
119 done(); 143 });
120 }, 100);
121 }); 144 });
122 }); 145 });
123 } 146 }
124 147
125 return { 148 return {
126 registerTests: registerTests, 149 registerTests: registerTests,
127 }; 150 };
128 }); 151 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698