Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1002)

Side by Side Diff: test/codegen/lib/html/element_classes_test.dart

Issue 1930043002: Add all dart:html tests from the sdk to test/codegen. (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
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
11 Element makeElement() => new Element.tag('div');
12
13 Element makeElementWithClasses() =>
14 new Element.html('<div class="foo bar baz"></div>');
15
16 Set<String> makeClassSet() => makeElementWithClasses().classes;
17
18 Element makeListElement() =>
19 new Element.html('<ul class="foo bar baz">'
20 '<li class="quux qux">'
21 '<li class="meta">'
22 '<li class="classy lassy">'
23 '<li class="qux lassy">'
24 '</ul>');
25
26 Element listElement;
27
28 ElementList<Element> listElementSetup() {
29 listElement = makeListElement();
30 document.documentElement.children.add(listElement);
31 return document.querySelectorAll('li');
32 }
33
34 void listElementTearDown() {
35 if (listElement != null) {
36 document.documentElement.children.remove(listElement);
37 listElement = null;
38 }
39 }
40
41 /// Returns a canonical string for Set<String> and lists of Element's classes.
42 String view(var e) {
43 if (e is Set) return '${e.toList()..sort()}';
44 if (e is Element) return view(e.classes);
45 if (e is Iterable) return '${e.map(view).toList()}';
46 throw new ArgumentError('Cannot make canonical view string for: $e}');
47 }
48
49 main() {
50 useHtmlConfiguration();
51
52 Set<String> extractClasses(Element el) {
53 final match = new RegExp('class="([^"]+)"').firstMatch(el.outerHtml);
54 return new LinkedHashSet.from(match[1].split(' '));
55 }
56
57
58 test('affects the "class" attribute', () {
59 final el = makeElementWithClasses();
60 el.classes.add('qux');
61 expect(extractClasses(el), orderedEquals(['foo', 'bar', 'baz', 'qux']));
62 });
63
64 test('is affected by the "class" attribute', () {
65 final el = makeElementWithClasses();
66 el.attributes['class'] = 'foo qux';
67 expect(el.classes, orderedEquals(['foo', 'qux']));
68 });
69
70 test('classes=', () {
71 final el = makeElementWithClasses();
72 el.classes = ['foo', 'qux'];
73 expect(el.classes, orderedEquals(['foo', 'qux']));
74 expect(extractClasses(el), orderedEquals(['foo', 'qux']));
75 });
76
77 test('toString', () {
78 expect(makeClassSet().toString().split(' '),
79 orderedEquals(['foo', 'bar', 'baz']));
80 expect(makeElement().classes.toString(), '');
81 });
82
83 test('forEach', () {
84 final classes = <String>[];
85 makeClassSet().forEach(classes.add);
86 expect(classes, orderedEquals(['foo', 'bar', 'baz']));
87 });
88
89 test('iterator', () {
90 final classes = <String>[];
91 for (var el in makeClassSet()) {
92 classes.add(el);
93 }
94 expect(classes, orderedEquals(['foo', 'bar', 'baz']));
95 });
96
97 test('map', () {
98 expect(makeClassSet().map((c) => c.toUpperCase()).toList(),
99 orderedEquals(['FOO', 'BAR', 'BAZ']));
100 });
101
102 test('where', () {
103 expect(makeClassSet().where((c) => c.contains('a')).toList(),
104 orderedEquals(['bar', 'baz']));
105 });
106
107 test('every', () {
108 expect(makeClassSet().every((c) => c is String), isTrue);
109 expect(makeClassSet().every((c) => c.contains('a')), isFalse);
110 });
111
112 test('any', () {
113 expect(makeClassSet().any((c) => c.contains('a')), isTrue);
114 expect(makeClassSet().any((c) => c is num), isFalse);
115 });
116
117 test('isEmpty', () {
118 expect(makeClassSet().isEmpty, isFalse);
119 expect(makeElement().classes.isEmpty, isTrue);
120 });
121
122 test('length', () {
123 expect(makeClassSet().length, 3);
124 expect(makeElement().classes.length, 0);
125 });
126
127 test('contains', () {
128 expect(makeClassSet().contains('foo'), isTrue);
129 expect(makeClassSet().contains('qux'), isFalse);
130 });
131
132 test('contains-bad', () {
133 // Non-strings return `false`.
134 // Strings need to be valid tokens.
135 final classes = makeClassSet();
136 expect(classes.contains(1), isFalse);
137 expect(() => classes.contains(''), throws);
138 expect(() => classes.contains('foo bar'), throws);
139 });
140
141 test('add', () {
142 final classes = makeClassSet();
143 var added = classes.add('qux');
144 expect(added, isTrue);
145 expect(classes, orderedEquals(['foo', 'bar', 'baz', 'qux']));
146
147 added = classes.add('qux');
148 expect(added, isFalse);
149 final list = new List.from(classes);
150 list.sort((a, b) => a.compareTo(b));
151 expect(list, orderedEquals(['bar', 'baz', 'foo', 'qux']),
152 reason: "The class set shouldn't have duplicate elements.");
153 });
154
155 test('add-bad', () {
156 final classes = makeClassSet();
157 expect(() => classes.add(''), throws);
158 expect(() => classes.add('foo bar'), throws);
159 });
160
161 test('remove', () {
162 final classes = makeClassSet();
163 classes.remove('bar');
164 expect(classes, orderedEquals(['foo', 'baz']));
165 classes.remove('qux');
166 expect(classes, orderedEquals(['foo', 'baz']));
167 });
168
169 test('remove-bad', () {
170 final classes = makeClassSet();
171 expect(() => classes.remove(''), throws);
172 expect(() => classes.remove('foo bar'), throws);
173 });
174
175 test('toggle', () {
176 final classes = makeClassSet();
177 classes.toggle('bar');
178 expect(classes, orderedEquals(['foo', 'baz']));
179 classes.toggle('qux');
180 expect(classes, orderedEquals(['foo', 'baz', 'qux']));
181
182 classes.toggle('qux', true);
183 expect(classes, orderedEquals(['foo', 'baz', 'qux']));
184 classes.toggle('qux', false);
185 expect(classes, orderedEquals(['foo', 'baz']));
186 classes.toggle('qux', false);
187 expect(classes, orderedEquals(['foo', 'baz']));
188 classes.toggle('qux', true);
189 expect(classes, orderedEquals(['foo', 'baz', 'qux']));
190 });
191
192 test('toggle-bad', () {
193 final classes = makeClassSet();
194 expect(() => classes.toggle(''), throws);
195 expect(() => classes.toggle('', true), throws);
196 expect(() => classes.toggle('', false), throws);
197 expect(() => classes.toggle('foo bar'), throws);
198 expect(() => classes.toggle('foo bar', true), throws);
199 expect(() => classes.toggle('foo bar', false), throws);
200 });
201
202 test('addAll', () {
203 final classes = makeClassSet();
204 classes.addAll(['bar', 'qux', 'bip']);
205 expect(classes, orderedEquals(['foo', 'bar', 'baz', 'qux', 'bip']));
206 });
207
208 test('removeAll', () {
209 final classes = makeClassSet();
210 classes.removeAll(['bar', 'baz', 'qux']);
211 expect(classes, orderedEquals(['foo']));
212 });
213
214 test('toggleAll', () {
215 final classes = makeClassSet();
216 classes.toggleAll(['bar', 'foo']);
217 expect(classes, orderedEquals(['baz']));
218 classes.toggleAll(['qux', 'quux']);
219 expect(classes, orderedEquals(['baz', 'qux', 'quux']));
220 classes.toggleAll(['bar', 'foo'], true);
221 expect(classes, orderedEquals(['baz', 'qux', 'quux', 'bar', 'foo']));
222 classes.toggleAll(['baz', 'quux'], false);
223 expect(classes, orderedEquals(['qux','bar', 'foo']));
224 });
225
226 test('retainAll', () {
227 final classes = makeClassSet();
228 classes.retainAll(['bar', 'baz', 'qux']);
229 expect(classes, orderedEquals(['bar', 'baz']));
230 });
231
232 test('removeWhere', () {
233 final classes = makeClassSet();
234 classes.removeWhere((s) => s.startsWith('b'));
235 expect(classes, orderedEquals(['foo']));
236 });
237
238 test('retainWhere', () {
239 final classes = makeClassSet();
240 classes.retainWhere((s) => s.startsWith('b'));
241 expect(classes, orderedEquals(['bar', 'baz']));
242 });
243
244 test('containsAll', () {
245 final classes = makeClassSet();
246 expect(classes.containsAll(['foo', 'baz']), isTrue);
247 expect(classes.containsAll(['foo', 'qux']), isFalse);
248 expect(classes.containsAll(['foo', 'baz'].toSet()), isTrue);
249 expect(classes.containsAll(['foo', 'qux'].toSet()), isFalse);
250 });
251
252 test('intersection', () {
253 final classes = makeClassSet();
254 expect(classes.intersection(['foo', 'qux', 'baz'].toSet()),
255 unorderedEquals(['foo', 'baz']));
256 });
257
258 test('clear', () {
259 final classes = makeClassSet();
260 classes.clear();
261 expect(classes, equals([]));
262 });
263
264 test('order', () {
265 var classes = makeClassSet();
266 classes.add('aardvark');
267 expect(classes, orderedEquals(['foo', 'bar', 'baz', 'aardvark']));
268 classes.toggle('baz');
269 expect(classes, orderedEquals(['foo', 'bar', 'aardvark']));
270 classes.toggle('baz');
271 expect(classes, orderedEquals(['foo', 'bar', 'aardvark', 'baz']));
272 });
273
274 tearDown(listElementTearDown);
275
276 test('list_view', () {
277 // Test that the 'view' helper function is behaving.
278 var elements = listElementSetup();
279 expect(view(elements.classes), '[classy, lassy, meta, quux, qux]');
280 expect(view(elements),
281 '[[quux, qux], [meta], [classy, lassy], [lassy, qux]]');
282 });
283
284 test('listClasses=', () {
285 var elements = listElementSetup();
286 elements.classes = ['foo', 'qux'];
287 elements = document.queryAll('li');
288 for (Element e in elements) {
289 expect(e.classes, orderedEquals(['foo', 'qux']));
290 expect(extractClasses(e), orderedEquals(['foo', 'qux']));
291 }
292
293 elements.classes = [];
294 expect(view(elements.classes), '[]');
295 expect(view(elements), '[[], [], [], []]');
296 });
297
298 test('listMap', () {
299 var elements = listElementSetup();
300 expect(elements.classes.map((c) => c.toUpperCase()).toList(),
301 unorderedEquals(['QUX', 'QUUX', 'META', 'CLASSY', 'LASSY']));
302 });
303
304 test('listContains', () {
305 var elements = listElementSetup();
306 expect(elements.classes.contains('lassy'), isTrue);
307 expect(elements.classes.contains('foo'), isFalse);
308 });
309
310
311 test('listAdd', () {
312 var elements = listElementSetup();
313 var added = elements.classes.add('lassie');
314 expect(added, isNull);
315
316 expect(view(elements.classes), '[classy, lassie, lassy, meta, quux, qux]');
317 expect(view(elements),
318 '[[lassie, quux, qux], [lassie, meta], [classy, lassie, lassy], '
319 '[lassie, lassy, qux]]');
320 });
321
322 test('listRemove', () {
323 var elements = listElementSetup();
324 expect(elements.classes.remove('lassi'), isFalse);
325 expect(view(elements.classes), '[classy, lassy, meta, quux, qux]');
326 expect(view(elements),
327 '[[quux, qux], [meta], [classy, lassy], [lassy, qux]]');
328
329 expect(elements.classes.remove('qux'), isTrue);
330 expect(view(elements.classes), '[classy, lassy, meta, quux]');
331 expect(view(elements), '[[quux], [meta], [classy, lassy], [lassy]]');
332 });
333
334 test('listToggle', () {
335 var elements = listElementSetup();
336 elements.classes.toggle('qux');
337 expect(view(elements.classes), '[classy, lassy, meta, quux, qux]');
338 expect(view(elements),
339 '[[quux], [meta, qux], [classy, lassy, qux], [lassy]]');
340 });
341
342 test('listAddAll', () {
343 var elements = listElementSetup();
344 elements.classes.addAll(['qux', 'lassi', 'sassy']);
345 expect(view(elements.classes),
346 '[classy, lassi, lassy, meta, quux, qux, sassy]');
347 expect(view(elements),
348 '[[lassi, quux, qux, sassy], [lassi, meta, qux, sassy], '
349 '[classy, lassi, lassy, qux, sassy], [lassi, lassy, qux, sassy]]');
350 });
351
352 test('listRemoveAll', () {
353 var elements = listElementSetup();
354 elements.classes.removeAll(['qux', 'lassy', 'meta']);
355 expect(view(elements.classes), '[classy, quux]');
356 expect(view(elements), '[[quux], [], [classy], []]');
357
358 });
359
360 test('listToggleAll', () {
361 var elements = listElementSetup();
362 elements.classes.toggleAll(['qux', 'meta', 'mornin']);
363 expect(view(elements.classes), '[classy, lassy, meta, mornin, quux, qux]');
364 expect(view(elements),
365 '[[meta, mornin, quux], [mornin, qux], '
366 '[classy, lassy, meta, mornin, qux], [lassy, meta, mornin]]');
367
368 });
369
370 test('listRetainAll', () {
371 var elements = listElementSetup();
372 elements.classes.retainAll(['bar', 'baz', 'qux']);
373 expect(view(elements.classes), '[qux]');
374 expect(view(elements), '[[qux], [], [], [qux]]');
375 });
376
377 test('listRemoveWhere', () {
378 var elements = listElementSetup();
379 elements.classes.removeWhere((s) => s.startsWith('q'));
380 expect(view(elements.classes), '[classy, lassy, meta]');
381 expect(view(elements),
382 '[[], [meta], [classy, lassy], [lassy]]');
383 });
384
385 test('listRetainWhere', () {
386 var elements = listElementSetup();
387 elements.classes.retainWhere((s) => s.startsWith('q'));
388 expect(view(elements.classes), '[quux, qux]');
389 expect(view(elements), '[[quux, qux], [], [], [qux]]');
390 });
391
392 test('listContainsAll', () {
393 var elements = listElementSetup();
394 expect(elements.classes.containsAll(['qux', 'meta', 'mornin']), isFalse);
395 expect(elements.classes.containsAll(['qux', 'lassy', 'classy']), isTrue);
396 });
397 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698