source: Dev/trunk/src/client/dojo/tests/store/Observable.js

Last change on this file was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 5.0 KB
Line 
1define([
2        "doh",
3        "dojo/_base/array", "dojo/_base/declare", "dojo/_base/lang",
4        "dojo/store/Memory", "dojo/store/Observable"
5], function(doh, array, declare, lang, Memory, Observable){
6
7        var MyStore = declare([Memory], {
8                get: function(){
9                        // need to make sure that this.inherited still works with Observable
10                        return this.inherited(arguments);
11                }
12        });
13        var memoryStore, store = new Observable(memoryStore = new MyStore({ /*dojo.store.Memory*/
14                data: [
15                        {id: 0, name: "zero", even: true, prime: false},
16                        {id: 1, name: "one", prime: false},
17                        {id: 2, name: "two", even: true, prime: true},
18                        {id: 3, name: "three", prime: true},
19                        {id: 4, name: "four", even: true, prime: false},
20                        {id: 5, name: "five", prime: true}
21                ]
22        }));
23    var data = [], i;
24    for(i = 1; i <= 100; i++){
25        data.push({id: i, name: "item " + i, order: i});
26    }
27        var bigStore = Observable(new Memory({data:data}));
28        doh.register("dojo.tests.store.Observable",
29                [
30                        function testGet(t){
31                                t.is(store.get(1).name, "one");
32                                t.is(store.get(4).name, "four");
33                                t.t(store.get(5).prime);
34                        },
35                        function testQuery(t){
36                                var results = store.query({prime: true});
37                                t.is(results.length, 3);
38                                var changes = [], secondChanges = [];
39                                var observer = results.observe(function(object, previousIndex, newIndex){
40                                        changes.push({previousIndex:previousIndex, newIndex:newIndex, object:object});
41                                });
42                                var secondObserver = results.observe(function(object, previousIndex, newIndex){
43                                        secondChanges.push({previousIndex:previousIndex, newIndex:newIndex, object:object});
44                                });
45                                var expectedChanges = [],
46                                        expectedSecondChanges = [];
47                                var two = results[0];
48                                two.prime = false;
49                                store.put(two); // should remove it from the array
50                                t.is(results.length, 2);
51                                expectedChanges.push({
52                                                previousIndex: 0,
53                                                newIndex: -1,
54                                                object:{
55                                                        id: 2,
56                                                        name: "two",
57                                                        even: true,
58                                                        prime: false
59                                                }
60                                        });
61                                expectedSecondChanges.push(expectedChanges[expectedChanges.length - 1]);
62                                secondObserver.cancel();
63                                var one = store.get(1);
64                                one.prime = true;
65                                store.put(one); // should add it
66                                expectedChanges.push({
67                                                previousIndex: -1,
68                                                "newIndex":2,
69                                                object:{
70                                                        id: 1,
71                                                        name: "one",
72                                                        prime: true
73                                                }
74                                        });
75                                t.is(results.length, 3);
76                                store.add({// shouldn't be added
77                                        id:6, name:"six"
78                                });
79                                t.is(results.length, 3);
80                                store.add({// should be added
81                                        id:7, name:"seven", prime:true
82                                });
83                                t.is(results.length, 4);
84                               
85                                expectedChanges.push({
86                                                previousIndex: -1,
87                                                "newIndex":3,
88                                                "object":{
89                                                        id:7, name:"seven", prime:true
90                                                }
91                                        });
92                                store.remove(3);
93                                expectedChanges.push({
94                                                "previousIndex":0,
95                                                newIndex: -1,
96                                                object: {id: 3, name: "three", prime: true}
97                                        });
98                                t.is(results.length, 3);
99                               
100                                observer.remove(); // shouldn't get any more calls
101                                store.add({// should not be added
102                                        id:11, name:"eleven", prime:true
103                                });
104                                t.is(secondChanges, expectedSecondChanges);
105                                t.is(changes, expectedChanges);
106                        },
107                        function testQueryWithZeroId(t){
108                var results = store.query({});
109                t.is(results.length, 8);
110                var observer = results.observe(function(object, previousIndex, newIndex){
111                        // we only do puts so previous & new indices must always been the same
112                        // unfortunately if id = 0, the previousIndex
113                        console.log("called with: "+previousIndex+", "+newIndex);
114                        t.is(previousIndex, newIndex);
115                }, true);
116                store.put({id: 5, name: "-FIVE-", prime: true});
117                store.put({id: 0, name: "-ZERO-", prime: false});
118            },
119            function testPaging(t){
120                                var results, opts = {count: 25, sort: [{attribute: "order"}]};
121                                results = window.results = [
122                                    bigStore.query({}, lang.delegate(opts, {start: 0})),
123                                    bigStore.query({}, lang.delegate(opts, {start: 25})),
124                                    bigStore.query({}, lang.delegate(opts, {start: 50})),
125                                    bigStore.query({}, lang.delegate(opts, {start: 75}))
126                                ];
127                                var observations = [];
128                                array.forEach(results, function(r, i){
129                                    r.observe(function(obj, from, to){
130                                        observations.push({from: from, to: to});
131                                        console.log(i, " observed: ", obj, from, to);
132                                    }, true);
133                                });
134                                bigStore.add({id: 101, name: "one oh one", order: 2.5});
135                                t.is(results[0].length, 26);
136                                t.is(results[1].length, 25);
137                                t.is(results[2].length, 25);
138                                t.is(results[3].length, 25);
139                                t.is(observations.length, 1);
140                                bigStore.remove(101);
141                                t.is(observations.length, 2);
142                                t.is(results[0].length, 25);
143                                bigStore.add({id: 102, name: "one oh two", order: 26.5});
144                                t.is(results[0].length, 25);
145                                t.is(results[1].length, 26);
146                                t.is(results[2].length, 25);
147                                t.is(observations.length, 3);
148            },
149            function testType(t){
150                t.f(memoryStore == store);
151                // TODO: use store.instanceOf()
152//                              t.t(store instanceof Observable);
153            }
154                ]
155        );
156});
Note: See TracBrowser for help on using the repository browser.