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

Side by Side Diff: tests/html/element_classes_test.dart

Issue 1054093002: Add new methods to html/element_classes_test (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 ElementTest; 5 library ElementTest;
6 import 'package:unittest/unittest.dart'; 6 import 'package:unittest/unittest.dart';
7 import 'package:unittest/html_config.dart'; 7 import 'package:unittest/html_config.dart';
8 import 'dart:collection'; 8 import 'dart:collection';
9 import 'dart:html'; 9 import 'dart:html';
10 10
11 main() { 11 main() {
12 useHtmlConfiguration(); 12 useHtmlConfiguration();
13 13
14 Element makeElement() => new Element.tag('div'); 14 Element makeElement() => new Element.tag('div');
15 15
16 Element makeElementWithChildren() => 16 Element makeElementWithChildren() =>
17 new Element.html("<div><br/><img/><input/></div>"); 17 new Element.html("<div><br/><img/><input/></div>");
18 18
19 Element makeElementWithClasses() => 19 Element makeElementWithClasses() =>
20 new Element.html('<div class="foo bar baz"></div>'); 20 new Element.html('<div class="foo bar baz"></div>');
21 21
22 Element makeListElement() => 22 Element makeListElement() =>
23 new Element.html('<ul class="foo bar baz">' 23 new Element.html('<ul class="foo bar baz">'
24 '<li class="quux qux"><li class="meta">' 24 '<li class="quux qux">'
25 '<li class="classy lassy"><li class="qux lassy"></ul>'); 25 '<li class="meta">'
26 '<li class="classy lassy">'
27 '<li class="qux lassy">'
28 '</ul>');
26 29
27 Set<String> makeClassSet() => makeElementWithClasses().classes; 30 Set<String> makeClassSet() => makeElementWithClasses().classes;
28 31
29 Set<String> extractClasses(Element el) { 32 Set<String> extractClasses(Element el) {
30 final match = new RegExp('class="([^"]+)"').firstMatch(el.outerHtml); 33 final match = new RegExp('class="([^"]+)"').firstMatch(el.outerHtml);
31 return new LinkedHashSet.from(match[1].split(' ')); 34 return new LinkedHashSet.from(match[1].split(' '));
32 } 35 }
33 36
37 /// Returns a canonical string for Set<String> and lists of Element's classes.
38 String view(var e) {
39 if (e is Set) return '${e.toList()..sort()}';
40 if (e is Element) return view(e.classes);
41 if (e is Iterable) return '${e.map(view).toList()}';
42 throw new ArgumentError('Cannot make canonical view string for: $e}');
43 }
44
34 test('affects the "class" attribute', () { 45 test('affects the "class" attribute', () {
35 final el = makeElementWithClasses(); 46 final el = makeElementWithClasses();
36 el.classes.add('qux'); 47 el.classes.add('qux');
37 expect(extractClasses(el), orderedEquals(['foo', 'bar', 'baz', 'qux'])); 48 expect(extractClasses(el), orderedEquals(['foo', 'bar', 'baz', 'qux']));
38 }); 49 });
39 50
40 test('is affected by the "class" attribute', () { 51 test('is affected by the "class" attribute', () {
41 final el = makeElementWithClasses(); 52 final el = makeElementWithClasses();
42 el.attributes['class'] = 'foo qux'; 53 el.attributes['class'] = 'foo qux';
43 expect(el.classes, orderedEquals(['foo', 'qux'])); 54 expect(el.classes, orderedEquals(['foo', 'qux']));
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 classes.toggleAll(['bar', 'foo']); 172 classes.toggleAll(['bar', 'foo']);
162 expect(classes, orderedEquals(['baz'])); 173 expect(classes, orderedEquals(['baz']));
163 classes.toggleAll(['qux', 'quux']); 174 classes.toggleAll(['qux', 'quux']);
164 expect(classes, orderedEquals(['baz', 'qux', 'quux'])); 175 expect(classes, orderedEquals(['baz', 'qux', 'quux']));
165 classes.toggleAll(['bar', 'foo'], true); 176 classes.toggleAll(['bar', 'foo'], true);
166 expect(classes, orderedEquals(['baz', 'qux', 'quux', 'bar', 'foo'])); 177 expect(classes, orderedEquals(['baz', 'qux', 'quux', 'bar', 'foo']));
167 classes.toggleAll(['baz', 'quux'], false); 178 classes.toggleAll(['baz', 'quux'], false);
168 expect(classes, orderedEquals(['qux','bar', 'foo'])); 179 expect(classes, orderedEquals(['qux','bar', 'foo']));
169 }); 180 });
170 181
182 test('retainAll', () {
183 final classes = makeClassSet();
184 classes.retainAll(['bar', 'baz', 'qux']);
185 expect(classes, orderedEquals(['bar', 'baz']));
186 });
187
188 test('removeWhere', () {
189 final classes = makeClassSet();
190 classes.removeWhere((s) => s.startsWith('b'));
191 expect(classes, orderedEquals(['foo']));
192 });
193
194 test('retainWhere', () {
195 final classes = makeClassSet();
196 classes.retainWhere((s) => s.startsWith('b'));
197 expect(classes, orderedEquals(['bar', 'baz']));
198 });
199
171 test('containsAll', () { 200 test('containsAll', () {
172 final classes = makeClassSet(); 201 final classes = makeClassSet();
202 expect(classes.containsAll(['foo', 'baz']), isTrue);
203 expect(classes.containsAll(['foo', 'qux']), isFalse);
173 expect(classes.containsAll(['foo', 'baz'].toSet()), isTrue); 204 expect(classes.containsAll(['foo', 'baz'].toSet()), isTrue);
174 expect(classes.containsAll(['foo', 'qux'].toSet()), isFalse); 205 expect(classes.containsAll(['foo', 'qux'].toSet()), isFalse);
175 }); 206 });
176 207
177 test('intersection', () { 208 test('intersection', () {
178 final classes = makeClassSet(); 209 final classes = makeClassSet();
179 expect(classes.intersection(['foo', 'qux', 'baz'].toSet()), 210 expect(classes.intersection(['foo', 'qux', 'baz'].toSet()),
180 unorderedEquals(['foo', 'baz'])); 211 unorderedEquals(['foo', 'baz']));
181 }); 212 });
182 213
183 test('clear', () { 214 test('clear', () {
184 final classes = makeClassSet(); 215 final classes = makeClassSet();
185 classes.clear(); 216 classes.clear();
186 expect(classes, equals([])); 217 expect(classes, equals([]));
187 }); 218 });
188 219
189 test('order', () { 220 test('order', () {
190 var classes = makeClassSet(); 221 var classes = makeClassSet();
191 classes.add('aardvark'); 222 classes.add('aardvark');
192 expect(classes, orderedEquals(['foo', 'bar', 'baz', 'aardvark'])); 223 expect(classes, orderedEquals(['foo', 'bar', 'baz', 'aardvark']));
193 classes.toggle('baz'); 224 classes.toggle('baz');
194 expect(classes, orderedEquals(['foo', 'bar', 'aardvark'])); 225 expect(classes, orderedEquals(['foo', 'bar', 'aardvark']));
195 classes.toggle('baz'); 226 classes.toggle('baz');
196 expect(classes, orderedEquals(['foo', 'bar', 'aardvark', 'baz'])); 227 expect(classes, orderedEquals(['foo', 'bar', 'aardvark', 'baz']));
197 }); 228 });
198 229
230
199 Element listElement; 231 Element listElement;
200 232
201 ElementList<Element> listElementSetup() { 233 ElementList<Element> listElementSetup() {
202 listElement = makeListElement(); 234 listElement = makeListElement();
203 document.documentElement.children.add(listElement); 235 document.documentElement.children.add(listElement);
204 return document.queryAll('li'); 236 return document.querySelectorAll('li');
205 } 237 }
206 238
239 tearDown(() {
240 if (listElement != null) {
241 document.documentElement.children.remove(listElement);
242 listElement = null;
243 }
244 });
245
246 test('list_view', () {
247 // Test that the 'view' helper function is behaving.
248 var elements = listElementSetup();
249 expect(view(elements.classes), '[classy, lassy, meta, quux, qux]');
250 expect(view(elements),
251 '[[quux, qux], [meta], [classy, lassy], [lassy, qux]]');
252 });
253
207 test('listClasses=', () { 254 test('listClasses=', () {
208 var elements = listElementSetup(); 255 var elements = listElementSetup();
209 elements.classes = ['foo', 'qux']; 256 elements.classes = ['foo', 'qux'];
210 elements = document.queryAll('li'); 257 elements = document.queryAll('li');
211 for (Element e in elements) { 258 for (Element e in elements) {
212 expect(e.classes, orderedEquals(['foo', 'qux'])); 259 expect(e.classes, orderedEquals(['foo', 'qux']));
213 expect(extractClasses(e), orderedEquals(['foo', 'qux'])); 260 expect(extractClasses(e), orderedEquals(['foo', 'qux']));
214 } 261 }
215 262
216 elements.classes = []; 263 elements.classes = [];
217 for (Element e in elements) { 264 expect(view(elements.classes), '[]');
218 expect(e.classes, []); 265 expect(view(elements), '[[], [], [], []]');
219 }
220 document.documentElement.children.remove(listElement);
221 }); 266 });
222 267
223 test('listMap', () { 268 test('listMap', () {
224 var elements = listElementSetup(); 269 var elements = listElementSetup();
225 expect(elements.classes.map((c) => c.toUpperCase()).toList(), 270 expect(elements.classes.map((c) => c.toUpperCase()).toList(),
226 unorderedEquals(['QUX', 'QUUX', 'META', 'CLASSY', 'LASSY'])); 271 unorderedEquals(['QUX', 'QUUX', 'META', 'CLASSY', 'LASSY']));
227 document.documentElement.children.remove(listElement);
228 }); 272 });
229 273
230 test('listContains', () { 274 test('listContains', () {
231 var elements = listElementSetup(); 275 var elements = listElementSetup();
232 expect(elements.classes.contains('lassy'), isTrue); 276 expect(elements.classes.contains('lassy'), isTrue);
233 expect(elements.classes.contains('foo'), isFalse); 277 expect(elements.classes.contains('foo'), isFalse);
234 document.documentElement.children.remove(listElement);
235 }); 278 });
236 279
237 280
238 test('listAdd', () { 281 test('listAdd', () {
239 var elements = listElementSetup(); 282 var elements = listElementSetup();
240 var added = elements.classes.add('lassie'); 283 var added = elements.classes.add('lassie');
241 expect(added, isNull); 284 expect(added, isNull);
242 285
243 expect(elements.classes, 286 expect(view(elements.classes), '[classy, lassie, lassy, meta, quux, qux]');
244 unorderedEquals(['lassie', 'qux', 'quux', 'meta', 'classy', 'lassy'])); 287 expect(view(elements),
245 for (Element e in elements) { 288 '[[lassie, quux, qux], [lassie, meta], [classy, lassie, lassy], '
246 expect(e.classes, anyOf(unorderedEquals(['quux', 'qux', 'lassie']), 289 '[lassie, lassy, qux]]');
247 unorderedEquals(['meta', 'lassie']),
248 unorderedEquals(['classy', 'lassy', 'lassie']),
249 unorderedEquals(['qux', 'lassy', 'lassie'])));
250 }
251 document.documentElement.children.remove(listElement);
252 }); 290 });
253 291
254 test('listRemove', () { 292 test('listRemove', () {
255 var elements = listElementSetup(); 293 var elements = listElementSetup();
256 expect(elements.classes.remove('lassi'), isFalse); 294 expect(elements.classes.remove('lassi'), isFalse);
257 expect(elements.classes, 295 expect(view(elements.classes), '[classy, lassy, meta, quux, qux]');
258 unorderedEquals(['qux', 'quux', 'meta', 'classy', 'lassy'])); 296 expect(view(elements),
259 for (Element e in elements) { 297 '[[quux, qux], [meta], [classy, lassy], [lassy, qux]]');
260 expect(e.classes, anyOf(unorderedEquals(['quux', 'qux']),
261 unorderedEquals(['meta']), unorderedEquals(['classy', 'lassy']),
262 unorderedEquals(['qux', 'lassy'])));
263 }
264 298
265 expect(elements.classes.remove('qux'), isTrue); 299 expect(elements.classes.remove('qux'), isTrue);
266 expect(elements.classes, 300 expect(view(elements.classes), '[classy, lassy, meta, quux]');
267 unorderedEquals(['quux', 'meta', 'classy', 'lassy'])); 301 expect(view(elements), '[[quux], [meta], [classy, lassy], [lassy]]');
268 for (Element e in elements) {
269 expect(e.classes, anyOf(unorderedEquals(['quux']),
270 unorderedEquals(['meta']), unorderedEquals(['classy', 'lassy']),
271 unorderedEquals(['lassy'])));
272 }
273 document.documentElement.children.remove(listElement);
274 }); 302 });
275 303
276 test('listToggle', () { 304 test('listToggle', () {
277 var elements = listElementSetup(); 305 var elements = listElementSetup();
278 elements.classes.toggle('qux'); 306 elements.classes.toggle('qux');
279 expect(elements.classes, 307 expect(view(elements.classes), '[classy, lassy, meta, quux, qux]');
280 unorderedEquals(['qux', 'quux', 'meta', 'classy', 'lassy'])); 308 expect(view(elements),
281 for (Element e in elements) { 309 '[[quux], [meta, qux], [classy, lassy, qux], [lassy]]');
282 expect(e.classes, anyOf(unorderedEquals(['quux']),
283 unorderedEquals(['meta', 'qux']), unorderedEquals(['classy', 'lassy',
284 'qux']), unorderedEquals(['lassy'])));
285 }
286 document.documentElement.children.remove(listElement);
287 }); 310 });
288 311
289 test('listAddAll', () { 312 test('listAddAll', () {
290 var elements = listElementSetup(); 313 var elements = listElementSetup();
291 elements.classes.addAll(['qux', 'lassi', 'sassy']); 314 elements.classes.addAll(['qux', 'lassi', 'sassy']);
292 expect(elements.classes, 315 expect(view(elements.classes),
293 unorderedEquals(['qux', 'quux', 'meta', 'classy', 'lassy', 'sassy', 316 '[classy, lassi, lassy, meta, quux, qux, sassy]');
294 'lassi'])); 317 expect(view(elements),
295 for (Element e in elements) { 318 '[[lassi, quux, qux, sassy], [lassi, meta, qux, sassy], '
296 expect(e.classes, anyOf( 319 '[classy, lassi, lassy, qux, sassy], [lassi, lassy, qux, sassy]]');
297 unorderedEquals(['quux', 'qux', 'lassi', 'sassy']),
298 unorderedEquals(['meta', 'qux', 'lassi', 'sassy']),
299 unorderedEquals(['classy', 'lassy', 'qux', 'lassi','sassy']),
300 unorderedEquals(['lassy', 'qux', 'lassi', 'sassy'])));
301 }
302 document.documentElement.children.remove(listElement);
303 }); 320 });
304 321
305 test('listRemoveAll', () { 322 test('listRemoveAll', () {
306 var elements = listElementSetup(); 323 var elements = listElementSetup();
307 elements.classes.removeAll(['qux', 'lassy', 'meta']); 324 elements.classes.removeAll(['qux', 'lassy', 'meta']);
308 expect(elements.classes, 325 expect(view(elements.classes), '[classy, quux]');
309 unorderedEquals(['quux','classy'])); 326 expect(view(elements), '[[quux], [], [classy], []]');
310 for (Element e in elements) { 327
311 expect(e.classes, anyOf(unorderedEquals(['quux']),
312 unorderedEquals([]), unorderedEquals(['classy'])));
313 }
314 document.documentElement.children.remove(listElement);
315 }); 328 });
316 329
317 test('listToggleAll', () { 330 test('listToggleAll', () {
318 var elements = listElementSetup(); 331 var elements = listElementSetup();
319 elements.classes.toggleAll(['qux', 'meta', 'mornin']); 332 elements.classes.toggleAll(['qux', 'meta', 'mornin']);
320 expect(elements.classes, 333 expect(view(elements.classes), '[classy, lassy, meta, mornin, quux, qux]');
321 unorderedEquals(['qux', 'quux', 'meta', 'classy', 'lassy', 'mornin'])); 334 expect(view(elements),
322 for (Element e in elements) { 335 '[[meta, mornin, quux], [mornin, qux], '
323 expect(e.classes, anyOf(unorderedEquals(['quux', 'meta', 'mornin']), 336 '[classy, lassy, meta, mornin, qux], [lassy, meta, mornin]]');
324 unorderedEquals(['qux', 'mornin']), 337
325 unorderedEquals(['classy', 'lassy', 'qux', 'mornin', 'meta']), 338 });
326 unorderedEquals(['lassy', 'mornin', 'meta']))); 339
327 } 340 test('listRetainAll', () {
328 document.documentElement.children.remove(listElement); 341 var elements = listElementSetup();
342 elements.classes.retainAll(['bar', 'baz', 'qux']);
343 expect(view(elements.classes), '[qux]');
344 expect(view(elements), '[[qux], [], [], [qux]]');
345 });
346
347 test('listRemoveWhere', () {
348 var elements = listElementSetup();
349 elements.classes.removeWhere((s) => s.startsWith('q'));
350 expect(view(elements.classes), '[classy, lassy, meta]');
351 expect(view(elements),
352 '[[], [meta], [classy, lassy], [lassy]]');
353 });
354
355 test('listRetainWhere', () {
356 var elements = listElementSetup();
357 elements.classes.retainWhere((s) => s.startsWith('q'));
358 expect(view(elements.classes), '[quux, qux]');
359 expect(view(elements), '[[quux, qux], [], [], [qux]]');
329 }); 360 });
330 361
331 test('listContainsAll', () { 362 test('listContainsAll', () {
332 var elements = listElementSetup(); 363 var elements = listElementSetup();
333 expect(elements.classes.containsAll(['qux', 'meta', 'mornin']), isFalse); 364 expect(elements.classes.containsAll(['qux', 'meta', 'mornin']), isFalse);
334 expect(elements.classes.containsAll(['qux', 'lassy', 'classy']), isTrue); 365 expect(elements.classes.containsAll(['qux', 'lassy', 'classy']), isTrue);
335 document.documentElement.children.remove(listElement);
336 }); 366 });
337 } 367 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698