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

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

Issue 12282045: Using an ordered set for Element.classes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 10 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:html'; 9 import 'dart:html';
9 10
10 main() { 11 main() {
11 useHtmlConfiguration(); 12 useHtmlConfiguration();
12 13
13 Element makeElement() => new Element.tag('div'); 14 Element makeElement() => new Element.tag('div');
14 15
15 Element makeElementWithChildren() => 16 Element makeElementWithChildren() =>
16 new Element.html("<div><br/><img/><input/></div>"); 17 new Element.html("<div><br/><img/><input/></div>");
17 18
18 Element makeElementWithClasses() => 19 Element makeElementWithClasses() =>
19 new Element.html('<div class="foo bar baz"></div>'); 20 new Element.html('<div class="foo bar baz"></div>');
20 21
21 Set<String> makeClassSet() => makeElementWithClasses().classes; 22 Set<String> makeClassSet() => makeElementWithClasses().classes;
22 23
23 Set<String> extractClasses(Element el) { 24 Set<String> extractClasses(Element el) {
24 final match = new RegExp('class="([^"]+)"').firstMatch(el.outerHtml); 25 final match = new RegExp('class="([^"]+)"').firstMatch(el.outerHtml);
25 return new Set.from(match[1].split(' ')); 26 return new LinkedHashSet.from(match[1].split(' '));
26 } 27 }
27 28
28 test('affects the "class" attribute', () { 29 test('affects the "class" attribute', () {
29 final el = makeElementWithClasses(); 30 final el = makeElementWithClasses();
30 el.classes.add('qux'); 31 el.classes.add('qux');
31 expect(extractClasses(el), unorderedEquals(['foo', 'bar', 'baz', 'qux'])); 32 expect(extractClasses(el), orderedEquals(['foo', 'bar', 'baz', 'qux']));
32 }); 33 });
33 34
34 test('is affected by the "class" attribute', () { 35 test('is affected by the "class" attribute', () {
35 final el = makeElementWithClasses(); 36 final el = makeElementWithClasses();
36 el.attributes['class'] = 'foo qux'; 37 el.attributes['class'] = 'foo qux';
37 expect(el.classes, unorderedEquals(['foo', 'qux'])); 38 expect(el.classes, orderedEquals(['foo', 'qux']));
38 }); 39 });
39 40
40 test('classes=', () { 41 test('classes=', () {
41 final el = makeElementWithClasses(); 42 final el = makeElementWithClasses();
42 el.classes = ['foo', 'qux']; 43 el.classes = ['foo', 'qux'];
43 expect(el.classes, unorderedEquals(['foo', 'qux'])); 44 expect(el.classes, orderedEquals(['foo', 'qux']));
44 expect(extractClasses(el), unorderedEquals(['foo', 'qux'])); 45 expect(extractClasses(el), orderedEquals(['foo', 'qux']));
45 }); 46 });
46 47
47 test('toString', () { 48 test('toString', () {
48 expect(makeClassSet().toString().split(' '), 49 expect(makeClassSet().toString().split(' '),
49 unorderedEquals(['foo', 'bar', 'baz'])); 50 orderedEquals(['foo', 'bar', 'baz']));
50 expect(makeElement().classes.toString(), ''); 51 expect(makeElement().classes.toString(), '');
51 }); 52 });
52 53
53 test('forEach', () { 54 test('forEach', () {
54 final classes = <String>[]; 55 final classes = <String>[];
55 // TODO: Change to this when Issue 3484 is fixed. 56 // TODO: Change to this when Issue 3484 is fixed.
56 // makeClassSet().forEach(classes.add); 57 // makeClassSet().forEach(classes.add);
57 makeClassSet().forEach((c) => classes.add(c)); 58 makeClassSet().forEach((c) => classes.add(c));
58 expect(classes, unorderedEquals(['foo', 'bar', 'baz'])); 59 expect(classes, orderedEquals(['foo', 'bar', 'baz']));
59 }); 60 });
60 61
61 test('iterator', () { 62 test('iterator', () {
62 final classes = <String>[]; 63 final classes = <String>[];
63 for (var el in makeClassSet()) { 64 for (var el in makeClassSet()) {
64 classes.add(el); 65 classes.add(el);
65 } 66 }
66 expect(classes, unorderedEquals(['foo', 'bar', 'baz'])); 67 expect(classes, orderedEquals(['foo', 'bar', 'baz']));
67 }); 68 });
68 69
69 test('map', () { 70 test('map', () {
70 expect(makeClassSet().map((c) => c.toUpperCase()).toList(), 71 expect(makeClassSet().map((c) => c.toUpperCase()).toList(),
71 unorderedEquals(['FOO', 'BAR', 'BAZ'])); 72 orderedEquals(['FOO', 'BAR', 'BAZ']));
72 }); 73 });
73 74
74 test('where', () { 75 test('where', () {
75 expect(makeClassSet().where((c) => c.contains('a')).toSet(), 76 expect(makeClassSet().where((c) => c.contains('a')).toSet(),
76 unorderedEquals(['bar', 'baz'])); 77 orderedEquals(['bar', 'baz']));
77 }); 78 });
78 79
79 test('every', () { 80 test('every', () {
80 expect(makeClassSet().every((c) => c is String), isTrue); 81 expect(makeClassSet().every((c) => c is String), isTrue);
81 expect(makeClassSet().every((c) => c.contains('a')), isFalse); 82 expect(makeClassSet().every((c) => c.contains('a')), isFalse);
82 }); 83 });
83 84
84 test('any', () { 85 test('any', () {
85 expect(makeClassSet().any((c) => c.contains('a')), isTrue); 86 expect(makeClassSet().any((c) => c.contains('a')), isTrue);
86 expect(makeClassSet().any((c) => c is num), isFalse); 87 expect(makeClassSet().any((c) => c is num), isFalse);
(...skipping 10 matching lines...) Expand all
97 }); 98 });
98 99
99 test('contains', () { 100 test('contains', () {
100 expect(makeClassSet().contains('foo'), isTrue); 101 expect(makeClassSet().contains('foo'), isTrue);
101 expect(makeClassSet().contains('qux'), isFalse); 102 expect(makeClassSet().contains('qux'), isFalse);
102 }); 103 });
103 104
104 test('add', () { 105 test('add', () {
105 final classes = makeClassSet(); 106 final classes = makeClassSet();
106 classes.add('qux'); 107 classes.add('qux');
107 expect(classes, unorderedEquals(['foo', 'bar', 'baz', 'qux'])); 108 expect(classes, orderedEquals(['foo', 'bar', 'baz', 'qux']));
108 109
109 classes.add('qux'); 110 classes.add('qux');
110 final list = new List.from(classes); 111 final list = new List.from(classes);
111 list.sort((a, b) => a.compareTo(b)); 112 list.sort((a, b) => a.compareTo(b));
112 expect(list, unorderedEquals(['bar', 'baz', 'foo', 'qux']), 113 expect(list, orderedEquals(['bar', 'baz', 'foo', 'qux']),
113 reason: "The class set shouldn't have duplicate elements."); 114 reason: "The class set shouldn't have duplicate elements.");
114 }); 115 });
115 116
116 test('remove', () { 117 test('remove', () {
117 final classes = makeClassSet(); 118 final classes = makeClassSet();
118 classes.remove('bar'); 119 classes.remove('bar');
119 expect(classes, unorderedEquals(['foo', 'baz'])); 120 expect(classes, orderedEquals(['foo', 'baz']));
120 classes.remove('qux'); 121 classes.remove('qux');
121 expect(classes, unorderedEquals(['foo', 'baz'])); 122 expect(classes, orderedEquals(['foo', 'baz']));
122 }); 123 });
123 124
124 test('toggle', () { 125 test('toggle', () {
125 final classes = makeClassSet(); 126 final classes = makeClassSet();
126 classes.toggle('bar'); 127 classes.toggle('bar');
127 expect(classes, unorderedEquals(['foo', 'baz'])); 128 expect(classes, orderedEquals(['foo', 'baz']));
128 classes.toggle('qux'); 129 classes.toggle('qux');
129 expect(classes, unorderedEquals(['foo', 'baz', 'qux'])); 130 expect(classes, orderedEquals(['foo', 'baz', 'qux']));
130 }); 131 });
131 132
132 test('addAll', () { 133 test('addAll', () {
133 final classes = makeClassSet(); 134 final classes = makeClassSet();
134 classes.addAll(['bar', 'qux', 'bip']); 135 classes.addAll(['bar', 'qux', 'bip']);
135 expect(classes, unorderedEquals(['foo', 'bar', 'baz', 'qux', 'bip'])); 136 expect(classes, orderedEquals(['foo', 'bar', 'baz', 'qux', 'bip']));
136 }); 137 });
137 138
138 test('removeAll', () { 139 test('removeAll', () {
139 final classes = makeClassSet(); 140 final classes = makeClassSet();
140 classes.removeAll(['bar', 'baz', 'qux']); 141 classes.removeAll(['bar', 'baz', 'qux']);
141 expect(classes, unorderedEquals(['foo'])); 142 expect(classes, orderedEquals(['foo']));
142 }); 143 });
143 144
144 test('isSubsetOf', () { 145 test('isSubsetOf', () {
145 final classes = makeClassSet(); 146 final classes = makeClassSet();
146 expect(classes.isSubsetOf(['foo', 'bar', 'baz']), isTrue); 147 expect(classes.isSubsetOf(['foo', 'bar', 'baz']), isTrue);
147 expect(classes.isSubsetOf(['foo', 'bar', 'baz', 'qux']), isTrue); 148 expect(classes.isSubsetOf(['foo', 'bar', 'baz', 'qux']), isTrue);
148 expect(classes.isSubsetOf(['foo', 'bar', 'qux']), isFalse); 149 expect(classes.isSubsetOf(['foo', 'bar', 'qux']), isFalse);
149 }); 150 });
150 151
151 test('containsAll', () { 152 test('containsAll', () {
152 final classes = makeClassSet(); 153 final classes = makeClassSet();
153 expect(classes.containsAll(['foo', 'baz']), isTrue); 154 expect(classes.containsAll(['foo', 'baz']), isTrue);
154 expect(classes.containsAll(['foo', 'qux']), isFalse); 155 expect(classes.containsAll(['foo', 'qux']), isFalse);
155 }); 156 });
156 157
157 test('intersection', () { 158 test('intersection', () {
158 final classes = makeClassSet(); 159 final classes = makeClassSet();
159 expect(classes.intersection(['foo', 'qux', 'baz']), 160 expect(classes.intersection(['foo', 'qux', 'baz']),
160 unorderedEquals(['foo', 'baz'])); 161 unorderedEquals(['foo', 'baz']));
161 }); 162 });
162 163
163 test('clear', () { 164 test('clear', () {
164 final classes = makeClassSet(); 165 final classes = makeClassSet();
165 classes.clear(); 166 classes.clear();
166 expect(classes, equals([])); 167 expect(classes, equals([]));
167 }); 168 });
169
170 test('order', () {
171 var classes = makeClassSet();
172 classes.add('aardvark');
173 expect(classes, orderedEquals(['foo', 'bar', 'baz', 'aardvark']));
174 classes.toggle('baz');
175 expect(classes, orderedEquals(['foo', 'bar', 'aardvark']));
176 classes.toggle('baz');
177 expect(classes, orderedEquals(['foo', 'bar', 'aardvark', 'baz']));
178 });
168 } 179 }
OLDNEW
« no previous file with comments | « sdk/lib/svg/dartium/svg_dartium.dart ('k') | tools/dom/templates/html/impl/impl_Element.darttemplate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698