OpenLayers OpenLayers

root/trunk/openlayers/tests/Control/SelectFeature.html

Revision 7893, 8.0 kB (checked in by ahocevar, 4 months ago)

To test real-life conditions, we cannot just use a bogus function to deactivate the control. (closes #1710)

  • Property svn:eol-style set to native
Line 
1 <html>
2 <head>
3     <script src="../../lib/OpenLayers.js"></script>
4     <script type="text/javascript">
5     function test_Control_SelectFeature_constructor(t) {
6         t.plan(2);
7         var options = {
8 //            geometryTypes: "foo"
9         };
10         var layer = "bar";
11         var control = new OpenLayers.Control.SelectFeature(layer, options);
12         t.ok(control instanceof OpenLayers.Control.SelectFeature,
13              "new OpenLayers.Control.SelectFeature returns an instance");
14         t.eq(control.layer, "bar",
15              "constructor sets layer correctly");       
16 //        t.eq(control.handlers.feature.geometryTypes, "foo",
17 //             "constructor sets options correctly on feature handler");
18     }
19    
20     function test_Control_SelectFeature_destroy(t) {
21         t.plan(2);
22         var map = new OpenLayers.Map("map");
23         var layer = new OpenLayers.Layer.Vector();
24         map.addLayer(layer);
25         var control = new OpenLayers.Control.SelectFeature(layer, {box: true});
26         control.handlers.feature.deactivate = function() {
27             t.ok(true,
28                  "control.deactivate calls deactivate on feature handler");
29         }
30         control.handlers.box.deactivate = function() {
31             t.ok(true,
32                  "control.deactivate calls deactivate on box handler");
33         }
34 // should nullify the layer property here
35         control.destroy();
36        
37     }
38    
39     function test_Control_SelectFeature_select(t) {
40         t.plan(2);
41         var map = new OpenLayers.Map("map");
42         var layer = new OpenLayers.Layer.Vector();
43         map.addLayer(layer);
44         var control = new OpenLayers.Control.SelectFeature(layer);
45         var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(0,0));
46         layer.addFeatures(feature);
47         layer.drawFeature = function(feature, style) {
48             layer.styleMap.createSymbolizer(feature, style);
49         }
50         control.select(feature);
51         t.eq(feature.renderIntent, "select", "render intent is set to select");
52         control.unselect(feature);
53         t.eq(feature.renderIntent, "default", "render intent is set back to default");
54     }
55    
56     function test_Control_SelectFeature_clickFeature(t) {
57         t.plan(4);
58         // mock up layer
59         var layer = {
60             selectedFeatures: [],
61             drawFeature: function() {},
62             events: {
63                 triggerEvent: function() {}
64             }
65         };
66         // mock up active control
67         var control = new OpenLayers.Control.SelectFeature(layer);
68         control.handlers.feature = {
69             evt: {}
70         };
71         // mock up features
72         var features = new Array(4);
73         for(var i=0; i<features.length; ++i) {
74             features[i] = {
75                 id: Math.random(),
76                 tested: 0,
77                 style: ""
78             };
79         }
80        
81         // test that onSelect gets called properly
82         control.onSelect = function(feature) {
83             feature.tested += 1;
84             t.eq(feature, features[feature.index],
85                  "onSelect called with proper feature (" + feature.index + ")");
86             t.eq(feature.tested, feature.test,
87                  "onSelect called only once for feature (" + feature.index + ")");
88         }
89
90         // test that onUnselect gets called properly
91         control.onUnselect = function(feature) {
92             feature.tested += 1;
93             t.eq(feature, features[feature.index],
94                  "onUnselect called with proper feature (" + feature.index + ")");
95             t.eq(feature.tested, feature.test,
96                  "onUnselect called only once for feature (" + feature.index + ")");
97         }
98        
99         // mock up first click on first feature (runs 2 tests from onSelect)
100         var feature = features[0];
101         feature.index = 0;
102         feature.test = 1;
103         control.clickFeature(feature);
104
105         // mock up second click on first feature (runs no tests - already selected)
106         control.toggle = false;
107         control.clickFeature(feature);
108
109         // mock up second click on first feature (runs 2 tests from onUnselect)
110         control.toggle = true;
111         feature.test = 2;
112         control.clickFeature(feature);
113
114        
115     }
116    
117     function test_box(t) {
118         t.plan(5);
119         var map = new OpenLayers.Map("map");
120         var layer = new OpenLayers.Layer.Vector();
121         map.addLayer(layer);
122         map.setBaseLayer(layer);
123         map.setCenter(new OpenLayers.LonLat(1,1));
124         var control = new OpenLayers.Control.SelectFeature(layer, {'multiple': true, box: true });
125         var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(0,0));
126         var feature2 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(1,1));
127         var feature3 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(-2,-2));
128         var feature4 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString([
129             new OpenLayers.Geometry.Point(0, 0), new OpenLayers.Geometry.Point(1, 1)
130         ]));
131         layer.addFeatures([feature, feature2, feature3, feature4]);
132         control.setMap(map);
133         map.getLonLatFromPixel = function(arg) {
134             return new OpenLayers.LonLat(arg.x, arg.y);
135         }   
136         control.selectBox(new OpenLayers.Bounds(-1, -1, 2, 2));
137         t.eq(layer.selectedFeatures.length, 3, "box around all features selects 3 features");
138        
139         control.selectBox(new OpenLayers.Bounds(-3, -3, -1, -1));
140         t.eq(layer.selectedFeatures.length, 4, "box around other features doesn't turn off already selected features.");       
141        
142         control.multipleSelect = function() {
143             return false;
144         };
145         control.selectBox(new OpenLayers.Bounds(-3, -3, -1, -1));
146         t.eq(layer.selectedFeatures.length, 1, "box around other features correctly turns off already selected features.");
147        
148         control.geometryTypes = null;
149         control.selectBox(new OpenLayers.Bounds(-100, -100, 100, 100));
150         t.eq(layer.selectedFeatures.length, layer.features.length, "all features selected with no geometryTypes filter");
151        
152         control.geometryTypes = ["OpenLayers.Geometry.Point"];
153         control.selectBox(new OpenLayers.Bounds(-100, -100, 100, 100));
154         t.eq(layer.selectedFeatures.length, 3, "3 features selected with geometryTypes filter");
155        
156
157     }
158    
159     function test_Control_SelectFeature_activate(t) {
160         t.plan(4);
161         var map = new OpenLayers.Map("map");
162         var layer = new OpenLayers.Layer.Vector();
163         map.addLayer(layer);
164         var control = new OpenLayers.Control.SelectFeature(layer, {box: true});
165         map.addControl(control);
166         t.ok(!control.handlers.feature.active,
167              "feature handler is not active prior to activating control");
168         t.ok(!control.handlers.box.active,
169              "box handler is not active prior to activating control");
170         control.activate();
171         t.ok(control.handlers.feature.active,
172              "feature handler is active after activating control");
173         t.ok(control.handlers.box.active,
174              "box handler is active after activating control");
175     }
176
177     function test_Control_SelectFeature_deactivate(t) {
178         t.plan(2);
179         var map = new OpenLayers.Map("map");
180         var layer = new OpenLayers.Layer.Vector();
181         map.addLayer(layer);
182         var control = new OpenLayers.Control.SelectFeature(layer, {box: true});
183         map.addControl(control);
184
185         control.activate();
186         control.handlers.feature.deactivate = function() {
187             t.ok(true,
188                  "control.deactivate calls deactivate on feature handler");
189             OpenLayers.Handler.Feature.prototype.deactivate.apply(this, arguments);
190         }
191         control.handlers.box.deactivate = function() {
192             t.ok(true,
193                  "control.deactivate calls deactivate on box handler");
194         }
195         control.deactivate();
196     }
197
198     </script>
199 </head>
200 <body>
201     <div id="map" style="width: 400px; height: 250px;"/>
202 </body>
203 </html>
Note: See TracBrowser for help on using the browser.