OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library DocumentFragmentTest; | 5 library DocumentFragmentTest; |
6 import '../../pkg/unittest/lib/unittest.dart'; | 6 import '../../pkg/unittest/lib/unittest.dart'; |
7 import '../../pkg/unittest/lib/html_config.dart'; | 7 import '../../pkg/unittest/lib/html_config.dart'; |
8 import 'dart:html'; | 8 import 'dart:html'; |
9 part 'util.dart'; | 9 part 'util.dart'; |
10 | 10 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 // that'll intercept these calls without implementing the entire | 53 // that'll intercept these calls without implementing the entire |
54 // CSSStyleDeclaration interface, so we'll settle for them being no-ops. | 54 // CSSStyleDeclaration interface, so we'll settle for them being no-ops. |
55 style.cssText = '* {color: blue}'; | 55 style.cssText = '* {color: blue}'; |
56 style.removeProperty('color'); | 56 style.removeProperty('color'); |
57 style.setProperty('color', 'blue'); | 57 style.setProperty('color', 'blue'); |
58 } | 58 } |
59 | 59 |
60 group('constructors', () { | 60 group('constructors', () { |
61 test('0-argument makes an empty fragment', () { | 61 test('0-argument makes an empty fragment', () { |
62 final fragment = new DocumentFragment(); | 62 final fragment = new DocumentFragment(); |
63 expect(fragment.elements, equals([])); | 63 expect(fragment.children, equals([])); |
64 }); | 64 }); |
65 | 65 |
66 test('.html parses input as HTML', () { | 66 test('.html parses input as HTML', () { |
67 final fragment = new DocumentFragment.html('<a>foo</a>'); | 67 final fragment = new DocumentFragment.html('<a>foo</a>'); |
68 expect(fragment.elements[0], isAnchorElement); | 68 expect(fragment.children[0], isAnchorElement); |
69 }); | 69 }); |
70 | 70 |
71 // test('.svg parses input as SVG', () { | 71 // test('.svg parses input as SVG', () { |
72 // final fragment = new DocumentFragment.svg('<a>foo</a>'); | 72 // final fragment = new DocumentFragment.svg('<a>foo</a>'); |
73 // expect(fragment.elements[0] is SVGAElement, isTrue); | 73 // expect(fragment.children[0] is SVGAElement, isTrue); |
74 // }); | 74 // }); |
75 | 75 |
76 // TODO(nweiz): enable this once XML is ported. | 76 // TODO(nweiz): enable this once XML is ported. |
77 // test('.xml parses input as XML', () { | 77 // test('.xml parses input as XML', () { |
78 // final fragment = new DocumentFragment.xml('<a>foo</a>'); | 78 // final fragment = new DocumentFragment.xml('<a>foo</a>'); |
79 // expect(fragment.elements[0] is XMLElement, isTrue); | 79 // expect(fragment.children[0] is XMLElement, isTrue); |
80 // }); | 80 // }); |
81 }); | 81 }); |
82 | 82 |
83 test('Unsupported operations throw errors', () { | 83 test('Unsupported operations throw errors', () { |
84 var emptyFragment = new DocumentFragment(); | 84 var emptyFragment = new DocumentFragment(); |
85 expectUnsupported(() => emptyFragment.attributes = {}); | 85 expectUnsupported(() => emptyFragment.attributes = {}); |
86 expectUnsupported(() => emptyFragment.classes = []); | 86 expectUnsupported(() => emptyFragment.classes = []); |
87 expectUnsupported(() => emptyFragment.classes.add('foo')); | 87 expectUnsupported(() => emptyFragment.classes.add('foo')); |
88 expectUnsupported(() => emptyFragment.dataAttributes = {}); | 88 expectUnsupported(() => emptyFragment.dataAttributes = {}); |
89 expectUnsupported(() => emptyFragment.contentEditable = "true"); | 89 expectUnsupported(() => emptyFragment.contentEditable = "true"); |
90 expectUnsupported(() => emptyFragment.dir); | 90 expectUnsupported(() => emptyFragment.dir); |
91 expectUnsupported(() => emptyFragment.dir = "ltr"); | 91 expectUnsupported(() => emptyFragment.dir = "ltr"); |
92 expectUnsupported(() => emptyFragment.draggable = true); | 92 expectUnsupported(() => emptyFragment.draggable = true); |
93 expectUnsupported(() => emptyFragment.hidden = true); | 93 expectUnsupported(() => emptyFragment.hidden = true); |
94 expectUnsupported(() => emptyFragment.id = "foo"); | 94 expectUnsupported(() => emptyFragment.id = "foo"); |
95 expectUnsupported(() => emptyFragment.lang); | 95 expectUnsupported(() => emptyFragment.lang); |
96 expectUnsupported(() => emptyFragment.lang = "en"); | 96 expectUnsupported(() => emptyFragment.lang = "en"); |
97 expectUnsupported(() => emptyFragment.scrollLeft = 10); | 97 expectUnsupported(() => emptyFragment.scrollLeft = 10); |
98 expectUnsupported(() => emptyFragment.scrollTop = 10); | 98 expectUnsupported(() => emptyFragment.scrollTop = 10); |
99 expectUnsupported(() => emptyFragment.spellcheck = true); | 99 expectUnsupported(() => emptyFragment.spellcheck = true); |
100 expectUnsupported(() => emptyFragment.translate = true); | 100 expectUnsupported(() => emptyFragment.translate = true); |
101 expectUnsupported(() => emptyFragment.tabIndex = 5); | 101 expectUnsupported(() => emptyFragment.tabIndex = 5); |
102 expectUnsupported(() => emptyFragment.title = "foo"); | 102 expectUnsupported(() => emptyFragment.title = "foo"); |
103 expectUnsupported(() => emptyFragment.webkitdropzone = "foo"); | 103 expectUnsupported(() => emptyFragment.webkitdropzone = "foo"); |
104 expectUnsupported(() => emptyFragment.webkitRegionOverflow = "foo"); | 104 expectUnsupported(() => emptyFragment.webkitRegionOverflow = "foo"); |
105 }); | 105 }); |
106 | 106 |
107 group('elements', () { | 107 group('children', () { |
108 var fragment; | 108 var fragment; |
109 var elements; | 109 var children; |
110 | 110 |
111 init() { | 111 init() { |
112 fragment = new DocumentFragment(); | 112 fragment = new DocumentFragment(); |
113 elements = fragment.elements; | 113 children = fragment.children; |
114 fragment.nodes.addAll( | 114 fragment.nodes.addAll( |
115 [new Text("1"), new Element.tag("A"), new Element.tag("B"), | 115 [new Text("1"), new Element.tag("A"), new Element.tag("B"), |
116 new Text("2"), new Element.tag("I"), new Text("3"), | 116 new Text("2"), new Element.tag("I"), new Text("3"), |
117 new Element.tag("U")]); | 117 new Element.tag("U")]); |
118 }; | 118 }; |
119 | 119 |
120 test('is initially empty', () { | 120 test('is initially empty', () { |
121 elements = new DocumentFragment().elements; | 121 children = new DocumentFragment().children; |
122 expect(elements, equals([])); | 122 expect(children, equals([])); |
123 expect(elements.isEmpty, isTrue); | 123 expect(children.isEmpty, isTrue); |
124 }); | 124 }); |
125 | 125 |
126 test('filters out non-element nodes', () { | 126 test('filters out non-element nodes', () { |
127 init(); | 127 init(); |
128 expect(_nodeStrings(fragment.nodes), | 128 expect(_nodeStrings(fragment.nodes), |
129 orderedEquals(["1", "A", "B", "2", "I", "3", "U"])); | 129 orderedEquals(["1", "A", "B", "2", "I", "3", "U"])); |
130 expect(_nodeStrings(elements), | 130 expect(_nodeStrings(children), |
131 orderedEquals(["A", "B", "I", "U"])); | 131 orderedEquals(["A", "B", "I", "U"])); |
132 }); | 132 }); |
133 | 133 |
134 test('only indexes elements, not other nodes', () { | 134 test('only indexes children, not other nodes', () { |
135 init(); | 135 init(); |
136 elements[1] = new Element.tag("BR"); | 136 children[1] = new Element.tag("BR"); |
137 expect(_nodeStrings(fragment.nodes), | 137 expect(_nodeStrings(fragment.nodes), |
138 orderedEquals(["1", "A", "BR", "2", "I", "3", "U"])); | 138 orderedEquals(["1", "A", "BR", "2", "I", "3", "U"])); |
139 expect(_nodeStrings(elements), | 139 expect(_nodeStrings(children), |
140 orderedEquals(["A", "BR", "I", "U"])); | 140 orderedEquals(["A", "BR", "I", "U"])); |
141 }); | 141 }); |
142 | 142 |
143 test('adds to both elements and nodes', () { | 143 test('adds to both children and nodes', () { |
144 init(); | 144 init(); |
145 elements.add(new Element.tag("UL")); | 145 children.add(new Element.tag("UL")); |
146 expect(_nodeStrings(fragment.nodes), | 146 expect(_nodeStrings(fragment.nodes), |
147 orderedEquals(["1", "A", "B", "2", "I", "3", "U", "UL"])); | 147 orderedEquals(["1", "A", "B", "2", "I", "3", "U", "UL"])); |
148 expect(_nodeStrings(elements), | 148 expect(_nodeStrings(children), |
149 orderedEquals(["A", "B", "I", "U", "UL"])); | 149 orderedEquals(["A", "B", "I", "U", "UL"])); |
150 }); | 150 }); |
151 | 151 |
152 test('removes only elements, from both elements and nodes', () { | 152 test('removes only children, from both children and nodes', () { |
153 init(); | 153 init(); |
154 expect(elements.removeLast().tagName, equals('U')); | 154 expect(children.removeLast().tagName, equals('U')); |
155 expect(_nodeStrings(fragment.nodes), | 155 expect(_nodeStrings(fragment.nodes), |
156 orderedEquals(["1", "A", "B", "2", "I", "3"])); | 156 orderedEquals(["1", "A", "B", "2", "I", "3"])); |
157 expect(_nodeStrings(elements), | 157 expect(_nodeStrings(children), |
158 orderedEquals(["A", "B", "I"])); | 158 orderedEquals(["A", "B", "I"])); |
159 | 159 |
160 expect(elements.removeLast().tagName, "I"); | 160 expect(children.removeLast().tagName, "I"); |
161 expect(_nodeStrings(fragment.nodes), | 161 expect(_nodeStrings(fragment.nodes), |
162 equals(["1", "A", "B", "2", "3"])); | 162 equals(["1", "A", "B", "2", "3"])); |
163 expect(_nodeStrings(elements), equals(["A", "B"])); | 163 expect(_nodeStrings(children), equals(["A", "B"])); |
164 }); | 164 }); |
165 | 165 |
166 test('accessors are wrapped', () { | 166 test('accessors are wrapped', () { |
167 init(); | 167 init(); |
168 expect(elements[0].tagName, "A"); | 168 expect(children[0].tagName, "A"); |
169 expect(_nodeStrings(elements.filter((e) => e.tagName == "I")), ["I"]); | 169 expect(_nodeStrings(children.filter((e) => e.tagName == "I")), ["I"]); |
170 expect(elements.every((e) => e is Element), isTrue); | 170 expect(children.every((e) => e is Element), isTrue); |
171 expect(elements.some((e) => e.tagName == "U"), isTrue); | 171 expect(children.some((e) => e.tagName == "U"), isTrue); |
172 expect(elements.isEmpty, isFalse); | 172 expect(children.isEmpty, isFalse); |
173 expect(elements.length, 4); | 173 expect(children.length, 4); |
174 expect(elements[2].tagName, "I"); | 174 expect(children[2].tagName, "I"); |
175 expect(elements.last.tagName, "U"); | 175 expect(children.last.tagName, "U"); |
176 }); | 176 }); |
177 | 177 |
178 test('setting elements overwrites nodes as well', () { | 178 test('setting children overwrites nodes as well', () { |
179 init(); | 179 init(); |
180 fragment.elements = [new Element.tag("DIV"), new Element.tag("HEAD")]; | 180 fragment.children = [new Element.tag("DIV"), new Element.tag("HEAD")]; |
181 expect(_nodeStrings(fragment.nodes), equals(["DIV", "HEAD"])); | 181 expect(_nodeStrings(fragment.nodes), equals(["DIV", "HEAD"])); |
182 }); | 182 }); |
183 }); | 183 }); |
184 | 184 |
185 test('setting innerHTML works', () { | 185 test('setting innerHTML works', () { |
186 var fragment = new DocumentFragment(); | 186 var fragment = new DocumentFragment(); |
187 fragment.nodes.add(new Text("foo")); | 187 fragment.nodes.add(new Text("foo")); |
188 fragment.innerHTML = "<a>bar</a>baz"; | 188 fragment.innerHTML = "<a>bar</a>baz"; |
189 expect(_nodeStrings(fragment.nodes), equals(["A", "baz"])); | 189 expect(_nodeStrings(fragment.nodes), equals(["A", "baz"])); |
190 }); | 190 }); |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
344 // // assertConstError(() => fragment.classes.add('foo')); | 344 // // assertConstError(() => fragment.classes.add('foo')); |
345 // }); | 345 // }); |
346 | 346 |
347 test('query searches the fragment', () { | 347 test('query searches the fragment', () { |
348 var fragment = new DocumentFragment.html( | 348 var fragment = new DocumentFragment.html( |
349 "<div class='foo'><a>foo</a><b>bar</b></div>"); | 349 "<div class='foo'><a>foo</a><b>bar</b></div>"); |
350 expect(fragment.query(".foo a").tagName, "A"); | 350 expect(fragment.query(".foo a").tagName, "A"); |
351 expect(_nodeStrings(fragment.queryAll(".foo *")), equals(["A", "B"])); | 351 expect(_nodeStrings(fragment.queryAll(".foo *")), equals(["A", "B"])); |
352 }); | 352 }); |
353 } | 353 } |
OLD | NEW |