1<!DOCTYPE HTML>
2<html>
3<script src='test.js'></script>
4<script src='focus.js'></script>
5<script>
6
7function testInactiveElement() {
8  var a = document.getElementById('a');
9  a.value = 'abc';
10  a.setSelectionRange(0, 2);
11  assertEquals(0, a.selectionStart);
12  assertEquals(2, a.selectionEnd);
13  var c = document.getElementById('c');
14  c.focus();
15  assertEquals(c, document.activeElement);
16  focus(a);
17  assertEquals(3, a.selectionStart);
18  assertEquals(3, a.selectionEnd);
19}
20
21function testActiveElement() {
22  var a = document.getElementById('a');
23  a.focus();
24  var is_blurred = false;
25  var onBlur = function() {
26    is_blurred = true;
27  }
28  a.addEventListener('blur', onBlur, false);
29  try {
30    focus(a);
31    assert(!is_blurred);
32  } catch (error) {
33    a.removeEventListener('blur', onBlur, false);
34    throw error;
35  }
36}
37
38function testNonTextInput() {
39  var a = document.getElementById('a');
40  a.focus();
41  assertEquals(a, document.activeElement);
42  var c = document.getElementById('c');
43  focus(c);
44  assertEquals(c, document.activeElement);
45}
46
47function testEditableDiv() {
48  var a = document.getElementById('a');
49  a.focus();
50  assertEquals(a, document.activeElement);
51  var d = document.getElementById('d');
52  focus(d);
53  assertEquals(d, document.activeElement);
54}
55
56function testNonFocusableChildOfEditableDiv() {
57  var a = document.getElementById('a');
58  a.focus();
59  assertEquals(a, document.activeElement);
60  try {
61    focus(document.getElementById('e'));
62    assert(false);
63  } catch (error) {
64  }
65}
66
67function testFocusableChildOfEditableDiv() {
68  var a = document.getElementById('a');
69  a.focus();
70  assertEquals(a, document.activeElement);
71  var f = document.getElementById('f');
72  focus(f);
73  assertEquals(f, document.activeElement);
74}
75
76function testTransparentElement() {
77  var a = document.getElementById('a');
78  a.focus();
79  assertEquals(a, document.activeElement);
80  var g = document.getElementById('g');
81  focus(g);
82  assertEquals(g, document.activeElement);
83}
84
85</script>
86<body>
87  <input type="text" id="a">
88  <br>
89  <textarea id="b">
90  </textarea>
91  <br>
92  <input type="button" value="c" id="c">
93  <br>
94  <div id="d" contentEditable="true">
95  </div>
96  <div contentEditable="true">
97    <div id="e">editable</div>
98  </div>
99  <div contentEditable="true">
100    <input id="f" type="text">
101  </div>
102  <div>
103    <input id="g" style='opacity: 0' type='text'>
104  </div>
105</body>
106</html>
107