OpenLayers OpenLayers

root/trunk/openlayers/tests/Strategy/Paging.html

Revision 8003, 4.0 kB (checked in by tschaub, 4 months ago)

Adding paging and cluster strategies. The paging strategy intercepts a batch of features bound for the layer and caches them, giving the layer one page at a time. The cluster strategy intercepts a batch of features and groups proximate features as clusters - giving the clusters to the layer instead. Thanks for the careful review Erik. r=euzuro (see #1606).

Line 
1 <html>
2 <head>
3   <script src="../../lib/OpenLayers.js"></script>
4   <script type="text/javascript">
5
6     function test_activate(t) {
7         t.plan(2);
8
9         var strategy = new OpenLayers.Strategy.Paging();
10         t.eq(strategy.active, false, "not active after construction");
11
12         var layer = new OpenLayers.Layer.Vector("Vector Layer", {
13             strategies: [strategy]
14         });
15         var map = new OpenLayers.Map('map');
16         map.addLayer(layer);
17        
18         t.eq(strategy.active, true, "active after adding to map");
19     }
20    
21     function test_paging(t) {
22         t.plan(18);
23
24         var strategy = new OpenLayers.Strategy.Paging();
25         var layer = new OpenLayers.Layer.Vector("Vector Layer", {
26             strategies: [strategy],
27             drawFeature: function() {}
28         });
29         var map = new OpenLayers.Map('map');
30         map.addLayer(layer);
31        
32         var features = new Array(25);
33         for(var i=0; i<features.length; ++i) {
34             features[i] = {destroy: function() {}};
35         }
36        
37         function featuresEq(got, exp) {
38             var eq = false;
39             if(got instanceof Array && exp instanceof Array) {
40                 if(got.length === exp.length) {
41                     for(var i=0; i<got.length; ++i) {
42                         if(got[i] !== exp[i]) {
43                             console.log(got[i], exp[i]);
44                             break;
45                         }
46                     }
47                     eq = (i == got.length);
48                 }
49             }
50             return eq;
51         }
52        
53         var len = strategy.pageLength();
54         t.eq(len, 10, "page length defaults to 10");
55        
56         // add 25 features to the layer
57         layer.addFeatures(features);
58         t.eq(strategy.features.length, features.length, "strategy caches all features");
59         t.eq(layer.features.length, len, "layer gets one page of features");
60         t.ok(featuresEq(layer.features, features.slice(0, len)), "layer gets first page initially");
61         t.eq(strategy.pageNum(), 0, "strategy reports 0 based page number");
62         t.eq(strategy.pageCount(), Math.ceil(features.length / len), "strategy reports correct number of pages");
63        
64         // load next page of features
65         var changed = strategy.pageNext();
66         t.eq(changed, true, "(1) strategy reports change");
67         t.eq(strategy.pageNum(), 1, "second page");
68         t.ok(featuresEq(layer.features, features.slice(len, 2*len)), "layer has second page of features");
69        
70         // load next page of features (half page)
71         changed = strategy.pageNext();
72         t.eq(changed, true, "(2) strategy reports change");
73         t.eq(strategy.pageNum(), 2, "third page");
74        
75         // try to change forward again
76         changed = strategy.pageNext();
77         t.eq(changed, false, "strategy reports no change");
78         t.eq(layer.features.length, features.length % len, "layer has partial page");
79         t.ok(featuresEq(layer.features, features.slice(2*len, 3*len)), "layer has third page of features");
80         t.eq(strategy.pageNum(), 2, "still on third page");
81        
82         // change back a page
83         changed = strategy.pagePrevious();
84         t.eq(changed, true, "(3) strategy reports change");
85         t.eq(strategy.pageNum(), 1, "back on second page");
86         t.ok(featuresEq(layer.features, features.slice(len, 2*len)), "layer has second page of features again");
87        
88         layer.destroy();
89        
90     }
91
92     function test_deactivate(t) {
93         t.plan(2);
94
95         var strategy = new OpenLayers.Strategy.Paging();
96         var layer = new OpenLayers.Layer.Vector("Vector Layer", {
97             strategies: [strategy]
98         });
99         var map = new OpenLayers.Map('map');
100         map.addLayer(layer);
101        
102         t.eq(strategy.active, true, "active after adding to map");
103        
104         map.removeLayer(layer);
105         t.eq(strategy.active, false, "not active after removing from map");
106     }
107
108   </script>
109 </head>
110 <body>
111     <div id="map" style="width: 400px; height: 200px" />
112 </body>
113 </html>
Note: See TracBrowser for help on using the browser.