Batch merge for rc2 of 2.7. 'svn merge -r7967:HEAD from trunk (Closes #1733) (Closes #1489) (Closes #1639) (Closes #1718) (Closes #1723) (Closes #1732) (Closes #1616) (Closes #1722)
git-svn-id: http://svn.openlayers.org/branches/openlayers/2.7@8012 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
166
tests/Strategy/BBOX.html
Normal file
166
tests/Strategy/BBOX.html
Normal file
@@ -0,0 +1,166 @@
|
||||
<html>
|
||||
<head>
|
||||
<script src="../../lib/OpenLayers.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
function test_initialize(t) {
|
||||
t.plan(1);
|
||||
|
||||
var ratio = 4;
|
||||
|
||||
var s = new OpenLayers.Strategy.BBOX({ratio: ratio});
|
||||
t.eq(s.ratio, ratio, "ctor sets ratio");
|
||||
}
|
||||
|
||||
function test_activate(t) {
|
||||
t.plan(5);
|
||||
|
||||
var l = new OpenLayers.Layer.Vector();
|
||||
var s = new OpenLayers.Strategy.BBOX();
|
||||
s.setLayer(l);
|
||||
|
||||
t.eq(s.active, false, "not active after construction");
|
||||
|
||||
var activated = s.activate();
|
||||
t.eq(activated, true, "activate returns true");
|
||||
t.eq(s.active, true, "activated after activate");
|
||||
t.ok(l.events.listeners["moveend"][0].obj == s &&
|
||||
l.events.listeners["moveend"][0].func == s.update,
|
||||
"activates registers moveend listener");
|
||||
t.ok(l.events.listeners["refresh"][0].obj == s &&
|
||||
l.events.listeners["refresh"][0].func == s.update,
|
||||
"activates registers refresh listener");
|
||||
}
|
||||
|
||||
function test_update(t) {
|
||||
t.plan(6);
|
||||
|
||||
var s = new OpenLayers.Strategy.BBOX();
|
||||
|
||||
var invalidBoundsReturnValue;
|
||||
var bounds = new OpenLayers.Bounds(-100, -40, 100, 40);
|
||||
|
||||
s.invalidBounds = function(b) {
|
||||
t.ok(b == bounds,
|
||||
"update calls invalidBounds with correct arg");
|
||||
return invalidBoundsReturnValue;
|
||||
};
|
||||
s.calculateBounds = function(b) {
|
||||
t.ok(b == bounds,
|
||||
"update calls calculateBounds with correct arg");
|
||||
};
|
||||
s.triggerRead = function() {
|
||||
t.ok(true,
|
||||
"update calls triggerRead");
|
||||
};
|
||||
|
||||
s.setLayer({
|
||||
map: {
|
||||
getExtent: function() {
|
||||
return bounds;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 2 tests
|
||||
invalidBoundsReturnValue = true;
|
||||
s.update({force: true});
|
||||
|
||||
// 3 tests
|
||||
invalidBoundsReturnValue = true;
|
||||
s.update();
|
||||
|
||||
// 1 tests
|
||||
invalidBoundsReturnValue = false;
|
||||
s.update();
|
||||
}
|
||||
|
||||
function test_triggerRead(t) {
|
||||
t.plan(7);
|
||||
|
||||
var s = new OpenLayers.Strategy.BBOX();
|
||||
|
||||
var filter = {"fake": "filter"};
|
||||
|
||||
s.createFilter = function() {
|
||||
return filter;
|
||||
};
|
||||
|
||||
s.setLayer({
|
||||
protocol: {
|
||||
read: function(options) {
|
||||
t.ok(options.filter == filter,
|
||||
"protocol read called with correct filter");
|
||||
t.ok(options.callback == s.merge,
|
||||
"protocol read called with correct callback");
|
||||
t.ok(options.scope == s,
|
||||
"protocol read called with correct scope");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 3 tests
|
||||
s.triggerRead();
|
||||
|
||||
// 4 tests
|
||||
s.response = {
|
||||
priv: {
|
||||
abort: function() {
|
||||
t.ok(true,
|
||||
"triggerRead aborts previous read request");
|
||||
}
|
||||
}
|
||||
};
|
||||
s.triggerRead();
|
||||
}
|
||||
|
||||
function test_createFilter(t) {
|
||||
t.plan(3);
|
||||
|
||||
var s = new OpenLayers.Strategy.BBOX();
|
||||
|
||||
var f;
|
||||
|
||||
// 2 test
|
||||
s.setLayer({});
|
||||
f = s.createFilter();
|
||||
t.ok(f.CLASS_NAME.search(/^OpenLayers.Filter.Spatial/) != -1,
|
||||
"createFilter returns a spatial filter object");
|
||||
t.eq(f.type, OpenLayers.Filter.Spatial.BBOX,
|
||||
"createFilter returns a BBOX-typed filter");
|
||||
|
||||
// 1 test
|
||||
s.setLayer({filter: {fake: "filter"}});
|
||||
f = s.createFilter();
|
||||
t.ok(f.CLASS_NAME.search(/^OpenLayers.Filter.Logical/) != -1,
|
||||
"createFilter returns a logical filter object");
|
||||
}
|
||||
|
||||
function test_merge(t) {
|
||||
t.plan(2);
|
||||
|
||||
var s = new OpenLayers.Strategy.BBOX();
|
||||
|
||||
var features = ["fake", "feature", "array"];
|
||||
|
||||
s.setLayer({
|
||||
destroyFeatures: function() {
|
||||
t.ok(true,
|
||||
"merge calls destroyFeatures");
|
||||
},
|
||||
addFeatures: function(f) {
|
||||
t.ok(f == features,
|
||||
"merge calls addFeatures with the correct features");
|
||||
}
|
||||
});
|
||||
|
||||
// 2 tests
|
||||
s.merge({features: features});
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="map" style="width: 400px; height: 200px" />
|
||||
</body>
|
||||
</html>
|
||||
108
tests/Strategy/Cluster.html
Normal file
108
tests/Strategy/Cluster.html
Normal file
@@ -0,0 +1,108 @@
|
||||
<html>
|
||||
<head>
|
||||
<script src="../../lib/OpenLayers.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
function test_activate(t) {
|
||||
t.plan(2);
|
||||
|
||||
var strategy = new OpenLayers.Strategy.Cluster();
|
||||
t.eq(strategy.active, false, "not active after construction");
|
||||
|
||||
var layer = new OpenLayers.Layer.Vector("Vector Layer", {
|
||||
strategies: [strategy]
|
||||
});
|
||||
var map = new OpenLayers.Map('map');
|
||||
map.addLayer(layer);
|
||||
|
||||
t.eq(strategy.active, true, "active after adding to map");
|
||||
}
|
||||
|
||||
function test_clusters(t) {
|
||||
t.plan(10);
|
||||
|
||||
function featuresEq(got, exp) {
|
||||
var eq = false;
|
||||
if(got instanceof Array && exp instanceof Array) {
|
||||
if(got.length === exp.length) {
|
||||
for(var i=0; i<got.length; ++i) {
|
||||
if(got[i] !== exp[i]) {
|
||||
console.log(got[i], exp[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
eq = (i == got.length);
|
||||
}
|
||||
}
|
||||
return eq;
|
||||
}
|
||||
|
||||
var strategy = new OpenLayers.Strategy.Cluster();
|
||||
var layer = new OpenLayers.Layer.Vector("Vector Layer", {
|
||||
strategies: [strategy],
|
||||
isBaseLayer: true
|
||||
});
|
||||
var map = new OpenLayers.Map('map', {
|
||||
resolutions: [4, 2, 1],
|
||||
maxExtent: new OpenLayers.Bounds(-40, -40, 40, 40)
|
||||
});
|
||||
map.addLayer(layer);
|
||||
|
||||
// create features in a line, 1 unit apart
|
||||
var features = new Array(80);
|
||||
for(var i=0; i<80; ++i) {
|
||||
features[i] = new OpenLayers.Feature.Vector(
|
||||
new OpenLayers.Geometry.Point(-40 + i, 0)
|
||||
);
|
||||
}
|
||||
|
||||
map.setCenter(new OpenLayers.LonLat(0, 0), 0);
|
||||
layer.addFeatures(features);
|
||||
|
||||
// resolution 4
|
||||
// threshold: 4 * 20 = 80 units
|
||||
// one cluster
|
||||
t.eq(layer.features.length, 1, "[4] layer has one cluster");
|
||||
t.ok(featuresEq(layer.features[0].cluster, features), "[4] cluster includes all features");
|
||||
|
||||
// resolution 2
|
||||
// threshold: 2 * 20 = 40 units
|
||||
// two clusters (41 and 39) - first cluster includes all features within 40 units of the first (0-40 or 41 features)
|
||||
map.zoomIn();
|
||||
t.eq(layer.features.length, 2, "[2] layer has two clusters");
|
||||
t.ok(featuresEq(layer.features[0].cluster, features.slice(0, 41)), "[2] first cluster includes first 41 features");
|
||||
t.ok(featuresEq(layer.features[1].cluster, features.slice(41, 80)), "[2] second cluster includes last 39 features");
|
||||
|
||||
// resolution 1
|
||||
// threshold: 1 * 20 = 20 units
|
||||
// four clusters (21, 21, 21, and 17)
|
||||
map.zoomIn();
|
||||
t.eq(layer.features.length, 4, "[1] layer has four clusters");
|
||||
t.ok(featuresEq(layer.features[0].cluster, features.slice(0, 21)), "[1] first cluster includes first 21 features");
|
||||
t.ok(featuresEq(layer.features[1].cluster, features.slice(21, 42)), "[2] second cluster includes second 21 features");
|
||||
t.ok(featuresEq(layer.features[2].cluster, features.slice(42, 63)), "[2] third cluster includes third 21 features");
|
||||
t.ok(featuresEq(layer.features[3].cluster, features.slice(63, 80)), "[2] fourth cluster includes last 17 features");
|
||||
}
|
||||
|
||||
function test_deactivate(t) {
|
||||
t.plan(2);
|
||||
|
||||
var strategy = new OpenLayers.Strategy.Cluster();
|
||||
var layer = new OpenLayers.Layer.Vector("Vector Layer", {
|
||||
strategies: [strategy]
|
||||
});
|
||||
var map = new OpenLayers.Map('map');
|
||||
map.addLayer(layer);
|
||||
|
||||
t.eq(strategy.active, true, "active after adding to map");
|
||||
|
||||
map.removeLayer(layer);
|
||||
t.eq(strategy.active, false, "not active after removing from map");
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="map" style="width: 400px; height: 200px" />
|
||||
</body>
|
||||
</html>
|
||||
113
tests/Strategy/Paging.html
Normal file
113
tests/Strategy/Paging.html
Normal file
@@ -0,0 +1,113 @@
|
||||
<html>
|
||||
<head>
|
||||
<script src="../../lib/OpenLayers.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
function test_activate(t) {
|
||||
t.plan(2);
|
||||
|
||||
var strategy = new OpenLayers.Strategy.Paging();
|
||||
t.eq(strategy.active, false, "not active after construction");
|
||||
|
||||
var layer = new OpenLayers.Layer.Vector("Vector Layer", {
|
||||
strategies: [strategy]
|
||||
});
|
||||
var map = new OpenLayers.Map('map');
|
||||
map.addLayer(layer);
|
||||
|
||||
t.eq(strategy.active, true, "active after adding to map");
|
||||
}
|
||||
|
||||
function test_paging(t) {
|
||||
t.plan(18);
|
||||
|
||||
var strategy = new OpenLayers.Strategy.Paging();
|
||||
var layer = new OpenLayers.Layer.Vector("Vector Layer", {
|
||||
strategies: [strategy],
|
||||
drawFeature: function() {}
|
||||
});
|
||||
var map = new OpenLayers.Map('map');
|
||||
map.addLayer(layer);
|
||||
|
||||
var features = new Array(25);
|
||||
for(var i=0; i<features.length; ++i) {
|
||||
features[i] = {destroy: function() {}};
|
||||
}
|
||||
|
||||
function featuresEq(got, exp) {
|
||||
var eq = false;
|
||||
if(got instanceof Array && exp instanceof Array) {
|
||||
if(got.length === exp.length) {
|
||||
for(var i=0; i<got.length; ++i) {
|
||||
if(got[i] !== exp[i]) {
|
||||
console.log(got[i], exp[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
eq = (i == got.length);
|
||||
}
|
||||
}
|
||||
return eq;
|
||||
}
|
||||
|
||||
var len = strategy.pageLength();
|
||||
t.eq(len, 10, "page length defaults to 10");
|
||||
|
||||
// add 25 features to the layer
|
||||
layer.addFeatures(features);
|
||||
t.eq(strategy.features.length, features.length, "strategy caches all features");
|
||||
t.eq(layer.features.length, len, "layer gets one page of features");
|
||||
t.ok(featuresEq(layer.features, features.slice(0, len)), "layer gets first page initially");
|
||||
t.eq(strategy.pageNum(), 0, "strategy reports 0 based page number");
|
||||
t.eq(strategy.pageCount(), Math.ceil(features.length / len), "strategy reports correct number of pages");
|
||||
|
||||
// load next page of features
|
||||
var changed = strategy.pageNext();
|
||||
t.eq(changed, true, "(1) strategy reports change");
|
||||
t.eq(strategy.pageNum(), 1, "second page");
|
||||
t.ok(featuresEq(layer.features, features.slice(len, 2*len)), "layer has second page of features");
|
||||
|
||||
// load next page of features (half page)
|
||||
changed = strategy.pageNext();
|
||||
t.eq(changed, true, "(2) strategy reports change");
|
||||
t.eq(strategy.pageNum(), 2, "third page");
|
||||
|
||||
// try to change forward again
|
||||
changed = strategy.pageNext();
|
||||
t.eq(changed, false, "strategy reports no change");
|
||||
t.eq(layer.features.length, features.length % len, "layer has partial page");
|
||||
t.ok(featuresEq(layer.features, features.slice(2*len, 3*len)), "layer has third page of features");
|
||||
t.eq(strategy.pageNum(), 2, "still on third page");
|
||||
|
||||
// change back a page
|
||||
changed = strategy.pagePrevious();
|
||||
t.eq(changed, true, "(3) strategy reports change");
|
||||
t.eq(strategy.pageNum(), 1, "back on second page");
|
||||
t.ok(featuresEq(layer.features, features.slice(len, 2*len)), "layer has second page of features again");
|
||||
|
||||
layer.destroy();
|
||||
|
||||
}
|
||||
|
||||
function test_deactivate(t) {
|
||||
t.plan(2);
|
||||
|
||||
var strategy = new OpenLayers.Strategy.Paging();
|
||||
var layer = new OpenLayers.Layer.Vector("Vector Layer", {
|
||||
strategies: [strategy]
|
||||
});
|
||||
var map = new OpenLayers.Map('map');
|
||||
map.addLayer(layer);
|
||||
|
||||
t.eq(strategy.active, true, "active after adding to map");
|
||||
|
||||
map.removeLayer(layer);
|
||||
t.eq(strategy.active, false, "not active after removing from map");
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="map" style="width: 400px; height: 200px" />
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user