Merge branch 'master' into fixed-strategy

This commit is contained in:
friedjoff
2013-04-30 12:44:17 +02:00
330 changed files with 3632 additions and 1924 deletions
+13 -2
View File
@@ -155,8 +155,8 @@
}
};
t.eq(
format("${a.b.c} ${a.b.e} ${a.b.q} ${a} ${a...b...c}", context),
"d f undefined [object Object] d",
format("${a.b.c} ${a.b.e} ${a.b.q} ${a} ${a...b...c} ${aa.b} ${a.bb.c}", context),
"d f undefined [object Object] d undefined undefined",
"attribute values that are objects are supported"
);
@@ -278,6 +278,17 @@
OpenLayers.Number.decimalSeparator = ",";
t.eq(format(num, 3), "12.345,679", "changing thousands/decimal separator globally works");
}
function test_Number_zeroPad(t) {
t.plan(6);
var pad = OpenLayers.Number.zeroPad;
t.eq(pad(15, 4), "0015", "left padding works");
t.eq(pad(15, 2), "15", "no left padding when equal to number of digits");
t.eq(pad(15, 1), "15", "no left padding when less than number of digits");
t.eq(pad(10, 5, 2), "01010", "radix modified and padding works");
t.eq(pad(10, 5, 8), "00012", "radix modified and padding works");
t.eq(pad(10, 5, 36), "0000a", "radix modified and padding works");
}
function test_Function_bind(t) {
t.plan(12);
+132 -98
View File
@@ -2,10 +2,10 @@
<head>
<script src="../OLLoader.js"></script>
<script type="text/javascript">
var bounds;
var bounds;
function test_Bounds_constructor (t) {
t.plan( 26 );
bounds = new OpenLayers.Bounds();
t.ok( bounds instanceof OpenLayers.Bounds, "new OpenLayers.Bounds returns Bounds object" );
t.eq( bounds.CLASS_NAME, "OpenLayers.Bounds", "bounds.CLASS_NAME is set correctly" );
@@ -24,11 +24,11 @@
t.eq( bounds.top, 4, "bounds.top is set correctly" );
t.eq( bounds.getWidth(), 10, "bounds.getWidth() returns correct value" );
t.eq( bounds.getHeight(), 2, "bounds.getHeight() returns correct value" );
var sz = bounds.getSize();
var size = new OpenLayers.Size(10,2);
t.ok(sz.equals(size),"bounds.getSize() has correct value" );
var center = new OpenLayers.Pixel(5,3);
var boundsCenter = bounds.getCenterPixel();
t.ok( boundsCenter.equals(center), "bounds.getCenterLonLat() has correct value" );
@@ -44,7 +44,7 @@
t.eq( bounds.bottom, -20037508.34, "bounds.bottom adjusted for floating precision");
t.eq( bounds.right, 40075016.68, "bounds.right adjusted for floating precision");
t.eq( bounds.top, 20037508.34, "bounds.top adjusted for floating precision");
// allow construction from a single arg
bounds = new OpenLayers.Bounds([-180, -90, 180, 90]);
t.ok(bounds instanceof OpenLayers.Bounds, "(array) correct instance");
@@ -52,7 +52,7 @@
t.eq(bounds.bottom, -90, "(array) bottom");
t.eq(bounds.right, 180, "(array) right");
t.eq(bounds.top, 90, "(array) top");
}
function test_Bounds_constructorFromStrings(t) {
@@ -64,7 +64,7 @@
t.eq( bounds.bottom, 2, "bounds.bottom is set correctly" );
t.eq( bounds.right, 10, "bounds.right is set correctly" );
t.eq( bounds.top, 4, "bounds.top is set correctly" );
}
function test_Bounds_toBBOX(t) {
@@ -85,12 +85,12 @@
function test_Bounds_toString(t) {
t.plan( 1 );
bounds = new OpenLayers.Bounds(1,2,3,4);
t.eq( bounds.toString(), "1,2,3,4", "toString() returns correct value." );
t.eq( bounds.toString(), "1,2,3,4", "toString() returns correct value." );
}
function test_Bounds_toArray(t) {
t.plan( 1 );
bounds = new OpenLayers.Bounds(1,2,3,4);
t.eq( bounds.toArray(), [1,2,3,4], "toArray() returns correct value." );
t.eq( bounds.toArray(), [1,2,3,4], "toArray() returns correct value." );
}
function test_Bounds_toGeometry(t) {
@@ -133,9 +133,9 @@
t.eq( bounds.containsLonLat(ll), bounds.contains(ll.lon, ll.lat), "containsLonLat works");
}
function test_containsLonLat_wraped(t) {
var worldBounds = new OpenLayers.Bounds(-180, -90, 180, 90);
var cases = [{
@@ -157,10 +157,10 @@
}, {
ll: [-180 * 50, 5], bbox: [-10, -10, 10, 10], contained: true
}];
var len = cases.length;
t.plan(len);
var c, bounds, loc;
for (var i=0; i<len; ++i) {
c = cases[i];
@@ -168,7 +168,7 @@
bounds = new OpenLayers.Bounds.fromArray(c.bbox);
t.eq(bounds.containsLonLat(loc, {worldBounds: worldBounds}), c.contained, "case " + i);
}
}
function test_Bounds_fromString(t) {
@@ -200,7 +200,7 @@
t.ok( bounds.getSize().equals(new OpenLayers.Size(100, 110)), "getCenterPixel() works correctly");
}
function test_Bounds_clone(t) {
t.plan( 6 );
var oldBounds = new OpenLayers.Bounds(1,2,3,4);
@@ -210,7 +210,7 @@
t.eq( bounds.bottom, 2, "bounds.bottom is set correctly" );
t.eq( bounds.right, 3, "bounds.right is set correctly" );
t.eq( bounds.top, 4, "bounds.top is set correctly" );
oldBounds.left = 100;
t.eq( bounds.left, 1, "changing olBounds.left does not change bounds.left" );
}
@@ -260,15 +260,15 @@
20037508.34,20037508.34);
t.eq( merc_aBounds.intersectsBounds(merc_bBounds, true), true, "intersect shouldn't fall prey to floating point errors, inclusive is true");
t.eq( merc_aBounds.intersectsBounds(merc_bBounds, false), false, "intersect shouldn't fall prey to floating point errors, inclusive is false");
// test for bounds intersection where none of the corners are contained within the other bounds
var b1 = new OpenLayers.Bounds(-1, -2, 1, 2);
var b2 = new OpenLayers.Bounds(-2, -1, 2, 1);
t.eq(b1.intersectsBounds(b2), true, "vertical rectangle intersects horizontal rectangle");
t.eq(b2.intersectsBounds(b1), true, "horizontal rectangle intersects vertical rectangle");
}
function test_Bounds_containsBounds(t) {
t.plan( 35 );
containerBounds = new OpenLayers.Bounds(10,10,40,40);
@@ -321,10 +321,10 @@
t.eq( containerBounds.containsBounds(bounds, false, false), true, "(" + containerBounds.toBBOX() + ") correctly contains (" + bounds.toBBOX() + ") when partial is false, inclusive is false" );
t.eq( containerBounds.containsBounds(bounds, true) , true, "(" + containerBounds.toBBOX() + ") correctly contains (" + bounds.toBBOX() + ") when partial is true" );
t.eq( containerBounds.containsBounds(bounds, true, true) , true, "(" + containerBounds.toBBOX() + ") correctly contains (" + bounds.toBBOX() + ") when partial is true, inclusive is true" );
t.eq( containerBounds.containsBounds(bounds, true, false) , true, "(" + containerBounds.toBBOX() + ") correctly contains (" + bounds.toBBOX() + ") when partial is true, inclusive is false" );
t.eq( containerBounds.containsBounds(bounds, true, false) , true, "(" + containerBounds.toBBOX() + ") correctly contains (" + bounds.toBBOX() + ") when partial is true, inclusive is false" );
}
function test_Bounds_determineQuadrant(t) {
t.plan( 4 );
@@ -378,39 +378,39 @@
t.ok( bounds.getCenterPixel().equals(new OpenLayers.Pixel(50, 70)), "getCenterPixel() works correctly");
t.ok( bounds.getCenterLonLat().equals(new OpenLayers.LonLat(50, 70)), "getCenterLonLat() works correctly");
}
function test_getCenterLonLat(t) {
t.plan(7);
var bounds = new OpenLayers.Bounds(0, 10, 20, 60);
// set private centerLonLat to confirm that it is getting returned if set
bounds.centerLonLat = "foo";
t.eq(bounds.getCenterLonLat(), "foo", "returns cached value");
bounds.centerLonLat = null;
// unmodified
var center = bounds.getCenterLonLat();
t.eq(center.lon, 10, "unmodified: correct x");
t.eq(center.lat, 35, "unmodified: correct y");
// transformed
bounds.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));
center = bounds.getCenterLonLat();
t.eq(Math.round(center.lon), 1113195, "transformed: correct x");
t.eq(Math.round(center.lat), 4759314, "transformed: correct y");
// extended
bounds.extend(new OpenLayers.Bounds(-10000000, -10000000, 10000000, 10000000));
center = bounds.getCenterLonLat();
t.eq(center.lon, 0, "extended: correct x");
t.eq(center.lat, 0, "extended: correct y");
}
function test_Bounds_fromArray(t) {
t.plan( 7 );
var bbox = [1,2,3,4];
bounds = OpenLayers.Bounds.fromArray(bbox);
t.ok( bounds instanceof OpenLayers.Bounds, "new OpenLayers.Bounds returns Bounds object" );
@@ -418,7 +418,7 @@
t.eq( bounds.bottom, 2, "bounds.bottom is set correctly" );
t.eq( bounds.right, 3, "bounds.right is set correctly" );
t.eq( bounds.top, 4, "bounds.top is set correctly" );
// reverse axis order
var reverseBbox = bounds.toArray(true);
t.eq(reverseBbox, [2,1,4,3], "toArray with reverseAxisOrder set to true works as expected");
@@ -428,7 +428,7 @@
function test_Bounds_fromSize(t) {
t.plan( 5 );
var height = 15;
var width = 16;
var size = new OpenLayers.Size(width, height);
@@ -443,104 +443,138 @@
function test_Bounds_extend(t) {
t.plan( 9 );
// null bounds to start
var originalBounds = new OpenLayers.Bounds();
var bounds = originalBounds.clone();
//null bounds to start
bounds.extend(new OpenLayers.LonLat(4,5));
bounds.extend(new OpenLayers.LonLat(4,5));
t.ok(bounds.equals(new OpenLayers.Bounds(4,5,4,5)), "uninitialized bounds can be safely extended");
// extend with null obj
originalBounds = new OpenLayers.Bounds(10,20,50,80);
bounds = originalBounds.clone();
//null obj
bounds.extend(null);
bounds.extend(null);
t.ok(bounds.equals(originalBounds), "null to extend does not crash or change original bounds");
//obj with no classname
// obj with no classname
var object = {};
bounds.extend(object);
bounds.extend(object);
t.ok(bounds.equals(originalBounds), "extend() passing object with no classname does not crash or change original bounds")
//obj is bounds
//pushing all limits with bounds obj
// obj is bounds
// pushing all limits with bounds obj
var testBounds = new OpenLayers.Bounds(5, 10, 60, 90);
object = testBounds.clone();
bounds.extend(object);
t.ok(bounds.equals(testBounds), "extend by valid bounds, pushing all limits, correctly extends bounds");
//pushing no limits with bounds obj
// pushing no limits with bounds obj
bounds = originalBounds.clone();
testBounds = new OpenLayers.Bounds(15, 30, 40, 70);
object = testBounds.clone();
bounds.extend(object);
t.ok(bounds.equals(originalBounds), "extend by valid bounds, pushing no limits, correctly does not extend bounds");
// obj is lonlat
//left, bottom
// obj is lonlat
// left, bottom
bounds = originalBounds.clone();
object = new OpenLayers.LonLat(5, 10);
bounds.extend(object);
t.ok( ((bounds.left == object.lon) &&
(bounds.bottom == object.lat) &&
(bounds.right == originalBounds.right) &&
(bounds.top == originalBounds.top)), "obj lonlat to extends correclty modifies left and bottom");
//right, top
(bounds.top == originalBounds.top)), "obj lonlat to extends correctly modifies left and bottom");
// right, top
bounds = originalBounds.clone();
object = new OpenLayers.LonLat(60,90);
bounds.extend(object);
t.ok( ((bounds.left == originalBounds.left) &&
(bounds.bottom == originalBounds.bottom) &&
(bounds.right == object.lon) &&
(bounds.top == object.lat)), "obj lonlat to extends correclty modifies right and top");
// obj is point
//left, bottom
(bounds.top == object.lat)), "obj lonlat to extends correctly modifies right and top");
// obj is point
// left, bottom
bounds = originalBounds.clone();
object = new OpenLayers.Geometry.Point(5, 10);
bounds.extend(object);
t.ok( ((bounds.left == object.x) &&
(bounds.bottom == object.y) &&
(bounds.right == originalBounds.right) &&
(bounds.top == originalBounds.top)), "obj Point to extends correclty modifies left and bottom");
//right, top
(bounds.top == originalBounds.top)), "obj Point to extends correctly modifies left and bottom");
// right, top
bounds = originalBounds.clone();
object = new OpenLayers.Geometry.Point(60,90);
bounds.extend(object);
t.ok( ((bounds.left == originalBounds.left) &&
(bounds.bottom == originalBounds.bottom) &&
(bounds.right == object.x) &&
(bounds.top == object.y)), "obj Point to extends correclty modifies right and top");
(bounds.top == object.y)), "obj Point to extends correctly modifies right and top");
}
function test_Bounds_extendXY(t) {
t.plan(3);
// null bounds to start
var originalBounds = new OpenLayers.Bounds();
var bounds = originalBounds.clone();
bounds.extendXY(4, 5);
t.ok(bounds.equals(new OpenLayers.Bounds(4,5,4,5)), "uninitialized bounds can be safely extended");
// left, bottom
originalBounds = new OpenLayers.Bounds(10,20,50,80);
bounds = originalBounds.clone();
bounds.extendXY(5, 10);
t.ok( ((bounds.left == 5) &&
(bounds.bottom == 10) &&
(bounds.right == originalBounds.right) &&
(bounds.top == originalBounds.top)), "extendXY correctly modifies left and bottom");
// right, top
bounds = originalBounds.clone();
bounds.extendXY(60, 90);
t.ok( ((bounds.left == originalBounds.left) &&
(bounds.bottom == originalBounds.bottom) &&
(bounds.right == 60) &&
(bounds.top == 90)), "extendXY correctly modifies right and top");
}
function test_Bounds_wrapDateLine(t) {
t.plan( 13 );
var testBounds, wrappedBounds, desiredBounds;
var maxExtent = new OpenLayers.Bounds(-10,-10,10,10);
@@ -556,27 +590,27 @@
//exactly inside
//exactly inside
testBounds = exactBounds.clone();
wrappedBounds = testBounds.wrapDateLine(maxExtent);
t.ok(wrappedBounds.equals(exactBounds), "wrapping a bounds precisely within (equal to) maxextent does nothing");
//inside
//inside
testBounds = simpleBounds.clone();
wrappedBounds = testBounds.wrapDateLine(maxExtent);
t.ok(wrappedBounds.equals(simpleBounds), "wrapping a bounds within maxextent does nothing");
// LEFT //
//straddling left
testBounds = simpleBounds.add(-10,0);
wrappedBounds = testBounds.wrapDateLine(maxExtent);
t.ok(wrappedBounds.equals(testBounds), "wrapping a bounds that straddles the left of maxextent does nothing");
//left rightTolerance
testBounds = simpleBounds.add(-14,0);
wrappedBounds =
wrappedBounds =
testBounds.wrapDateLine(maxExtent, {'rightTolerance': 1} );
desiredBounds = simpleBounds.add(6,0);
t.ok(wrappedBounds.equals(desiredBounds), "wrapping a bounds rightTolerance left of maxextent works");
@@ -585,12 +619,12 @@
testBounds = exactBounds.add(-20,0);
wrappedBounds = testBounds.wrapDateLine(maxExtent);
t.ok(wrappedBounds.equals(exactBounds), "wrapping an exact bounds once left of maxextent works");
//left
testBounds = simpleBounds.add(-20,0);
wrappedBounds = testBounds.wrapDateLine(maxExtent);
t.ok(wrappedBounds.equals(simpleBounds), "wrapping a bounds once left of maxextent works");
//way left
testBounds = simpleBounds.add(-200,0);
wrappedBounds = testBounds.wrapDateLine(maxExtent);
@@ -603,24 +637,24 @@
wrappedBounds = testBounds.wrapDateLine(maxExtent);
desiredBounds = testBounds.add(-maxExtent.getWidth(), 0)
t.ok(wrappedBounds.equals(desiredBounds), "wrapping a bounds that straddles the right of maxextent moves extent to left side of the world");
//right leftTolerance
testBounds = simpleBounds.add(14,0);
wrappedBounds =
wrappedBounds =
testBounds.wrapDateLine(maxExtent, {'leftTolerance': 1} );
desiredBounds = simpleBounds.add(-6,0);
t.ok(wrappedBounds.equals(desiredBounds), "wrapping a bounds leftTolerance right of maxextent works");
//exactly right
testBounds = exactBounds.add(20,0);
wrappedBounds = testBounds.wrapDateLine(maxExtent);
t.ok(wrappedBounds.equals(exactBounds), "wrapping an exact bounds once right of maxextent works");
//right
testBounds = simpleBounds.add(20,0);
wrappedBounds = testBounds.wrapDateLine(maxExtent);
t.ok(wrappedBounds.equals(simpleBounds), "wrapping a bounds once right of maxextent works");
//way right
testBounds = simpleBounds.add(200,0);
wrappedBounds = testBounds.wrapDateLine(maxExtent);
@@ -632,20 +666,20 @@
function test_Bounds_transform(t) {
t.plan( 5 );
bounds = new OpenLayers.Bounds(10, -10, 20, 10);
bounds.transform(new OpenLayers.Projection("foo"), new OpenLayers.Projection("Bar"));
bounds.transform(new OpenLayers.Projection("foo"), new OpenLayers.Projection("Bar"));
t.eq(bounds.toBBOX(), "10,-10,20,10", "null transform okay");
bounds.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));
bounds.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));
t.eq(bounds.toBBOX(), "1113194.907778,-1118889.974702,2226389.815556,1118889.974702", "bounds for spherical mercator transform are correct");
bounds.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326"));
bounds.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326"));
t.eq(bounds.toBBOX(), "10,-10,20,10", "bounds for inverse spherical mercator transform are correct");
// transform with string
bounds = new OpenLayers.Bounds(10, -10, 20, 10);
bounds.transform("EPSG:4326", "EPSG:900913");
bounds.transform("EPSG:4326", "EPSG:900913");
t.eq(bounds.toBBOX(), "1113194.907778,-1118889.974702,2226389.815556,1118889.974702", "(string) bounds for spherical mercator transform are correct");
bounds.transform("EPSG:900913", "EPSG:4326");
bounds.transform("EPSG:900913", "EPSG:4326");
t.eq(bounds.toBBOX(), "10,-10,20,10", "(string) bounds for inverse spherical mercator transform are correct");
}
function test_Bounds_add(t) {
@@ -659,7 +693,7 @@
var b = new OpenLayers.Bounds(6,52,8,54);
t.ok( bounds.equals(b), "bounds is set correctly");
//null values
try {
bounds = testBounds.add(null, 50);
@@ -667,12 +701,12 @@
t.ok("exception thrown when passing null value to add()");
}
t.ok( testBounds.equals(origBounds), "testBounds is not modified by erroneous add operation (null x)");
try {
bounds = testBounds.add(5, null);
} catch(e) {
t.ok("exception thrown when passing null value to add()");
}
}
t.ok( testBounds.equals(origBounds), "testBounds is not modified by erroneous add operation (null y)");
}
@@ -680,7 +714,7 @@
t.plan(3);
origBounds = new OpenLayers.Bounds(1,2,3,4);
bounds = origBounds.scale(2);
bounds = origBounds.scale(2);
var b = new OpenLayers.Bounds(0,1,4,5);
t.ok(bounds.equals(b), "Bounds scale correctly with default origin at center")
-12
View File
@@ -101,18 +101,6 @@
map.removeControl(control);
map.setCenter(centerLL);
}
function test_uncapable(t) {
t.plan(1);
var control = new OpenLayers.Control.Geolocate({
geolocation: null,
bind: false
});
control.events.register('locationuncapable', null, function() {
t.ok(true,'uncapable browser fired locationuncapable event');
});
map.addControl(control);
control.activate();
}
function test_destroy(t) {
t.plan(1);
var control = new OpenLayers.Control.Geolocate({
+49 -2
View File
@@ -88,13 +88,13 @@
control = new OpenLayers.Control.LayerSwitcher();
map.addControl(control);
var wmsInput = OpenLayers.Util.getElement(control.id + "_input_" + layer.name);
var wmsInput = control.div.childNodes[0].childNodes[1].childNodes[0];
t.ok(wmsInput != null, "correctly makes an input for wms layer");
t.eq(wmsInput.type, "radio", "wms correctly made a radio button");
t.eq(wmsInput.name, control.id + "_baseLayers", "wms correctly named");
t.eq(wmsInput.value, layer.name, "wms correctly valued");
var markersInput = OpenLayers.Util.getElement(control.id + "_input_" + markers.name);
var markersInput = control.div.childNodes[0].childNodes[3].childNodes[0];
t.ok(markersInput != null, "correctly makes an input for markers layer");
t.eq(markersInput.type, "checkbox", "wms correctly made a radio button");
t.eq(markersInput.name, markers.name, "wms correctly named");
@@ -191,7 +191,54 @@
t.eq(control.div.childNodes[0].childNodes[0].style.display, "" , "Base layer display on when visble base layer");
}
// See e.g. https://github.com/openlayers/openlayers/issues/866
function test_Control_LayerSwitcher_validIds(t){
t.plan(2);
// setup
var layername = "Name with spaces & illegal characters * + ~ ` ' ? )",
map = new OpenLayers.Map("map", {
controls: [
new OpenLayers.Control.LayerSwitcher()
],
layers: [
new OpenLayers.Layer.WMS(
layername,
"../../img/blank.gif"
),
// add another layer with the same name, the generated id
// must be different
new OpenLayers.Layer.WMS(
layername,
"../../img/blank.gif"
)
]
});
var baselayerDiv = map.controls[0].div.childNodes[0].childNodes[1],
firstGeneratedInputId = baselayerDiv.childNodes[0].id,
secondGeneratedInputId = baselayerDiv.childNodes[1].id,
// legal ids start with a letter and are followed only by word
// characters (letters, digits, and underscores) plus the dash (-)
// This is only a subset of all allowed charcters inside of ids.
allowedIdChars = (/^[a-zA-Z]{1}[\w-]*$/g);
// tests
// validity
t.ok(
allowedIdChars.test(firstGeneratedInputId),
"id only contains letters, digits, underscores and dashes. It " +
"starts with a letter."
);
// uniqueness
t.ok(
firstGeneratedInputId !== secondGeneratedInputId,
"generated ids are different even for equal layernames"
);
// teardown
map.destroy();
}
</script>
</head>
+54 -64
View File
@@ -13,34 +13,27 @@
}
};
var options = {
geometryTypes: "bar"
documentDrag: true
};
var control = new OpenLayers.Control.ModifyFeature(layer, options);
t.ok(control.layer == layer,
"constructor sets layer correctly");
t.eq(control.selectControl.geometryTypes, "bar",
"constructor sets options correctly on feature handler");
t.eq(control.handlers.drag.documentDrag, true,
"constructor sets options correctly on drag handler");
t.eq(control.mode, OpenLayers.Control.ModifyFeature.RESHAPE,
"constructor initializes modification mode correctly");
control.destroy();
}
function test_destroy(t) {
t.plan(2);
t.plan(1);
var map = new OpenLayers.Map("map");
var layer = new OpenLayers.Layer.Vector();
map.addLayer(layer);
var control = new OpenLayers.Control.ModifyFeature(layer);
control.selectControl.destroy = function() {
t.ok(true,
"control.destroy calls destroy on select control");
}
control.dragControl.destroy = function() {
t.ok(true,
"control.destroy calls destroy on feature handler");
}
control.destroy();
t.eq(control.layer, null, "Layer reference removed on destroy.");
map.destroy();
}
@@ -51,11 +44,11 @@
map.addLayer(layer);
var control = new OpenLayers.Control.ModifyFeature(layer);
map.addControl(control);
t.ok(!control.selectControl.active,
"select control is not active prior to activating control");
t.ok(!control.handlers.drag.active,
"drag handler is not active prior to activating control");
control.activate();
t.ok(control.selectControl.active,
"select control is active after activating control");
t.ok(control.handlers.drag.active,
"drag handler is active after activating control");
map.destroy();
}
@@ -99,7 +92,8 @@
);
// mock up vertex deletion
control.dragControl.feature = point;
var origGetFeatureFromEvent = layer.getFeatureFromEvent;
layer.getFeatureFromEvent = function() { return point; };
control.feature = poly;
// we cannot use selectFeature since the control is not part of a map
control._originalGeometry = poly.geometry.clone();
@@ -139,17 +133,18 @@
t.eq(control.feature.state, OpenLayers.State.UPDATE, "feature state set to update");
// now make sure nothing happens if the vertex is mid-drag
control.dragControl.handlers.drag.dragging = true;
control.handlers.drag.dragging = true;
control.handleKeypress({keyCode:delKey});
// clean up
layer.getFeatureFromEvent = origGetFeatureFromEvent;
control.destroy();
layer.destroy();
}
function test_onUnSelect(t) {
t.plan(6);
t.plan(5);
var layer = new OpenLayers.Layer.Vector();
var control = new OpenLayers.Control.ModifyFeature(layer);
var fakeFeature = {'id':'myid'};
@@ -159,7 +154,6 @@
layer.events.on({"afterfeaturemodified": function(event) {
t.eq(event.feature, fakeFeature, "afterfeaturemodified triggered");
}});
control.dragControl.deactivate = function() { t.ok(true, "Deactivate called on drag control"); }
control.onModificationEnd = function (feature) { t.eq(feature.id, fakeFeature.id, "onModificationEnd got feature.") }
layer.removeFeatures = function(verts) {
t.ok(verts == 'a', "Normal verts removed correctly");
@@ -190,10 +184,6 @@
// If a feature is to be modified, control.selectFeature gets called.
// We want this test to fail if selectFeature gets called.
var modified = false;
var _ = OpenLayers.Control.ModifyFeature.prototype.selectFeature;
OpenLayers.Control.ModifyFeature.prototype.selectFeature = function() {
modified = true;
}
var control = new OpenLayers.Control.ModifyFeature(layer);
map.addControl(control);
@@ -202,17 +192,15 @@
// register a listener that will stop feature modification
layer.events.on({"beforefeaturemodified": function() {return false}});
// we can initiate feature modification by selecting a feature with
// the control's select feature control
control.selectControl.select(feature);
// we can initiate feature modification by programmatically selecting
// a feature
control.selectFeature(feature);
if(modified) {
t.fail("selectFeature called, prepping feature for modification");
} else {
t.ok(true, "the beforefeaturemodified listener stopped feature modification");
}
OpenLayers.Control.ModifyFeature.prototype.selectFeature = _;
}
function test_selectFeature(t) {
@@ -228,7 +216,6 @@
t.ok(obj.feature == fakeFeature, "beforefeaturemodified triggered");
};
layer.events.on({"beforefeaturemodified": callback});
control.dragControl.activate = function() { t.ok(true, "drag Control activated"); }
control.onModificationStart = function(feature) { t.eq(feature.id, fakeFeature.id, "On Modification Start called with correct feature."); }
// Start of testing
@@ -262,7 +249,7 @@
control.selectFeature(fakeFeature);
control.vertices = ['a'];
control.virtualVertices = ['b'];
control.virtualVertices = [{destroy: function() {}}];
layer.addFeatures = function(features) {}
@@ -283,7 +270,7 @@
}
function test_resetVertices(t) {
t.plan(21);
t.plan(20);
var layer = new OpenLayers.Layer.Vector();
var control = new OpenLayers.Control.ModifyFeature(layer);
var point = new OpenLayers.Geometry.Point(5,6);
@@ -340,18 +327,6 @@
t.eq(control.vertices.length, 0, "No vertices when both resizing and reshaping (RESIZE|RESHAPE)");
t.eq(control.virtualVertices.length, 0, "No virtual vertices when both resizing and reshaping (RESIZE|RESHAPE)");
control.dragControl.feature = new OpenLayers.Feature.Vector(polygon);
control.dragControl.map = {};
control.dragControl.map.div = {};
control.dragControl.map.div.style = {};
control.dragControl.map.viewPortDiv = "foo";
control.dragControl.handlers.drag.deactivate = function() {
this.active = false;
}
control.resetVertices();
t.ok(!control.dragControl.handlers.drag.active, "resetVertices deactivates drag handler");
control.dragControl.map = null;
control.destroy();
layer.destroy();
}
@@ -512,17 +487,19 @@
var control = new OpenLayers.Control.ModifyFeature(layer);
map.addControl(control);
control.selectControl.deactivate = function() {
control.handlers.keyboard.deactivate = function() {
t.ok(true,
"control.deactivate calls deactivate on select control");
"control.deactivate calls deactivate on keyboard handler");
}
control.dragControl.deactivate = function() {
control.handlers.drag.deactivate = function() {
t.ok(true,
"control.deactivate calls deactivate on drag control");
"control.deactivate calls deactivate on drag handler");
}
control.active = true;
control.deactivate();
control.handlers.keyboard.deactivate = OpenLayers.Handler.Keyboard.prototype.deactivate;
control.handlers.drag.deactivate = OpenLayers.Handler.Drag.prototype.deactivate;
map.destroy();
}
@@ -609,14 +586,17 @@
layer.events.on({"featuremodified": function(event) {
t.eq(event.feature.id, poly.id, "featuremodified triggered");
}});
control.onModification = function(feature) {
t.eq(feature.id, poly.id,
"onModification called with the right feature on vertex delete");
};
point.geometry.parent = poly.geometry;
control.dragControl.feature = point;
origGetFeatureFromEvent = layer.getFeatureFromEvent;
layer.getFeatureFromEvent = function() { return point; };
control.handleKeypress({keyCode:46});
layer.drawFeature = oldDraw;
layer.getFeatureFromEvent = origGetFeatureFromEvent;
map.destroy();
}
@@ -694,7 +674,7 @@
function test_standalone(t) {
t.plan(18);
t.plan(17);
var map = new OpenLayers.Map("map");
var layer = new OpenLayers.Layer.Vector();
@@ -733,7 +713,6 @@
// activate control
control.activate();
t.eq(control.active, true, "[activate] control activated");
t.eq(control.selectControl, null, "[activate] no select control");
// manually select feature for editing
control.selectFeature(f1);
@@ -761,22 +740,19 @@
t.ok(log[0].feature === f2, "[deactivate] correct feature");
t.eq(log[0].modified, false, "[deactivate] feature not actually modified");
// reactivate control and select a point feature to see if we can drag
// another point feature;
control.activate();
control.selectFeature(f3);
control.dragControl.handlers.feature.triggerCallback("mousemove", "in", [f4]);
t.eq(control.dragControl.handlers.drag.active, false, "cannot drag unselected feature f4");
control.dragControl.handlers.feature.triggerCallback("mousemove", "in", [f3]);
t.eq(control.dragControl.handlers.drag.active, true, "can drag selected feature f3");
// select the polygon feature to make sure that we can drag vertices and
// virtual vertices
control.selectFeature(f2);
control.dragControl.handlers.feature.triggerCallback("mousemove", "in", [control.vertices[0]]);
t.eq(control.dragControl.handlers.drag.active, true, "can drag vertex of feature f2");
control.dragControl.handlers.feature.triggerCallback("mousemove", "in", [control.virtualVertices[0]]);
t.eq(control.dragControl.handlers.drag.active, true, "can drag virtual vertex of feature f2");
var origGetFeatureFromEvent = layer.getFeatureFromEvent;
layer.getFeatureFromEvent = function() { return control.vertices[0]; };
control.handlers.drag.callbacks.down.call(control, new OpenLayers.Pixel(0,0));
t.ok(control.vertex === control.vertices[0], "can drag vertex of feature f2");
t.ok(control.feature === f2, "dragging a vertex does not change the selected feature");
layer.getFeatureFromEvent = function() { return control.virtualVertices[0]; };
control.handlers.drag.callbacks.down.call(control, new OpenLayers.Pixel(0,0));
t.ok(control.vertex === control.virtualVertices[0], "can drag virtual vertex of feature f2");
t.ok(control.feature === f2, "dragging a vertex does not change the selected feature");
layer.getFeatureFromEvent = origGetFeatureFromEvent;
control.deactivate();
map.destroy();
@@ -826,6 +802,20 @@
control.destroy();
}
function test_moveLayerToTop_moveLayerBack(t) {
t.plan(2);
var map = new OpenLayers.Map("map");
var layer1 = new OpenLayers.Layer.Vector();
var layer2 = new OpenLayers.Layer.Vector();
map.addLayers([layer1, layer2]);
var control = new OpenLayers.Control.ModifyFeature(layer1);
map.addControl(control);
control.activate();
t.ok(layer1.div.style.zIndex > layer2.div.style.zIndex, "layer raised so events don't get swallowed");
control.deactivate();
t.ok(layer1.div.style.zIndex < layer2.div.style.zIndex, 'layer order restored on deactivation');
}
</script>
</head>
<body>
+1
View File
@@ -148,6 +148,7 @@
var nav = new OpenLayers.Control.Navigation({zoomWheelEnabled: false});
var map = new OpenLayers.Map({
div: "map",
zoomMethod: null,
controls: [nav],
layers: [
new OpenLayers.Layer(null, {isBaseLayer: true})
+1 -1
View File
@@ -170,7 +170,7 @@
function test_clear(t) {
t.plan(7);
var map = new OpenLayers.Map("map");
var map = new OpenLayers.Map("map", {zoomMethod: null});
var layer = new OpenLayers.Layer(
"test", {isBaseLayer: true}
);
+5 -3
View File
@@ -77,7 +77,7 @@
function test_Control_PanZoomBar_onButtonClick (t) {
t.plan(2);
map = new OpenLayers.Map('map', {controls:[]});
map = new OpenLayers.Map('map', {controls:[], zoomMethod: null});
var layer = new OpenLayers.Layer.WMS("Test Layer",
"http://octo.metacarta.com/cgi-bin/mapserv?",
{map: "/mapdata/vmap_wms.map", layers: "basic"});
@@ -97,7 +97,8 @@
t.plan(1);
map = new OpenLayers.Map('map', {
controls: [],
fractionalZoom: true
fractionalZoom: true,
zoomMethod: null
});
var layer = new OpenLayers.Layer.WMS("Test Layer", "http://octo.metacarta.com/cgi-bin/mapserv?", {
map: "/mapdata/vmap_wms.map",
@@ -127,7 +128,8 @@
var map = new OpenLayers.Map('map', {
controls: [],
fractionalZoom: true
fractionalZoom: true,
zoomMethod: null
});
var layer = new OpenLayers.Layer.WMS("Test Layer", "http://octo.metacarta.com/cgi-bin/mapserv?", {
map: "/mapdata/vmap_wms.map",
+16 -16
View File
@@ -45,8 +45,8 @@
});
var log = [];
control.applyTransform = function(transform) {
log.push(transform);
map.applyTransform = function(x, y, scale) {
log.push([x, y, scale]);
}
map.layerContainerOriginPx = {
@@ -58,12 +58,12 @@
};
var cases = [
{x: 100, y: 60, scale: 1, transform: "translate(0px, 10px) scale(1)"},
{x: 150, y: 60, scale: 1, transform: "translate(50px, 10px) scale(1)"},
{x: 150, y: 60, scale: 2, transform: "translate(-100px, -90px) scale(2)"},
{x: 50, y: 20, scale: 2.5, transform: "translate(-275px, -180px) scale(2.5)"},
{x: 150, y: 60, scale: 2, transform: "translate(-100px, -90px) scale(2)"},
{x: 50, y: 20, scale: 0.25, transform: "translate(63px, 45px) scale(0.25)"}
{x: 100, y: 60, scale: 1, transform: [-50, -40, 1]},
{x: 150, y: 60, scale: 1, transform: [0, -40, 1]},
{x: 150, y: 60, scale: 2, transform: [-150, -140, 2]},
{x: 50, y: 20, scale: 2.5, transform: [-325, -230, 2.5]},
{x: 150, y: 60, scale: 2, transform: [-150, -140, 2]},
{x: 50, y: 20, scale: 0.25, transform: [13, -5, 0.25]}
];
var len = cases.length;
@@ -95,23 +95,23 @@
var centerPx = map.getPixelFromLonLat(map.getCenter());
control.pinchStart = function(evt, pinchData) {
t.eq(control.pinchOrigin, centerPx, "center preserved");
t.eq(control.currentCenter, centerPx, "center preserved");
t.eq(map.layerContainerOriginPx, {x: 0, y: 0}, "center preserved");
t.eq(map.getPixelFromLonLat(map.getCenter()), centerPx, "center preserved");
}
control.pinchStart(null);
var log = [];
control.applyTransform = function(transform) {
log.push(transform);
map.applyTransform = function(x, y, scale) {
log.push([x, y, scale]);
}
control.pinchOrigin = map.getPixelFromLonLat(map.getCenter());
var cases = [
{scale: 1, transform: "translate(0px, 0px) scale(1)"},
{scale: 2, transform: "translate(-128px, -128px) scale(2)"},
{scale: 2.5, transform: "translate(-192px, -192px) scale(2.5)"},
{scale: 0.25, transform: "translate(96px, 96px) scale(0.25)"}
{scale: 1, transform: [0, 0, 1]},
{scale: 2, transform: [-128, -128, 2]},
{scale: 2.5, transform: [-192, -192, 2.5]},
{scale: 0.25, transform: [96, 96, 0.25]}
];
var len = cases.length;
+2 -2
View File
@@ -22,7 +22,7 @@
control = new OpenLayers.Control.Scale('scale');
t.ok( control instanceof OpenLayers.Control.Scale, "new OpenLayers.Control returns object" );
map = new OpenLayers.Map('map');
map = new OpenLayers.Map('map', {zoomMethod: null});
layer = new OpenLayers.Layer.WMS('Test Layer', "http://octo.metacarta.com/cgi-bin/mapserv", {map: '/mapdata/vmap_wms.map', layers: 'basic', format: 'image/jpeg'});
map.addLayer(layer);
map.zoomTo(0);
@@ -38,7 +38,7 @@
t.plan(2);
control = new OpenLayers.Control.Scale();
t.ok( control instanceof OpenLayers.Control.Scale, "new OpenLayers.Control returns object" );
map = new OpenLayers.Map('map');
map = new OpenLayers.Map('map', {zoomMethod: null});
layer = new OpenLayers.Layer.WMS('Test Layer', "http://octo.metacarta.com/cgi-bin/mapserv", {map: '/mapdata/vmap_wms.map', layers: 'basic', format: 'image/jpeg'});
map.addLayer(layer);
map.zoomTo(0);
+8 -7
View File
@@ -128,27 +128,28 @@
function test_zoomOut(t) {
t.plan(1);
var map = new OpenLayers.Map(document.body);
var map = new OpenLayers.Map('map', {zoomMethod: null});
var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"http://labs.metacarta.com/wms/vmap0",
{layers: 'basic'} );
map.addLayer(layer);
map.setCenter(new OpenLayers.LonLat(0, 0), 5);
var origSetTimeout = window.setTimeout;
window.setTimeout = function(fn) { fn(); return 'id'; };
var control = new OpenLayers.Control.TouchNavigation();
map.addControl(control);
var handler = control.handlers.click;
handler.touchstart({xy: new OpenLayers.Pixel(1 ,1), touches: ["foo", "bar"]});
handler.touchend({});
t.delay_call(1, function() {
t.eq(map.getZoom(), 4, "Did we zoom out?");
// tear down
map.destroy();
});
t.eq(map.getZoom(), 4, "Did we zoom out?");
// tear down
map.destroy();
window.setTimeout = origSetTimeout;
}
</script>
</head>
<body>
<div id="map" style="width:512px;height:256px"></div>
</body>
</html>
+4 -2
View File
@@ -43,7 +43,8 @@
var map = new OpenLayers.Map({
div: "map",
layers: [new OpenLayers.Layer(null, {isBaseLayer: true})]
layers: [new OpenLayers.Layer(null, {isBaseLayer: true})],
zoomMethod: null
});
var control = new OpenLayers.Control.Zoom();
map.addControl(control);
@@ -60,7 +61,8 @@
var map = new OpenLayers.Map({
div: "map",
layers: [new OpenLayers.Layer(null, {isBaseLayer: true})]
layers: [new OpenLayers.Layer(null, {isBaseLayer: true})],
zoomMethod: null
});
var control = new OpenLayers.Control.Zoom();
map.addControl(control);
+3 -1
View File
@@ -23,6 +23,7 @@
function test_zoomBox(t) {
t.plan(4);
var map = new OpenLayers.Map("map", {
zoomMethod: null,
layers: [new OpenLayers.Layer("", {isBaseLayer: true})],
center: [0, 0],
zoom: 1
@@ -37,7 +38,8 @@
t.eq(map.getZoom(), 2, "not zoomed with zoomOnClick set to false");
map.zoomToMaxExtent();
control.zoomBox(new OpenLayers.Bounds(128, 64, 256, 128));
// pixel bounds bottom > top
control.zoomBox(new OpenLayers.Bounds(128, 128, 256, 64));
t.eq(map.getCenter().toShortString(), "-45, 22.5", "centered to box center");
t.eq(map.getZoom(), 3, "zoomed to box extent");
+245 -6
View File
@@ -3,6 +3,27 @@
<script src="../OLLoader.js"></script>
<script type="text/javascript">
var flatPoints;
var floats, smallFloats, encodedFloats;
var signedIntegers, encodedSignedIntegers;
var unsignedIntegers, encodedUnsignedIntegers;
function resetTestingData() {
flatPoints = [38.50000, -120.20000,
40.70000, -120.95000,
43.25200, -126.45300];
floats = [0.00, 0.15, -0.01, -0.16, 0.16, 0.01];
smallFloats = [0.00000, 0.00015, -0.00001, -0.00016, 0.00016, 0.00001];
encodedFloats = '?]@^_@A';
signedIntegers = [0, 15, -1, -16, 16, 1];
encodedSignedIntegers = '?]@^_@A';
unsignedIntegers = [0, 30, 1, 31, 32, 2, 174];
encodedUnsignedIntegers = '?]@^_@AmD';
}
var basePoints = new Array(
new Array(3850000, -12020000),
new Array(4070000, -12095000),
@@ -10,12 +31,9 @@
);
var points = [
new OpenLayers.Geometry.Point(basePoints[0][1] * 1e-5,
basePoints[0][0] * 1e-5),
new OpenLayers.Geometry.Point(basePoints[1][1] * 1e-5,
basePoints[1][0] * 1e-5),
new OpenLayers.Geometry.Point(basePoints[2][1] * 1e-5,
basePoints[2][0] * 1e-5)
new OpenLayers.Geometry.Point(-120.200, 38.500),
new OpenLayers.Geometry.Point(-120.950, 40.700),
new OpenLayers.Geometry.Point(-126.453, 43.252)
];
var singlePoint = new OpenLayers.Feature.Vector(points[0]);
@@ -126,6 +144,227 @@
t.eq(format.encode(basePoints, 2), encoded);
}
function test_encodeDeltas_returns_expected_value(t) {
t.plan(1);
resetTestingData();
var format = new OpenLayers.Format.EncodedPolyline();
t.eq(format.encodeDeltas(flatPoints, 2), encoded);
}
function test_decodeDeltas_returns_expected_value(t) {
t.plan(1);
resetTestingData();
var format = new OpenLayers.Format.EncodedPolyline();
t.eq(format.decodeDeltas(encoded, 2), flatPoints);
}
function test_encodeFloats_returns_expected_value(t) {
t.plan(3);
resetTestingData();
var format = new OpenLayers.Format.EncodedPolyline();
t.eq(format.encodeFloats(smallFloats), encodedFloats);
resetTestingData();
t.eq(format.encodeFloats(smallFloats, 1e5), encodedFloats);
t.eq(format.encodeFloats(floats, 1e2), encodedFloats);
}
function test_decodeFloats_returns_expected_value(t) {
t.plan(3);
resetTestingData();
var format = new OpenLayers.Format.EncodedPolyline();
t.eq(format.decodeFloats(encodedFloats), smallFloats);
t.eq(format.decodeFloats(encodedFloats, 1e5), smallFloats);
t.eq(format.decodeFloats(encodedFloats, 1e2), floats);
}
function test_encodeSignedIntegers_returns_expected_value(t) {
t.plan(1);
resetTestingData();
var format = new OpenLayers.Format.EncodedPolyline();
t.eq(format.encodeSignedIntegers(
signedIntegers), encodedSignedIntegers);
}
function test_decodeSignedIntegers_returns_expected_value(t) {
t.plan(1);
resetTestingData();
var format = new OpenLayers.Format.EncodedPolyline();
t.eq(format.decodeSignedIntegers(
encodedSignedIntegers), signedIntegers);
}
function test_encodeUnsignedIntegers_returns_expected_value(t) {
t.plan(1);
resetTestingData();
var format = new OpenLayers.Format.EncodedPolyline();
t.eq(format.encodeUnsignedIntegers(
unsignedIntegers), encodedUnsignedIntegers);
}
function test_decodeUnsignedIntegers_returns_expected_value(t) {
t.plan(1);
resetTestingData();
var format = new OpenLayers.Format.EncodedPolyline();
t.eq(format.decodeUnsignedIntegers(
encodedUnsignedIntegers), unsignedIntegers);
}
function test_encodeFloat_returns_expected_value(t) {
t.plan(12);
resetTestingData();
var format = new OpenLayers.Format.EncodedPolyline();
t.eq(format.encodeFloat(0.00000), '?');
t.eq(format.encodeFloat(-0.00001), '@');
t.eq(format.encodeFloat(0.00001), 'A');
t.eq(format.encodeFloat(-0.00002), 'B');
t.eq(format.encodeFloat(0.00002), 'C');
t.eq(format.encodeFloat(0.00015), ']');
t.eq(format.encodeFloat(-0.00016), '^');
t.eq(format.encodeFloat(-0.1, 10), '@');
t.eq(format.encodeFloat(0.1, 10), 'A');
t.eq(format.encodeFloat(16 * 32 / 1e5), '__@');
t.eq(format.encodeFloat(16 * 32 * 32 / 1e5), '___@');
// from the "Encoded Polyline Algorithm Format" page at Google
t.eq(format.encodeFloat(-179.9832104), '`~oia@');
}
function test_decodeFloat_returns_expected_value(t) {
t.plan(12);
resetTestingData();
var format = new OpenLayers.Format.EncodedPolyline();
t.eq(format.decodeFloat('?'), 0.00000);
t.eq(format.decodeFloat('@'), -0.00001);
t.eq(format.decodeFloat('A'), 0.00001);
t.eq(format.decodeFloat('B'), -0.00002);
t.eq(format.decodeFloat('C'), 0.00002);
t.eq(format.decodeFloat(']'), 0.00015);
t.eq(format.decodeFloat('^'), -0.00016);
t.eq(format.decodeFloat('@', 10), -0.1);
t.eq(format.decodeFloat('A', 10), 0.1);
t.eq(format.decodeFloat('__@'), 16 * 32 / 1e5);
t.eq(format.decodeFloat('___@'), 16 * 32 * 32 / 1e5);
// from the "Encoded Polyline Algorithm Format" page at Google
t.eq(format.decodeFloat('`~oia@'), -179.98321);
}
function test_encodeSignedInteger_returns_expected_value(t) {
t.plan(10);
resetTestingData();
var format = new OpenLayers.Format.EncodedPolyline();
t.eq(format.encodeSignedInteger(0), '?');
t.eq(format.encodeSignedInteger(-1), '@');
t.eq(format.encodeSignedInteger(1), 'A');
t.eq(format.encodeSignedInteger(-2), 'B');
t.eq(format.encodeSignedInteger(2), 'C');
t.eq(format.encodeSignedInteger(15), ']');
t.eq(format.encodeSignedInteger(-16), '^');
t.eq(format.encodeSignedInteger(16), '_@');
t.eq(format.encodeSignedInteger(16 * 32), '__@');
t.eq(format.encodeSignedInteger(16 * 32 * 32), '___@');
}
function test_decodeSignedInteger_returns_expected_value(t) {
t.plan(10);
resetTestingData();
var format = new OpenLayers.Format.EncodedPolyline();
t.eq(format.decodeSignedInteger('?'), 0);
t.eq(format.decodeSignedInteger('@'), -1);
t.eq(format.decodeSignedInteger('A'), 1);
t.eq(format.decodeSignedInteger('B'), -2);
t.eq(format.decodeSignedInteger('C'), 2);
t.eq(format.decodeSignedInteger(']'), 15);
t.eq(format.decodeSignedInteger('^'), -16);
t.eq(format.decodeSignedInteger('__@'), 16 * 32);
t.eq(format.decodeSignedInteger('___@'), 16 * 32 * 32);
t.eq(format.decodeSignedInteger('_@'), 16);
}
function test_encodeUnsignedInteger_returns_expected_value(t) {
t.plan(10);
var format = new OpenLayers.Format.EncodedPolyline();
t.eq(format.encodeUnsignedInteger(0), '?');
t.eq(format.encodeUnsignedInteger(1), '@');
t.eq(format.encodeUnsignedInteger(2), 'A');
t.eq(format.encodeUnsignedInteger(30), ']');
t.eq(format.encodeUnsignedInteger(31), '^');
t.eq(format.encodeUnsignedInteger(32), '_@');
t.eq(format.encodeUnsignedInteger(32 * 32), '__@');
t.eq(format.encodeUnsignedInteger(5 * 32 * 32), '__D');
t.eq(format.encodeUnsignedInteger(32 * 32 * 32), '___@');
// from the "Encoded Polyline Algorithm Format" page at Google
t.eq(format.encodeUnsignedInteger(174), 'mD');
}
function test_decodeUnsignedInteger_returns_expected_value(t) {
t.plan(10);
var format = new OpenLayers.Format.EncodedPolyline();
t.eq(format.decodeUnsignedInteger('?'), 0);
t.eq(format.decodeUnsignedInteger('@'), 1);
t.eq(format.decodeUnsignedInteger('A'), 2);
t.eq(format.decodeUnsignedInteger(']'), 30);
t.eq(format.decodeUnsignedInteger('^'), 31);
t.eq(format.decodeUnsignedInteger('_@'), 32);
t.eq(format.decodeUnsignedInteger('__@'), 32 * 32);
t.eq(format.decodeUnsignedInteger('__D'), 5 * 32 * 32);
t.eq(format.decodeUnsignedInteger('___@'), 32 * 32 * 32);
// from the "Encoded Polyline Algorithm Format" page at Google
t.eq(format.decodeUnsignedInteger('mD'), 174);
}
</script>
</head>
<body>
+2 -2
View File
@@ -49,8 +49,8 @@
function test_read_exception(t) {
t.plan(1);
var text = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' +
'<!DOCTYPE ServiceExceptionReport SYSTEM "http://mapstory.dev.opengeo.org:80/geoserver/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd">' +
'<ServiceExceptionReport version="1.1.1" > <ServiceException code="LayerNotDefined" locator="MapLayerInfoKvpParser">' +
'<!DOCTYPE ServiceExceptionReport SYSTEM "http://schemas.opengis.net/wms/1.1.1/WMS_exception_1_1_1.dtd">' +
'<ServiceExceptionReport version="1.1.1" > <ServiceException code="LayerNotDefined">' +
'geonode:_map_107_annotations: no such layer on this server' +
'</ServiceException></ServiceExceptionReport>';
var format = new OpenLayers.Format.WMSDescribeLayer();
+6 -7
View File
@@ -257,24 +257,23 @@
var cases = [{
got: dist({x: 0, y: 0}, {x1: 0, y1: 1, x2: 1, y2: 1}),
expected: {distance: 1, x: 0, y: 1}
expected: {distance: 1, x: 0, y: 1, along: 0}
}, {
got: dist({x: 0, y: 0}, {x1: -1, y1: -1, x2: 0, y2: -1}),
expected: {distance: 1, x: 0, y: -1}
expected: {distance: 1, x: 0, y: -1, along: 1}
}, {
got: dist({x: 0, y: 0}, {x1: -1, y1: -1, x2: 1, y2: 1}),
expected: {distance: 0, x: 0, y: 0}
expected: {distance: 0, x: 0, y: 0, along: 0.5}
}, {
got: dist({x: 1, y: 1}, {x1: 2, y1: 0, x2: 2, y2: 3}),
expected: {distance: 1, x: 2, y: 1}
expected: {distance: 1, x: 2, y: 1, along: 1/3.}
}, {
got: dist({x: -1, y: -1}, {x1: -2, y1: -2, x2: -1, y2: -3}),
expected: {distance: Math.sqrt(2), x: -2, y: -2}
expected: {distance: Math.sqrt(2), x: -2, y: -2, along: 0}
}, {
got: dist({x: -1, y: 1}, {x1: -3, y1: 1, x2: -1, y2: 3}),
expected: {distance: Math.sqrt(2), x: -2, y: 2}
expected: {distance: Math.sqrt(2), x: -2, y: 2, along: 0.5}
}];
t.plan(cases.length);
for(var i=0; i<cases.length; ++i) {
t.eq(cases[i].got, cases[i].expected, "case " + i);
+58
View File
@@ -669,6 +669,64 @@
map.destroy();
}
function test_touchstart(t) {
// a test to verify that the touchstart function does
// unregister the mouse listeners when it's called the
// first time
t.plan(7);
// set up
var map = new OpenLayers.Map("map", {
controls: []
});
var control = new OpenLayers.Control({});
var handler = new OpenLayers.Handler.Click(control, {});
control.handler = handler;
map.addControl(control);
handler.activate();
function allRegistered() {
var eventTypes = ['mousedown', 'mouseup', 'click', 'dblclick'],
eventType,
listeners,
listener,
flag;
for(var i=0, ilen=eventTypes.length; i<ilen; i++) {
flag = false;
eventType = eventTypes[i];
listeners = map.events.listeners[eventType];
for(var j=0, jlen=listeners.length; j<jlen; j++) {
listener = listeners[j];
if(listener.func === handler[eventType] && listener.obj === handler) {
flag = true;
break;
}
}
if(!flag) {
return false;
}
}
return true;
}
// test
t.ok(allRegistered(), 'mouse listeners are registered');
handler.touchstart({xy: new OpenLayers.Pixel(0, 0)});
t.eq(map.events.listeners.mousedown.length, 0,"mousedown is not registered");
t.eq(map.events.listeners.mouseup.length, 0,"mouseup is not registered");
t.eq(map.events.listeners.click.length, 0,"click is not registered");
t.eq(map.events.listeners.dblclick.length, 0,"dblclick is not registered");
t.ok(handler.touch, 'handler.touch is set');
handler.deactivate();
t.ok(!handler.touch, 'handler.touch is not set');
map.destroy();
}
</script>
</head>
<body>
+6 -1
View File
@@ -288,7 +288,7 @@
// "touchend" events set expected states in the drag handler.
// We also verify that we prevent the default as appropriate.
t.plan(14);
t.plan(19);
// set up
@@ -318,6 +318,11 @@
t.eq(h.start.y, 0, '[touchstart] start.y is correct');
t.eq(log.length, 1, '[touchstart] one item in log');
t.ok(log[0] === e, "touchstart", '[touchstart] event is stopped');
t.eq(m.events.listeners.mousedown.length, 0,"mousedown is not registered");
t.eq(m.events.listeners.mouseup.length, 0,"mouseup is not registered");
t.eq(m.events.listeners.mousemove.length, 0,"mousemove is not registered");
t.eq(m.events.listeners.click.length, 0,"click is not registered");
t.eq(m.events.listeners.mouseout.length, 0,"mouseout is not registered");
e = {xy: new Px(1, 1)};
m.events.triggerEvent('touchmove', e);
+44 -14
View File
@@ -280,9 +280,10 @@
handler.mousedown = function() {}; // mock mousedown
handler.activate();
var eventTypes = ['mousedown', 'mouseup', 'mousemove', 'click', 'dblclick'];
function allRegistered() {
var eventTypes = ['mousedown', 'mouseup', 'mousemove', 'click', 'dblclick'],
eventType,
var eventType,
listeners,
listener,
flag;
@@ -305,21 +306,18 @@
}
function noneRegistered() {
var eventTypes = ['mousedown', 'mouseup', 'mousemove', 'click', 'dblclick'],
eventType,
listeners,
listener;
var eventType,
times,
flag = false;
for(var i=0, ilen=eventTypes.length; i<ilen; i++) {
eventType = eventTypes[i];
listeners = map.events.listeners[eventType];
for(var j=0, jlen=listeners.length; j<jlen; j++) {
listener = listeners[j];
if(listener.func === handler[eventType] && listener.obj === handler) {
return false;
}
times = map.events.listeners[eventType].length;
if (times != 0) {
t.fail(eventType + " is registered " + times + " times");
flag = true;
}
}
return true;
return !flag;
}
// test
@@ -564,10 +562,10 @@
handler = new OpenLayers.Handler.Feature(
control, layer, callbacks, {clickTolerance: 4});
handler.activate();
handler.down = {x: 0, y: 0};
// distance between down and up is 1, which is
// lower than clickTolerance so "click" should trigger
handler.down = {x: 0, y: 0};
handler.up = {x: 1, y: 0};
clicks = 0;
map.events.triggerEvent("click", evtPx);
@@ -575,6 +573,7 @@
// distance between down and up is 4, which is
// equal to clickTolerance so "click" should trigger
handler.down = {x: 0, y: 0}; // cached handler.down cleared (#857)
handler.up = {x: 0, y: 4};
clicks = 0;
map.events.triggerEvent("click", evtPx);
@@ -582,6 +581,7 @@
// distance between down and up is 5, which is
// greater than clickTolerance so "click" should not trigger
handler.down = {x: 0, y: 0}; // cached handler.down cleared (#857)
handler.up = {x: 5, y: 0};
clicks = 0;
map.events.triggerEvent("click", evtPx);
@@ -660,6 +660,36 @@
}
function test_clear_event_position_cache(t) {
t.plan(2);
var map, control, layer, feature, evtPx;
map = new OpenLayers.Map('map', {controls: []});
control = new OpenLayers.Control();
map.addControl(control);
layer = new OpenLayers.Layer();
layer.getFeatureFromEvent = function(evt) { return feature; };
map.addLayer(layer);
feature = new OpenLayers.Feature.Vector();
feature.layer = layer;
evtPx = {
xy: new OpenLayers.Pixel(Math.random(), Math.random()),
type: "click"
};
handler = new OpenLayers.Handler.Feature(
control, layer, {}, {});
handler.activate();
handler.down = {x: 0, y: 0};
handler.up = {x: 1, y: 0};
map.events.triggerEvent("click", evtPx);
t.eq(handler.down, null, "cached mousedown position is cleared after handling click");
t.eq(handler.up, null, "cached mouseup position is cleared after handling click")
}
</script>
</head>
<body>
+8 -5
View File
@@ -115,12 +115,13 @@
}
function test_Handler_MouseWheel_cumulative(t) {
t.plan(1);
t.plan(2);
var deltaUp = 0;
var deltaUp = 0, ticks = 0;
var callbacks = {
up: function(evt, delta) {
deltaUp += delta;
ticks++;
}
};
@@ -131,7 +132,8 @@
map.addControl(control);
var handler = new OpenLayers.Handler.MouseWheel(control, callbacks, {
interval: 150,
cumulative: false
cumulative: false,
maxDelta: 6
});
var delta = 120;
@@ -140,8 +142,9 @@
handler.onWheelEvent({'target':map.layers[0].div, wheelDelta: delta});
}
t.delay_call(1, function() {
t.eq(deltaUp, 1, "Non cumulative mode works");
t.delay_call(2, function() {
t.eq(deltaUp / ticks, 1, "Cumulative mode works");
t.eq(ticks, 4, "up called 4x with maxDelta of 6");
});
}
+18 -1
View File
@@ -601,6 +601,12 @@
handler.mousedown({type: "mousedown", xy: px});
handler.mouseup({type: "mouseup", xy: px});
}
function userTap(handler, x, y) {
var px = new OpenLayers.Pixel(x, y);
handler.touchstart({xy: px});
handler.touchmove({xy: px});
handler.touchend({});
}
/**
* Editing method tests: insertXY, insertDeltaXY, insertDirectionXY,
@@ -720,7 +726,7 @@
}
function test_undoredo1(t) {
t.plan(4);
t.plan(5);
var obj = editingMethodsSetup();
var map = obj.map;
var handler = obj.handler;
@@ -747,6 +753,17 @@
handler.redo();
t.geom_eq(original, handler.line.geometry, "one redo undoes one undo");
// add point via touch
userTap(handler, 10, 50);
handler.undo();
currentLen = handler.line.geometry.components.length;
t.geom_eq(
handler.line.geometry.components[currentLen-1],
handler.line.geometry.components[currentLen-2],
"current point (mouse position) is set to the last digitized " +
"point after undo on touch devices"
);
// cleanup
map.destroy();
}
+1 -1
View File
@@ -97,7 +97,7 @@
function test_callbacks(t) {
t.plan(32);
var map = new OpenLayers.Map('map', {controls: []});
var map = new OpenLayers.Map('map', {controls: [], fallThrough: true});
var control = new OpenLayers.Control();
map.addControl(control);
+15 -14
View File
@@ -407,7 +407,8 @@
// set up
var map = new OpenLayers.Map("map", {
resolutions: [1]
resolutions: [1],
controls: []
});
var layer = new OpenLayers.Layer.Vector("foo", {
maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10),
@@ -421,9 +422,11 @@
map.setCenter(new OpenLayers.LonLat(0, 0), 0);
handler.activate();
var eventTypes = ['mousedown', 'mouseup', 'mousemove', 'click', 'dblclick',
'mouseout'];
function allRegistered() {
var eventTypes = ['mousedown', 'mouseup', 'mousemove', 'click', 'dblclick'],
eventType,
var eventType,
listeners,
listener,
flag;
@@ -446,23 +449,21 @@
}
function noneRegistered() {
var eventTypes = ['mousedown', 'mouseup', 'mousemove', 'click', 'dblclick'],
eventType,
listeners,
listener;
var eventType,
times,
flag = false;
for(var i=0, ilen=eventTypes.length; i<ilen; i++) {
eventType = eventTypes[i];
listeners = map.events.listeners[eventType];
for(var j=0, jlen=listeners.length; j<jlen; j++) {
listener = listeners[j];
if(listener.func === handler[eventType] && listener.obj === handler) {
return false;
}
times = map.events.listeners[eventType].length;
if (times != 0) {
t.fail(eventType + " is registered " + times + " times");
flag = true;
}
}
return true;
return !flag;
}
// test
t.ok(allRegistered(), 'mouse listeners are registered');
+7 -5
View File
@@ -187,7 +187,9 @@
}
/**
* Check our utility function for generating tile indexes against a file cache
* Check the utility function for generating tile indexes against a file cache
* This is already tested in BaseTypes test, but these are specific,
* common conversions that this class will rely on, so the tests are retained
*/
function test_Layer_ARCGISCACHE_zeroPad(t) {
t.plan(4);
@@ -195,10 +197,10 @@
var layer = new OpenLayers.Layer.ArcGISCache('test', null, { });
//some tile examples
t.ok('00000001' == layer.zeroPad(1, 8, 16), 'zeroPad should generate tile indexes properly ');
t.ok('00000020' == layer.zeroPad(32, 8, 16), 'zeroPad should generate tile indexes properly ');
t.ok('00000100' == layer.zeroPad(256, 8, 16), 'zeroPad should generate tile indexes properly ');
t.ok('00001000' == layer.zeroPad(4096, 8, 16), 'zeroPad should generate tile indexes properly ');
t.ok('00000001' == OpenLayers.Number.zeroPad(1, 8, 16), 'zeroPad should generate tile indexes properly ');
t.ok('00000020' == OpenLayers.Number.zeroPad(32, 8, 16), 'zeroPad should generate tile indexes properly ');
t.ok('00000100' == OpenLayers.Number.zeroPad(256, 8, 16), 'zeroPad should generate tile indexes properly ');
t.ok('00001000' == OpenLayers.Number.zeroPad(4096, 8, 16), 'zeroPad should generate tile indexes properly ');
}
/**
+74 -65
View File
@@ -237,53 +237,57 @@
}
function test_setOpacity(t) {
if(validkey) {
t.plan(6);
t.plan(6);
var map = new OpenLayers.Map("map");
var gmap = new OpenLayers.Layer.Google(
"Google Streets", // the default
{numZoomLevels: 20}
);
var ghyb = new OpenLayers.Layer.Google(
"Google Hybrid",
{type: G_HYBRID_MAP, numZoomLevels: 20}
);
var gsat = new OpenLayers.Layer.Google(
"Google Satellite",
{type: G_SATELLITE_MAP, numZoomLevels: 22}
);
map.addLayers([gmap, ghyb, gsat]);
map.zoomToMaxExtent();
var map = new OpenLayers.Map("map");
var gmap = new OpenLayers.Layer.Google(
"Google Streets", // the default
{numZoomLevels: 20}
);
var ghyb = new OpenLayers.Layer.Google(
"Google Hybrid",
{type: G_HYBRID_MAP, numZoomLevels: 20}
);
var gsat = new OpenLayers.Layer.Google(
"Google Satellite",
{type: G_SATELLITE_MAP, numZoomLevels: 22}
);
map.addLayers([gmap, ghyb, gsat]);
map.zoomToMaxExtent();
var container = map.baseLayer.mapObject.getContainer();
var opacityCheck = function(opacity) {
var style = container.style;
var current = style.opacity === "" ? 1 : parseFloat(style.opacity);
if (style.filter && !style.opacity) {
current = Number(style.filter.replace(/alpha\(opacity=(.+?)\)/, "$1"));
}
return (current === opacity);
};
var container = map.baseLayer.mapObject.getContainer();
var opacityCheck = function(opacity) {
var style = container.style;
var current = style.opacity === "" ? 1 : parseFloat(style.opacity);
if (style.filter && !style.opacity) {
current = Number(style.filter.replace(/alpha\(opacity=(.+?)\)/, "$1"));
}
return (current === opacity);
};
gmap.setOpacity(0.5);
t.ok(opacityCheck(0.5), "container opacity set for visible layer");
gmap.setOpacity(0.5);
t.ok(opacityCheck(0.5), "container opacity set for visible layer");
ghyb.setOpacity(0.75);
t.ok(opacityCheck(0.5), "container opacity not changed if layer not visible");
map.setBaseLayer(ghyb);
t.ok(opacityCheck(0.75), "container opacity changed to 0.75 when layer becomes visible");
ghyb.setOpacity(0.75);
t.ok(opacityCheck(0.5), "container opacity not changed if layer not visible");
map.setBaseLayer(ghyb);
t.ok(opacityCheck(0.75), "container opacity changed to 0.75 when layer becomes visible");
map.setBaseLayer(gsat);
t.ok(opacityCheck(1), "container opacity set to 1 by default");
gsat.setOpacity(0.25);
t.ok(opacityCheck(0.25), "container opacity changed to 0.25 for visible layer");
map.setBaseLayer(gsat);
t.ok(opacityCheck(1), "container opacity set to 1 by default");
gsat.setOpacity(0.25);
t.ok(opacityCheck(0.25), "container opacity changed to 0.25 for visible layer");
map.setBaseLayer(gmap);
t.ok(opacityCheck(0.5), "container opacity set to layer opacity");
map.destroy();
map.setBaseLayer(gmap);
t.ok(opacityCheck(0.5), "container opacity set to layer opacity");
map.destroy();
} else {
t.plan(0);
t.debug_print("Google tests can't be run from " +
window.location.host);
}
}
function test_Layer_Google_setGMapVisibility(t) {
@@ -321,34 +325,39 @@
}
function test_sphericalMercator(t) {
t.plan(4);
var map, layer;
map = new OpenLayers.Map("map");
layer = new OpenLayers.Layer.Google();
map.addLayer(layer);
t.ok(!layer.sphericalMercator, "sphericalMercator false by default");
t.eq(map.getProjection(), "EPSG:4326", "4326 by default without sphericalMercator");
map.destroy();
map = new OpenLayers.Map("map");
layer = new OpenLayers.Layer.Google(null, {
sphericalMercator: true
});
map.addLayer(layer);
t.eq(map.getProjection(), "EPSG:900913", "900913 by default with sphericalMercator");
map.destroy();
if (validkey) {
t.plan(4);
var map, layer;
map = new OpenLayers.Map("map");
layer = new OpenLayers.Layer.Google(null, {
sphericalMercator: true,
projection: "EPSG:102113"
});
map.addLayer(layer);
t.eq(map.getProjection(), "EPSG:102113", "custom code respected with sphericalMercator");
map.destroy();
map = new OpenLayers.Map("map");
layer = new OpenLayers.Layer.Google();
map.addLayer(layer);
t.ok(!layer.sphericalMercator, "sphericalMercator false by default");
t.eq(map.getProjection(), "EPSG:4326", "4326 by default without sphericalMercator");
map.destroy();
map = new OpenLayers.Map("map");
layer = new OpenLayers.Layer.Google(null, {
sphericalMercator: true
});
map.addLayer(layer);
t.eq(map.getProjection(), "EPSG:900913", "900913 by default with sphericalMercator");
map.destroy();
map = new OpenLayers.Map("map");
layer = new OpenLayers.Layer.Google(null, {
sphericalMercator: true,
projection: "EPSG:102113"
});
map.addLayer(layer);
t.eq(map.getProjection(), "EPSG:102113", "custom code respected with sphericalMercator");
map.destroy();
} else {
t.plan(0);
t.debug_print("Google tests can't be run from " +
window.location.host);
}
}
+77 -45
View File
@@ -22,7 +22,7 @@
function test_constructor (t) {
t.plan( 8 );
t.plan( 7 );
layer = new OpenLayers.Layer.Grid(name, url, params, null);
t.ok( layer instanceof OpenLayers.Layer.Grid, "returns OpenLayers.Layer.Grid object" );
@@ -31,7 +31,6 @@
t.eq( layer.numLoadingTiles, 0, "numLoadingTiles starts at 0");
t.ok( layer.tileClass === OpenLayers.Tile.Image, "tileClass default is OpenLayers.Tile.Image");
t.eq( layer.className, 'olLayerGrid', "className default is olLayerGrid");
t.eq( layer.removeBackBufferDelay, 2500, "removeBackBufferDelay default is 2500");
var obj = {};
var func = function() {};
@@ -390,7 +389,7 @@
*/
function test_Layer_Grid_clone(t) {
t.plan(6);
t.plan(7);
var options = {tileSize: new OpenLayers.Size(500,50)};
var map = new OpenLayers.Map('map', options);
@@ -400,8 +399,10 @@
layer.grid = [ [6, 7],
[8, 9]];
// if we clone when tiles are still loading, this should not influence the clone
layer.numLoadingTiles = 1;
var clone = layer.clone();
t.eq( clone.numLoadingTiles, 0, "numLoadingTiles should be reset");
t.ok( clone.grid != layer.grid, "clone does not copy grid");
t.ok( clone.grid.length == 0, "clone creates a new array instead");
@@ -625,7 +626,7 @@
}
function test_Layer_Grid_getTileBounds(t) {
t.plan(2);
var map = new OpenLayers.Map("map2");
var map = new OpenLayers.Map("map2", {zoomMethod: null});
var url = "http://octo.metacarta.com/cgi-bin/mapserv";
layer = new OpenLayers.Layer.WMS(name, url, params);
@@ -822,7 +823,8 @@
t.plan(11);
var map = new OpenLayers.Map('map', {
resolutions: [32, 16, 8, 4, 2, 1]
resolutions: [32, 16, 8, 4, 2, 1],
zoomMethod: null
});
var layer = new OpenLayers.Layer.WMS('', '', {}, {
isBaseLayer: true,
@@ -883,7 +885,8 @@
t.plan(4);
var map = new OpenLayers.Map('map', {
resolutions: [1, 0.5, 0.025]
resolutions: [1, 0.5, 0.025],
zoomMethod: null
});
var resolution;
var layer = new OpenLayers.Layer.WMS('', '', {}, {
@@ -927,7 +930,8 @@
t.plan(4);
var map = new OpenLayers.Map('map', {
resolutions: [1, 0.5, 0.025]
resolutions: [1, 0.5, 0.025],
zoomMethod: null
});
var resolution;
var layer = new OpenLayers.Layer.WMS('', '', {}, {
@@ -996,7 +1000,7 @@
layer.applyBackBuffer(2);
t.ok(layer.backBuffer === backBuffer,
'back buffer set in layer');
t.ok(layer.div.firstChild === backBuffer,
t.ok(map.layerContainerDiv.firstChild === backBuffer,
'back buffer inserted as first child');
t.eq(layer.backBuffer.style.left, '250px',
'back buffer has correct left');
@@ -1016,36 +1020,36 @@
layer.applyBackBuffer(2);
t.ok(layer.backBuffer === backBuffer,
'back buffer set in layer');
t.ok(layer.div.firstChild === backBuffer,
t.ok(map.layerContainerDiv.firstChild === backBuffer,
'back buffer inserted as first child');
t.eq(layer.backBuffer.style.left, '230px',
'back buffer has correct left');
t.eq(layer.backBuffer.style.top, '295px',
'back buffer has correct top');
// test #4
// and a back buffer in the layer and do as if back buffer removal
// has been scheduled, and test that applyBackBuffer removes the
// back buffer and clears the timer
layer.createBackBuffer = function() {
return;
};
backBuffer = document.createElement('div');
layer.div.insertBefore(backBuffer, layer.div.firstChild);
layer.backBuffer = backBuffer;
layer.backBufferTimerId = 'fake';
layer.applyBackBuffer(2);
t.ok(backBuffer.parentNode !== layer.div,
'back buffer is not child node of layer div');
t.eq(layer.backBuffer, null,
'back buffer not set in layer');
t.eq(layer.backBufferTimerId, null,
'back buffer timer cleared');
map.destroy();
// test #4
// and a back buffer in the layer and do as if back buffer removal
// has been scheduled, and test that applyBackBuffer removes the
// back buffer and clears the timer
layer.createBackBuffer = function() {
return;
};
backBuffer = document.createElement('div');
map.layerContainerDiv.insertBefore(backBuffer, map.baseLayer.div);
layer.backBuffer = backBuffer;
layer.backBufferTimerId = 'fake';
layer.applyBackBuffer(2);
t.ok(backBuffer !== map.layerContainerDiv.firstChild,
'back buffer is not first child of layer container div');
t.eq(layer.backBuffer, null,
'back buffer not set in layer');
t.eq(layer.backBufferTimerId, null,
'back buffer timer cleared');
map.destroy();
}
function test_createBackBuffer(t) {
t.plan(7);
t.plan(9);
var map = new OpenLayers.Map('map');
var layer = new OpenLayers.Layer.WMS('', '', {}, {
@@ -1070,7 +1074,16 @@
OpenLayers.Tile.Image.prototype.createBackBuffer = function() {
return document.createElement('div');
};
layer.transitionEffect = 'map-resize';
backBuffer = layer.createBackBuffer();
t.ok(backBuffer.style.zIndex == 99, 'z-index of backbuffer correct for "map-resize".');
layer.removeBackBuffer();
layer.transitionEffect = 'resize';
backBuffer = layer.createBackBuffer();
t.ok(backBuffer.style.zIndex == layer.getZIndex() - 1, 'z-index of backbuffer correct for "resize",');
layer.backBufferResolution = 1;
layer.gridResolution = 1;
layer.backBuffer = backBuffer;
@@ -1093,7 +1106,7 @@
}
function test_removeBackBuffer(t) {
t.plan(4);
t.plan(3);
var map = new OpenLayers.Map('map');
var layer = new OpenLayers.Layer.WMS('', '', {}, {isBaseLayer: true});
@@ -1105,17 +1118,12 @@
layer.div.appendChild(backBuffer);
layer.backBufferResolution = 32;
// add a fake back buffer removal timer
layer.backBufferTimerId = 'fake';
layer.removeBackBuffer();
t.eq(layer.backBuffer, null, 'backBuffer set to null in layer');
t.eq(layer.backBufferResolution, null,
'backBufferResolution set to null in layer');
t.ok(backBuffer.parentNode !== layer.div,
'back buffer removed from layer');
t.eq(layer.backBufferTimerId, null,
'backBufferTimerId set to null in layer');
map.destroy();
}
@@ -1150,6 +1158,23 @@
});
}
function test_backbuffer_replace_singleTile(t) {
t.plan(1);
var map = new OpenLayers.Map('map');
var layer = new OpenLayers.Layer.WMS('', '../../img/blank.gif', null, {
singleTile: true,
transitionEffect: 'resize'
});
map.addLayer(layer);
map.zoomToMaxExtent();
t.delay_call(1, function() {
map.zoomIn();
var tile = layer.grid[0][0];
t.ok(!OpenLayers.Element.hasClass(tile.imgDiv, 'olTileReplacing'), 'tile is not marked for being replaced for singleTile layers');
});
}
function test_singleTile_move_and_zoom(t) {
//
@@ -1162,9 +1187,10 @@
t.plan(4);
var map = new OpenLayers.Map('map');
var map = new OpenLayers.Map('map', {zoomMethod: null});
var layer = new OpenLayers.Layer.WMS('', '', {}, {
isBaseLayer: true,
transitionEffect: null,
singleTile: true,
ratio: 1.1
});
@@ -1193,7 +1219,8 @@
//
var map = new OpenLayers.Map('map', {
resolutions: [32, 16, 8, 4, 2, 1]
resolutions: [32, 16, 8, 4, 2, 1],
zoomMethod: null
});
var layer = new OpenLayers.Layer.WMS(
"WMS",
@@ -1289,6 +1316,7 @@
OpenLayers.Tile.Image.prototype.createBackBuffer = origCreateBackBuffer
}
function test_delayed_back_buffer_removal(t) {
//
// Test that the delaying of the back buffer removal behaves
@@ -1300,7 +1328,8 @@
// set up
var map = new OpenLayers.Map('map', {
resolutions: [32, 16, 8, 4, 2, 1]
resolutions: [32, 16, 8, 4, 2, 1],
zoomMethod: null
});
var layer = new OpenLayers.Layer.WMS('', '', {}, {
isBaseLayer: true,
@@ -1311,11 +1340,14 @@
map.zoomTo(1);
// Mark one tile loaded, to see if back buffer removal gets scheduled.
t.ok(layer.backBuffer === map.layerContainerDiv.firstChild,
'[a] back buffer is first child of layer container div');
// Mark one tile loaded and add an element to the backbuffer, to see if
// backbuffer removal gets scheduled.
layer.backBuffer.appendChild(document.createElement('img'));
layer.grid[1][1].onImageLoad();
t.ok(layer.backBuffer.parentNode === layer.div,
'[a] back buffer is a child of layer div');
t.ok(layer.backBufferTimerId !== null,
'[a] back buffer scheduled for removal');
@@ -1325,8 +1357,8 @@
t.ok(layer.backBuffer !== backBuffer,
'[b] a new back buffer was created');
t.ok(layer.backBuffer.parentNode === layer.div,
'[b] back buffer is a child of layer div');
t.ok(layer.backBuffer === map.layerContainerDiv.firstChild,
'[b] back buffer is first child of layer container div');
t.ok(layer.backBufferTimerId === null,
'[b] back buffer no longer scheduled for removal');
@@ -1334,7 +1366,7 @@
map.destroy();
}
function test_getGridData(t) {
t.plan(12);
+1 -1
View File
@@ -233,7 +233,7 @@
}
function test_Layer_KaMap_getTileBounds(t) {
t.plan(2);
var map = new OpenLayers.Map("map");
var map = new OpenLayers.Map("map", {zoomMethod: null});
var url = "http://octo.metacarta.com/cgi-bin/mapserv";
layer = new OpenLayers.Layer.KaMap(name, url, params);
+1 -1
View File
@@ -59,7 +59,7 @@
t.plan(6);
var map = new OpenLayers.Map("map");
var map = new OpenLayers.Map("map", {zoomMethod: null});
var layer = new OpenLayers.Layer.Markers("Base", {isBaseLayer: true});
map.addLayer(layer);
map.setCenter(new OpenLayers.LonLat(0, 0), 1);
+2 -1
View File
@@ -211,7 +211,8 @@
div: "map",
layers: [layer],
center: new OpenLayers.LonLat(0, 0),
zoom: 1
zoom: 1,
zoomMethod: null
});
t.eq(layer.features.length, 50, "50 features at zoom 1");
+15
View File
@@ -58,6 +58,21 @@
layer.destroy();
}
function test_createBackBuffer(t) {
t.plan(1);
setUp();
var got;
try {
got = layer.createBackBuffer();
} catch (e) {
got = e;
} finally {
tearDown();
}
t.eq(got, undefined, "createBackBuffer returns undefined");
}
function test_clone(t) {
t.plan(3);
+1 -1
View File
@@ -557,7 +557,7 @@
function test_tileBounds(t) {
t.plan(3);
var map = new OpenLayers.Map("map", {projection: "EPSG:3857"});
var map = new OpenLayers.Map("map", {projection: "EPSG:3857", zoomMethod: null});
var layer = new OpenLayers.Layer.WMS("wms", "../../img/blank.gif");
map.addLayer(layer);
map.setCenter([0, 0], 1);
+2 -1
View File
@@ -245,7 +245,8 @@
layers: [layer],
projection: "EPSG:4326",
maxResolution: 0.3515625,
maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90)
maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90),
zoomMethod: null
});
map.setCenter(new OpenLayers.LonLat(-97.0, 38.0), 1);
t.eq(layer.getURL(new OpenLayers.Bounds(-135.0, 0.0, -90.0, 45.0)),
+127 -19
View File
@@ -216,6 +216,7 @@
t.plan(14);
var log = [];
map = new OpenLayers.Map('map', {
zoomMethod: null,
eventListeners: {
"movestart": function() {log.push("movestart");},
"move": function() {log.push("move");},
@@ -268,7 +269,7 @@
function test_Map_zoomend_event (t) {
t.plan(2);
map = new OpenLayers.Map('map');
map = new OpenLayers.Map('map', {zoomMethod: null});
var baseLayer = new OpenLayers.Layer.WMS("Test Layer",
"http://octo.metacarta.com/cgi-bin/mapserv?",
{map: "/mapdata/vmap_wms.map", layers: "basic"});
@@ -928,8 +929,13 @@
map.setBaseLayer(tmsLayer);
map.zoomIn();
map.pan(0, -200, {animate:false});
var log = [];
map.applyTransform = function(x, y, scale) {
log.push([x || map.layerContainerOriginPx.x, y || map.layerContainerOriginPx.y, scale]);
OpenLayers.Map.prototype.applyTransform.apply(this, arguments);
};
map.setBaseLayer(wmsLayer);
t.eq(map.layerContainerDiv.style.top, "0px", "layerContainer is recentered after setBaseLayer");
t.eq(log[0][0], 0, "layerContainer is recentered after setBaseLayer");
map.destroy();
}
@@ -1287,7 +1293,8 @@
extent = new OpenLayers.Bounds(8, 44.5, 19, 50);
var options = {
restrictedExtent: extent
restrictedExtent: extent,
zoomMethod: null
};
map = new OpenLayers.Map('map', options);
@@ -1325,7 +1332,7 @@
function test_zoomTo(t) {
t.plan(8);
var map = new OpenLayers.Map("map");
var map = new OpenLayers.Map("map", {zoomMethod: null});
map.addLayer(new OpenLayers.Layer(null, {
isBaseLayer: true
}));
@@ -1362,6 +1369,38 @@
map.destroy();
}
function test_zoomTo_animated(t) {
t.plan(2);
var map = new OpenLayers.Map("map");
map.addLayer(new OpenLayers.Layer(null, {
isBaseLayer: true
}));
map.zoomToMaxExtent();
map.zoomTo(2);
map.zoomIn();
map.zoomOut();
map.zoomIn();
t.delay_call(2, function() {
t.eq(map.getZoom(), 3, '[fractionalZoom: false] zoomTo(2) - zoomIn() - zoomOut() - zoomIn()');
// now allow fractional zoom
map.fractionalZoom = true;
map.zoomTo(2.6);
map.zoomIn();
map.zoomOut();
map.zoomIn();
});
t.delay_call(4, function() {
t.eq(map.getZoom(), 3.6, '[fractionalZoom: true] zoomTo(2) - zoomIn() - zoomOut() - zoomIn()');
map.destroy();
});
}
function test_Map_getUnits(t) {
t.plan(2);
var map = new OpenLayers.Map("map");
@@ -1959,7 +1998,7 @@
}
function test_moveByPx(t) {
t.plan(16);
t.plan(14);
var moved;
var Layer = OpenLayers.Class(OpenLayers.Layer, {
@@ -1979,14 +2018,19 @@
{isBaseLayer: false, minResolution:2})
]
});
var log = [];
map.applyTransform = function(x, y, scale) {
log.push([x || map.layerContainerOriginPx.x, y || map.layerContainerOriginPx.y, scale]);
OpenLayers.Map.prototype.applyTransform.apply(this, arguments);
};
moved = {};
map.zoomToExtent(new OpenLayers.Bounds(-1, -1, 1, 1));
// check initial state
t.eq(map.layerContainerDiv.style.left, '0px',
t.eq(log[0][0], 0,
'[initial state] layer container left correct');
t.eq(map.layerContainerDiv.style.top, '0px',
t.eq(log[0][1], 0,
'[initial state] layer container top correct');
t.eq(moved['base'], undefined,
'[initial state] base layer not moved');
@@ -1996,9 +2040,9 @@
// move to a valid position
moved = {};
map.moveByPx(-455, 455);
t.eq(map.layerContainerDiv.style.left, '455px',
t.eq(log[1][0], 455,
'[valid position] layer container left correct');
t.eq(map.layerContainerDiv.style.top, '-455px',
t.eq(log[1][1], -455,
'[valid position] layer container top correct');
t.eq(moved['base'], true,
'[valid position] base layer moved');
@@ -2008,10 +2052,8 @@
// move outside the max extent
moved = {};
map.moveByPx(-4500, 4500);
t.eq(map.layerContainerDiv.style.left, '455px',
'[outside max extent] layer container left correct');
t.eq(map.layerContainerDiv.style.top, '-455px',
'[outside max extent] layer container top correct');
t.eq(log.length, 2,
'[outside max extent] layer container offset unchanged');
t.eq(moved['base'], undefined,
'[outside max extent] base layer not moved');
t.eq(moved['outofrange'], undefined,
@@ -2020,10 +2062,8 @@
// move outside the restricted extent
moved = {};
map.moveByPx(-500, 500);
t.eq(map.layerContainerDiv.style.left, '455px',
'[outside restricted extent] layer container left correct');
t.eq(map.layerContainerDiv.style.top, '-455px',
'[outside restricted extent] layer container top correct');
t.eq(log.length, 2,
'[outside restricted extent] layer container offset unchanged');
t.eq(moved['base'], undefined,
'[outside restricted extent] base layer not moved');
t.eq(moved['outofrange'], undefined,
@@ -2047,9 +2087,59 @@
map.zoomToExtent(new OpenLayers.Bounds(-11.25, 0, 11.25, 11.25));
var log = [];
map.applyTransform = function(x, y, scale) {
log.push([x || map.layerContainerOriginPx.x, y || map.layerContainerOriginPx.y, scale]);
OpenLayers.Map.prototype.applyTransform.apply(this, arguments);
};
map.moveByPx(-10, -10);
t.eq(map.layerContainerDiv.style.left, '10px', 'layer container left correct');
t.eq(map.layerContainerDiv.style.top, '0px', 'layer container top correct');
t.eq(log[0][0], 10, 'layer container left correct');
t.eq(log[0][1], 0, 'layer container top correct');
}
function test_applyTransform(t) {
t.plan(10);
var origStylePrefix = OpenLayers.Util.vendorPrefix.style;
OpenLayers.Util.vendorPrefix.style =
OpenLayers.Util.vendorPrefix.css =
function(key) { return 'transform'; };
var map = new OpenLayers.Map('map');
map.layerContainerDiv = {style: {}};
delete map.applyTransform.transform;
delete map.applyTransform.template;
var origGetStyle = OpenLayers.Element.getStyle;
OpenLayers.Element.getStyle = function() { return 'foo'; }
map.applyTransform(1, 2, 3);
OpenLayers.Element.getStyle = origGetStyle;
t.eq(map.layerContainerDiv.style.transform, 'translate3d(1px,2px,0) scale3d(3,3,1)', '3d transform and scale used when available');
delete map.applyTransform.transform;
delete map.applyTransform.template;
var origIndexOf = String.prototype.indexOf;
String.prototype.indexOf = function() { return -1; };
map.layerContainerOriginPx = {x: -3, y: 2};
map.applyTransform(1, 2, 3);
String.prototype.indexOf = origIndexOf;
t.eq(map.layerContainerDiv.style.transform, 'translate(4px,0px) scale(3,3)', '2d translate and scale correct');
t.eq(map.layerContainerDiv.style.left, '-3px', 'container origin x set as style.left');
t.eq(map.layerContainerDiv.style.top, '2px', 'container origin y set as style.top');
map.applyTransform(1, 2);
t.ok(!map.layerContainerDiv.style.transform, 'no transform set when no transform needed');
t.eq(map.layerContainerDiv.style.left, '1px', 'style.left correct when no transform needed');
t.eq(map.layerContainerDiv.style.top, '2px', 'style.top correct when no transform needed');
map.applyTransform.transform = null;
map.applyTransform(4, 5, 6);
t.eq(map.layerContainerDiv.style.left, '4px', 'style.left set when transform not available')
t.eq(map.layerContainerDiv.style.top, '5px', 'style.top set when transform not available')
t.ok(!map.layerContainerDiv.style.transform, 'no transform set, because not supported');
map.destroy();
delete map.applyTransform.transform;
delete map.applyTransform.template;
OpenLayers.Util.vendorPrefix.style = origStylePrefix;
}
function test_options(t) {
@@ -2112,6 +2202,24 @@
var center = map.getCenter();
t.ok(center.equals(new OpenLayers.LonLat(-13.25, 56)), "Center is correct and not equal to maxExtent's center");
}
function test_getZoomTargetCenter(t) {
t.plan(1);
var map = new OpenLayers.Map({
div: 'map',
layers: [
new OpenLayers.Layer('', {isBaseLayer: true})
],
center: [0, 0],
zoom: 1
});
var ll = map.getZoomTargetCenter({x: 44, y: 22}, map.getMaxResolution());
t.eq(ll.toShortString(), "180, -90", "getZoomTargetCenter works.");
map.destroy();
}
function test_autoUpdateSize(t) {
t.plan(1);
+1 -2
View File
@@ -168,8 +168,7 @@
var bColor = popup.div.style.backgroundColor;
var goodColor = ( (bColor == color) || (bColor == hexColor));
t.ok(goodColor, "good default popup.backgroundColor");
if (navigator.appName.indexOf("Microsoft") == -1) {
if (navigator.appName.indexOf("Microsoft") == -1 || new RegExp(/msie 10/).test(navigator.userAgent.toLowerCase())) {
t.eq(parseFloat(popup.div.style.opacity), opacity, "good default popup.opacity");
} else {
t.eq(popup.div.style.filter, "alpha(opacity=" + opacity*100 + ")", "good default popup.opacity");
+2 -2
View File
@@ -321,9 +321,9 @@
var cases = [{
msg: "center of point", x: -100, y: 0, id: layer.features[0].id
}, {
msg: "edge of point", x: -103, y: 3, id: layer.features[0].id
msg: "edge of point", x: -106, y: 0, id: layer.features[0].id
}, {
msg: "outside point", x: -110, y: 3, id: null
msg: "outside point", x: -110, y: 0, id: null
}, {
msg: "center of line", x: 0, y: 0, id: layer.features[1].id
}, {
+2 -2
View File
@@ -51,7 +51,7 @@
});
// create a map with the layers and a center
var map = new OpenLayers.Map("map");
var map = new OpenLayers.Map("map", {zoomMethod: null});
map.addLayers([dummy, layer]);
map.zoomToMaxExtent();
@@ -206,7 +206,7 @@
function test_resFactor(t) {
t.plan(2);
var map = new OpenLayers.Map("map");
var map = new OpenLayers.Map("map", {zoomMethod: null});
var bbox = new OpenLayers.Strategy.BBOX();
var fakeProtocol = new OpenLayers.Protocol({
'read': function() {
+2 -1
View File
@@ -44,7 +44,8 @@
});
var map = new OpenLayers.Map('map', {
resolutions: [4, 2, 1],
maxExtent: new OpenLayers.Bounds(-40, -40, 40, 40)
maxExtent: new OpenLayers.Bounds(-40, -40, 40, 40),
zoomMethod: null
});
map.addLayer(layer);
+15
View File
@@ -31,6 +31,21 @@
"activates registers visibilitychanged listener");
}
function test_deactivate(t) {
t.plan(3);
var l = new OpenLayers.Layer.Vector();
l.setVisibility(false);
var s = new OpenLayers.Strategy.Refresh();
s.setLayer(l);
s.activate();
var deactivated = s.deactivate();
t.eq(deactivated, true, "deactivate returns true");
t.eq(s.active, false, "deactivated after activate");
t.ok(l.events.listeners.visibilitychanged.length == 0,
"deactivate unregisters visibilitychanged listener");
}
function test_activateWithVisibleLayer(t) {
t.plan(5);
+14
View File
@@ -30,6 +30,7 @@ Test.AnotherWay._run_one_onclick = function(){
// test page loading
Test.AnotherWay.old_load_next_page = Test.AnotherWay._load_next_page;
Test.AnotherWay._load_next_page = function(){
document.getElementById("test_iframe_el").style.display = "none";
Test.AnotherWay.update_running_time();
Test.AnotherWay.old_load_next_page.apply(this, arguments);
};
@@ -94,6 +95,19 @@ Test.AnotherWay._add_test_page_url = function(test_url, convention){
record_select.appendChild(option);
};
Test.AnotherWay.old_set_iframe_location = Test.AnotherWay._set_iframe_location;
Test.AnotherWay._set_iframe_location = function(iframe, loc, outside_path_correction){
var optionPos = loc.indexOf( "?" ),
option;
if (optionPos != -1) {
option = loc.substring(optionPos+1);
loc = loc.substring(0, optionPos);
}
if (option === "visible") {
document.getElementById("test_iframe_el").style.display = "";
}
return Test.AnotherWay.old_set_iframe_location.call(this, iframe, loc, outside_path_correction);
};
// new methods
Test.AnotherWay.update_running_time = function() {
+16 -4
View File
@@ -8,6 +8,7 @@
var tileManager = new OpenLayers.TileManager();
var map = new OpenLayers.Map('map', {
zoomMethod: null,
tileManager: tileManager
});
var layer = new OpenLayers.Layer.WMS('WMS1', '../img/blank.gif');
@@ -63,17 +64,28 @@
gridSize = layer.div.childNodes.length;
map.setCenter([17, 47]);
});
function inCache(img) {
var search = img.src.split('?')[1];
for (var s in tileManager.tileCache) {
if (s.split('?')[1] == search) {
return true;
}
}
return false;
}
t.delay_call(4, function() {
t.eq(tileManager.tileCacheIndex.length, 12, "tiles cached");
t.ok(tileManager.tileCache[layer.grid[1][2].url] === layer.grid[1][2].imgDiv, "correct object cached");
t.ok(!(firstInCache.getAttribute("src") in tileManager.tileCache), "old tile discarded");
t.ok(sharedTile.getAttribute("src") in tileManager.tileCache, "shared tile still in cache");
t.ok(!inCache(firstInCache), "old tile discarded");
t.ok(inCache(sharedTile), "shared tile still in cache");
firstInCache = tileManager.tileCache[tileManager.tileCacheIndex[0]];
map.setCenter([16, 48]);
});
t.delay_call(6, function() {
t.ok(!(firstInCache.getAttribute("src") in tileManager.tileCache), "old tile discarded");
t.ok(sharedTile.getAttribute("src") in tileManager.tileCache, "shared tile still in cache");
t.ok(!inCache(firstInCache), "old tile discarded");
t.ok(inCache(sharedTile), "shared tile still in cache");
t.eq(layer.div.childNodes.length, gridSize, 'no unused images left in dom');
map.destroy();
});
+24 -13
View File
@@ -11,6 +11,9 @@
top: 1234px;
left: 123px;
}
.test_getRenderedDimensions p{
padding: 20px;
}
</style>
<script>
var OpenLayers = [
@@ -26,6 +29,7 @@
];
</script>
<script src="OLLoader.js"></script>
<script src="Util_common.js"></script>
<script type="text/javascript">
var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);
var map;
@@ -111,13 +115,29 @@
function test_Util_pagePosition(t) {
t.plan( 2 );
// making sure that the test iframe is visible
var origDisplay;
var parents = window.parent.document.getElementsByTagName('iframe');
if (parents.length) {
origDisplay = parents[1].parentNode.style.display;
// span containing the test iframe is the invisible element
parents[1].parentNode.style.display = "";
}
var pp = OpenLayers.Util.pagePosition(window);
t.eq( pp.toString(), "0,0", "Page position doesn't bail if passed 'window'");
window.scrollTo(100, 1200);
var mapDiv = document.getElementById("map");
var beforeScrollPp = OpenLayers.Util.pagePosition(mapDiv);
window.scrollTo(100, 1200);
pp = OpenLayers.Util.pagePosition(mapDiv);
t.eq( pp.toString(), "123,1234", "Page position should work after page has been scrolled");
t.eq(pp, beforeScrollPp, "Page position should work after page has been scrolled");
// reset test iframe visibility
if (parents.length) {
parents[1].parentNode.style.display = origDisplay;
}
}
function test_Util_createDiv(t) {
@@ -1100,17 +1120,8 @@
}
function test_getRenderedDimensions(t) {
t.plan(2);
var content = (new Array(100)).join("foo ");
// test with fixed width
var fw = OpenLayers.Util.getRenderedDimensions(content, {w: 20});
t.eq(fw.w, 20, "got the fixed width");
// test with fixed height
var fh = OpenLayers.Util.getRenderedDimensions(content, {h: 15});
t.eq(fh.h, 15, "got the fixed height");
// from <script src="Util_common.js"> and shared by Util_w3c.html
com_test_getRenderedDimensions(t);
}
function test_toFloat(t) {
@@ -1,102 +1,64 @@
<html>
<head>
<style type="text/css">
.testDims p{
padding: 20px;
}
</style>
<script src="../../lib/OpenLayers.js"></script>
<script>
function run() {
var out = document.getElementById("out");
var size = OpenLayers.Util.getRenderedDimensions("<p>Content</p>");
var bigger = OpenLayers.Util.getRenderedDimensions("<p>Content</p>", null, {displayClass: 'testDims'});
var overflow = OpenLayers.Util.getRenderedDimensions("<p style='overflow:auto'>Content</p>");
var width = OpenLayers.Util.getRenderedDimensions("<p>Content</p>", new OpenLayers.Size(250, null));
var height = OpenLayers.Util.getRenderedDimensions("<p>Content</p>", new OpenLayers.Size(null, 40));
if ((size.w + 40) == bigger.w && (size.h + 40) == bigger.h) {
out.innerHTML = "bigger Pass: " + size + ", " + bigger;
} else {
out.innerHTML = "bigger Fail: " + size + ", " + bigger;
}
if (size.w == overflow.w && size.h == overflow.h) {
out.innerHTML += "<br/>overflow Pass: " + size + ", " + overflow;
} else {
out.innerHTML += "<br/>overflow Fail: " + size + ", " + overflow;
}
if (width.w == 250 && width.h == size.h) {
out.innerHTML += "<br/>width Pass: " + size + ", " + width;
}
else {
out.innerHTML += "<br/>width Fail: " + size + ", " + width;
}
if (height.h == 40 && height.w == size.w) {
out.innerHTML += "<br/>height Pass: " + size + ", " + height;
}
else {
out.innerHTML += "<br/>height Fail: " + size + ", " + height;
}
// To use the same syntax as in "\tests"
var t = {eq: function(a, b, msg) {
if (a == b) {
out.innerHTML += "<br/>ok " + msg;
}
else {
out.innerHTML += "<br/><span style=\"color:red\">Fail (" + a + " not eq " + b + "): " + msg + "<span>";
}
}
};
var text = (new Array(10)).join("foo foo foo <br>"),
content = "<div>" + text + "</div>";
var testName,
finalSize,
initialSize = OpenLayers.Util.getRenderedDimensions(content, null);
// containerElement option on absolute position with width and height
testName = "Absolute with w&h: ";
var optionAbsDiv ={
containerElement: document.getElementById("absoluteDiv")
};
finalSize = OpenLayers.Util.getRenderedDimensions(content, null, optionAbsDiv);
t.eq(finalSize.w, initialSize.w,
testName + "initial width " + initialSize.w + "px is maintained");
t.eq(finalSize.h, initialSize.h,
testName + "initial height " + initialSize.h + "px is maintained");
testName = "Absolute with w&h (set height): ";
finalSize = OpenLayers.Util.getRenderedDimensions(content, {h: 15}, optionAbsDiv);
t.eq(finalSize.h, 15, testName + "got the fixed height to 15px");
t.eq(finalSize.w, initialSize.w,
testName + "initial width " + initialSize.w + "px is maintained");
testName = "Absolute with w&h (set width): ";
finalSize = OpenLayers.Util.getRenderedDimensions(content, {w: 20}, optionAbsDiv);
t.eq(finalSize.w, 20, testName + "got the fixed width to 20px");
// containerElement option on absolute position without width and height
testName = "Absolute without w&h: ";
var optionAbsDiv00 ={
containerElement: document.getElementById("absoluteDiv00")
};
finalSize = OpenLayers.Util.getRenderedDimensions(content, null, optionAbsDiv00);
t.eq(finalSize.w, initialSize.w,
testName + "initial width " + initialSize.w + "px is maintained");
t.eq(finalSize.h, initialSize.h,
testName + "initial height " + initialSize.h + "px is maintained");
testName = "Absolute without w&h (set height): ";
finalSize = OpenLayers.Util.getRenderedDimensions(content, {h: 15}, optionAbsDiv00);
t.eq(finalSize.h, 15, testName + "got the fixed height to 15px");
t.eq(finalSize.w, initialSize.w,
testName + "initial width " + initialSize.w + "px is maintained");
testName = "Absolute without w&h (set width): ";
finalSize = OpenLayers.Util.getRenderedDimensions(content, {w: 20}, optionAbsDiv00);
t.eq(finalSize.w, 20, testName + "got the fixed width to 20px");
}
</script>
</head>
<body onload="run()">
<div id="out"></div>
<div id="absoluteDiv" style="position:absolute; left:10px; width:500px; height: 500px"></div>
<div id="absoluteDiv00" style="position:absolute; left:10px;"></div>
</body>
</html>
function com_test_getRenderedDimensions(t) {
t.plan(17);
var content = (new Array(100)).join("foo ");
// test with fixed width
var fw = OpenLayers.Util.getRenderedDimensions(content, {w: 20});
t.eq(fw.w, 20, "got the fixed width");
// test with fixed height
var fh = OpenLayers.Util.getRenderedDimensions(content, {h: 15});
t.eq(fh.h, 15, "got the fixed height");
var size = OpenLayers.Util.getRenderedDimensions("<p>Content</p>");
var bigger = OpenLayers.Util.getRenderedDimensions("<p>Content</p>", null, {displayClass: 'test_getRenderedDimensions'});
var overflow = OpenLayers.Util.getRenderedDimensions("<p style='overflow:auto'>Content</p>");
var width = OpenLayers.Util.getRenderedDimensions("<p>Content</p>", new OpenLayers.Size(250, null));
var height = OpenLayers.Util.getRenderedDimensions("<p>Content</p>", new OpenLayers.Size(null, 40));
t.ok((size.w + 40) == bigger.w && (size.h + 40) == bigger.h, "bigger Pass: " + size + ", " + bigger);
t.ok(size.w == overflow.w && size.h == overflow.h, "overflow Pass: " + size + ", " + overflow);
t.ok(width.w == 250 && width.h == size.h, "width Pass: " + size + ", " + width);
t.ok(height.h == 40 && height.w == size.w, "height Pass: " + size + ", " + height);
content = (new Array(10)).join("foo foo foo <br>");
var testName,
finalSize,
initialSize = OpenLayers.Util.getRenderedDimensions(content, null);
// containerElement option on absolute position with width and height
testName = "Absolute with w&h: ";
var optionAbsDiv ={
containerElement: document.getElementById("absoluteDiv")
};
finalSize = OpenLayers.Util.getRenderedDimensions(content, null, optionAbsDiv);
t.ok(initialSize.w > 0 && initialSize.h > 0, "Has initial size (requires visible test_iframe)");
t.eq(finalSize.w, initialSize.w,
testName + "initial width " + initialSize.w + "px is maintained");
t.eq(finalSize.h, initialSize.h,
testName + "initial height " + initialSize.h + "px is maintained");
testName = "Absolute with w&h (set height): ";
finalSize = OpenLayers.Util.getRenderedDimensions(content, {h: 15}, optionAbsDiv);
t.eq(finalSize.h, 15, testName + "got the fixed height to 15px");
t.eq(finalSize.w, initialSize.w,
testName + "initial width " + initialSize.w + "px is maintained");
testName = "Absolute with w&h (set width): ";
finalSize = OpenLayers.Util.getRenderedDimensions(content, {w: 20}, optionAbsDiv);
t.eq(finalSize.w, 20, testName + "got the fixed width to 20px");
// containerElement option on absolute position without width and height
testName = "Absolute without w&h: ";
var optionAbsDiv00 ={
containerElement: document.getElementById("absoluteDiv00")
};
finalSize = OpenLayers.Util.getRenderedDimensions(content, null, optionAbsDiv00);
t.eq(finalSize.w, initialSize.w,
testName + "initial width " + initialSize.w + "px is maintained");
t.eq(finalSize.h, initialSize.h,
testName + "initial height " + initialSize.h + "px is maintained");
testName = "Absolute without w&h (set height): ";
finalSize = OpenLayers.Util.getRenderedDimensions(content, {h: 15}, optionAbsDiv00);
t.eq(finalSize.h, 15, testName + "got the fixed height to 15px");
t.eq(finalSize.w, initialSize.w,
testName + "initial width " + initialSize.w + "px is maintained");
testName = "Absolute without w&h (set width): ";
finalSize = OpenLayers.Util.getRenderedDimensions(content, {w: 20}, optionAbsDiv00);
t.eq(finalSize.w, 20, testName + "got the fixed width to 20px");
}
+35
View File
@@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<style type="text/css">
.test_getRenderedDimensions p{
padding: 20px;
}
</style>
<script>
var OpenLayers = [
"OpenLayers/BaseTypes/Class.js",
"OpenLayers/Util.js",
"OpenLayers/BaseTypes.js",
"OpenLayers/BaseTypes/Element.js",
"OpenLayers/BaseTypes/LonLat.js",
"OpenLayers/BaseTypes/Pixel.js",
"OpenLayers/BaseTypes/Size.js",
"OpenLayers/Lang.js",
"OpenLayers/Console.js"
];
</script>
<script src="OLLoader.js"></script>
<script src="Util_common.js"></script>
<script type="text/javascript">
function test_getRenderedDimensions(t) {
// from <script src="Util_common.js"> and shared by Util.html
com_test_getRenderedDimensions(t);
}
</script>
</head>
<body>
<div id="map" style="width: 1024px; height: 512px;"/>
</body>
</html>
+4 -5
View File
@@ -31,11 +31,10 @@
map.addLayer(layer);
map.setCenter(new OpenLayers.LonLat(0,0), 5);
var tile = layer.grid[0][0];
tile.draw(true); // the tile queue defers the drawing
t.eq( tile.bounds.left, -22.5, "left side matches" );
t.eq( tile.bounds.right, -11.25, "top side matches" );
t.eq( tile.bounds.bottom.toFixed(6), '11.178402', "bottom side matches" );
t.eq( tile.bounds.top.toFixed(6), '21.943046', "top side matches" );
t.eq( tile.bounds.left, -22.5, "left side matches" );
t.eq( tile.bounds.right, -11.25, "right side matches" );
t.eq( tile.bounds.bottom.toFixed(6), '11.781325', "bottom side matches" );
t.eq( tile.bounds.top.toFixed(6), '22.512557', "top side matches" );
map.destroy();
} else {
t.plan(1);
+3 -3
View File
@@ -1,3 +1,4 @@
<!DOCTYPE html>
<html>
<head>
<!-- this gmaps key generated for http://openlayers.org/dev/ -->
@@ -31,11 +32,10 @@
map.addLayer(wmslayer);
map.setCenter(new OpenLayers.LonLat(0,0), 5);
var tile = wmslayer.grid[0][0];
tile.draw(true); // the tile queue defers the drawing
t.eq( tile.bounds.left, -22.5, "left side matches" );
t.eq( tile.bounds.right, -11.25, "right side matches" );
t.eq( tile.bounds.bottom.toFixed(6), '11.178402', "bottom side matches" );
t.eq( tile.bounds.top.toFixed(6), '21.943046', "top side matches" );
t.eq( tile.bounds.bottom.toFixed(6), '11.781325', "bottom side matches" );
t.eq( tile.bounds.top.toFixed(6), '22.512557', "top side matches" );
map.destroy();
} else {
t.plan(1);
@@ -1,9 +1,11 @@
<html>
<head>
<script src="../OLLoader.js"></script>
<script src="../../OLLoader.js"></script>
<script src="../../../lib/Rico/Corner.js"></script>
<script src="../../../lib/deprecated.js"></script>
<script type="text/javascript">
function test_Popup_Anchored_setOpacity(t) {
function test_Popup_Anchored_setOpacity(t) {
t.plan(5);
var opacity = 0.5;
var id = "chicken";
@@ -32,7 +34,7 @@
popup.setOpacity(opacity);
popup.draw(new OpenLayers.Pixel(x, y));
if (navigator.appName.indexOf("Microsoft") == -1) {
if (navigator.appName.indexOf("Microsoft") == -1 || new RegExp(/msie 10/).test(navigator.userAgent.toLowerCase())) {
t.eq(parseFloat(popup.div.style.opacity), opacity, "good default popup.opacity");
} else {
t.eq(popup.div.style.filter, "alpha(opacity=" + opacity*100 + ")", "good default popup.opacity");
@@ -43,12 +45,12 @@
t.ok(popup.groupDiv.parentNode.getElementsByTagName("span").length > 0, "popup.groupDiv.parentNode has SPAN children");
var ricoCornerDiv = popup.groupDiv.parentNode.getElementsByTagName("span")[0];
if (navigator.appName.indexOf("Microsoft") == -1) {
if (navigator.appName.indexOf("Microsoft") == -1 || new RegExp(/msie 10/).test(navigator.userAgent.toLowerCase())) {
t.eq(parseFloat(ricoCornerDiv.style.opacity), opacity, "good default ricoCornerDiv.opacity");
} else {
t.eq(ricoCornerDiv.style.filter, "alpha(opacity=" + opacity*100 + ")", "good default ricoCornerDiv.opacity");
}
}
</script>
+4 -3
View File
@@ -191,9 +191,8 @@
<li>SingleFile1.html</html>
<li>SingleFile2.html</html>
<li>SingleFile3.html</html>
<li>Popup.html</li>
<li>Popup.html?visible</li>
<li>Popup/Anchored.html</li>
<li>Popup/AnchoredBubble.html</li>
<li>Popup/FramedCloud.html</li>
<li>Projection.html</li>
<li>Protocol.html</li>
@@ -234,7 +233,8 @@
<li>TileManager.html</li>
<li>Tween.html</li>
<li>Kinetic.html</li>
<li>Util.html</li>
<li>Util.html?visible</li>
<li>Util_w3c.html?visible</li>
<li>Util/vendorPrefix.html</li>
<li>WPSClient.html</li>
<li>WPSProcess.html</li>
@@ -250,6 +250,7 @@
<li>deprecated/Layer/WFS.html</li>
<li>deprecated/Layer/WMS.html</li>
<li>deprecated/Layer/WMS/Post.html</li>
<li>deprecated/Popup/AnchoredBubble.html</li>
<li>deprecated/Protocol/SQL.html</li>
<li>deprecated/Protocol/SQL/Gears.html</li>
<li>deprecated/Renderer/SVG2.html</li>
+4 -2
View File
@@ -92,11 +92,13 @@
</div>
</div>
</div>
<span>
<iframe id="test_iframe_el" style="display:none" name="test_iframe" onload="Test.AnotherWay._test_page_onload();">
</iframe>
</span>
<span style="display:none">
<iframe name="list_iframe" onload="Test.AnotherWay._list_iframe_onload();">
</iframe>
<iframe name="test_iframe" onload="Test.AnotherWay._test_page_onload();">
</iframe>
<!-- record_control div is to be imported into other documents, so all its styles are inline -->-
<div id="record_control" style="position:absolute;bottom:0;left:0;margin:0;padding:0.5em;width:22em;height:22em;border:1px solid;background:#ffd;font: normal normal 8pt sans-serif; color:#000; text-align: left">
<p style="margin:0 0 0 0; padding:0">