File: Filter.html

package info (click to toggle)
openlayers 2.13.1%2Bds2-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 67,180 kB
  • ctags: 11,977
  • sloc: xml: 7,435; python: 891; sh: 44; makefile: 23
file content (135 lines) | stat: -rw-r--r-- 3,488 bytes parent folder | download | duplicates (7)
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
<!DOCTYPE html>
<html>
<head>
<script src="../OLLoader.js"></script>
<script>

var features = [];
for (var i=0; i<20; ++i) {
    features.push(
        new OpenLayers.Feature.Vector(
            new OpenLayers.Geometry.Point(0, 0), {index: i}
        )
    );
}

var filter = new OpenLayers.Filter.Comparison({
    type: OpenLayers.Filter.Comparison.LESS_THAN,
    property: "index",
    value: 10
});

function test_initialize(t) {
    
    t.plan(4);
    
    var strategy = new OpenLayers.Strategy.Filter({filter: filter});

    t.ok(strategy instanceof OpenLayers.Strategy, "is strategy");
    t.ok(strategy instanceof OpenLayers.Strategy.Filter, "is filter strategy");
    
    t.ok(strategy.filter === filter, "has filter");
    
    strategy.destroy();
    
    try {
        strategy = new OpenLayers.Strategy.Filter();
        t.ok(true, "strategy without filter works");
    } catch (err) {
        t.fail("strategy without filter should not throw");
    }
    

}

function test_autoActivate(t) {

    t.plan(2);

    var strategy = new OpenLayers.Strategy.Filter({filter: filter});
    
    var layer = new OpenLayers.Layer.Vector(null, {
        strategies: [strategy]
    });
    
    t.ok(!strategy.active, "strategy not active before adding to map");

    var map = new OpenLayers.Map({
        div: "map",
        allOverlays: true,
        layers: [layer],
        center: new OpenLayers.LonLat(0, 0),
        zoom: 1
    });

    t.ok(strategy.active, "strategy active after adding to map");
    
    map.destroy();
    
}

function test_setFilter(t) {
    
    t.plan(13);

    var strategy = new OpenLayers.Strategy.Filter({filter: filter});
    var layer = new OpenLayers.Layer.Vector(null, {
        strategies: [strategy]
    });

    var map = new OpenLayers.Map({
        div: "map",
        allOverlays: true,
        layers: [layer],
        center: new OpenLayers.LonLat(0, 0),
        zoom: 1
    });
    
    var log = [];
    layer.events.on({
        beforefeaturesadded:  function(event) {
            log.push(event.type);
        },
        beforefeaturesremoved: function(event) {
            log.push(event.type);
        }
    })

    // a) add all features
    log = [];
    layer.addFeatures(features);
    t.eq(features.length, 20, "a) collection of 20 features")
    t.eq(layer.features.length, 10, "a) layer got 10 with filter 'index < 10'");
    t.eq(strategy.cache.length, 10, "a) strategy cached 10 with filter 'index < 10'");
    t.eq(log.length, 1, "a) one event logged");
    t.eq(log[0], "beforefeaturesadded", "a) beforefeaturesadded fired");

    // b) update filter
    log = [];
    filter.value = 5;
    strategy.setFilter(filter);
    t.eq(layer.features.length, 5, "b) layer got 5 with filter 'index < 5'");
    t.eq(strategy.cache.length, 15, "b) strategy cached 15 with filter 'index < 5'");
    t.eq(log.length, 1, "b) one event logged");
    t.eq(log[0], "beforefeaturesremoved", "b) beforefeaturesremoved fired");

    // c) update filter
    log = [];
    filter.value = 15;
    strategy.setFilter(filter);
    t.eq(layer.features.length, 15, "c) layer got 15 with filter 'index < 15'");
    t.eq(strategy.cache.length, 5, "c) strategy cached 5 with filter 'index < 15'");
    t.eq(log.length, 1, "c) one event logged");
    t.eq(log[0], "beforefeaturesadded", "c) beforefeaturesadded fired");
    
    map.destroy();
    
}



</script></head>
<body>
    <div id="map" style="width: 512px; height: 256px" />
</body>
</html>