1+ library angular2.test.directives.observable_list_iterable_diff_spec;
2+
3+ import 'package:angular2/test_lib.dart' ;
4+ import 'package:observe/observe.dart' show ObservableList;
5+ import 'package:angular2/src/directives/observable_list_diff.dart' ;
6+
7+ main () {
8+ describe ('ObservableListDiff' , () {
9+ var pipeFactory, changeDetectorRef;
10+
11+ beforeEach (() {
12+ pipeFactory = const ObservableListDiffFactory ();
13+ changeDetectorRef = new SpyChangeDetectorRef ();
14+ });
15+
16+ describe ("supports" , () {
17+ it ("should be true for ObservableList" , () {
18+ expect (pipeFactory.supports (new ObservableList ())).toBe (true );
19+ });
20+
21+ it ("should be false otherwise" , () {
22+ expect (pipeFactory.supports ([1 ,2 ,3 ])).toBe (false );
23+ });
24+ });
25+
26+ it ("should return the wrapped value to trigger change detection on first invocation of transform" , () {
27+ final pipe = pipeFactory.create (changeDetectorRef);
28+ final c = new ObservableList .from ([1 ,2 ]);
29+ expect (pipe.transform (c, []).wrapped).toBe (pipe);
30+ });
31+
32+ it ("should return itself when no changes between the calls" , () {
33+ final pipe = pipeFactory.create (changeDetectorRef);
34+
35+ final c = new ObservableList .from ([1 ,2 ]);
36+
37+ pipe.transform (c, []);
38+
39+ expect (pipe.transform (c, [])).toBe (pipe);
40+ });
41+
42+ it ("should return the wrapped value once a change has been trigger" , fakeAsync (() {
43+ final pipe = pipeFactory.create (changeDetectorRef);
44+
45+ final c = new ObservableList .from ([1 ,2 ]);
46+
47+ pipe.transform (c, []);
48+
49+ c.add (3 );
50+
51+ // same value, because we have not detected the change yet
52+ expect (pipe.transform (c, [])).toBe (pipe);
53+
54+ // now we detect the change
55+ flushMicrotasks ();
56+ expect (pipe.transform (c, []).wrapped).toBe (pipe);
57+ }));
58+
59+ it ("should request a change detection check upon receiving a change" , fakeAsync (() {
60+ final pipe = pipeFactory.create (changeDetectorRef);
61+
62+ final c = new ObservableList .from ([1 ,2 ]);
63+ pipe.transform (c, []);
64+
65+ c.add (3 );
66+ flushMicrotasks ();
67+
68+ expect (changeDetectorRef.spy ("requestCheck" )).toHaveBeenCalledOnce ();
69+ }));
70+
71+ it ("should return the wrapped value after changing a collection" , () {
72+ final pipe = pipeFactory.create (changeDetectorRef);
73+
74+ final c1 = new ObservableList .from ([1 ,2 ]);
75+ final c2 = new ObservableList .from ([3 ,4 ]);
76+
77+ expect (pipe.transform (c1, []).wrapped).toBe (pipe);
78+ expect (pipe.transform (c2, []).wrapped).toBe (pipe);
79+ });
80+
81+ it ("should not unbsubscribe from the stream of chagnes after changing a collection" , () {
82+ final pipe = pipeFactory.create (changeDetectorRef);
83+
84+ final c1 = new ObservableList .from ([1 ,2 ]);
85+ expect (pipe.transform (c1, []).wrapped).toBe (pipe);
86+
87+ final c2 = new ObservableList .from ([3 ,4 ]);
88+ expect (pipe.transform (c2, []).wrapped).toBe (pipe);
89+
90+ // pushing into the first collection has no effect, and we do not see the change
91+ c1.add (3 );
92+ expect (pipe.transform (c2, [])).toBe (pipe);
93+ });
94+ });
95+ }
0 commit comments