Index: third_party/pkg/angular/test/animate/css_animate_spec.dart |
diff --git a/third_party/pkg/angular/test/animate/css_animate_spec.dart b/third_party/pkg/angular/test/animate/css_animate_spec.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..74dc7a99a857ae066d5c17bd472b20d96128c414 |
--- /dev/null |
+++ b/third_party/pkg/angular/test/animate/css_animate_spec.dart |
@@ -0,0 +1,131 @@ |
+library css_animate_spec; |
+ |
+import 'dart:async'; |
+ |
+import '../_specs.dart'; |
+ |
+main() { |
+ describe('CssAnimate', () { |
+ TestBed _; |
+ Animate animate; |
+ MockAnimationLoop runner; |
+ |
+ beforeEach(inject((TestBed tb, Expando expand) { |
+ _ = tb; |
+ runner = new MockAnimationLoop(); |
+ animate = new CssAnimate(runner, |
+ new CssAnimationMap(), new AnimationOptimizer(expand)); |
+ })); |
+ |
+ it('should add a css class to an element node', async(() { |
+ _.compile('<div></div>'); |
+ expect(_.rootElement).not.toHaveClass('foo'); |
+ |
+ animate.addClass(_.rootElement, 'foo'); |
+ runner.frame(); |
+ |
+ expect(_.rootElement).toHaveClass('foo'); |
+ })); |
+ |
+ it('should remove a css class from an element node', async(() { |
+ _.compile('<div class="baz foo bar"></div>'); |
+ expect(_.rootElement).toHaveClass('foo'); |
+ |
+ animate.removeClass(_.rootElement, 'foo'); |
+ runner.frame(); |
+ expect(_.rootElement).not.toHaveClass('foo'); |
+ })); |
+ |
+ it('should insert nodes', async(() { |
+ _.compile('<div></div>'); |
+ expect(_.rootElement.children.length).toBe(0); |
+ |
+ animate.insert([new Element.div()], _.rootElement); |
+ expect(_.rootElement.children.length).toBe(1); |
+ })); |
+ |
+ it('should remove nodes', async(() { |
+ _.compile('<div><p>Hello World</p><!--comment--></div>'); |
+ expect(_.rootElement.childNodes.length).toBe(2); |
+ |
+ animate.remove(_.rootElement.childNodes); |
+ runner.frame(); |
+ // This might lead to a flash of unstyled content before |
+ // removal. It would be nice if this was un-needed. |
+ microLeap(); |
+ expect(_.rootElement.childNodes.length).toBe(0); |
+ })); |
+ |
+ it('should move nodes', async(() { |
+ _.compile('<div></div>'); |
+ List<Node> a = es('<span>A</span>a'); |
+ List<Node> b = es('<span>B</span>b'); |
+ a.forEach((n) => _.rootElement.append(n)); |
+ b.forEach((n) => _.rootElement.append(n)); |
+ expect(_.rootElement.text).toEqual("AaBb"); |
+ |
+ animate.move(b, _.rootElement, insertBefore: a.first); |
+ runner.frame(); |
+ expect(_.rootElement.text).toEqual("BbAa"); |
+ |
+ animate.move(a, _.rootElement, insertBefore: b.first); |
+ runner.frame(); |
+ expect(_.rootElement.text).toEqual("AaBb"); |
+ |
+ animate.move(a, _.rootElement); |
+ runner.frame(); |
+ expect(_.rootElement.text).toEqual("BbAa"); |
+ })); |
+ |
+ |
+ it('should animate multiple elements', async(() { |
+ _.compile('<div></div>'); |
+ List<Node> nodes = es('<span>A</span>a<span>B</span>b'); |
+ |
+ animate.insert(nodes, _.rootElement); |
+ runner.frame(); |
+ expect(_.rootElement.text).toEqual("AaBb"); |
+ })); |
+ |
+ it('should prevent child animations', async(() { |
+ _.compile('<div></div>'); |
+ animate.addClass(_.rootElement, 'test'); |
+ runner.start(); |
+ expect(_.rootElement).toHaveClass('test-add'); |
+ var spans = es('<span>A</span><span>B</span>'); |
+ animate.insert(spans, _.rootElement); |
+ runner.start(); |
+ expect(spans.first).not.toHaveClass('ng-add'); |
+ })); |
+ }); |
+} |
+ |
+class MockAnimationLoop extends Mock implements AnimationLoop { |
+ num time = 0.0; |
+ |
+ Future<AnimationResult> get onCompleted { |
+ var cmp = new Completer<AnimationResult>(); |
+ cmp.complete(AnimationResult.COMPLETED); |
+ return cmp.future; |
+ } |
+ |
+ List<LoopedAnimation> animations = []; |
+ |
+ void play(LoopedAnimation animation) { |
+ animations.add(animation); |
+ } |
+ |
+ void frame() { |
+ for(var animation in animations) { |
+ animation.read(time); |
+ } |
+ |
+ for(var animation in animations) { |
+ animation.update(time); |
+ } |
+ |
+ time += 16.0; |
+ } |
+ |
+ noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
+} |