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

Side by Side Diff: third_party/pkg/angular/test/directive/ng_class_spec.dart

Issue 124053002: Adding Angular and dependent packages for testing (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 11 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
(Empty)
1 library ng_class_spec;
2
3 import '../_specs.dart';
4
5 main() {
6 describe('ngClass', () {
7 TestBed _;
8
9 beforeEach(inject((TestBed tb) => _ = tb));
10
11 it('should add new and remove old classes dynamically', () {
12 var element = _.compile('<div class="existing" ng-class="dynClass"></div>' );
13 _.rootScope.dynClass = 'A';
14 _.rootScope.$digest();
15 expect(element.classes.contains('existing')).toBe(true);
16 expect(element.classes.contains('A')).toBe(true);
17
18 _.rootScope.dynClass = 'B';
19 _.rootScope.$digest();
20 expect(element.classes.contains('existing')).toBe(true);
21 expect(element.classes.contains('A')).toBe(false);
22 expect(element.classes.contains('B')).toBe(true);
23
24 _.rootScope.dynClass = null;
25 _.rootScope.$digest();
26 expect(element.classes.contains('existing')).toBe(true);
27 expect(element.classes.contains('A')).toBe(false);
28 expect(element.classes.contains('B')).toBe(false);
29 });
30
31
32 it('should support adding multiple classes via an array', () {
33 var element = _.compile('<div class="existing" ng-class="[\'A\', \'B\']">< /div>');
34 _.rootScope.$digest();
35 expect(element.classes.contains('existing')).toBeTruthy();
36 expect(element.classes.contains('A')).toBeTruthy();
37 expect(element.classes.contains('B')).toBeTruthy();
38 });
39
40
41 it('should support adding multiple classes conditionally via a map of class names to boolean' +
42 'expressions', () {
43 var element = _.compile(
44 '<div class="existing" ' +
45 'ng-class="{A: conditionA, B: conditionB(), AnotB: conditionA&&!co nditionB()}">' +
46 '</div>');
47 _.rootScope.conditionA = true;
48 _.rootScope.conditionB = () { return false; };
49 _.rootScope.$digest();
50 expect(element.classes.contains('existing')).toBeTruthy();
51 expect(element.classes.contains('A')).toBeTruthy();
52 expect(element.classes.contains('B')).toBeFalsy();
53 expect(element.classes.contains('AnotB')).toBeTruthy();
54
55 _.rootScope.conditionB = () { return true; };
56 _.rootScope.$digest();
57 expect(element.classes.contains('existing')).toBeTruthy();
58 expect(element.classes.contains('A')).toBeTruthy();
59 expect(element.classes.contains('B')).toBeTruthy();
60 expect(element.classes.contains('AnotB')).toBeFalsy();
61 });
62
63
64 it('should remove classes when the referenced object is the same but its pro perty is changed',
65 () {
66 var element = _.compile('<div ng-class="classes"></div>');
67 _.rootScope.classes = { 'A': true, 'B': true };
68 _.rootScope.$digest();
69 expect(element.classes.contains('A')).toBeTruthy();
70 expect(element.classes.contains('B')).toBeTruthy();
71 _.rootScope.classes['A'] = false;
72 _.rootScope.$digest();
73 expect(element.classes.contains('A')).toBeFalsy();
74 expect(element.classes.contains('B')).toBeTruthy();
75 });
76
77 it('should support adding multiple classes via a space delimited string', () {
78 var element = _.compile('<div class="existing" ng-class="\'A B\'"></div>') ;
79 _.rootScope.$digest();
80 expect(element.classes.contains('existing')).toBeTruthy();
81 expect(element.classes.contains('A')).toBeTruthy();
82 expect(element.classes.contains('B')).toBeTruthy();
83 });
84
85
86 it('should preserve class added post compilation with pre-existing classes', () {
87 var element = _.compile('<div class="existing" ng-class="dynClass"></div>' );
88 _.rootScope.dynClass = 'A';
89 _.rootScope.$digest();
90 expect(element.classes.contains('existing')).toBe(true);
91
92 // add extra class, change model and eval
93 element.classes.add('newClass');
94 _.rootScope.dynClass = 'B';
95 _.rootScope.$digest();
96
97 expect(element.classes.contains('existing')).toBe(true);
98 expect(element.classes.contains('B')).toBe(true);
99 expect(element.classes.contains('newClass')).toBe(true);
100 });
101
102
103 it('should preserve class added post compilation without pre-existing classe s"', () {
104 var element = _.compile('<div ng-class="dynClass"></div>');
105 _.rootScope.dynClass = 'A';
106 _.rootScope.$digest();
107 expect(element.classes.contains('A')).toBe(true);
108
109 // add extra class, change model and eval
110 element.classes.add('newClass');
111 _.rootScope.dynClass = 'B';
112 _.rootScope.$digest();
113
114 expect(element.classes.contains('B')).toBe(true);
115 expect(element.classes.contains('newClass')).toBe(true);
116 });
117
118
119 it('should preserve other classes with similar name"', () {
120 var element = _.compile('<div class="ui-panel ui-selected" ng-class="dynCl s"></div>');
121 _.rootScope.dynCls = 'panel';
122 _.rootScope.$digest();
123 _.rootScope.dynCls = 'foo';
124 _.rootScope.$digest();
125 expect(element.className).toEqual('ui-panel ui-selected foo');
126 });
127
128
129 it('should not add duplicate classes', () {
130 var element = _.compile('<div class="panel bar" ng-class="dynCls"></div>') ;
131 _.rootScope.dynCls = 'panel';
132 _.rootScope.$digest();
133 expect(element.className).toEqual('panel bar');
134 });
135
136
137 it('should remove classes even if it was specified via class attribute', () {
138 var element = _.compile('<div class="panel bar" ng-class="dynCls"></div>') ;
139 _.rootScope.dynCls = 'panel';
140 _.rootScope.$digest();
141 _.rootScope.dynCls = 'window';
142 _.rootScope.$digest();
143 expect(element.className).toEqual('bar window');
144 });
145
146
147 it('should remove classes even if they were added by another code', () {
148 var element = _.compile('<div ng-class="dynCls"></div>');
149 _.rootScope.dynCls = 'foo';
150 _.rootScope.$digest();
151 element.classes.add('foo');
152 _.rootScope.dynCls = '';
153 _.rootScope.$digest();
154 });
155
156
157 it('should ngClass odd/even', () {
158 var element = _.compile('<ul><li ng-repeat="i in [0,1]" class="existing" n g-class-odd="\'odd\'" ng-class-even="\'even\'"></li><ul>');
159 _.rootScope.$digest();
160 var e1 = element.nodes[1];
161 var e2 = element.nodes[2];
162 expect(e1.classes.contains('existing')).toBeTruthy();
163 expect(e1.classes.contains('odd')).toBeTruthy();
164 expect(e2.classes.contains('existing')).toBeTruthy();
165 expect(e2.classes.contains('even')).toBeTruthy();
166 });
167
168
169 it('should allow both ngClass and ngClassOdd/Even on the same element', () {
170 var element = _.compile('<ul>' +
171 '<li ng-repeat="i in [0,1]" ng-class="\'plainClass\'" ' +
172 'ng-class-odd="\'odd\'" ng-class-even="\'even\'">{{\$index}}</li>' +
173 '<ul>');
174 _.rootScope.$digest();
175 var e1 = element.nodes[1];
176 var e2 = element.nodes[2];
177
178 expect(e1.classes.contains('plainClass')).toBeTruthy();
179 expect(e1.classes.contains('odd')).toBeTruthy();
180 expect(e1.classes.contains('even')).toBeFalsy();
181 expect(e2.classes.contains('plainClass')).toBeTruthy();
182 expect(e2.classes.contains('even')).toBeTruthy();
183 expect(e2.classes.contains('odd')).toBeFalsy();
184 });
185
186 it('should allow both ngClass and ngClassOdd/Even with multiple classes', () {
187 var element = _.compile('<ul>' +
188 '<li ng-repeat="i in [0,1]" ng-class="[\'A\', \'B\']" ' +
189 'ng-class-odd="[\'C\', \'D\']" ng-class-even="[\'E\', \'F\']"></li>' +
190 '<ul>');
191 _.rootScope.$apply();
192 var e1 = element.nodes[1];
193 var e2 = element.nodes[2];
194
195 expect(e1.classes.contains('A')).toBeTruthy();
196 expect(e1.classes.contains('B')).toBeTruthy();
197 expect(e1.classes.contains('C')).toBeTruthy();
198 expect(e1.classes.contains('D')).toBeTruthy();
199 expect(e1.classes.contains('E')).toBeFalsy();
200 expect(e1.classes.contains('F')).toBeFalsy();
201
202 expect(e2.classes.contains('A')).toBeTruthy();
203 expect(e2.classes.contains('B')).toBeTruthy();
204 expect(e2.classes.contains('E')).toBeTruthy();
205 expect(e2.classes.contains('F')).toBeTruthy();
206 expect(e2.classes.contains('C')).toBeFalsy();
207 expect(e2.classes.contains('D')).toBeFalsy();
208 });
209
210
211 it('should reapply ngClass when interpolated class attribute changes', () {
212 var element = _.compile('<div class="one {{cls}} three" ng-class="{four: f our}"></div>');
213
214 _.rootScope.$apply(() {
215 _.rootScope.cls = "two";
216 _.rootScope.four = true;
217 });
218 expect(element).toHaveClass('one');
219 expect(element).toHaveClass('two'); // interpolated
220 expect(element).toHaveClass('three');
221 expect(element).toHaveClass('four');
222
223 _.rootScope.$apply(() {
224 _.rootScope.cls = "too";
225 });
226
227 expect(element).toHaveClass('one');
228 expect(element).toHaveClass('too'); // interpolated
229 expect(element).toHaveClass('three');
230 expect(element).toHaveClass('four'); // should still be there
231 expect(element.classes.contains('two')).toBeFalsy();
232
233 _.rootScope.$apply(() {
234 _.rootScope.cls = "to";
235 });
236
237 expect(element).toHaveClass('one');
238 expect(element).toHaveClass('to'); // interpolated
239 expect(element).toHaveClass('three');
240 expect(element).toHaveClass('four'); // should still be there
241 expect(element.classes.contains('two')).toBeFalsy();
242 expect(element.classes.contains('too')).toBeFalsy();
243 });
244
245
246 it('should not mess up class value due to observing an interpolated class at tribute', () {
247 _.rootScope.foo = true;
248 _.rootScope.$watch("anything", () {
249 _.rootScope.foo = false;
250 });
251 var element = _.compile('<div ng-class="{foo:foo}"></div>');
252 _.rootScope.$digest();
253 expect(element.classes.contains('foo')).toBe(false);
254 });
255
256
257 it('should update ngClassOdd/Even when model is changed by filtering', () {
258 var element = _.compile('<ul>' +
259 '<li ng-repeat="i in items" ' +
260 'ng-class-odd="\'odd\'" ng-class-even="\'even\'"></li>' +
261 '<ul>');
262 _.rootScope.items = ['a','b','c'];
263 _.rootScope.$digest();
264
265 _.rootScope.items = ['a','b'];
266 _.rootScope.$digest();
267
268 var e1 = element.nodes[1];
269 var e2 = element.nodes[2];
270
271 expect(e1.classes.contains('odd')).toBeTruthy();
272 expect(e1.classes.contains('even')).toBeFalsy();
273
274 expect(e2.classes.contains('even')).toBeTruthy();
275 expect(e2.classes.contains('odd')).toBeFalsy();
276 });
277
278
279 it('should update ngClassOdd/Even when model is changed by sorting', () {
280 var element = _.compile('<ul>' +
281 '<li ng-repeat="i in items" ' +
282 'ng-class-odd="\'odd\'" ng-class-even="\'even\'">i</li>' +
283 '<ul>');
284 _.rootScope.items = ['a','b'];
285 _.rootScope.$digest();
286
287 _.rootScope.items = ['b','a'];
288 _.rootScope.$digest();
289
290 var e1 = element.nodes[1];
291 var e2 = element.nodes[2];
292
293 expect(e1.classes.contains('odd')).toBeTruthy();
294 expect(e1.classes.contains('even')).toBeFalsy();
295
296 expect(e2.classes.contains('even')).toBeTruthy();
297 expect(e2.classes.contains('odd')).toBeFalsy();
298 });
299 });
300 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698