summaryrefslogtreecommitdiff
path: root/misc/openlayers/tests/Feature/Vector.html
blob: 59b0abbaa5707f7de2a14f27ff75a42822e5a048 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
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>