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

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

Issue 14941002: Aggregate CSS manipulation functions in html lib. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 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 | Annotate | Revision Log
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 '../../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: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() =>
23 new Element.html('<ul class="foo bar baz">'
24 '<li class="quux qux"><li class="meta">'
25 '<li class="classy lassy"><li class="qux lassy"></ul>');
26
22 Set<String> makeClassSet() => makeElementWithClasses().classes; 27 Set<String> makeClassSet() => makeElementWithClasses().classes;
23 28
24 Set<String> extractClasses(Element el) { 29 Set<String> extractClasses(Element el) {
25 final match = new RegExp('class="([^"]+)"').firstMatch(el.outerHtml); 30 final match = new RegExp('class="([^"]+)"').firstMatch(el.outerHtml);
26 return new LinkedHashSet.from(match[1].split(' ')); 31 return new LinkedHashSet.from(match[1].split(' '));
27 } 32 }
28 33
29 test('affects the "class" attribute', () { 34 test('affects the "class" attribute', () {
30 final el = makeElementWithClasses(); 35 final el = makeElementWithClasses();
31 el.classes.add('qux'); 36 el.classes.add('qux');
(...skipping 14 matching lines...) Expand all
46 }); 51 });
47 52
48 test('toString', () { 53 test('toString', () {
49 expect(makeClassSet().toString().split(' '), 54 expect(makeClassSet().toString().split(' '),
50 orderedEquals(['foo', 'bar', 'baz'])); 55 orderedEquals(['foo', 'bar', 'baz']));
51 expect(makeElement().classes.toString(), ''); 56 expect(makeElement().classes.toString(), '');
52 }); 57 });
53 58
54 test('forEach', () { 59 test('forEach', () {
55 final classes = <String>[]; 60 final classes = <String>[];
56 // TODO: Change to this when Issue 3484 is fixed. 61 makeClassSet().forEach(classes.add);
57 // makeClassSet().forEach(classes.add);
58 makeClassSet().forEach((c) => classes.add(c));
59 expect(classes, orderedEquals(['foo', 'bar', 'baz'])); 62 expect(classes, orderedEquals(['foo', 'bar', 'baz']));
60 }); 63 });
61 64
62 test('iterator', () { 65 test('iterator', () {
63 final classes = <String>[]; 66 final classes = <String>[];
64 for (var el in makeClassSet()) { 67 for (var el in makeClassSet()) {
65 classes.add(el); 68 classes.add(el);
66 } 69 }
67 expect(classes, orderedEquals(['foo', 'bar', 'baz'])); 70 expect(classes, orderedEquals(['foo', 'bar', 'baz']));
68 }); 71 });
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 173
171 test('order', () { 174 test('order', () {
172 var classes = makeClassSet(); 175 var classes = makeClassSet();
173 classes.add('aardvark'); 176 classes.add('aardvark');
174 expect(classes, orderedEquals(['foo', 'bar', 'baz', 'aardvark'])); 177 expect(classes, orderedEquals(['foo', 'bar', 'baz', 'aardvark']));
175 classes.toggle('baz'); 178 classes.toggle('baz');
176 expect(classes, orderedEquals(['foo', 'bar', 'aardvark'])); 179 expect(classes, orderedEquals(['foo', 'bar', 'aardvark']));
177 classes.toggle('baz'); 180 classes.toggle('baz');
178 expect(classes, orderedEquals(['foo', 'bar', 'aardvark', 'baz'])); 181 expect(classes, orderedEquals(['foo', 'bar', 'aardvark', 'baz']));
179 }); 182 });
183
184 Element listElement;
185
186 ElementList listElementSetup() {
187 listElement = makeListElement();
188 document.documentElement.children.add(listElement);
189 return document.queryAll('li');
190 }
191
192 test('listClasses=', () {
193 var elements = listElementSetup();
194 elements.classes = ['foo', 'qux'];
195 elements = document.queryAll('li');
196 for (Element e in elements) {
197 expect(e.classes, orderedEquals(['foo', 'qux']));
198 expect(extractClasses(e), orderedEquals(['foo', 'qux']));
199 }
200
201 elements.classes = [];
202 for (Element e in elements) {
203 expect(e.classes, []);
204 }
205 document.documentElement.children.remove(listElement);
206 });
207
208 test('listMap', () {
209 var elements = listElementSetup();
210 expect(elements.classes.map((c) => c.toUpperCase()).toList(),
211 unorderedEquals(['QUX', 'QUUX', 'META', 'CLASSY', 'LASSY']));
212 document.documentElement.children.remove(listElement);
213 });
214
215 test('listContains', () {
216 var elements = listElementSetup();
217 expect(elements.classes.contains('lassy'), isTrue);
218 expect(elements.classes.contains('foo'), isFalse);
219 document.documentElement.children.remove(listElement);
220 });
221
222
223 test('listAdd', () {
224 var elements = listElementSetup();
225 elements.classes.add('lassie');
226 expect(elements.classes,
227 unorderedEquals(['lassie', 'qux', 'quux', 'meta', 'classy', 'lassy']));
228 for (Element e in elements) {
229 expect(e.classes, anyOf(unorderedEquals(['quux', 'qux', 'lassie']),
230 unorderedEquals(['meta', 'lassie']),
231 unorderedEquals(['classy', 'lassy', 'lassie']),
232 unorderedEquals(['qux', 'lassy', 'lassie'])));
233 }
234 document.documentElement.children.remove(listElement);
235 });
236
237 test('listRemove', () {
238 var elements = listElementSetup();
239 expect(elements.classes.remove('lassi'), isFalse);
240 expect(elements.classes,
241 unorderedEquals(['qux', 'quux', 'meta', 'classy', 'lassy']));
242 for (Element e in elements) {
243 expect(e.classes, anyOf(unorderedEquals(['quux', 'qux']),
244 unorderedEquals(['meta']), unorderedEquals(['classy', 'lassy']),
245 unorderedEquals(['qux', 'lassy'])));
246 }
247
248 expect(elements.classes.remove('qux'), isTrue);
249 expect(elements.classes,
250 unorderedEquals(['quux', 'meta', 'classy', 'lassy']));
251 for (Element e in elements) {
252 expect(e.classes, anyOf(unorderedEquals(['quux']),
253 unorderedEquals(['meta']), unorderedEquals(['classy', 'lassy']),
254 unorderedEquals(['lassy'])));
255 }
256 document.documentElement.children.remove(listElement);
257 });
258
259 test('listToggle', () {
260 var elements = listElementSetup();
261 elements.classes.toggle('qux');
262 expect(elements.classes,
263 unorderedEquals(['qux', 'quux', 'meta', 'classy', 'lassy']));
264 for (Element e in elements) {
265 expect(e.classes, anyOf(unorderedEquals(['quux']),
266 unorderedEquals(['meta', 'qux']), unorderedEquals(['classy', 'lassy',
267 'qux']), unorderedEquals(['lassy'])));
268 }
269 document.documentElement.children.remove(listElement);
270 });
271
272 test('listAddAll', () {
273 var elements = listElementSetup();
274 elements.classes.addAll(['qux', 'lassi', 'sassy']);
275 expect(elements.classes,
276 unorderedEquals(['qux', 'quux', 'meta', 'classy', 'lassy', 'sassy',
277 'lassi']));
278 for (Element e in elements) {
279 expect(e.classes, anyOf(
280 unorderedEquals(['quux', 'qux', 'lassi', 'sassy']),
281 unorderedEquals(['meta', 'qux', 'lassi', 'sassy']),
282 unorderedEquals(['classy', 'lassy', 'qux', 'lassi','sassy']),
283 unorderedEquals(['lassy', 'qux', 'lassi', 'sassy'])));
284 }
285 document.documentElement.children.remove(listElement);
286 });
287
288 test('listRemoveAll', () {
289 var elements = listElementSetup();
290 elements.classes.removeAll(['qux', 'lassy', 'meta']);
291 expect(elements.classes,
292 unorderedEquals(['quux','classy']));
293 for (Element e in elements) {
294 expect(e.classes, anyOf(unorderedEquals(['quux']),
295 unorderedEquals([]), unorderedEquals(['classy'])));
296 }
297 document.documentElement.children.remove(listElement);
298 });
299
300 test('listToggleAll', () {
301 var elements = listElementSetup();
302 elements.classes.toggleAll(['qux', 'meta', 'mornin']);
303 expect(elements.classes,
304 unorderedEquals(['qux', 'quux', 'meta', 'classy', 'lassy', 'mornin']));
305 for (Element e in elements) {
306 expect(e.classes, anyOf(unorderedEquals(['quux', 'meta', 'mornin']),
307 unorderedEquals(['qux', 'mornin']),
308 unorderedEquals(['classy', 'lassy', 'qux', 'mornin', 'meta']),
309 unorderedEquals(['lassy', 'mornin', 'meta'])));
310 }
311 document.documentElement.children.remove(listElement);
312 });
313
314 test('listContainsAll', () {
315 var elements = listElementSetup();
316 expect(elements.classes.containsAll(['qux', 'meta', 'mornin']), isFalse);
317 expect(elements.classes.containsAll(['qux', 'lassy', 'classy']), isTrue);
318 document.documentElement.children.remove(listElement);
319 });
180 } 320 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698