summaryrefslogtreecommitdiffstats
path: root/third_party/WebKit/LayoutTests/fast/forms/radio-checkbox-restore-indeterminate.html
blob: 33bc7a75f0af4ff2a85d6a3bfc703f6fed6e466b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<html>
<head>

<script>
    if (window.testRunner)
        testRunner.dumpAsText();

    function dispatchEvent(target, eventType, offsetX, offsetY)
    {
        var targetRect = target.getBoundingClientRect();
        var ev = document.createEvent("MouseEvent");
        ev.initMouseEvent(eventType, true, true, window, 1, 1, 1, targetRect.left + offsetX, targetRect.top + offsetY, false, false, false, false, 0, document);
        target.dispatchEvent(ev);
    }

    function log(s)
    {
        document.getElementById('result').innerHTML += s + '<br>';
    }

    function defaultPreventingHandler(e) {
        e.preventDefault();
    }

    function runTests()
    {
        var radio1 = document.getElementById("radio1");
        var radio2 = document.getElementById("radio2");

        var radio3 = document.getElementById("radio3");
        var radio4 = document.getElementById("radio4");

        var check1 = document.getElementById("check1");
        var check2 = document.getElementById("check2");

        radio1.checked = true;

        radio3.checked = true;
        radio3.indeterminate = true;
        radio4.indeterminate = true;

        check1.checked = true;
        check1.indeterminate = true;

        check2.checked = false;
        check2.indeterminate = true;

        radio3.addEventListener('click', defaultPreventingHandler, false);
        radio4.addEventListener('click', defaultPreventingHandler, false);
        check1.addEventListener('click', defaultPreventingHandler, false);
        check2.addEventListener('click', defaultPreventingHandler, false);

        // Clicking selected radio should not unselect them both
        dispatchEvent(radio1, "click", 2, 2);

        // Default-prevented click should not change checked or intermediate state
        dispatchEvent(radio3, "click", 2, 2);
        dispatchEvent(radio4, "click", 2, 2);

        // Default-prevented click should not change checked or intermediate state
        dispatchEvent(check1, "click", 2, 2);
        dispatchEvent(check2, "click", 2, 2);

        if (radio1.checked)
        log('Click did not unselect all radio buttons: PASS');
        else
        log('Click unselected all radio buttons: FAIL');

        log('<br>Checking whether default-prevented click clobbered indeterminate state:')
        log('On checked radio button: ' + (radio3.indeterminate ? 'PASS' : 'FAIL'));
        log('On unchecked radio button: ' + (radio4.indeterminate ? 'PASS' : 'FAIL'));
        log('On checked checkbox: ' + (check1.indeterminate ? 'PASS' : 'FAIL'));
        log('On unchecked checkbox: ' + (check2.indeterminate ? 'PASS' : 'FAIL'));

        log('<br>Checking whether default-prevented click clobbered checked state:')
        log('On checked radio button: ' + (radio3.checked ? 'PASS' : 'FAIL'));
        log('On unchecked radio button: ' + (!radio4.checked ? 'PASS' : 'FAIL'));
        log('On checked checkbox: ' + (check1.checked ? 'PASS' : 'FAIL'));
        log('On unchecked checkbox: ' + (!check2.checked ? 'PASS' : 'FAIL'));
    }
</script>

</head>

<body onload="runTests()">

    <form>
      <input type="radio" name="test" id="radio1" value="a">A
      <input type="radio" name="test" id="radio2" value="b">B
    </form>

    <form>
      <input type="radio" name="test2" id="radio3" value="a">Intermediate A
      <input type="radio" name="test2" id="radio4" value="b">Intermediate B
    </form>

    <form>
      <input type="checkbox" name="check1" id="check1" value="a">C
      <input type="checkbox" name="check2" id="check2" value="b">D
    </form>

    <div id="result"></div>
</body>
</html>