summaryrefslogtreecommitdiffstats
path: root/third_party/WebKit/LayoutTests/fast/forms/tabs-with-modifiers.html
blob: 56588ab51256248fb55e4860c1919cb6c911496f (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
<p>This test tabs with different combinations of modifiers pressed, where some should advance focus and some should not.</p>
<div id="testDiv"></div>
<pre id="console"></pre>

<script>

if (window.layoutTestController)
    layoutTestController.dumpAsText();

function log(s)
{
    document.getElementById('console').appendChild(document.createTextNode(s));
}

function description(element)
{
    return element.getAttribute("id");
}

function keydownListener(event)
{
    log("- keydown event: " + description(event.target)  + "\n");
}

function blurListener(event)
{
    log("- blur event: " + description(event.target) + "\n");
}

var lastFocusedElement = null;
function focusListener(event)
{
    log('- focus event: ' + description(event.target) + '\n');
    lastFocusedElement = event.target;
}

function addEventListeners(element)
{
    element.addEventListener('keydown', keydownListener, false);
    element.addEventListener('focus', focusListener, false);
    element.addEventListener('blur', blurListener, false);
}

function addElements(parentElement)
{
    // Add 3 input elements
    var input = parentElement.ownerDocument.createElement('input');
    addEventListeners(input);
    input.setAttribute("id", "a");
    parentElement.appendChild(input);
    input = parentElement.ownerDocument.createElement('input');
    addEventListeners(input);
    input.setAttribute("id", "b");
    parentElement.appendChild(input);
    input = parentElement.ownerDocument.createElement('input');
    addEventListeners(input);
    input.setAttribute("id", "c");
    parentElement.appendChild(input);
}

function dispatchTab(element, shiftKey, metaKey, ctrlKey, altGraphKey)
{
    var event = document.createEvent("KeyboardEvents");
    var tabKeyIdentifier = "U+0009";
    event.initKeyboardEvent("keydown", true, true, document.defaultView, tabKeyIdentifier, 0, ctrlKey, false, shiftKey, metaKey, altGraphKey);
    element.dispatchEvent(event);
}

function setup()
{
    var testDiv = document.getElementById('testDiv');
    addElements(testDiv);
}

setup();

var middleInput = document.getElementsByTagName('input')[1];

for (i = 0; i < 2; ++i) {
    log("resetting focus to middle input\n");
    middleInput.focus();
    log("test tab case that should advance focus\n");
    dispatchTab(middleInput, (i & 1) != 0, false, false, false);
}
for (i = 2; i < 16; ++i) {
    log("resetting focus to middle input\n");
    middleInput.focus();
    log("test tab case that should not advance focus\n");
    dispatchTab(middleInput, (i & 1) != 0, (i & 2) != 0, (i & 4) != 0, (i & 8) != 0);
}

</script>