OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | |
Alan Knight
2015/04/03 20:32:17
2011?
sra1
2015/04/03 20:47:42
Done.
| |
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. | |
4 | |
5 library ElementTest; | |
6 import 'package:unittest/unittest.dart'; | |
7 import 'package:unittest/html_config.dart'; | |
8 import 'dart:collection'; | |
9 import 'dart:html'; | |
10 import 'dart:svg' as svg; | |
11 | |
12 // Test for `querySelectorAll(xxx).classes.op()` where the query returns mixed | |
13 // Html and Svg elements. | |
14 | |
15 Element makeElementsContainer() { | |
16 var e = new Element.html( | |
17 '<ul class="yes foo">' | |
18 '<li class="yes quux qux">' | |
19 '</ul>'); | |
20 final svgContent = r""" | |
21 <svg version="1.1"> | |
22 <circle class="yes qux"></circle> | |
23 <path class="yes classy"></path> | |
24 </svg>"""; | |
25 final svgElement = new svg.SvgElement.svg(svgContent); | |
26 e.append(svgElement); | |
27 return e; | |
28 } | |
29 | |
30 Element elementsContainer; | |
31 | |
32 ElementList<Element> elementsSetup() { | |
33 elementsContainer = makeElementsContainer(); | |
34 document.documentElement.children.add(elementsContainer); | |
35 var elements = document.querySelectorAll('.yes'); | |
36 expect(elements.length, 4); | |
37 return elements; | |
38 } | |
39 | |
40 void elementsTearDown() { | |
41 if (elementsContainer != null) { | |
42 document.documentElement.children.remove(elementsContainer); | |
43 elementsContainer = null; | |
44 } | |
45 } | |
46 | |
47 /// Returns a canonical string for Set<String> and lists of Element's classes. | |
48 String view(var e) { | |
49 if (e is Set) return '${e.toList()..sort()}'; | |
50 if (e is Element) return view(e.classes); | |
51 if (e is Iterable) return '${e.map(view).toList()}'; | |
52 throw new ArgumentError('Cannot make canonical view string for: $e}'); | |
53 } | |
54 | |
55 main() { | |
56 useHtmlConfiguration(); | |
57 | |
58 Set<String> extractClasses(Element el) { | |
59 final match = new RegExp('class="([^"]+)"').firstMatch(el.outerHtml); | |
60 return new LinkedHashSet.from(match[1].split(' ')); | |
61 } | |
62 | |
63 tearDown(elementsTearDown); | |
64 | |
65 test('list_view', () { | |
66 // Test that the 'view' helper function is behaving. | |
67 var elements = elementsSetup(); | |
68 expect(view(elements.classes), '[classy, foo, quux, qux, yes]'); | |
69 expect(view(elements), | |
70 '[[foo, yes], [quux, qux, yes], [qux, yes], [classy, yes]]'); | |
71 }); | |
72 | |
73 test('listClasses=', () { | |
74 var elements = elementsSetup(); | |
75 | |
76 elements.classes = ['foo', 'qux']; | |
77 expect(view(elements.classes), '[foo, qux]'); | |
78 expect(view(elements), '[[foo, qux], [foo, qux], [foo, qux], [foo, qux]]'); | |
79 | |
80 var elements2 = document.querySelectorAll('.qux'); | |
81 expect(view(elements2.classes), '[foo, qux]'); | |
82 expect(view(elements2), '[[foo, qux], [foo, qux], [foo, qux], [foo, qux]]'); | |
83 | |
84 for (Element e in elements2) { | |
85 expect(e.classes, orderedEquals(['foo', 'qux'])); | |
86 expect(extractClasses(e), orderedEquals(['foo', 'qux'])); | |
87 } | |
88 | |
89 elements.classes = []; | |
90 expect(view(elements2.classes), '[]'); | |
91 expect(view(elements2), '[[], [], [], []]'); | |
92 }); | |
93 | |
94 test('listMap', () { | |
95 var elements = elementsSetup(); | |
96 expect(elements.classes.map((c) => c.toUpperCase()).toList(), | |
97 unorderedEquals(['YES', 'FOO', 'QUX', 'QUUX', 'CLASSY'])); | |
98 }); | |
99 | |
100 test('listContains', () { | |
101 var elements = elementsSetup(); | |
102 expect(elements.classes.contains('classy'), isTrue); | |
103 expect(elements.classes.contains('troll'), isFalse); | |
104 }); | |
105 | |
106 | |
107 test('listAdd', () { | |
108 var elements = elementsSetup(); | |
109 var added = elements.classes.add('lassie'); | |
110 expect(added, isNull); | |
111 | |
112 expect(view(elements.classes), '[classy, foo, lassie, quux, qux, yes]'); | |
113 expect(view(elements), | |
114 '[[foo, lassie, yes], [lassie, quux, qux, yes], ' | |
115 '[lassie, qux, yes], [classy, lassie, yes]]'); | |
116 }); | |
117 | |
118 test('listRemove', () { | |
119 var elements = elementsSetup(); | |
120 expect(elements.classes.remove('lassi'), isFalse); | |
121 expect(view(elements.classes), '[classy, foo, quux, qux, yes]'); | |
122 expect(view(elements), | |
123 '[[foo, yes], [quux, qux, yes], [qux, yes], [classy, yes]]'); | |
124 | |
125 expect(elements.classes.remove('qux'), isTrue); | |
126 expect(view(elements.classes), '[classy, foo, quux, yes]'); | |
127 expect(view(elements), | |
128 '[[foo, yes], [quux, yes], [yes], [classy, yes]]'); | |
129 }); | |
130 | |
131 test('listToggle', () { | |
132 var elements = elementsSetup(); | |
133 elements.classes.toggle('qux'); | |
134 expect(view(elements.classes), '[classy, foo, quux, qux, yes]'); | |
135 expect(view(elements), | |
136 '[[foo, qux, yes], [quux, yes], [yes], [classy, qux, yes]]'); | |
137 }); | |
138 | |
139 test('listAddAll', () { | |
140 var elements = elementsSetup(); | |
141 elements.classes.addAll(['qux', 'lassi', 'sassy']); | |
142 expect(view(elements.classes), | |
143 '[classy, foo, lassi, quux, qux, sassy, yes]'); | |
144 expect(view(elements), | |
145 '[[foo, lassi, qux, sassy, yes], [lassi, quux, qux, sassy, yes], ' | |
146 '[lassi, qux, sassy, yes], [classy, lassi, qux, sassy, yes]]'); | |
147 }); | |
148 | |
149 test('listRemoveAll', () { | |
150 var elements = elementsSetup(); | |
151 elements.classes.removeAll(['qux', 'classy', 'mumble']); | |
152 expect(view(elements.classes), '[foo, quux, yes]'); | |
153 expect(view(elements), | |
154 '[[foo, yes], [quux, yes], [yes], [yes]]'); | |
155 | |
156 elements.classes.removeAll(['foo', 'yes']); | |
157 expect(view(elements.classes), '[quux]'); | |
158 expect(view(elements), | |
159 '[[], [quux], [], []]'); | |
160 }); | |
161 | |
162 test('listToggleAll', () { | |
163 var elements = elementsSetup(); | |
164 elements.classes.toggleAll(['qux', 'mornin']); | |
165 expect(view(elements.classes), '[classy, foo, mornin, quux, qux, yes]'); | |
166 expect(view(elements), | |
167 '[[foo, mornin, qux, yes], [mornin, quux, yes], ' | |
168 '[mornin, yes], [classy, mornin, qux, yes]]'); | |
169 | |
170 }); | |
171 | |
172 test('listRetainAll', () { | |
173 var elements = elementsSetup(); | |
174 elements.classes.retainAll(['bar', 'baz', 'classy', 'qux']); | |
175 expect(view(elements.classes), '[classy, qux]'); | |
176 expect(view(elements), '[[], [qux], [qux], [classy]]'); | |
177 }); | |
178 | |
179 test('listRemoveWhere', () { | |
180 var elements = elementsSetup(); | |
181 elements.classes.removeWhere((s) => s.startsWith('q')); | |
182 expect(view(elements.classes), '[classy, foo, yes]'); | |
183 expect(view(elements), | |
184 '[[foo, yes], [yes], [yes], [classy, yes]]'); | |
185 }); | |
186 | |
187 test('listRetainWhere', () { | |
188 var elements = elementsSetup(); | |
189 elements.classes.retainWhere((s) => s.startsWith('q')); | |
190 expect(view(elements.classes), '[quux, qux]'); | |
191 expect(view(elements), | |
192 '[[], [quux, qux], [qux], []]'); | |
193 }); | |
194 | |
195 test('listContainsAll', () { | |
196 var elements = elementsSetup(); | |
197 expect(elements.classes.containsAll(['qux', 'mornin']), isFalse); | |
198 expect(elements.classes.containsAll(['qux', 'classy']), isTrue); | |
199 }); | |
200 } | |
OLD | NEW |