root/core/trunk/geoext/tests/lib/GeoExt/data/LayerStore.html

Revision 370, 11.8 kB (checked in by elemoine, 1 year ago)

update LayerStore for layers option to be an alias of data ext option, p=bbinet, r=me (closes #38)

  • Property svn:mergeinfo set to
Line 
1 <!DOCTYPE html>
2 <html debug="true">
3   <head>
4     <script type="text/javascript" src="../../../../../openlayers/lib/OpenLayers.js"></script>
5     <script type="text/javascript" src="../../../../../ext/adapter/ext/ext-base.js"></script>
6     <script type="text/javascript" src="../../../../../ext/ext-all-debug.js"></script>
7     <script type="text/javascript" src="../../../../lib/GeoExt.js"></script>
8
9     <script type="text/javascript">
10        
11         function createMap() {
12             var map = new OpenLayers.Map();
13             return map;
14         }
15
16         function loadMapPanel() {
17             var map = createMap();
18
19             var mapPanel = new GeoExt.MapPanel({
20                 // panel options
21                 id: "map-panel",
22                 title: "GeoExt MapPanel",
23                 renderTo: "mappanel",
24                 height: 400,
25                 width: 600,
26                 // map panel-specific options
27                 map: map,
28                 center: new OpenLayers.LonLat(5, 45),
29                 zoom: 4
30             });
31
32             return mapPanel;
33         }
34
35         function test_constructor(t) {
36             t.plan(3);
37
38             var store, reader, map;
39
40             store = new GeoExt.data.LayerStore();
41             t.ok(store.reader instanceof GeoExt.data.LayerReader,
42                  "ctor creates a layer reader if none is provided");
43
44             reader = new Ext.data.ArrayReader();
45             store = new GeoExt.data.LayerStore({reader: reader});
46             t.ok(store.reader == reader,
47                  "ctor sets the passed reader in the instance");
48
49             map = new OpenLayers.Map();
50             store = new GeoExt.data.LayerStore({map: map});
51             t.ok(store.map == map,
52                  "ctor sets the passed map in the instance");
53         }
54
55         function test_layerstore(t) {
56             t.plan(6);
57
58             var mapPanel = loadMapPanel();
59             var map = mapPanel.map;
60
61             var layer = new OpenLayers.Layer.Vector("Foo Layer");
62
63             map.addLayer(layer);
64             t.eq(map.layers.length, 1, "Adding layer to map does not create duplicate layers on map");
65             t.eq(mapPanel.layers.getCount(), 1, "Adding layer to map does not create duplicate records in LayerStore");
66
67             mapPanel.layers.remove(mapPanel.layers.getById(layer.id));
68             t.eq(map.layers.length,0,"removeLayer on MapPanel's LayerStore removes layer from map");
69             t.eq(mapPanel.layers.getCount(),0,"removeLayer on MapPanel's LayerStore removes layer from map");
70
71             var reader = new GeoExt.data.LayerReader();
72             mapPanel.layers.add((reader.readRecords([layer])).records);
73             t.eq(map.layers.length,1,"Adding layer to MapPanel's LayerStore adds only one layer to map");
74             t.eq(mapPanel.layers.getCount(),1,"Adding layers to MapPanel's LayerStore does not create duplicate layers");
75         }
76
77         function test_load_clear(t) {
78             t.plan(2);
79            
80             var map = new OpenLayers.Map("mappanel");
81             var store = new GeoExt.data.LayerStore({
82                 map: map
83             });
84
85             store.loadData([
86                 new OpenLayers.Layer.Vector(),
87                 new OpenLayers.Layer.Vector()
88             ]);
89             t.eq(map.layers.length, 2, "loading the store with two records adds two layers to the map");
90
91             store.removeAll();
92             t.eq(map.layers.length, 0, "clearing the store removes all layers from map");
93         }
94        
95         function test_bind_unbind(t) {
96             t.plan(28);
97            
98             var map = new OpenLayers.Map("mappanel");
99             var store = new GeoExt.data.LayerStore();
100             var layers = [new OpenLayers.Layer.Vector("Foo layer"),
101                           new OpenLayers.Layer.Vector("Bar layer")];
102             var records = [
103                 new GeoExt.data.LayerRecord({
104                     layer: new OpenLayers.Layer.Vector("Foo record")}),
105                 new GeoExt.data.LayerRecord({
106                     layer: new OpenLayers.Layer.Vector("Bar record")})
107             ];
108
109             var reinit_test_data = function () {
110                 // unbind store
111                 store.unbind();
112
113                 // remove all existing records and layers
114                 store.removeAll();
115                 for (var i=map.layers.length - 1; i>=0; i--) {
116                     map.removeLayer(map.layers[i]);
117                 }
118                 t.eq(map.layers.length, 0, "there is no more layers in the map");
119                 t.eq(store.getCount(), 0, "there is no more records in the store");
120
121                 // add testing data to store and map
122                 store.add(records);
123                 map.addLayers(layers);
124                 t.eq(map.layers.length, 2, "initial layers are loaded in the map");
125                 t.eq(store.getCount(), 2, "initial records are loaded in the store");
126             };
127            
128             // test store to map synchronization
129             reinit_test_data();
130             store.bind(map, {initDir: GeoExt.data.LayerStore.STORE_TO_MAP});
131             t.eq(map.layers.length, 4, "initial records are synchronized to map");
132             t.eq(store.getCount(), 2, "initial layers are not synchronized to store");
133             map.removeLayer(layers[0]);
134             t.eq(map.layers.length, 3, "removing layer not present in store has been well removed");
135             t.eq(store.getCount(), 2, "nothing to remove in store when removing layer not present in store");
136
137             // test map to store synchronization
138             reinit_test_data();
139             store.bind(map, {initDir: GeoExt.data.LayerStore.MAP_TO_STORE});
140             t.eq(map.layers.length, 2, "initial records are not synchronized to map");
141             t.eq(store.getCount(), 4, "initial layers are synchronized to store");
142             store.remove(records[0]);
143             t.eq(store.getCount(), 3, "removing record not present in map has been well removed");
144             t.eq(map.layers.length, 2, "nothing to remove in map when removing record not present in map");
145
146             // test both synchronization
147             reinit_test_data();
148             store.bind(map, {initDir: GeoExt.data.LayerStore.MAP_TO_STORE |
149                                       GeoExt.data.LayerStore.STORE_TO_MAP});
150             t.eq(map.layers.length, 4, "initial records are synchronized to map");
151             t.eq(store.getCount(), 4, "initial layers are synchronized to store");
152
153             // test no synchronization
154             reinit_test_data();
155             store.bind(map, {initDir: 0});
156             t.eq(map.layers.length, 2, "initial records are not synchronized to map");
157             t.eq(store.getCount(), 2, "initial layers are not synchronized to store");
158         }
159
160         function test_add_remove(t) {
161            
162             t.plan(2);
163            
164             var map = new OpenLayers.Map("mappanel");
165             var store = new GeoExt.data.LayerStore({
166                 map: map
167             });
168             var record = new GeoExt.data.LayerRecord({
169                 layer: new OpenLayers.Layer.Vector()
170             });
171
172             store.add([record]);
173             t.eq(store.getCount(), 1, "adding a single record to the store adds one record");
174            
175             store.remove(record);
176             t.eq(store.getCount(), 0, "removing a single record from the store removes one record");
177            
178         }
179        
180         function test_reorder(t) {
181            
182             t.plan(24);
183            
184             var map = new OpenLayers.Map("mappanel");
185             var a = new OpenLayers.Layer.Vector("a");
186             var b = new OpenLayers.Layer.Vector("b");
187             var c = new OpenLayers.Layer.Vector("c");
188
189             var store = new GeoExt.data.LayerStore({
190                 map: map
191             });
192            
193             store.add(store.reader.readRecords([a, b, c]).records);
194
195             t.eq(store.getCount(), 3, "[a, b, c] three layers in store");
196             t.eq(store.getAt(0).get("layer").name, "a", "[a, b, c] first layer correct in store");
197             t.eq(store.getAt(1).get("layer").name, "b", "[a, b, c] second layer correct in store");
198             t.eq(store.getAt(2).get("layer").name, "c", "[a, b, c] third layer correct in store");
199             t.eq(map.layers.length, 3, "[a, b, c] three layers on map");
200             t.eq(map.layers[0].name, "a", "[a, b, c] first layer correct on map");
201             t.eq(map.layers[1].name, "b", "[a, b, c] second layer correct on map");
202             t.eq(map.layers[2].name, "c", "[a, b, c] third layer correct on map");
203            
204             // move "a" to second position
205             map.setLayerIndex(a, 1);
206
207             t.eq(store.getCount(), 3, "[b, a, c] three layers in store");
208             t.eq(store.getAt(0).get("layer").name, "b", "[b, c, a] first layer correct in store");
209             t.eq(store.getAt(1).get("layer").name, "a", "[b, c, a] second layer correct in store");
210             t.eq(store.getAt(2).get("layer").name, "c", "[b, c, a] third layer correct in store");
211             t.eq(map.layers.length, 3, "[a, b, c] three layers on map");
212             t.eq(map.layers[0].name, "b", "[b, c, a] first layer correct on map");
213             t.eq(map.layers[1].name, "a", "[b, c, a] second layer correct on map");
214             t.eq(map.layers[2].name, "c", "[b, c, a] third layer correct on map");
215            
216             // move "c" to first position
217             map.setLayerIndex(c, 0);
218
219             t.eq(store.getCount(), 3, "[c, b, a] three layers in store");
220             t.eq(store.getAt(0).get("layer").name, "c", "[c, b, a] first layer correct in store");
221             t.eq(store.getAt(1).get("layer").name, "b", "[c, b, a] second layer correct in store");
222             t.eq(store.getAt(2).get("layer").name, "a", "[c, b, a] third layer correct in store");
223             t.eq(map.layers.length, 3, "[c, b, a] three layers on map");
224             t.eq(map.layers[0].name, "c", "[c, b, a] first layer correct on map");
225             t.eq(map.layers[1].name, "b", "[c, b, a] second layer correct on map");
226             t.eq(map.layers[2].name, "a", "[c, b, a] third layer correct on map");
227            
228             map.destroy();
229            
230         }
231        
232         function test_insert(t) {
233            
234             t.plan(10);
235            
236             var map = new OpenLayers.Map("mappanel");
237             var a = new OpenLayers.Layer.Vector("a");
238             var b = new OpenLayers.Layer.Vector("b");
239             var c = new OpenLayers.Layer.Vector("c");
240             var d = new OpenLayers.Layer.Vector("d");
241
242             var store = new GeoExt.data.LayerStore({
243                 map: map
244             });
245            
246             store.add(store.reader.readRecords([a, b, c]).records);
247            
248             // insert d into second position
249             store.insert(1, store.reader.readRecords([d]).records);
250            
251             t.eq(store.getCount(), 4, "[a, d, b, c] four layers in store");
252             t.eq(store.getAt(0).get("layer").name, "a", "[a, d, b, c] first layer correct in store");
253             t.eq(store.getAt(1).get("layer").name, "d", "[a, d, b, c] second layer correct in store");
254             t.eq(store.getAt(2).get("layer").name, "b", "[a, d, b, c] third layer correct in store");
255             t.eq(store.getAt(3).get("layer").name, "c", "[a, d, b, c] fourth layer correct in store");
256             t.eq(map.layers.length, 4, "[a, d, b, c] four layers on map");
257             t.eq(map.layers[0].name, "a", "[a, d, b, c] first layer correct on map");
258             t.eq(map.layers[1].name, "d", "[a, d, b, c] second layer correct on map");
259             t.eq(map.layers[2].name, "b", "[a, d, b, c] third layer correct on map");
260             t.eq(map.layers[3].name, "c", "[a, d, b, c] fourth layer correct on map");
261            
262             map.destroy();
263
264         }
265        
266
267     </script>
268   </head> 
269   <body>
270     <div id="mappanel" style="width:400px; height:300px"></div>
271   </body>
272 </html>
Note: See TracBrowser for help on using the browser.