<!DOCTYPE HTML> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=672810 --> <head> <title>Test for Bug 672810</title> <script src="/tests/SimpleTest/SimpleTest.js"></script> <script src="/tests/SimpleTest/EventUtils.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> </head> <body> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=672810">Mozilla Bug 672810</a> <p id="display"></p> <div id="content"> <select id="s1" multiple size="10"><option>x<option>x<option>x<option>x<option>x<option>x<option>x<option>x<option>x<option>x</select> <select id="s2" size="10"><option>x<option>x<option>x<option>x<option>x<option>x<option>x<option>x<option>x<option>x</select> <select id="s3" size="1"><option>x<option>x<option>x<option>x<option>x<option>x<option>x<option>x<option>x<option>x</select> </div> <pre id="test"> <script type="application/javascript"> /** Test for Bug 672810 **/ SimpleTest.waitForExplicitFinish(); SimpleTest.waitForFocus(function() { var sel = document.getElementsByTagName('select'); sel[0].addEventListener('focus', function() { s = sel[0]; s.removeEventListener('focus', arguments.callee); synthesizeKey('KEY_ArrowDown'); is(s.selectedIndex,0, s.id + ": initial DOWN selects first option"); synthesizeKey('KEY_ArrowDown', {ctrlKey: true}); is(s.selectedIndex,0, s.id + ": first option is still selected"); ok(!s[1].selected,s.id + ": CTRL+DOWN did not select 2nd option"); synthesizeKey('KEY_ArrowDown', {ctrlKey: true}); synthesizeKey('KEY_ArrowDown', {ctrlKey: true, shiftKey: true}); is(s.selectedIndex,0, s.id + ": first option is still selected"); ok(!s[1].selected,s.id + ": 2nd option is still unselected"); ok(s[2].selected,s.id + ": 3rd option is selected"); ok(s[3].selected,s.id + ": 4th option is selected"); ok(!s[4].selected,s.id + ": 5th option is unselected"); synthesizeKey('KEY_ArrowDown', {ctrlKey: true, shiftKey: true}); is(s.selectedIndex,0, s.id + ": first option is still selected"); ok(!s[1].selected,s.id + ": 2nd option is still unselected"); ok(s[2].selected,s.id + ": 3rd option is still selected"); ok(s[3].selected,s.id + ": 4th option is still selected"); ok(s[4].selected,s.id + ": 5th option is selected"); ok(!s[5].selected,s.id + ": 6th option is unselected"); synthesizeKey('KEY_ArrowUp', {ctrlKey: true, shiftKey: true}); is(s.selectedIndex,0, s.id + ": first option is still selected"); ok(!s[1].selected,s.id + ": 2nd option is still unselected"); ok(s[2].selected,s.id + ": 3rd option is still selected"); ok(s[3].selected,s.id + ": 4th option is still selected"); ok(s[4].selected,s.id + ": 5th option is still selected"); ok(!s[5].selected,s.id + ": 6th option is still unselected"); synthesizeKey(' ', {ctrlKey: true, shiftKey: true}); is(s.selectedIndex,0, s.id + ": first option is still selected"); ok(!s[1].selected,s.id + ": 2nd option is still unselected"); ok(s[2].selected,s.id + ": 3rd option is still selected"); ok(!s[3].selected,s.id + ": 4th option is unselected"); ok(s[4].selected,s.id + ": 5th option is still selected"); ok(!s[5].selected,s.id + ": 6th option is still unselected"); synthesizeKey(' ', {ctrlKey: true, shiftKey: true}); is(s.selectedIndex,0, s.id + ": first option is still selected"); ok(!s[1].selected,s.id + ": 2nd option is still unselected"); ok(s[2].selected,s.id + ": 3rd option is still selected"); ok(s[3].selected,s.id + ": 4th option is selected"); ok(s[4].selected,s.id + ": 5th option is still selected"); ok(!s[5].selected,s.id + ": 6th option is still unselected"); setTimeout(function(){sel[1].focus()},0); }); sel[1].addEventListener('focus', function() { s = sel[1]; s.removeEventListener('focus', arguments.callee); synthesizeKey('KEY_ArrowDown'); is(s.selectedIndex,0, s.id + ": initial DOWN selects first option"); synthesizeKey('KEY_ArrowDown', {ctrlKey: true}); is(s.selectedIndex,1, s.id + ": 2nd option is selected"); ok(!s[0].selected,s.id + ": CTRL+DOWN deselected first option"); synthesizeKey('KEY_ArrowDown', {ctrlKey: true}); synthesizeKey('KEY_ArrowDown', {ctrlKey: true, shiftKey: true}); is(s.selectedIndex,3, s.id + ": 4th option is selected"); ok(!s[1].selected,s.id + ": CTRL+SHIFT+DOWN deselected 2nd option"); synthesizeKey(' ', {ctrlKey: true, shiftKey: true}); is(s.selectedIndex,3, s.id + ": 4th option is still selected"); synthesizeKey(' ', {ctrlKey: true, shiftKey: true}); is(s.selectedIndex,3, s.id + ": 4th option is still selected"); setTimeout(function(){sel[2].focus()},0); }); sel[2].addEventListener('focus', function() { if (!navigator.platform.includes("Mac")) { s = sel[2]; s.removeEventListener('focus', arguments.callee); synthesizeKey('KEY_ArrowDown'); is(s.selectedIndex,1, s.id + ": initial DOWN selects 2nd option"); synthesizeKey('KEY_ArrowDown', {ctrlKey: true}); is(s.selectedIndex,2, s.id + ": 3rd option is selected"); ok(!s[1].selected,s.id + ": CTRL+DOWN deselected 2nd option"); synthesizeKey('KEY_ArrowDown', {ctrlKey: true, shiftKey: true}); is(s.selectedIndex,3, s.id + ": 4th option is selected"); ok(!s[2].selected,s.id + ": CTRL+SHIFT+DOWN deselected 3rd option"); synthesizeKey(' ', {ctrlKey: true, shiftKey: true}); is(s.selectedIndex,3, s.id + ": 4th option is still selected"); synthesizeKey(' ', {ctrlKey: true, shiftKey: true}); is(s.selectedIndex,3, s.id + ": 4th option is still selected"); } else { todo(false, "Make this test work on OSX"); } setTimeout(function(){SimpleTest.finish()},0); }); sel[0].focus(); }); </script> </pre> </body> </html>