OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <html> | 2 <html> |
3 <body> | 3 <body> |
| 4 <script src="../../../resources/testharness.js"></script> |
| 5 <script src="../../../resources/testharnessreport.js"></script> |
| 6 <div id="log"></div> |
4 | 7 |
5 <p>Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=32013">https://bugs
.webkit.org/show_bug.cgi?id=32013</a>. | 8 <p>Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=32013">https://bugs
.webkit.org/show_bug.cgi?id=32013</a>. |
6 | 9 |
7 <p>For manual testing, focus a radio button in the first group and use the arrow
keys. Changing the checked | 10 <p>For manual testing, focus a radio button in the first group and use the arrow
keys. Changing the checked |
8 radio button should fire change events. | 11 radio button should fire change events. |
9 | 12 |
10 <p> | 13 <p> |
11 <input type=radio name=aaa value=a checked onchange="handleChange(event)" onclic
k="handleClick(event)">a | 14 <input type=radio name=aaa value=a checked onchange="handleChange(event)">a |
12 <input type=radio name=aaa value=b onchange="handleChange(event)" onclick="handl
eClick(event)">b | 15 <input type=radio name=aaa value=b onchange="handleChange(event)">b |
13 <input type=radio name=aaa value=c onchange="handleChange(event)" onclick="handl
eClick(event)">c | 16 <input type=radio name=aaa value=c onchange="handleChange(event)">c |
14 | 17 |
15 <p>For manual testing, focus a radio button in the second group and use the arro
w keys. Change events | 18 <p>For manual testing, focus a radio button in the second group and use the arro
w keys. Change events |
16 should still be dispatched but the checked radio should not change. | 19 should still be dispatched but the checked radio should not change. |
17 | 20 |
18 <p> | 21 <p> |
19 <input type=radio name=bbb value=d checked onchange="handleChange(event)" onclic
k="handleClick(event)">d | 22 <input type=radio name=bbb value=d checked onchange="handleChange(event)" onclic
k="preventClick(event)">d |
20 <input type=radio name=bbb value=e onchange="handleChange(event)" onclick="handl
eClick(event)">e | 23 <input type=radio name=bbb value=e onchange="handleChange(event)" onclick="preve
ntClick(event)">e |
21 <input type=radio name=bbb value=f onchange="handleChange(event)" onclick="handl
eClick(event)">f | 24 <input type=radio name=bbb value=f onchange="handleChange(event)" onclick="preve
ntClick(event)">f |
22 | 25 |
23 <p>Test for <a href="https://code.google.com/p/chromium/issues/detail?id=556677"
>https://code.google.com/p/chromium/issues/detail?id=556677</a>. | 26 <p>Test for <a href="https://code.google.com/p/chromium/issues/detail?id=556677"
>https://code.google.com/p/chromium/issues/detail?id=556677</a>. |
24 | 27 |
25 <p>For manual testing, focus a radio button in the first group and use the arrow
keys. Changing the | 28 <p>For manual testing, focus a radio button in the first group and use the arrow
keys. Changing the |
26 radio button should fire change events in the direction of left to right. | 29 radio button should fire change events in the direction of left to right. |
27 | 30 |
28 <div dir="rtl"> | 31 <div dir="rtl"> |
29 <p> | 32 <p> |
30 <input type=radio name=ccc value=x onchange="handleChange(event)"><span dir="rtl
">x</span> | 33 <input type=radio name=ccc value=x onchange="handleChange(event)"><span dir="rtl
">x</span> |
31 <input type=radio name=ccc value=y onchange="handleChange(event)"><span dir="rtl
">y</span> | 34 <input type=radio name=ccc value=y onchange="handleChange(event)"><span dir="rtl
">y</span> |
32 <input type=radio name=ccc value=z onchange="handleChange(event)"><span dir="rtl
">z</span> | 35 <input type=radio name=ccc value=z onchange="handleChange(event)"><span dir="rtl
">z</span> |
33 </div> | 36 </div> |
34 <pre id=out></pre> | |
35 | 37 |
36 <script> | 38 <script> |
37 | 39 var lastChangeEventValue = null; |
38 var preventClickValues = 'def'; | |
39 | 40 |
40 function handleChange(e) | 41 function handleChange(e) |
41 { | 42 { |
42 var value = e.target.value; | 43 lastChangeEventValue = e.target.value; |
43 print(value + ' dispatched change event'); | |
44 } | 44 } |
45 | 45 |
46 function handleClick(e) | 46 function preventClick(e) |
47 { | 47 { |
48 var value = e.target.value; | 48 e.preventDefault(); |
49 if (preventClickValues.indexOf(value) !== -1) | |
50 e.preventDefault(); | |
51 } | |
52 | |
53 function print(s) | |
54 { | |
55 document.getElementById('out').textContent += s + '\n'; | |
56 } | |
57 | |
58 function pass(s) { | |
59 print('PASS: ' + s); | |
60 } | |
61 | |
62 function fail(s) { | |
63 print('FAIL: ' + s); | |
64 } | 49 } |
65 | 50 |
66 function getRadio(value) | 51 function getRadio(value) |
67 { | 52 { |
68 return document.querySelector('input[value="' + value + '"]'); | 53 return document.querySelector('input[value="' + value + '"]'); |
69 } | 54 } |
70 | 55 |
71 function assertChecked(value) | 56 if (window.eventSender) { |
72 { | 57 test(function() { |
73 if (getRadio(value).checked) | 58 getRadio('a').focus(); |
74 pass(value + ' is checked'); | 59 eventSender.keyDown('downArrow'); |
75 else | 60 assert_equals(lastChangeEventValue, 'b'); |
76 fail(value + ' should be checked'); | 61 eventSender.keyDown('downArrow'); |
| 62 assert_equals(lastChangeEventValue, 'c'); |
| 63 assert_false(getRadio('a').checked); |
| 64 assert_false(getRadio('b').checked); |
| 65 assert_true(getRadio('c').checked); |
| 66 }, 'Pressing an arrow key moves checked state in a radio button group.'); |
| 67 |
| 68 test(function() { |
| 69 getRadio('d').focus(); |
| 70 eventSender.keyDown('downArrow'); |
| 71 eventSender.keyDown('downArrow'); |
| 72 assert_true(getRadio('d').checked); |
| 73 assert_false(getRadio('e').checked); |
| 74 assert_false(getRadio('f').checked); |
| 75 }, 'Pressing an arrow key doesn\'t move checked state in a radio button grou
p if click events are prevented.'); |
| 76 |
| 77 test(function() { |
| 78 getRadio('x').focus(); |
| 79 eventSender.keyDown('rightArrow'); |
| 80 assert_equals(lastChangeEventValue, 'z'); |
| 81 assert_false(getRadio('x').checked); |
| 82 assert_false(getRadio('y').checked); |
| 83 assert_true(getRadio('z').checked); |
| 84 |
| 85 eventSender.keyDown('rightArrow'); |
| 86 assert_equals(lastChangeEventValue, 'y'); |
| 87 assert_false(getRadio('x').checked); |
| 88 assert_true(getRadio('y').checked); |
| 89 assert_false(getRadio('z').checked); |
| 90 }, 'Right arrow key should move checked state backward in RTL.'); |
| 91 |
| 92 test(function() { |
| 93 getRadio('x').focus(); |
| 94 getRadio('x').checked = true; |
| 95 eventSender.keyDown('downArrow'); |
| 96 assert_equals(lastChangeEventValue, 'y'); |
| 97 assert_false(getRadio('x').checked); |
| 98 assert_true(getRadio('y').checked); |
| 99 assert_false(getRadio('z').checked); |
| 100 }, 'Down arrow key should move checked state forward regardless of RTL.'); |
77 } | 101 } |
78 | |
79 function assertNotChecked(value) | |
80 { | |
81 if (!getRadio(value).checked) | |
82 pass(value + ' is not checked'); | |
83 else | |
84 fail(value + ' should not be checked'); | |
85 } | |
86 | |
87 if (window.testRunner) | |
88 testRunner.dumpAsText(); | |
89 | |
90 if (window.eventSender) { | |
91 getRadio('a').focus(); | |
92 eventSender.keyDown('downArrow'); | |
93 eventSender.keyDown('downArrow'); | |
94 | |
95 getRadio('d').focus(); | |
96 eventSender.keyDown('downArrow'); | |
97 eventSender.keyDown('downArrow'); | |
98 | |
99 assertNotChecked('a'); | |
100 assertNotChecked('b'); | |
101 assertChecked('c'); | |
102 | |
103 assertChecked('d'); | |
104 assertNotChecked('e'); | |
105 assertNotChecked('f'); | |
106 | |
107 getRadio('x').focus(); | |
108 eventSender.keyDown('rightArrow'); | |
109 eventSender.keyDown('rightArrow'); | |
110 | |
111 assertNotChecked('x'); | |
112 assertChecked('y'); | |
113 assertNotChecked('z'); | |
114 | |
115 getRadio('x').focus(); | |
116 eventSender.keyDown('downArrow'); | |
117 | |
118 assertNotChecked('x'); | |
119 assertChecked('y'); | |
120 assertNotChecked('z'); | |
121 | |
122 | |
123 } | |
124 | |
125 </script> | 102 </script> |
126 </body> | 103 </body> |
127 </html> | 104 </html> |
OLD | NEW |