<!DOCTYPE html> <html> <head> <script src="../../../resources/js-test.js"></script> <script src="../resources/common.js"></script> <script src="../resources/picker-common.js"></script> </head> <body> <select id="menu"> <option>foo</option> <option selected>bar</option> <option hidden>baz</option> <optgroup label="qux"> <option>garply</option> </optgroup> </select> <script> var menu = document.getElementById('menu'); var picker = null; function openPickerErrorCallback() { testFailed('picker didn\'t open') finishJSTest(); } openPicker(menu, test1, openPickerErrorCallback); function test1() { picker = window.internals.pagePopupWindow.global.picker; shouldBeEqualToString('picker._selectElement.value', '1'); shouldBeEqualToString('menu.value', 'bar'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'bar'); eventSender.keyDown('downArrow'); shouldBeEqualToString('picker._selectElement.value', '4'); shouldBeEqualToString('menu.value', 'bar'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'garply'); eventSender.keyDown('downArrow'); shouldBeEqualToString('picker._selectElement.value', '4'); shouldBeEqualToString('menu.value', 'bar'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'garply'); eventSender.keyDown('upArrow'); shouldBeEqualToString('picker._selectElement.value', '1'); shouldBeEqualToString('menu.value', 'bar'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'bar'); eventSender.keyDown('upArrow'); shouldBeEqualToString('picker._selectElement.value', '0'); shouldBeEqualToString('menu.value', 'bar'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'foo'); eventSender.keyDown('upArrow'); shouldBeEqualToString('picker._selectElement.value', '0'); shouldBeEqualToString('menu.value', 'bar'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'foo'); eventSender.keyDown('\n'); shouldBeNull('window.internals.pagePopupWindow'); shouldBeEqualToString('menu.value', 'foo'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'foo'); waitUntilClosing(function() { openPicker(menu, test2, openPickerErrorCallback); }); } function test2() { picker = window.internals.pagePopupWindow.global.picker; shouldBeEqualToString('picker._selectElement.value', '0'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'foo'); eventSender.keyDown('downArrow'); shouldBeEqualToString('picker._selectElement.value', '1'); shouldBeEqualToString('menu.value', 'foo'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'bar'); // Escape should close the popup and select that keyboard selected item. eventSender.keyDown('escape'); shouldBeNull('window.internals.pagePopupWindow'); shouldBeEqualToString('menu.value', 'bar'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'bar'); waitUntilClosing(function() { openPicker(menu, test3, openPickerErrorCallback); }); } function test3() { picker = window.internals.pagePopupWindow.global.picker; shouldBeEqualToString('picker._selectElement.value', '1'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'bar'); eventSender.keyDown('g'); shouldBeEqualToString('picker._selectElement.value', '4'); shouldBeEqualToString('menu.value', 'bar'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'garply'); // Escape should close the popup and select that keyboard selected item. eventSender.keyDown('escape'); shouldBeNull('window.internals.pagePopupWindow'); shouldBeEqualToString('menu.value', 'garply'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'garply'); waitUntilClosing(function() { openPicker(menu, test4, openPickerErrorCallback); }); } function test4() { picker = window.internals.pagePopupWindow.global.picker; shouldBeEqualToString('picker._selectElement.value', '4'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'garply'); hoverOverElement(picker._selectElement.children[0]); shouldBeEqualToString('picker._selectElement.value', '0'); shouldBeEqualToString('menu.value', 'garply'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'garply'); // Escape should close the popup. Simply hovering over an item should not select it. eventSender.keyDown('escape'); shouldBeNull('window.internals.pagePopupWindow'); shouldBeEqualToString('menu.value', 'garply'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'garply'); waitUntilClosing(function() { openPicker(menu, test5, openPickerErrorCallback); }); } function test5() { picker = window.internals.pagePopupWindow.global.picker; shouldBeEqualToString('picker._selectElement.value', '4'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'garply'); hoverOverElement(picker._selectElement.children[0]); shouldBeEqualToString('picker._selectElement.value', '0'); shouldBeEqualToString('menu.value', 'garply'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'garply'); // leftArrow doesn't change the selection in the popup. So, // selectMenuListText won't change. eventSender.keyDown('leftArrow'); shouldBeEqualToString('picker._selectElement.value', '0'); shouldBeEqualToString('menu.value', 'garply'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'garply'); eventSender.keyDown('escape'); shouldBeNull('window.internals.pagePopupWindow'); shouldBeEqualToString('menu.value', 'garply'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'garply'); menu.selectedIndex = 0; waitUntilClosing(function() { openPicker(menu, test6, openPickerErrorCallback); }); } function test6() { picker = window.internals.pagePopupWindow.global.picker; shouldBeEqualToString('picker._selectElement.value', '0'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'foo'); eventSender.keyDown('downArrow'); shouldBeEqualToString('picker._selectElement.value', '1'); shouldBeEqualToString('menu.value', 'foo'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'bar'); clickElement(picker._selectElement.children[0]); shouldBeNull('window.internals.pagePopupWindow'); shouldBeEqualToString('menu.value', 'foo'); shouldBeEqualToString('internals.selectMenuListText(menu)', 'foo'); finishJSTest(); } </script> </body> </html>