diff options
Diffstat (limited to 'misc/openlayers/tests/Feature/Vector.html')
-rw-r--r-- | misc/openlayers/tests/Feature/Vector.html | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/misc/openlayers/tests/Feature/Vector.html b/misc/openlayers/tests/Feature/Vector.html new file mode 100644 index 0000000..59b0abb --- /dev/null +++ b/misc/openlayers/tests/Feature/Vector.html @@ -0,0 +1,170 @@ +<html> +<head> + <script src="../OLLoader.js"></script> + <script type="text/javascript"> + var map; + var feature; + + function test_Feature_Vector_constructor(t) { + t.plan(3); + + var geometry = new OpenLayers.Geometry(); + geometry.id = Math.random(); + var style = {foo: "bar"}; + var attributes = {bar: "foo"}; + + feature = new OpenLayers.Feature.Vector(geometry, attributes, style); + + t.ok(feature instanceof OpenLayers.Feature.Vector, + "new OpenLayers.Feature.Vector returns Feature.Vector object" ); + t.eq(feature.attributes, attributes, + "attributes property set properly" ); + t.eq(feature.geometry.id, geometry.id, + "geometry.property set properly" ); + } + + function test_Feature_onScreen(t) { + t.plan(6); + var line = new OpenLayers.Geometry.LineString([ + new OpenLayers.Geometry.Point(0, 0), + new OpenLayers.Geometry.Point(10, 20) + ]); + var feature = new OpenLayers.Feature.Vector(line); + feature.layer = { + map: { + getExtent: function() { + return new OpenLayers.Bounds(5, 5, 10, 10); + } + } + }; + t.eq(feature.onScreen(), true, + "intersecting feature returns true for intersection"); + t.eq(feature.onScreen(true), true, + "intersecting feature returns true for bounds only"); + + // move the line so only the bounds intersects + line.move(0, 5); + t.eq(feature.onScreen(), false, + "bounds-only feature returns false for intersection"); + t.eq(feature.onScreen(true), true, + "bounds-only feature returns true for bounds only"); + + // move the line so bounds does not intersect + line.move(0, 10); + t.eq(feature.onScreen(), false, + "off-screen feature returns false for intersection"); + t.eq(feature.onScreen(true), false, + "off-screen feature returns false for bounds only"); + + } + + function test_Feature_getVisibility(t) { + t.plan(5); + var feature = new OpenLayers.Feature.Vector(); + feature.layer = { + getVisibility: function() {return true} + }; + + t.ok(feature.getVisibility(), + "returns true in a not specific case"); + + feature.style = {display: 'none'}; + t.eq(feature.getVisibility(), false, + "returns false when feature style display property is set to 'none'"); + + feature.style = null; + feature.layer.styleMap = { + createSymbolizer: function() { + return {display: 'none'} + } + } + t.eq(feature.getVisibility(), false, + "returns false when layer styleMap is configured so that the feature" + + "should not be displayed"); + + delete feature.layer.styleMap; + feature.layer.getVisibility = function() {return false} + t.eq(feature.getVisibility(), false, + "returns false when layer it belongs to is not visible"); + + feature.layer = null; + t.eq(feature.getVisibility(), false, + "returns false when it doesn't belong to any layer"); + } + + function test_Feature_Vector_clone(t) { + t.plan(6); + + var geometry = new OpenLayers.Geometry.Point(Math.random(), + Math.random()); + var style = {foo: "bar"}; + var attributes = {bar: "foo"}; + + feature = new OpenLayers.Feature.Vector(geometry, attributes, style); + var clone = feature.clone(); + + t.ok(clone instanceof OpenLayers.Feature.Vector, + "new OpenLayers.Feature.Vector returns Feature.Vector object"); + t.eq(clone.attributes, attributes, + "attributes property set properly"); + t.eq(clone.style, style, + "style property set properly"); + t.eq(clone.geometry.x, geometry.x, + "geometry.x property set properly"); + t.eq(clone.geometry.y, geometry.y, + "geometry.y property set properly"); + + feature = new OpenLayers.Feature.Vector(); + clone = feature.clone(); + t.ok(clone instanceof OpenLayers.Feature.Vector, + "clone can clone geometry-less features"); + } + + function test_Feature_Vector_move(t) { + t.plan(3); + + var oldx = 26; + var oldy = 14; + var newx = 6; + var newy = 4; + var res = 10; + + var geometry = new OpenLayers.Geometry.Point(oldx, + oldy); + + var drawn = false; + + feature = new OpenLayers.Feature.Vector(geometry); + + feature.layer = { + getViewPortPxFromLonLat : function(lonlat){ + return new OpenLayers.Pixel(lonlat.lon,lonlat.lat); + }, + map: { + getResolution: function(){ + return res; + } + }, + drawFeature: function(){ + drawn = true; + } + } + + var pixel = new OpenLayers.Pixel(newx,newy) + + feature.move(pixel); + + geometry = feature.geometry; + + t.ok(drawn, "The feature is redrawn after the move"); + t.eq(geometry.x, res * (newx - oldx) + oldx, "New geometry has proper x coordinate"); + t.eq(geometry.y, res * (oldy - newy) + oldy, "New geometry has proper y coordinate"); + } + + + </script> +</head> +<body> + <div id="map" style="width: 500px; height: 300px;"></div> +</body> +</html> |