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

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

Issue 1054863002: CssClassSet upgrade (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix webcomponents test, IE toggle. 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 | « tests/html/custom/attribute_changed_callback_test.dart ('k') | tests/html/html.status » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2015, 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 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 }
OLDNEW
« no previous file with comments | « tests/html/custom/attribute_changed_callback_test.dart ('k') | tests/html/html.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698