Merge branch 'master' of https://github.com/openlayers/openlayers into no-$
This commit is contained in:
+26
-21
@@ -201,28 +201,30 @@
|
||||
|
||||
function test_Number_numericIf(t) {
|
||||
var cases = [
|
||||
{value: "3", expect: 3},
|
||||
{value: "+3", expect: 3},
|
||||
{value: "-3", expect: -3},
|
||||
{value: "3.0", expect: 3},
|
||||
{value: "+3.0", expect: 3},
|
||||
{value: "-3.0", expect: -3},
|
||||
{value: "6.02e23", expect: 6.02e23},
|
||||
{value: "+1.0e-100", expect: 1e-100},
|
||||
{value: "-1.0e+100", expect: -1e100},
|
||||
{value: "1E100", expect: 1e100},
|
||||
{value: null, expect: null},
|
||||
{value: true, expect: true},
|
||||
{value: false, expect: false},
|
||||
{value: undefined, expect: undefined},
|
||||
{value: "", expect: ""},
|
||||
{value: "3 ", expect: "3 "},
|
||||
{value: " 3", expect: " 3"},
|
||||
{value: "1e", expect: "1e"},
|
||||
{value: "1+e", expect: "1+e"},
|
||||
{value: "1-e", expect: "1-e"}
|
||||
{value: "3", expect: 3, expectWithTrim: 3},
|
||||
{value: "+3", expect: 3, expectWithTrim: 3},
|
||||
{value: "-3", expect: -3, expectWithTrim: -3},
|
||||
{value: "3.0", expect: 3, expectWithTrim: 3},
|
||||
{value: "+3.0", expect: 3, expectWithTrim: 3},
|
||||
{value: "-3.0", expect: -3, expectWithTrim: -3},
|
||||
{value: "6.02e23", expect: 6.02e23, expectWithTrim: 6.02e23},
|
||||
{value: "+1.0e-100", expect: 1e-100, expectWithTrim: 1e-100},
|
||||
{value: "-1.0e+100", expect: -1e100, expectWithTrim: -1e100},
|
||||
{value: "1E100", expect: 1e100, expectWithTrim: 1e100},
|
||||
{value: null, expect: null, expectWithTrim: null},
|
||||
{value: true, expect: true, expectWithTrim: true},
|
||||
{value: false, expect: false, expectWithTrim: false},
|
||||
{value: undefined, expect: undefined, expectWithTrim: undefined},
|
||||
{value: "", expect: "", expectWithTrim: ""},
|
||||
{value: "3 ", expect: "3 ", expectWithTrim: 3},
|
||||
{value: " 3", expect: " 3", expectWithTrim: 3},
|
||||
{value: "1e", expect: "1e", expectWithTrim: "1e"},
|
||||
{value: "1+e", expect: "1+e", expectWithTrim: "1+e"},
|
||||
{value: "1-e", expect: "1-e", expectWithTrim: "1-e"},
|
||||
{value: " 27 ", expect: " 27 ", expectWithTrim: 27},
|
||||
{value: " abc ", expect: " abc ", expectWithTrim: " abc "}
|
||||
];
|
||||
t.plan(cases.length);
|
||||
t.plan(cases.length*2);
|
||||
|
||||
var func = OpenLayers.String.numericIf;
|
||||
var obj, val, got, exp;
|
||||
@@ -232,6 +234,9 @@
|
||||
exp = obj.expect;
|
||||
got = func(val);
|
||||
t.eq(got, exp, "'" + val + "' returns " + exp);
|
||||
got = func(val, true);
|
||||
exp = obj.expectWithTrim;
|
||||
t.eq(got, exp, "'" + val + "' returns " + exp + " with trimWhitespace true");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -175,6 +175,15 @@
|
||||
t.ok(isNaN(invalid.getTime()), "invalid has no time");
|
||||
}
|
||||
|
||||
function test_regex(t) {
|
||||
t.plan(1);
|
||||
var regex = OpenLayers.Date.dateRegEx;
|
||||
OpenLayers.Date.dateRegEx = /^(?:(-?\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:(?:T(\d{1,2}):(\d{2}):(\d{2}(?:\.\d+)?)(Z|(?:[+-]\d{1,2}(?::(\d{2}))?)))|Z)?$/;
|
||||
var date = OpenLayers.Date.parse("-0501-03-01T00:00:00.000Z");
|
||||
t.ok(!isNaN(date.getTime()), "date with negative year is parsed when providing alternative regex");
|
||||
OpenLayers.Date.dateRegEx = regex;
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
<html>
|
||||
<head>
|
||||
<script>
|
||||
/**
|
||||
* Because browsers that implement requestAnimationFrame may not execute
|
||||
* animation functions while a window is not displayed (e.g. in a hidden
|
||||
* iframe as in these tests), we mask the native implementations here. The
|
||||
* native requestAnimationFrame functionality is tested in Util.html and
|
||||
* in PanZoom.html (where a popup is opened before panning). The tests
|
||||
* here will test the fallback setTimeout implementation for animation.
|
||||
*/
|
||||
window.requestAnimationFrame =
|
||||
window.webkitRequestAnimationFrame =
|
||||
window.mozRequestAnimationFrame =
|
||||
window.oRequestAnimationFrame =
|
||||
window.msRequestAnimationFrame = null;
|
||||
</script>
|
||||
<script src="../OLLoader.js"></script>
|
||||
<script type="text/javascript">
|
||||
function test_addLayer_removeLayer(t) {
|
||||
t.plan(6);
|
||||
var control = new OpenLayers.Control.CacheRead();
|
||||
var map = new OpenLayers.Map({
|
||||
div: "map",
|
||||
controls: [control],
|
||||
layers: [
|
||||
new OpenLayers.Layer.WMS("One"),
|
||||
new OpenLayers.Layer.WMS("Two")
|
||||
]
|
||||
});
|
||||
t.ok(map.layers[0].events.listeners.tileloadstart, "tileloadstart listener registered on layer One");
|
||||
t.ok(map.layers[1].events.listeners.tileloadstart, "tileloadstart listener registered on layer Two");
|
||||
control.destroy();
|
||||
t.ok(!map.layers[1].events.listeners.tileloadstart.length, "tileloadstart listener unregistered");
|
||||
|
||||
control = new OpenLayers.Control.CacheRead({
|
||||
fetchEvent: "tileerror",
|
||||
layers: [map.layers[0]]
|
||||
});
|
||||
map.addControl(control);
|
||||
t.ok(map.layers[0].events.listeners.tileerror, "tileerror listener registered on layer One");
|
||||
t.ok(!map.layers[1].events.listeners.tileerror, "tileerror listener not registered on layer Two");
|
||||
control.destroy();
|
||||
t.ok(!map.layers[0].events.listeners.tileerror.length, "tileerror listener unregistered");
|
||||
|
||||
map.destroy();
|
||||
}
|
||||
|
||||
function test_fetch(t) {
|
||||
|
||||
if (!window.localStorage) {
|
||||
t.plan(1);
|
||||
var scope = {active: true};
|
||||
t.eq(OpenLayers.Control.CacheRead.prototype.fetch.call(scope), undefined, "no tiles fetched when localStorage is not supported.");
|
||||
return;
|
||||
}
|
||||
|
||||
t.plan(5);
|
||||
|
||||
var data = "data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==";
|
||||
window.localStorage.setItem("olCache_foo/1/1/1", data);
|
||||
window.localStorage.setItem("olCache_bar/1/1/1", data);
|
||||
|
||||
var layer1 = new OpenLayers.Layer.XYZ("One", "foo/${x}/${y}/${z}");
|
||||
var layer2 = new OpenLayers.Layer.XYZ("Two", "bar/${x}/${y}/${z}", {isBaseLayer: false});
|
||||
var control1 = new OpenLayers.Control.CacheRead({
|
||||
layers: [layer1]
|
||||
});
|
||||
var control2 = new OpenLayers.Control.CacheRead({
|
||||
layers: [layer2],
|
||||
fetchEvent: "tileerror"
|
||||
});
|
||||
|
||||
var map = new OpenLayers.Map({
|
||||
div: "map",
|
||||
projection: "EPSG:900913",
|
||||
controls: [control1, control2],
|
||||
layers: [layer1, layer2],
|
||||
zoom: 1,
|
||||
center: [0, 0]
|
||||
});
|
||||
|
||||
OpenLayers.ProxyHost = "proxy?url=";
|
||||
var tile = new OpenLayers.Tile.Image(layer1, new OpenLayers.LonLat(0, 0), new OpenLayers.Bounds(0, 0, 1, 1), "proxy?url=foo/1/1/1");
|
||||
OpenLayers.Control.CacheWrite.urlMap[tile.url] = "foo/1/1/1";
|
||||
|
||||
control1.fetch({tile: tile});
|
||||
t.eq(tile.url, data, "proxied url replaced with data uri for original url");
|
||||
delete OpenLayers.Control.CacheWrite.urlMap[tile.url];
|
||||
|
||||
t.delay_call(1, function() {
|
||||
t.eq(layer1.grid[1][1].imgDiv.src, data, "[tileloadstart] tile content from cache");
|
||||
t.ok(layer1.grid[0][0].imgDiv.src !== data, "[tileloadstart] tile content from remote resource");
|
||||
t.eq(layer2.grid[1][1].imgDiv.src, data, "[tileerror] tile content from cache");
|
||||
t.ok(layer2.grid[0][0].imgDiv.src !== data, "[tileerror] tile content from remote resource");
|
||||
|
||||
window.localStorage.removeItem("olCache_foo/1/1/1");
|
||||
window.localStorage.removeItem("olCache_bar/1/1/1");
|
||||
map.destroy();
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="map" style="width: 400px; height: 250px;"/>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,87 @@
|
||||
<html>
|
||||
<head>
|
||||
<script src="../OLLoader.js"></script>
|
||||
<script type="text/javascript">
|
||||
function test_addLayer_removeLayer(t) {
|
||||
t.plan(6);
|
||||
var control = new OpenLayers.Control.CacheWrite();
|
||||
var map = new OpenLayers.Map({
|
||||
div: "map",
|
||||
controls: [control],
|
||||
layers: [
|
||||
new OpenLayers.Layer.WMS("One"),
|
||||
new OpenLayers.Layer.WMS("Two")
|
||||
]
|
||||
});
|
||||
t.ok(map.layers[0].events.listeners.tileloaded, "tileloaded listener registered on layer One");
|
||||
t.ok(map.layers[1].events.listeners.tileloaded, "tileloaded listener registered on layer Two");
|
||||
control.destroy();
|
||||
t.ok(!map.layers[1].events.listeners.tileloaded.length, "tileloaded listener unregistered");
|
||||
|
||||
control = new OpenLayers.Control.CacheWrite({
|
||||
layers: [map.layers[0]]
|
||||
});
|
||||
map.addControl(control);
|
||||
t.ok(map.layers[0].events.listeners.tileloaded.length, "tileloaded listener registered on layer One");
|
||||
t.ok(!map.layers[1].events.listeners.tileloaded.length, "tileloaded listener not registered on layer Two");
|
||||
control.destroy();
|
||||
t.ok(!map.layers[0].events.listeners.tileloaded.length, "tileloaded listener unregistered");
|
||||
|
||||
map.destroy();
|
||||
}
|
||||
|
||||
function test_cache_clearCache(t) {
|
||||
|
||||
if (!window.localStorage) {
|
||||
t.plan(2);
|
||||
var scope = {active: true};
|
||||
t.eq(OpenLayers.Control.CacheWrite.prototype.cache.call(scope), undefined, "no tiles cached when localStorage is not supported.");
|
||||
t.ok(!OpenLayers.Control.CacheWrite.clearCache(), "clearCache does nothing when localStorage is not supported.");
|
||||
return;
|
||||
}
|
||||
|
||||
t.plan(3);
|
||||
OpenLayers.Control.CacheWrite.clearCache();
|
||||
var length = window.localStorage.length;
|
||||
|
||||
var tiles = 0;
|
||||
var layer = new OpenLayers.Layer.XYZ("One", "../../img/blank.gif?${x},${y},${z}", {
|
||||
eventListeners: {
|
||||
tileloaded: function() {
|
||||
tiles++;
|
||||
}
|
||||
}
|
||||
});
|
||||
var control = new OpenLayers.Control.CacheWrite({autoActivate: true});
|
||||
var map = new OpenLayers.Map({
|
||||
div: "map",
|
||||
projection: "EPSG:900913",
|
||||
controls: [control],
|
||||
layers: [layer],
|
||||
zoom: 1,
|
||||
center: [0, 0]
|
||||
});
|
||||
t.delay_call(1, function() {
|
||||
var canvasContext = layer.grid[1][1].getCanvasContext();
|
||||
t.eq(window.localStorage.length, length + (canvasContext ? tiles : 0), "cache filled with tiles");
|
||||
var url = layer.grid[1][1].url;
|
||||
// content will be null for browsers that have localStorage but no canvas support
|
||||
var content = canvasContext ? canvasContext.canvas.toDataURL("image/png") : null;
|
||||
t.eq(window.localStorage.getItem("olCache_"+url), content, "localStorage contains correct image data");
|
||||
|
||||
var key = Math.random();
|
||||
window.localStorage.setItem(key, "bar");
|
||||
OpenLayers.Control.CacheWrite.clearCache();
|
||||
t.eq(window.localStorage.length, length + 1, "cache cleared, but foreign entries left in localStorage");
|
||||
window.localStorage.removeItem(key);
|
||||
|
||||
map.destroy();
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="map" style="width: 400px; height: 250px;"/>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,7 +1,7 @@
|
||||
<html>
|
||||
<head>
|
||||
<script src="../OLLoader.js"></script>
|
||||
<script src="http://proj4js.org/lib/proj4js-compressed.js"></script>
|
||||
<script src="http://svn.osgeo.org/metacrs/proj4js/trunk/lib/proj4js-compressed.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
function test_initialize(t) {
|
||||
|
||||
@@ -209,6 +209,37 @@
|
||||
|
||||
map.destroy();
|
||||
}
|
||||
|
||||
function test_custom_div(t) {
|
||||
t.plan(3);
|
||||
var div = document.createElement('div');
|
||||
|
||||
control = new OpenLayers.Control.OverviewMap({
|
||||
div: div
|
||||
});
|
||||
|
||||
map = new OpenLayers.Map('map', {
|
||||
layers : [new OpenLayers.Layer("layer", {isBaseLayer: true})],
|
||||
controls: [control]
|
||||
});
|
||||
|
||||
t.eq(control.maximizeDiv, null,
|
||||
"OverviewMap does not create maximize div");
|
||||
t.eq(control.minimizeDiv, null,
|
||||
"OverviewMap does not create minimize div");
|
||||
|
||||
var exc;
|
||||
try {
|
||||
control.maximizeControl();
|
||||
control.minimizeControl();
|
||||
} catch(e) {
|
||||
exc = e;
|
||||
}
|
||||
|
||||
t.eq(exc, undefined, 'maximize and minimize do not trigger an exception');
|
||||
|
||||
map.destroy();
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
@@ -43,8 +43,19 @@
|
||||
|
||||
function test_Control_PanZoom_control_events (t) {
|
||||
|
||||
if ( !window.document.createEvent || OpenLayers.BROWSER_NAME == "opera" || !t.open_window) {
|
||||
//ie can't simulate mouseclicks
|
||||
// IE 9+ does support the standard document.createEvent,
|
||||
// event.initMouseEvent, and elem.dispatchEvent calls, so it
|
||||
// should be possible to simulate clicks in this browser.
|
||||
// For example it looks like jQuery UI does simulate events
|
||||
// using document.createElement in IE 9+. See
|
||||
// https://github.com/jquery/jquery-ui/blob/master/tests/jquery.simulate.js.
|
||||
// I haven't been able to make it work though.
|
||||
|
||||
if ( !window.document.createEvent ||
|
||||
OpenLayers.BROWSER_NAME == "msie" ||
|
||||
OpenLayers.BROWSER_NAME == "opera" ||
|
||||
!t.open_window) {
|
||||
|
||||
t.plan(0);
|
||||
t.debug_print("FIXME: This browser does not support the PanZoom test at this time.");
|
||||
} else {
|
||||
|
||||
@@ -337,6 +337,43 @@
|
||||
t.ok(panel2.events.element === div, "Panel outside map has the panel's div as element on its Events instance");
|
||||
|
||||
}
|
||||
|
||||
function test_iconOniconOff (t) {
|
||||
t.plan(6);
|
||||
var map = new OpenLayers.Map("map"),
|
||||
navControl = new OpenLayers.Control.Navigation({autoActivate: true}),
|
||||
zbControl = new OpenLayers.Control.ZoomBox(),
|
||||
panel = new OpenLayers.Control.Panel({defaultControl: navControl}),
|
||||
navActiveClass, navInactiveClass, zbActiveClass, zbInactiveClass;
|
||||
|
||||
panel.addControls([navControl, zbControl]);
|
||||
map.addControl(panel);
|
||||
|
||||
navControl.panel_div.className += " foo";
|
||||
zbControl.panel_div.className = "bar " + zbControl.panel_div.className;
|
||||
|
||||
t.eq(navControl.panel_div.className, "olControlNavigationItemActive olButton foo",
|
||||
"defaultControl className is set to [displayClass]Active on panel instantiation");
|
||||
t.eq(zbControl.panel_div.className, "bar olControlZoomBoxItemInactive olButton",
|
||||
"non-defaultControl className is set to [displayClass]Inactive on panel instantiation");
|
||||
|
||||
panel.activateControl(zbControl);
|
||||
|
||||
t.eq(zbControl.panel_div.className, "bar olControlZoomBoxItemActive olButton",
|
||||
"active control class name with preceding secondary class name is set to [displayClass]Active");
|
||||
t.eq(navControl.panel_div.className, "olControlNavigationItemInactive olButton foo",
|
||||
"inactive control class name with trailing secondary class name is set to [displayClass]Inactive");
|
||||
|
||||
panel.activateControl(navControl);
|
||||
|
||||
t.eq(navControl.panel_div.className, "olControlNavigationItemActive olButton foo",
|
||||
"active control class name with trailing secondary class name is set to [displayClass]Active");
|
||||
t.eq(zbControl.panel_div.className, "bar olControlZoomBoxItemInactive olButton",
|
||||
"inactive control class name with preceding secondary class name is set to [displayClass]Inactive");
|
||||
|
||||
map.destroy();
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<script>
|
||||
/**
|
||||
* Because browsers that implement requestAnimationFrame may not execute
|
||||
* animation functions while a window is not displayed (e.g. in a hidden
|
||||
* iframe as in these tests), we mask the native implementations here. The
|
||||
* native requestAnimationFrame functionality is tested in Util.html and
|
||||
* in PanZoom.html (where a popup is opened before panning). The panTo tests
|
||||
* here will test the fallback setTimeout implementation for animation.
|
||||
*/
|
||||
window.requestAnimationFrame =
|
||||
window.webkitRequestAnimationFrame =
|
||||
window.mozRequestAnimationFrame =
|
||||
window.oRequestAnimationFrame =
|
||||
window.msRequestAnimationFrame = null;
|
||||
</script>
|
||||
<script src="../OLLoader.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
var map, layer, control;
|
||||
var log;
|
||||
function setUp() {
|
||||
layer = new OpenLayers.Layer.UTFGrid({
|
||||
url: "../data/utfgrid/world_utfgrid/${z}/${x}/${y}.json",
|
||||
isBaseLayer: true,
|
||||
utfgridResolution: 4
|
||||
});
|
||||
map = new OpenLayers.Map({
|
||||
div: "map",
|
||||
projection: "EPSG:900913",
|
||||
layers: [layer],
|
||||
center: [0, 0],
|
||||
zoom: 1
|
||||
});
|
||||
log = [];
|
||||
control = new OpenLayers.Control.UTFGrid({
|
||||
callback: function(infoLookup, loc, pixel) {
|
||||
log.push([infoLookup, loc, pixel]);
|
||||
}
|
||||
});
|
||||
map.addControl(control);
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
map.destroy();
|
||||
map = null;
|
||||
layer = null;
|
||||
control = null;
|
||||
log = [];
|
||||
}
|
||||
|
||||
function test_constructor(t) {
|
||||
t.plan(2);
|
||||
|
||||
var control = new OpenLayers.Control.UTFGrid();
|
||||
t.ok(control instanceof OpenLayers.Control.UTFGrid, "utfgrid instance");
|
||||
t.eq(control.handlerMode, "click", "control mode");
|
||||
|
||||
control.destroy();
|
||||
|
||||
}
|
||||
|
||||
function test_handleEvent(t) {
|
||||
setUp();
|
||||
|
||||
var cases = [{
|
||||
evt: {xy: {x: 100, y: 70}},
|
||||
lookup: {
|
||||
"0": {
|
||||
id: "207",
|
||||
data: {
|
||||
NAME: "United States",
|
||||
POP2005: 299846449
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
evt: {xy: {x: 350, y: 20}},
|
||||
lookup: {
|
||||
"0": {
|
||||
id: "245",
|
||||
data: {
|
||||
NAME: "Russia",
|
||||
POP2005: 143953092
|
||||
}
|
||||
}
|
||||
}
|
||||
}];
|
||||
|
||||
var len = cases.length;
|
||||
t.plan(4*len);
|
||||
|
||||
// wait for tile loading to finish
|
||||
t.delay_call(0.5, function() {
|
||||
var c, arg;
|
||||
for (var i=0; i<len; ++i) {
|
||||
c = cases[i];
|
||||
t.eq(log.length, i, i + ": log length before");
|
||||
control.handleEvent(c.evt);
|
||||
t.eq(log.length, i+1, i + ": log length after");
|
||||
t.eq(log[i][0], c.lookup, i + ": callback infoLookup");
|
||||
t.eq(log[i][2], c.evt.xy, i + ": callback pixel");
|
||||
}
|
||||
|
||||
tearDown();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="map" style="height: 256px; width: 512px"></div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<script src="../OLLoader.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
function test_constructor(t) {
|
||||
t.plan(5);
|
||||
|
||||
var control = new OpenLayers.Control.Zoom();
|
||||
t.ok(control instanceof OpenLayers.Control, "instance of Control");
|
||||
t.ok(control instanceof OpenLayers.Control.Zoom, "instance of Zoom");
|
||||
t.eq(control.displayClass, "olControlZoom", "displayClass");
|
||||
control.destroy();
|
||||
|
||||
control = new OpenLayers.Control.Zoom({
|
||||
zoomInText: "zoom in!",
|
||||
zoomOutText: "zoom out!"
|
||||
});
|
||||
t.eq(control.zoomInText, "zoom in!", "zoomInText");
|
||||
t.eq(control.zoomOutText, "zoom out!", "zoomOutText");
|
||||
control.destroy();
|
||||
}
|
||||
|
||||
function test_addControl(t) {
|
||||
t.plan(3);
|
||||
var map = new OpenLayers.Map("map");
|
||||
var control = new OpenLayers.Control.Zoom();
|
||||
map.addControl(control);
|
||||
t.ok(control.map === map, "Control.map set");
|
||||
t.ok(!!~OpenLayers.Util.indexOf(map.controls, control), "map.controls contains control");
|
||||
|
||||
control = new OpenLayers.Control.Zoom({zoomInId: "in", zoomOutId: "out"});
|
||||
map.addControl(control);
|
||||
var eventsEl = document.getElementById("out").parentNode;
|
||||
t.ok(control.events.element === eventsEl, "Events instance listens to custom div's parentNode");
|
||||
|
||||
map.destroy();
|
||||
}
|
||||
|
||||
function test_zoomIn(t) {
|
||||
t.plan(2);
|
||||
|
||||
var map = new OpenLayers.Map({
|
||||
div: "map",
|
||||
layers: [new OpenLayers.Layer(null, {isBaseLayer: true})]
|
||||
});
|
||||
var control = new OpenLayers.Control.Zoom();
|
||||
map.addControl(control);
|
||||
map.setCenter([0, 0], 0);
|
||||
|
||||
t.eq(map.getZoom(), 0, "initial center");
|
||||
map.events.triggerEvent("buttonclick", {buttonElement: control.zoomInLink});
|
||||
t.eq(map.getZoom(), 1, "after zoom in");
|
||||
map.destroy();
|
||||
}
|
||||
|
||||
function test_zoomOut(t) {
|
||||
t.plan(2);
|
||||
|
||||
var map = new OpenLayers.Map({
|
||||
div: "map",
|
||||
layers: [new OpenLayers.Layer(null, {isBaseLayer: true})]
|
||||
});
|
||||
var control = new OpenLayers.Control.Zoom();
|
||||
map.addControl(control);
|
||||
map.setCenter([0, 0], 1);
|
||||
|
||||
t.eq(map.getZoom(), 1, "initial center");
|
||||
map.events.triggerEvent("buttonclick", {buttonElement: control.zoomOutLink});
|
||||
t.eq(map.getZoom(), 0, "after zoom out");
|
||||
map.destroy();
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="map" style="width: 512px; height: 256px;"/>
|
||||
<div id="in">in</div><div id="out">out</out>
|
||||
</body>
|
||||
</html>
|
||||
@@ -523,6 +523,14 @@
|
||||
|
||||
}
|
||||
|
||||
function test_whitespace(t) {
|
||||
t.plan(1);
|
||||
var xml = readXML("propertyisbetweenwhitespace.sld");
|
||||
var output = new OpenLayers.Format.SLD().read(xml);
|
||||
var filter = output.namedLayers['geonode:US_Stat0'].userStyles[0].rules[0].filter;
|
||||
t.eq(filter.lowerBoundary, 29.7, "whitespace ignored in values and value transformed to number");
|
||||
}
|
||||
|
||||
function test_label_LinePlacement(t) {
|
||||
t.plan(1);
|
||||
var format = new OpenLayers.Format.SLD.v1_0_0({
|
||||
@@ -970,5 +978,51 @@
|
||||
</sld:FeatureTypeStyle>
|
||||
</sld:UserStyle>
|
||||
--></div>
|
||||
<div id="propertyisbetweenwhitespace.sld"><!--
|
||||
<sld:StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" version="1.0.0">
|
||||
<sld:NamedLayer>
|
||||
<sld:Name>geonode:US_Stat0</sld:Name>
|
||||
<sld:UserStyle>
|
||||
<sld:Name>US_Stat0_5cbbe918</sld:Name>
|
||||
<sld:Title>BMI<25</sld:Title>
|
||||
<sld:FeatureTypeStyle>
|
||||
<sld:Name>name</sld:Name>
|
||||
<sld:Rule>
|
||||
<sld:Title>BMI<25</sld:Title>
|
||||
<ogc:Filter>
|
||||
<ogc:PropertyIsBetween>
|
||||
<ogc:PropertyName>Hlt_st_BMI</ogc:PropertyName>
|
||||
<ogc:LowerBoundary>
|
||||
<ogc:Literal>
|
||||
|
||||
|
||||
29.7
|
||||
|
||||
|
||||
</ogc:Literal>
|
||||
</ogc:LowerBoundary>
|
||||
<ogc:UpperBoundary>
|
||||
<ogc:Literal>
|
||||
|
||||
|
||||
36.2
|
||||
|
||||
|
||||
</ogc:Literal>
|
||||
</ogc:UpperBoundary>
|
||||
</ogc:PropertyIsBetween>
|
||||
</ogc:Filter>
|
||||
<sld:PolygonSymbolizer>
|
||||
<sld:Fill>
|
||||
<sld:CssParameter name="fill">#C0F58C</sld:CssParameter>
|
||||
</sld:Fill>
|
||||
<sld:Stroke/>
|
||||
</sld:PolygonSymbolizer>
|
||||
</sld:Rule>
|
||||
</sld:FeatureTypeStyle>
|
||||
</sld:UserStyle>
|
||||
</sld:NamedLayer>
|
||||
</sld:StyledLayerDescriptor>
|
||||
--></div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
"poly_label.sld"
|
||||
];
|
||||
var len = cases.length;
|
||||
t.plan(len);
|
||||
t.plan(len+1);
|
||||
|
||||
var format = new OpenLayers.Format.SLD({
|
||||
profile: "GeoServer",
|
||||
@@ -31,7 +31,23 @@
|
||||
out = format.write(data);
|
||||
t.xml_eq(out, doc.documentElement, "round-tripped " + c);
|
||||
}
|
||||
|
||||
doc = readXML("poly_label.sld");
|
||||
data = format.read(doc);
|
||||
data.namedLayers[0].userStyles[0].rules[0].symbolizers[1].graphic = false;
|
||||
out = format.write(data);
|
||||
t.xml_eq(out, readXML("poly_label_nographic.sld").documentElement, "If graphic is false no Graphic is outputted");
|
||||
}
|
||||
|
||||
function test_readTextSymbolizer(t) {
|
||||
t.plan(1);
|
||||
var format = new OpenLayers.Format.SLD({
|
||||
profile: "GeoServer",
|
||||
multipleSymbolizers: true,
|
||||
namedLayersAsArray: true
|
||||
});
|
||||
doc = readXML("point_pointwithdefaultlabel.sld");
|
||||
var sld = format.read(doc);
|
||||
t.eq(sld.namedLayers[0].userStyles[0].rules[0].symbolizers[1].graphic, false, "graphic set to false on TextSymbolizer");
|
||||
}
|
||||
|
||||
</script>
|
||||
@@ -110,5 +126,103 @@
|
||||
</NamedLayer>
|
||||
</StyledLayerDescriptor>
|
||||
--></div>
|
||||
<div id="poly_label_nographic.sld"><!--
|
||||
<StyledLayerDescriptor version="1.0.0"
|
||||
xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
|
||||
xmlns="http://www.opengis.net/sld"
|
||||
xmlns:ogc="http://www.opengis.net/ogc"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<NamedLayer>
|
||||
<Name>Polygon with styled label</Name>
|
||||
<UserStyle>
|
||||
<Title>SLD Cook Book: Polygon with styled label</Title>
|
||||
<FeatureTypeStyle>
|
||||
<Rule>
|
||||
<PolygonSymbolizer>
|
||||
<Fill>
|
||||
<CssParameter name="fill">#40FF40</CssParameter>
|
||||
</Fill>
|
||||
<Stroke>
|
||||
<CssParameter name="stroke">#FFFFFF</CssParameter>
|
||||
<CssParameter name="stroke-width">2</CssParameter>
|
||||
</Stroke>
|
||||
</PolygonSymbolizer>
|
||||
<TextSymbolizer>
|
||||
<Label>
|
||||
<ogc:PropertyName>name</ogc:PropertyName>
|
||||
</Label>
|
||||
<Font>
|
||||
<CssParameter name="font-family">Arial</CssParameter>
|
||||
<CssParameter name="font-size">11</CssParameter>
|
||||
<CssParameter name="font-weight">bold</CssParameter>
|
||||
<CssParameter name="font-style">normal</CssParameter>
|
||||
</Font>
|
||||
<Fill>
|
||||
<CssParameter name="fill">#000000</CssParameter>
|
||||
<CssParameter name="fill-opacity">0.5</CssParameter>
|
||||
</Fill>
|
||||
<Priority>
|
||||
<ogc:PropertyName>population</ogc:PropertyName>
|
||||
</Priority>
|
||||
<VendorOption name="autoWrap">60</VendorOption>
|
||||
<VendorOption name="followLine">true</VendorOption>
|
||||
<VendorOption name="repeat">300</VendorOption>
|
||||
<VendorOption name="maxDisplacement">150</VendorOption>
|
||||
<VendorOption name="forceLeftToRight">false</VendorOption>
|
||||
<VendorOption name="graphic-margin">3</VendorOption>
|
||||
<VendorOption name="graphic-resize">stretch</VendorOption>
|
||||
<VendorOption name="group">yes</VendorOption>
|
||||
<VendorOption name="spaceAround">10</VendorOption>
|
||||
<VendorOption name="labelAllGroup">true</VendorOption>
|
||||
<VendorOption name="maxAngleDelta">15</VendorOption>
|
||||
<VendorOption name="conflictResolution">false</VendorOption>
|
||||
<VendorOption name="goodnessOfFit">0.3</VendorOption>
|
||||
<VendorOption name="polygonAlign">mbr</VendorOption>
|
||||
</TextSymbolizer>
|
||||
</Rule>
|
||||
</FeatureTypeStyle>
|
||||
</UserStyle>
|
||||
</NamedLayer>
|
||||
</StyledLayerDescriptor>
|
||||
--></div>
|
||||
<div id="point_pointwithdefaultlabel.sld"><!--
|
||||
<StyledLayerDescriptor version="1.0.0"
|
||||
xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"
|
||||
xmlns="http://www.opengis.net/sld"
|
||||
xmlns:ogc="http://www.opengis.net/ogc"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<NamedLayer>
|
||||
<Name>Point with default label</Name>
|
||||
<UserStyle>
|
||||
<Title>GeoServer SLD Cook Book: Point with default label</Title>
|
||||
<FeatureTypeStyle>
|
||||
<Rule>
|
||||
<PointSymbolizer>
|
||||
<Graphic>
|
||||
<Mark>
|
||||
<WellKnownName>circle</WellKnownName>
|
||||
<Fill>
|
||||
<CssParameter name="fill">#FF0000</CssParameter>
|
||||
</Fill>
|
||||
</Mark>
|
||||
<Size>6</Size>
|
||||
</Graphic>
|
||||
</PointSymbolizer>
|
||||
<TextSymbolizer>
|
||||
<Label>
|
||||
<ogc:PropertyName>name</ogc:PropertyName>
|
||||
</Label>
|
||||
<Fill>
|
||||
<CssParameter name="fill">#000000</CssParameter>
|
||||
</Fill>
|
||||
</TextSymbolizer>
|
||||
</Rule>
|
||||
</FeatureTypeStyle>
|
||||
</UserStyle>
|
||||
</NamedLayer>
|
||||
</StyledLayerDescriptor>
|
||||
--></div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -34,6 +34,18 @@
|
||||
|
||||
}
|
||||
|
||||
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">' +
|
||||
'geonode:_map_107_annotations: no such layer on this server' +
|
||||
'</ServiceException></ServiceExceptionReport>';
|
||||
var format = new OpenLayers.Format.WMSDescribeLayer();
|
||||
var obj = format.read(text);
|
||||
t.ok(!!obj.error, "Error reported correctly");
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -385,6 +385,32 @@
|
||||
t.ok(geodesicErr < planarErr, "geodesic measure is better (" + geodesicErr.toFixed(3) + " vs. " + planarErr.toFixed(3) + ")");
|
||||
|
||||
}
|
||||
|
||||
function test_getCentroid(t) {
|
||||
t.plan(5);
|
||||
var bounds = new OpenLayers.Bounds(5, 10, 5, 10);
|
||||
var geometry = bounds.toGeometry();
|
||||
var centroid = geometry.getCentroid();
|
||||
t.eq(geometry.components[0].components.length, 2, "only two vertices since the box has left=right and bottom=top");
|
||||
t.ok(centroid && centroid.x === 5 && centroid.y === 10, "getCentroid returns a point geometry even if the ring of the polygon has only 2 vertices");
|
||||
bounds = new OpenLayers.Bounds(123456789.0, 123456789.0, 123456789.1, 123456789.1);
|
||||
geometry = bounds.toGeometry();
|
||||
centroid = geometry.getCentroid();
|
||||
t.eq(geometry.components[0].components.length, 5, "five vertices expected");
|
||||
var dX = Math.abs(centroid.x - 123456789.05);
|
||||
var dY = Math.abs(centroid.y - 123456789.05);
|
||||
t.ok(centroid && dX < 0.0001 && dY < 0.0001, " getCentroid returns the correct point geometry dX = " + dX + ", dY = " + dY);
|
||||
|
||||
var components = [
|
||||
new OpenLayers.Geometry.Point(0,0), new OpenLayers.Geometry.Point(1,1),
|
||||
new OpenLayers.Geometry.Point(0,1), new OpenLayers.Geometry.Point(1,0)];
|
||||
var linearRing = new OpenLayers.Geometry.LinearRing(components);
|
||||
polygon = new OpenLayers.Geometry.Polygon([linearRing.clone()]);
|
||||
centroid = polygon.getCentroid();
|
||||
var tX = centroid.x;
|
||||
var tY = centroid.y;
|
||||
t.ok( !isNaN(tX) && !isNaN(tY) && tX !== Infinity && tY !== Infinity, " getCentroid for wrong polygon works x = " + tX + ", y = " + tY);
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
+18
-68
@@ -174,6 +174,16 @@
|
||||
t.eq(log, 0, "addOptions doesn't call initResolutions when layer is not in map");
|
||||
}
|
||||
|
||||
function test_addOptionsScale(t) {
|
||||
t.plan(1);
|
||||
var map = new OpenLayers.Map("map");
|
||||
var layer = new OpenLayers.Layer.WMS();
|
||||
map.addLayer(layer);
|
||||
map.zoomToMaxExtent();
|
||||
layer.addOptions({maxResolution: 0.5, numZoomLevels: 15});
|
||||
t.eq(layer.alwaysInRange, false, "alwaysInRange should not be true anymore");
|
||||
}
|
||||
|
||||
function test_Layer_StandardOptionsAccessors (t) {
|
||||
|
||||
t.plan( 4 );
|
||||
@@ -398,6 +408,9 @@
|
||||
"1.20", null, {maxScale: 100000, numZoomLevels: 3, units: "m"},
|
||||
[141.11103491115225, 70.55551745557612, 35.27775872778806], 35.27775872778806, 141.11103491115225
|
||||
], [
|
||||
"1.21", null, {numZoomLevels: 2}, // maxResolution calculated based on the projection's maxExtent here
|
||||
[1.40625, 0.703125], 0.703125, 1.40625
|
||||
], [
|
||||
|
||||
/*
|
||||
* Batch 2: custom map options map and sensible layer options
|
||||
@@ -541,8 +554,8 @@
|
||||
/*
|
||||
* Batch 2.8: numZoomLevels set in the layer options
|
||||
*/
|
||||
"2.8.0", {maxResolution: 80}, {numZoomLevels: 4},
|
||||
[80, 40, 20, 10], 10, 80
|
||||
"2.8.0", {maxResolution: 80}, {numZoomLevels: 4}, // maxResolution calculated based on the projection's maxExtent here
|
||||
[1.40625, 0.703125, 0.3515625, 0.17578125], 0.17578125, 1.40625
|
||||
], [
|
||||
"2.8.1", {maxResolution: 80, numZoomLevels: 4}, {numZoomLevels: null},
|
||||
[80, 40, 20, 10], 10, 80
|
||||
@@ -672,82 +685,19 @@
|
||||
// test that the moveend event was triggered
|
||||
t.ok(log.event, "an event was logged");
|
||||
t.eq(log.event.type, "moveend", "moveend was triggered");
|
||||
t.eq(log.event.zoomChanged, false, "event says zoomChanged false");
|
||||
t.eq(log.event.zoomChanged, true, "event says zoomChanged true - poor name");
|
||||
|
||||
layer.moveTo = function(bounds, zoomChanged, dragging) {
|
||||
var extent = layer.map.getExtent();
|
||||
t.ok(bounds.equals(extent),
|
||||
"redraw calls moveTo with the map extent");
|
||||
t.ok(!zoomChanged,
|
||||
"redraw calls moveTo with zoomChanged false");
|
||||
t.ok(zoomChanged,
|
||||
"redraw calls moveTo with zoomChanged true");
|
||||
t.ok(!dragging,
|
||||
"redraw calls moveTo with dragging false");
|
||||
}
|
||||
layer.redraw();
|
||||
}
|
||||
|
||||
// This function includes integration tests to verify that the
|
||||
// layer's moveTo function is called with the expected value
|
||||
// for zoomChanged
|
||||
function test_moveTo_zoomChanged(t) {
|
||||
t.plan(6);
|
||||
|
||||
var log = {};
|
||||
var map = new OpenLayers.Map('map');
|
||||
|
||||
var l1 = new OpenLayers.Layer('l1', {isBaseLayer: true});
|
||||
l1.moveTo = function(bounds, zoomChanged, dragging) {
|
||||
log.moveTo = {zoomChanged: zoomChanged};
|
||||
OpenLayers.Layer.prototype.moveTo.apply(this, arguments);
|
||||
};
|
||||
|
||||
map.addLayer(l1);
|
||||
map.zoomToMaxExtent();
|
||||
|
||||
log = {};
|
||||
l1.redraw();
|
||||
t.eq(log.moveTo.zoomChanged, false,
|
||||
"[a] redraw calls moveTo with zoomChanged false");
|
||||
|
||||
log = {};
|
||||
l1.resolution = null;
|
||||
l1.redraw();
|
||||
t.eq(log.moveTo.zoomChanged, true,
|
||||
"[b] redraw calls moveTo with zoomChanged true");
|
||||
|
||||
l1.setVisibility(false);
|
||||
log = {};
|
||||
l1.setVisibility(true);
|
||||
t.eq(log.moveTo.zoomChanged, false,
|
||||
"[c] redraw calls moveTo with zoomChanged false");
|
||||
|
||||
l1.setVisibility(false);
|
||||
map.zoomIn();
|
||||
log = {};
|
||||
l1.setVisibility(true);
|
||||
t.eq(log.moveTo.zoomChanged, true,
|
||||
"[d] redraw calls moveTo with zoomChanged true");
|
||||
|
||||
l1.moveTo = OpenLayers.Layer.prototype.moveTo;
|
||||
|
||||
var l2 = new OpenLayers.Layer('l2');
|
||||
l2.moveTo = function(bounds, zoomChanged, dragging) {
|
||||
log.moveTo = {zoomChanged: zoomChanged};
|
||||
OpenLayers.Layer.prototype.moveTo.apply(this, arguments);
|
||||
};
|
||||
log = {};
|
||||
map.addLayer(l2);
|
||||
t.eq(log.moveTo.zoomChanged, true,
|
||||
"[e] redraw calls moveTo with zoomChanged true");
|
||||
|
||||
map.removeLayer(l2);
|
||||
log = {};
|
||||
map.addLayer(l2);
|
||||
t.eq(log.moveTo.zoomChanged, true,
|
||||
"[f] redraw calls moveTo with zoomChanged true");
|
||||
|
||||
map.destroy();
|
||||
}
|
||||
|
||||
function test_layer_setIsBaseLayer(t) {
|
||||
t.plan(2);
|
||||
|
||||
@@ -1,5 +1,19 @@
|
||||
<html>
|
||||
<head>
|
||||
<script>
|
||||
/**
|
||||
* Because browsers that implement requestAnimationFrame may not execute
|
||||
* animation functions while a window is not displayed (e.g. in a hidden
|
||||
* iframe as in these tests), we mask the native implementations here. The
|
||||
* native requestAnimationFrame functionality is tested in Util.html and
|
||||
* in PanZoom.html (where a popup is opened before panning).
|
||||
*/
|
||||
window.requestAnimationFrame =
|
||||
window.webkitRequestAnimationFrame =
|
||||
window.mozRequestAnimationFrame =
|
||||
window.oRequestAnimationFrame =
|
||||
window.msRequestAnimationFrame = null;
|
||||
</script>
|
||||
<script src="../OLLoader.js"></script>
|
||||
<script type="text/javascript">
|
||||
var map, layer;
|
||||
@@ -82,6 +96,26 @@
|
||||
});
|
||||
}
|
||||
|
||||
function test_initLayer_notempty(t) {
|
||||
t.plan(1);
|
||||
|
||||
map = new OpenLayers.Map("map", {
|
||||
projection: "EPSG:3857",
|
||||
layers: [new OpenLayers.Layer("dummy", {isBaseLayer: true})]
|
||||
});
|
||||
map.zoomToExtent([-14768652, 4492113, -12263964, 5744457]);
|
||||
var layer = new OpenLayers.Layer.Bing(OpenLayers.Util.extend({
|
||||
isBaseLayer: false
|
||||
}, options));
|
||||
map.addLayer(layer);
|
||||
var tile = layer.tileQueue[0];
|
||||
|
||||
t.delay_call(5, function() {
|
||||
t.ok(tile.url, "Tile not empty");
|
||||
map.destroy();
|
||||
});
|
||||
}
|
||||
|
||||
function test_attribution(t) {
|
||||
t.plan(3);
|
||||
|
||||
@@ -98,6 +132,25 @@
|
||||
map.destroy();
|
||||
});
|
||||
}
|
||||
|
||||
function test_attribution_notempty(t) {
|
||||
t.plan(1);
|
||||
|
||||
var log = [];
|
||||
var map = new OpenLayers.Map("map");
|
||||
layer = new OpenLayers.Layer.Bing(OpenLayers.Util.applyDefaults({type: 'Road'}, options));
|
||||
map.addLayer(layer);
|
||||
var format = OpenLayers.String.format;
|
||||
OpenLayers.String.format = function(tpl, options) {
|
||||
log.push(options.copyrights);
|
||||
}
|
||||
map.zoomToExtent(new OpenLayers.Bounds(-14768652, 4492113, -12263964, 5744457));
|
||||
t.delay_call(2, function() {
|
||||
t.ok(log.join("") !== "", "Copyright not empty");
|
||||
OpenLayers.String.format = format;
|
||||
map.destroy();
|
||||
});
|
||||
}
|
||||
|
||||
function test_getXYZ(t) {
|
||||
t.plan(1);
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
var satellite = new OpenLayers.Layer.Google( "Google Satellite" , {type: google.maps.MapTypeId.SATELLITE, 'maxZoomLevel':18} );
|
||||
var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
|
||||
"http://labs.metacarta.com/wms/vmap0", {layers: 'basic', 'transparent':true},
|
||||
{isBaseLayer: false, singleTile: true} );
|
||||
{isBaseLayer: false, singleTile: true, displayOutsideMaxExtent: true} );
|
||||
|
||||
map.addLayers([satellite, layer]);
|
||||
map.setCenter(new OpenLayers.LonLat(10.205188,48.857593), 5);
|
||||
|
||||
+171
-12
@@ -24,8 +24,8 @@
|
||||
*/
|
||||
|
||||
|
||||
function test_Layer_Grid_constructor (t) {
|
||||
t.plan( 6 );
|
||||
function test_constructor (t) {
|
||||
t.plan( 8 );
|
||||
|
||||
layer = new OpenLayers.Layer.Grid(name, url, params, null);
|
||||
t.ok( layer instanceof OpenLayers.Layer.Grid, "returns OpenLayers.Layer.Grid object" );
|
||||
@@ -33,6 +33,8 @@
|
||||
t.eq( layer.ratio, 1.5, "ratio default is 1.5");
|
||||
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() {};
|
||||
@@ -41,6 +43,32 @@
|
||||
t.ok( layer.events.listeners['tileloaded'].length == 1, "one listener for tileloaded after register");
|
||||
}
|
||||
|
||||
function test_constructor_singleTile(t) {
|
||||
t.plan(2);
|
||||
layer = new OpenLayers.Layer.Grid(name, url, params, {singleTile: true});
|
||||
t.eq( layer.className, 'olLayerGridSingleTile', "className default is olLayerGridSingleTile");
|
||||
t.eq( layer.removeBackBufferDelay, 0, "removeBackBufferDelay default is 0");
|
||||
}
|
||||
|
||||
function test_setMap(t) {
|
||||
t.plan(1);
|
||||
var map = new OpenLayers.Map('map');
|
||||
layer = new OpenLayers.Layer.Grid(name, url, params, null);
|
||||
map.addLayer(layer);
|
||||
t.ok(OpenLayers.Element.hasClass(layer.div, "olLayerGrid"),
|
||||
"olLayerGrid class assigned to layer div");
|
||||
map.destroy();
|
||||
}
|
||||
|
||||
function test_setMap_singleTile(t) {
|
||||
t.plan(1);
|
||||
var map = new OpenLayers.Map('map');
|
||||
layer = new OpenLayers.Layer.Grid(name, url, params, {singleTile: true});
|
||||
map.addLayer(layer);
|
||||
t.ok(OpenLayers.Element.hasClass(layer.div, "olLayerGridSingleTile"),
|
||||
"olLayerGridSingleTile class assigned to layer div");
|
||||
map.destroy();
|
||||
}
|
||||
|
||||
function test_Layer_Grid_inittiles (t) {
|
||||
t.plan( 2 );
|
||||
@@ -230,17 +258,17 @@
|
||||
layer.deferMoveGriddedTiles = function() {
|
||||
log.push("deferMoveGriddedTiles");
|
||||
origDeferMoveGriddedTiles.apply(this, arguments);
|
||||
}
|
||||
};
|
||||
layer.moveGriddedTiles = function() {
|
||||
log.push("moveGriddedTiles");
|
||||
OpenLayers.Layer.WMS.prototype.moveGriddedTiles.apply(this, arguments);
|
||||
}
|
||||
};
|
||||
map.moveTo([5, 0]);
|
||||
t.eq(log[0], "moveGriddedTiles", "deferred after moveTo");
|
||||
map.moveTo([0, 0]);
|
||||
t.eq(log[1], "moveGriddedTiles", "deferred again after another moveTo");
|
||||
t.eq(log.length, 2, "no tiles loaded yet");
|
||||
t.delay_call(0.1, function() {
|
||||
t.delay_call(1, function() {
|
||||
t.eq(log[2], "deferMoveGriddedTiles", "tiles moved after tileLoadingDelay");
|
||||
});
|
||||
|
||||
@@ -393,7 +421,7 @@
|
||||
*/
|
||||
|
||||
function test_Layer_Grid_clone(t) {
|
||||
t.plan(5);
|
||||
t.plan(7);
|
||||
|
||||
var options = {tileSize: new OpenLayers.Size(500,50)};
|
||||
var map = new OpenLayers.Map('map', options);
|
||||
@@ -407,6 +435,9 @@
|
||||
|
||||
t.ok( clone.grid != layer.grid, "clone does not copy grid");
|
||||
t.ok( clone.grid.length == 0, "clone creates a new array instead");
|
||||
|
||||
t.ok(clone.tileQueue !== layer.tileQueue, "new tileQueue for clone");
|
||||
t.eq(clone.backBuffer, null, "no backbuffer from original");
|
||||
|
||||
t.ok( clone.tileSize.equals(layer.tileSize), "tileSize correctly cloned");
|
||||
|
||||
@@ -506,7 +537,7 @@
|
||||
}
|
||||
|
||||
function test_Layer_Grid_addTileMonitoringHooks(t) {
|
||||
t.plan(17);
|
||||
t.plan(18);
|
||||
|
||||
layer = new OpenLayers.Layer.Grid();
|
||||
layer.events = {
|
||||
@@ -546,10 +577,11 @@
|
||||
|
||||
t.eq(g_events[0][0], "loadstart", "loadstart event triggered when numLoadingTiles is 0");
|
||||
t.eq(layer.numLoadingTiles, 1, "numLoadingTiles incremented");
|
||||
t.eq(g_events[1][0], "tileloadstart", "tileloadstart event triggered");
|
||||
|
||||
g_events = [];
|
||||
tile.onLoadStart.apply(layer);
|
||||
t.eq(g_events.length, 0, "loadstart event not triggered when numLoadingTiles is not 0");
|
||||
t.eq(g_events.length, 1, "tileloadstart, but not loadstart triggered when numLoadingTiles is not 0");
|
||||
t.eq(layer.numLoadingTiles, 2, "numLoadingTiles incremented");
|
||||
|
||||
|
||||
@@ -1193,22 +1225,23 @@
|
||||
// zoom transition.
|
||||
//
|
||||
|
||||
t.plan(2);
|
||||
t.plan(4);
|
||||
|
||||
var map = new OpenLayers.Map('map');
|
||||
var layer = new OpenLayers.Layer.WMS('', '', {}, {
|
||||
isBaseLayer: true,
|
||||
singleTile: true,
|
||||
ratio: 1
|
||||
ratio: 1.1
|
||||
});
|
||||
map.addLayer(layer);
|
||||
map.setCenter(new OpenLayers.LonLat(0, 0), 0);
|
||||
|
||||
// move
|
||||
map.setCenter(new OpenLayers.LonLat(10, 10));
|
||||
map.setCenter(new OpenLayers.LonLat(50, 50));
|
||||
t.ok(layer.backBuffer && layer.backBuffer.parentNode === layer.div,
|
||||
'backbuffer inserted after map move');
|
||||
|
||||
t.eq(layer.backBuffer.style.left, '-25%');
|
||||
t.eq(layer.backBuffer.style.top, '-28%');
|
||||
// zoom
|
||||
map.zoomTo(1);
|
||||
t.eq(layer.backBuffer, null,
|
||||
@@ -1365,6 +1398,132 @@
|
||||
map.destroy();
|
||||
});
|
||||
}
|
||||
|
||||
function test_getGridData(t) {
|
||||
t.plan(12);
|
||||
|
||||
var layer = new OpenLayers.Layer.Grid(null, null, null, {
|
||||
isBaseLayer: true, getURL: function() {
|
||||
return "/bogus/path/to/tile";
|
||||
}
|
||||
});
|
||||
var map = new OpenLayers.Map({
|
||||
div: "map",
|
||||
layers: [layer],
|
||||
controls: [],
|
||||
center: [0, 0],
|
||||
zoom: 1
|
||||
});
|
||||
|
||||
// get tile data for [0, 0]
|
||||
var data = layer.getTileData({lon: 0, lat: 0});
|
||||
t.ok(data && data.tile, "[0, 0]: got tile data");
|
||||
t.eq(data.i, 0, "[0, 0]: i");
|
||||
t.eq(data.j, 128, "[0, 0]: j");
|
||||
t.ok(
|
||||
data.tile.bounds.equals({left: 0, bottom: -90, right: 180, top: 90}),
|
||||
"[0, 0]: tile bounds " + data.tile.bounds.toString()
|
||||
);
|
||||
|
||||
// get tile data for [-110, 45]
|
||||
data = layer.getTileData({lon: -110, lat: 45});
|
||||
t.ok(data && data.tile, "[-110, 45]: got tile data");
|
||||
t.eq(data.i, 99, "[-110, 45]: i");
|
||||
t.eq(data.j, 64, "[-110, 45]: j");
|
||||
t.ok(
|
||||
data.tile.bounds.equals({left: -180, bottom: -90, right: 0, top: 90}),
|
||||
"[-110, 45]: tile bounds " + data.tile.bounds.toString()
|
||||
);
|
||||
|
||||
// get tile data for [0, 300] (north of grid)
|
||||
data = layer.getTileData({lon: 0, lat: 300})
|
||||
t.eq(data, null, "[0, 300]: north of grid");
|
||||
|
||||
// get tile data for [400, 0] (east of grid)
|
||||
data = layer.getTileData({lon: 400, lat: 0})
|
||||
t.eq(data, null, "[400, 0]: east of grid");
|
||||
|
||||
// get tile data for [0, -500] (south of grid)
|
||||
data = layer.getTileData({lon: 0, lat: -500})
|
||||
t.eq(data, null, "[0, -500]: south of grid");
|
||||
|
||||
// get tile data for [-200, 0] (west of grid)
|
||||
data = layer.getTileData({lon: -200, lat: 0})
|
||||
t.eq(data, null, "[-200, 0]: west of grid");
|
||||
|
||||
map.destroy();
|
||||
|
||||
}
|
||||
|
||||
function test_getGridData_wrapped(t) {
|
||||
t.plan(18);
|
||||
|
||||
var layer = new OpenLayers.Layer.Grid(null, null, null, {
|
||||
isBaseLayer: true, getURL: function() {
|
||||
return "/bogus/path/to/tile";
|
||||
},
|
||||
wrapDateLine: true
|
||||
});
|
||||
var map = new OpenLayers.Map({
|
||||
div: "map",
|
||||
layers: [layer],
|
||||
controls: [],
|
||||
center: [-50, 0],
|
||||
zoom: 1
|
||||
});
|
||||
|
||||
// get tile data for [0, 0]
|
||||
var data = layer.getTileData({lon: 0, lat: 0});
|
||||
t.ok(data && data.tile, "[0, 0]: got tile data");
|
||||
t.eq(data.i, 0, "[0, 0]: i");
|
||||
t.eq(data.j, 128, "[0, 0]: j");
|
||||
t.ok(
|
||||
data.tile.bounds.equals({left: 0, bottom: -90, right: 180, top: 90}),
|
||||
"[0, 0]: tile bounds " + data.tile.bounds.toString()
|
||||
);
|
||||
|
||||
// get tile data for [-110, 45]
|
||||
data = layer.getTileData({lon: -110, lat: 45});
|
||||
t.ok(data && data.tile, "[-110, 45]: got tile data");
|
||||
t.eq(data.i, 99, "[-110, 45]: i");
|
||||
t.eq(data.j, 64, "[-110, 45]: j");
|
||||
t.ok(
|
||||
data.tile.bounds.equals({left: -180, bottom: -90, right: 0, top: 90}),
|
||||
"[-110, 45]: tile bounds " + data.tile.bounds.toString()
|
||||
);
|
||||
|
||||
// get tile data for [0, 300] (north of grid)
|
||||
data = layer.getTileData({lon: 0, lat: 300})
|
||||
t.eq(data, null, "[0, 300]: north of grid");
|
||||
|
||||
// get tile data for [400, 0] (equivalent to [40, 0] and visible on map)
|
||||
data = layer.getTileData({lon: 400, lat: 0})
|
||||
t.ok(data && data.tile, "[400, 0]: got tile data");
|
||||
t.eq(data.i, 56, "[400, 0]: i");
|
||||
t.eq(data.j, 128, "[400, 0]: j");
|
||||
t.ok(
|
||||
data.tile.bounds.equals({left: 0, bottom: -90, right: 180, top: 90}),
|
||||
"[400, 0]: tile bounds " + data.tile.bounds.toString()
|
||||
);
|
||||
|
||||
// get tile data for [0, -500] (south of grid)
|
||||
data = layer.getTileData({lon: 0, lat: -500})
|
||||
t.eq(data, null, "[0, -500]: south of grid");
|
||||
|
||||
// get tile data for [-200, 0] (equivalent to [160, 0] and wrapped to west side map)
|
||||
data = layer.getTileData({lon: -200, lat: 0})
|
||||
t.ok(data && data.tile, "[-200, 0]: got tile data");
|
||||
t.eq(data.i, 227, "[-200, 0]: i");
|
||||
t.eq(data.j, 128, "[-200, 0]: j");
|
||||
t.ok(
|
||||
data.tile.bounds.equals({left: 0, bottom: -90, right: 180, top: 90}),
|
||||
"[-200, 0]: tile bounds " + data.tile.bounds.toString()
|
||||
);
|
||||
|
||||
map.destroy();
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
}
|
||||
|
||||
function test_Layer_HTTPRequest_mergeNewParams (t) {
|
||||
t.plan( 9 );
|
||||
t.plan( 8 );
|
||||
|
||||
var map = new OpenLayers.Map('map');
|
||||
layer = new OpenLayers.Layer.HTTPRequest(name, url, params, options);
|
||||
@@ -100,9 +100,7 @@
|
||||
|
||||
layer.redraw = function() {
|
||||
t.ok(true, "layer.mergeNewParams calls layer.redraw");
|
||||
t.ok(layer.resolution === null, "layer.mergeNewParams sets resolution to null");
|
||||
};
|
||||
layer.resolution = 'fake';
|
||||
}
|
||||
layer.mergeNewParams();
|
||||
}
|
||||
|
||||
|
||||
@@ -175,10 +175,9 @@
|
||||
// test offset of 2
|
||||
offset = 2;
|
||||
zoom = 3;
|
||||
|
||||
|
||||
var map = new OpenLayers.Map({
|
||||
div: "map",
|
||||
maxResolution: OpenLayers.Projection.defaults["EPSG:4326"].maxResolution / Math.pow(2, offset)
|
||||
div: "map"
|
||||
});
|
||||
var layer = new OpenLayers.Layer.TMS("TMS", "", {
|
||||
layername: "basic",
|
||||
@@ -189,7 +188,6 @@
|
||||
map.setCenter(new OpenLayers.LonLat(0, 0), zoom);
|
||||
|
||||
var tileurl = layer.getURL(new OpenLayers.Bounds(3.515625,45,4.21875,45.703125));
|
||||
level = parseInt(tileurl.split("/")[2]);
|
||||
t.eq(parseInt(tileurl.split("/")[2]), zoom + offset, "correct level for offset 2");
|
||||
|
||||
map.destroy();
|
||||
@@ -199,8 +197,7 @@
|
||||
zoom = 3;
|
||||
|
||||
var map = new OpenLayers.Map({
|
||||
div: "map",
|
||||
maxResolution: OpenLayers.Projection.defaults["EPSG:4326"].maxResolution / Math.pow(2, offset)
|
||||
div: "map"
|
||||
});
|
||||
var layer = new OpenLayers.Layer.TMS("TMS", "", {
|
||||
layername: "basic",
|
||||
@@ -211,12 +208,9 @@
|
||||
map.setCenter(new OpenLayers.LonLat(0, 0), zoom);
|
||||
|
||||
var tileurl = layer.getURL(new OpenLayers.Bounds(3.515625,45,4.21875,45.703125));
|
||||
level = parseInt(tileurl.split("/")[2]);
|
||||
t.eq(parseInt(tileurl.split("/")[2]), zoom + offset, "correct level for offset -1");
|
||||
|
||||
map.destroy();
|
||||
|
||||
|
||||
}
|
||||
|
||||
function test_Layer_TMS_setMap(t) {
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<script>
|
||||
/**
|
||||
* Because browsers that implement requestAnimationFrame may not execute
|
||||
* animation functions while a window is not displayed (e.g. in a hidden
|
||||
* iframe as in these tests), we mask the native implementations here. The
|
||||
* native requestAnimationFrame functionality is tested in Util.html and
|
||||
* in PanZoom.html (where a popup is opened before panning). The panTo tests
|
||||
* here will test the fallback setTimeout implementation for animation.
|
||||
*/
|
||||
window.requestAnimationFrame =
|
||||
window.webkitRequestAnimationFrame =
|
||||
window.mozRequestAnimationFrame =
|
||||
window.oRequestAnimationFrame =
|
||||
window.msRequestAnimationFrame = null;
|
||||
</script>
|
||||
<script src="../OLLoader.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
var map, layer;
|
||||
function setUp() {
|
||||
layer = new OpenLayers.Layer.UTFGrid({
|
||||
url: "../data/utfgrid/world_utfgrid/${z}/${x}/${y}.json",
|
||||
isBaseLayer: true,
|
||||
utfgridResolution: 4
|
||||
});
|
||||
map = new OpenLayers.Map({
|
||||
div: "map",
|
||||
projection: "EPSG:900913",
|
||||
layers: [layer],
|
||||
center: [0, 0],
|
||||
zoom: 1
|
||||
});
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
map.destroy();
|
||||
map = null;
|
||||
layer = null;
|
||||
}
|
||||
|
||||
function test_constructor(t) {
|
||||
t.plan(4);
|
||||
|
||||
var layer = new OpenLayers.Layer.UTFGrid({
|
||||
name: "foo",
|
||||
url: "path/to/tiles/${z}/${x}/${y}",
|
||||
utfgridResolution: 8
|
||||
});
|
||||
t.ok(layer instanceof OpenLayers.Layer.UTFGrid, "utfgrid instance");
|
||||
t.eq(layer.name, "foo", "layer name");
|
||||
t.eq(layer.url, "path/to/tiles/${z}/${x}/${y}", "layer url");
|
||||
t.eq(layer.utfgridResolution, 8, "layer utfgridResolution");
|
||||
|
||||
layer.destroy();
|
||||
|
||||
}
|
||||
|
||||
function test_clone(t) {
|
||||
t.plan(3);
|
||||
setUp();
|
||||
|
||||
var clone = layer.clone();
|
||||
t.ok(layer instanceof OpenLayers.Layer.UTFGrid, "utfgrid instance");
|
||||
t.eq(layer.url, "../data/utfgrid/world_utfgrid/${z}/${x}/${y}.json", "layer url");
|
||||
t.eq(layer.utfgridResolution, 4, "layer utfgridResolution");
|
||||
clone.destroy();
|
||||
|
||||
tearDown();
|
||||
}
|
||||
|
||||
function test_getFeatureInfo(t) {
|
||||
t.plan(2);
|
||||
setUp();
|
||||
|
||||
// wait for tile loading to finish
|
||||
t.delay_call(0.5, function() {
|
||||
var loc = new OpenLayers.LonLat(-110, 45).transform("EPSG:4326", "EPSG:900913");
|
||||
var info = layer.getFeatureInfo(loc);
|
||||
|
||||
t.eq(info.id, "207", "feature id");
|
||||
t.eq(info.data, {POP2005: 299846449, NAME: "United States"}, "feature data");
|
||||
|
||||
tearDown();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function test_getFeatureId(t) {
|
||||
t.plan(2);
|
||||
setUp();
|
||||
|
||||
// wait for tile loading to finish
|
||||
t.delay_call(0.5, function() {
|
||||
var ca = new OpenLayers.LonLat(-110, 55).transform("EPSG:4326", "EPSG:900913");
|
||||
var ru = new OpenLayers.LonLat(90, 75).transform("EPSG:4326", "EPSG:900913");
|
||||
|
||||
t.eq(layer.getFeatureId(ca), "24", "feature id for ca");
|
||||
t.eq(layer.getFeatureId(ru), "245", "feature id for ru");
|
||||
|
||||
tearDown();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="map" style="height: 256px; width: 512px"></div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -723,54 +723,6 @@
|
||||
(-y + customStyle6.graphicYOffset).toFixed().toString(),
|
||||
"graphicYOffset correctly set");
|
||||
}
|
||||
if (layer.renderer.CLASS_NAME == 'OpenLayers.Renderer.SVG2') {
|
||||
feature.style = customStyle1;
|
||||
layer.drawFeature(feature);
|
||||
var resolution = map.getResolution();
|
||||
t.eq(root.firstChild.getAttributeNS(null, 'width'),
|
||||
(2*customStyle1.pointRadius*resolution).toString(),
|
||||
"given a pointRadius, width equals 2*pointRadius");
|
||||
t.eq(root.firstChild.getAttributeNS(null, 'height'),
|
||||
(2*customStyle1.pointRadius*resolution).toString(),
|
||||
"given a pointRadius, height equals 2*pointRadius");
|
||||
feature.style = customStyle2;
|
||||
layer.drawFeature(feature);
|
||||
t.eq(root.firstChild.getAttributeNS(null, 'width'),
|
||||
root.firstChild.getAttributeNS(null, 'height'),
|
||||
"given a graphicWidth, width equals height");
|
||||
t.eq(root.firstChild.getAttributeNS(null, 'width'),
|
||||
(customStyle2.graphicWidth*resolution).toString(),
|
||||
"width is set correctly");
|
||||
feature.style = customStyle3;
|
||||
layer.drawFeature(feature);
|
||||
t.eq(root.firstChild.getAttributeNS(null, 'height'),
|
||||
root.firstChild.getAttributeNS(null, 'width'),
|
||||
"given a graphicHeight, height equals width");
|
||||
t.eq(root.firstChild.getAttributeNS(null, 'height'),
|
||||
(customStyle3.graphicHeight*resolution).toString(),
|
||||
"height is set correctly");
|
||||
feature.style = customStyle4;
|
||||
layer.drawFeature(feature);
|
||||
t.eq(root.firstChild.getAttributeNS(null, 'height'),
|
||||
(customStyle4.graphicHeight*resolution).toString(),
|
||||
"given graphicHeight and graphicWidth, both are set: height");
|
||||
t.eq(root.firstChild.getAttributeNS(null, 'width'),
|
||||
(customStyle4.graphicWidth*resolution).toString(),
|
||||
"given graphicHeight and graphicWidth, both are set: width");
|
||||
feature.style = customStyle5;
|
||||
layer.drawFeature(feature);
|
||||
t.eq(root.firstChild.getAttributeNS(null, 'style'),
|
||||
'opacity: '+customStyle5.graphicOpacity.toString()+((OpenLayers.Util.getBrowserName() == "opera" || OpenLayers.Util.getBrowserName() == "safari") ? "" : ';'),
|
||||
"graphicOpacity correctly set");
|
||||
feature.style = customStyle6;
|
||||
layer.drawFeature(feature);
|
||||
t.eq(root.firstChild.getAttributeNS(null, 'x'),
|
||||
(geometryX + customStyle6.graphicXOffset*resolution).toString(),
|
||||
"graphicXOffset correctly set");
|
||||
t.eq(root.firstChild.getAttributeNS(null, 'y'),
|
||||
(-geometryY + customStyle6.graphicYOffset*resolution).toString(),
|
||||
"graphicYOffset correctly set");
|
||||
}
|
||||
if (layer.renderer.CLASS_NAME == 'OpenLayers.Renderer.VML') {
|
||||
feature.style = customStyle1;
|
||||
layer.drawFeature(feature);
|
||||
|
||||
@@ -2037,6 +2037,27 @@
|
||||
map.moveTo([16, 48], 0);
|
||||
t.eq(map.getCenter().toShortString(), "0, 0", "no panning when moveTo is called with invalid zoom");
|
||||
}
|
||||
|
||||
function test_correctCenterAtZoomLevel0(t) {
|
||||
t.plan(1);
|
||||
var map = new OpenLayers.Map({
|
||||
div: 'map',
|
||||
maxExtent: new OpenLayers.Bounds(-30, 48.00, 3.50, 64.00),
|
||||
restrictedExtent: new OpenLayers.Bounds(-30, 48.00, 3.50, 64.00),
|
||||
projection: "EPSG:4258",
|
||||
units: "degrees",
|
||||
layers: [
|
||||
new OpenLayers.Layer('name', {
|
||||
isBaseLayer: true
|
||||
})
|
||||
]
|
||||
});
|
||||
map.setCenter(new OpenLayers.LonLat(-1.3, 50.8), 4);
|
||||
map.moveTo(null, 0);
|
||||
var center = map.getCenter();
|
||||
t.ok(center.equals(new OpenLayers.LonLat(-13.25, 56)), "Center is correct and not equal to maxExtent's center");
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -3,11 +3,13 @@
|
||||
<script src="../lib/OpenLayers.js"></script>
|
||||
<script type="text/javascript">
|
||||
function test_OpenLayers(t) {
|
||||
t.plan(1);
|
||||
|
||||
var script = document.getElementById("script");
|
||||
t.plan(3);
|
||||
|
||||
t.eq(OpenLayers._getScriptLocation(), "../", "Script location correctly detected.");
|
||||
|
||||
t.ok(OpenLayers.ImgPath !== undefined, "An ImgPath property exists.");
|
||||
|
||||
t.eq(OpenLayers.ImgPath, '', "The default for OpenLayers.ImgPath is the empty string.");
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
}
|
||||
|
||||
function test_createRequest(t) {
|
||||
t.plan(3);
|
||||
t.plan(6);
|
||||
var protocol = new OpenLayers.Protocol.Script({
|
||||
callbackKey: 'cb_key',
|
||||
callbackPrefix: 'cb_prefix:'
|
||||
@@ -150,12 +150,23 @@
|
||||
|
||||
t.eq(script.type, 'text/javascript',
|
||||
'created script has a correct type');
|
||||
t.eq(script.src, 'http://bar_url/?k=bar_param&cb_key=cb_prefix%3AOpenLayers.Protocol.Script.registry%5Bbar%5D',
|
||||
'created script has a correct url');
|
||||
|
||||
var params = OpenLayers.Util.getParameters(script.src);
|
||||
t.eq(params.k, "bar_param", "custom query string param");
|
||||
t.eq(params.cb_key, "cb_prefix:OpenLayers.Protocol.Script.registry.bar", "callback with prefix");
|
||||
|
||||
t.eq(script.id, 'OpenLayers_Protocol_Script_bar',
|
||||
'created script has a correct id');
|
||||
|
||||
protocol.callbackTemplate = "customCallback(${id})";
|
||||
script = protocol.createRequest('http://bar_url/', {'k': 'bar_param2'}, 'bar_callback');
|
||||
|
||||
params = OpenLayers.Util.getParameters(script.src);
|
||||
t.eq(params.k, "bar_param2", "custom query string param");
|
||||
t.eq(params.cb_key, "cb_prefix:customCallback(bar)", "custom callback with prefix");
|
||||
|
||||
OpenLayers.Protocol.Script.register = _register;
|
||||
|
||||
}
|
||||
|
||||
function test_destroyRequest(t) {
|
||||
|
||||
@@ -304,6 +304,17 @@
|
||||
),
|
||||
new OpenLayers.Feature.Vector(
|
||||
OpenLayers.Geometry.fromWKT("POLYGON((100 -25, 150 -25, 150 25, 100 25, 100 -25), (120 -5, 130 -5, 130 5, 120 5, 120 -5))")
|
||||
),
|
||||
new OpenLayers.Feature.Vector(
|
||||
new OpenLayers.Geometry.Point(80, 0), {}, {
|
||||
graphicName: "square",
|
||||
pointRadius: 8,
|
||||
strokeWidth: 4,
|
||||
fillColor: "red",
|
||||
fillOpacity: 0.5,
|
||||
strokeColor: "blue",
|
||||
strokeOpacity: 0.75
|
||||
}
|
||||
)
|
||||
]);
|
||||
|
||||
@@ -327,6 +338,12 @@
|
||||
msg: "inside polygon hole", x: 125, y: 0, id: null
|
||||
}, {
|
||||
msg: "outside polygon", x: 155, y: 0, id: null
|
||||
}, {
|
||||
msg: "inside symbol", x: 80, y: 0, id: layer.features[3].id
|
||||
}, {
|
||||
msg: "outside symbol interior, inside symbol edge", x: 90, y: 8, id: layer.features[3].id
|
||||
}, {
|
||||
msg: "outside symbol", x: 94, y: 0, id: null
|
||||
}];
|
||||
|
||||
function px(x, y) {
|
||||
|
||||
+17
-17
@@ -6,7 +6,7 @@
|
||||
var geometry = null, node = null;
|
||||
|
||||
function test_VML_constructor(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -17,7 +17,7 @@
|
||||
}
|
||||
|
||||
function test_VML_destroy(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -43,7 +43,7 @@
|
||||
}
|
||||
|
||||
function test_VML_setextent(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -80,7 +80,7 @@
|
||||
}
|
||||
|
||||
function test_VML_setsize(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -99,7 +99,7 @@
|
||||
}
|
||||
|
||||
function test_VML_drawText(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -128,7 +128,7 @@
|
||||
}
|
||||
|
||||
function test_VML_drawpoint(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -149,7 +149,7 @@
|
||||
}
|
||||
|
||||
function test_VML_drawcircle(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -177,7 +177,7 @@
|
||||
}
|
||||
|
||||
function test_VML_drawGraphic(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -219,7 +219,7 @@
|
||||
}
|
||||
|
||||
function test_VML_drawlinestring(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -239,7 +239,7 @@
|
||||
}
|
||||
|
||||
function test_VML_drawlinearring(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -259,7 +259,7 @@
|
||||
}
|
||||
|
||||
function test_VML_drawline(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -300,7 +300,7 @@
|
||||
}
|
||||
|
||||
function test_VML_drawpolygon(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -331,7 +331,7 @@
|
||||
}
|
||||
|
||||
function test_VML_drawrectangle(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -360,7 +360,7 @@
|
||||
}
|
||||
|
||||
function test_vml_getnodetype(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -376,7 +376,7 @@
|
||||
}
|
||||
|
||||
function test_vml_importsymbol(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -405,7 +405,7 @@
|
||||
}
|
||||
|
||||
function test_vml_dashstyle(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
@@ -422,7 +422,7 @@
|
||||
}
|
||||
|
||||
function test_vml_moveRoot(t) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported()) {
|
||||
if (!OpenLayers.Renderer.VML.prototype.supported() || OpenLayers.Renderer.SVG.prototype.supported()) {
|
||||
t.plan(0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<html>
|
||||
<head>
|
||||
<script src="some/OpenLayers/path/OpenLayers.js"></script>
|
||||
<script src="../lib/OpenLayers/SingleFile.js"></script>
|
||||
<script type="text/javascript">
|
||||
function test_OpenLayers(t) {
|
||||
t.plan(1);
|
||||
t.eq(OpenLayers._getScriptLocation(), "some/OpenLayers/path/",
|
||||
"Script location correctly detected (OpenLayers.js).");
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,15 @@
|
||||
<html>
|
||||
<head>
|
||||
<script src="some/OpenLayers/path/OpenLayers.light.js"></script>
|
||||
<script src="../lib/OpenLayers/SingleFile.js"></script>
|
||||
<script type="text/javascript">
|
||||
function test_OpenLayers(t) {
|
||||
t.plan(1);
|
||||
t.eq(OpenLayers._getScriptLocation(), "some/OpenLayers/path/",
|
||||
"Script location correctly detected (OpenLayers.light.js) .");
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,15 @@
|
||||
<html>
|
||||
<head>
|
||||
<script src="some/OpenLayers/path/OpenLayers.light.debug.js"></script>
|
||||
<script src="../lib/OpenLayers/SingleFile.js"></script>
|
||||
<script type="text/javascript">
|
||||
function test_OpenLayers(t) {
|
||||
t.plan(1);
|
||||
t.eq(OpenLayers._getScriptLocation(), "some/OpenLayers/path/",
|
||||
"Script location correctly detected (OpenLayers.light.debug.js).");
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
+27
-72
@@ -50,7 +50,7 @@
|
||||
|
||||
var map = new OpenLayers.Map('map');
|
||||
var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
|
||||
"http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'});
|
||||
"../../img/blank.gif", {layers: 'basic'});
|
||||
map.addLayer(layer);
|
||||
|
||||
var position = new OpenLayers.Pixel(20,30);
|
||||
@@ -87,7 +87,7 @@
|
||||
var map = new OpenLayers.Map('map');
|
||||
var layer = new OpenLayers.Layer.WMS(
|
||||
"Name",
|
||||
"http://labs.metacarta.com/TESTURL?",
|
||||
"../../img/blank.gif",
|
||||
{layers: 'basic'}, {async: true, getURLasync: function(bounds, callback, scope) {
|
||||
callback.call(scope, this.getURL(bounds));
|
||||
}}
|
||||
@@ -99,7 +99,9 @@
|
||||
tile = layer.addTile(bounds, position);
|
||||
tile.renderTile();
|
||||
t.delay_call(0.1, function() {
|
||||
t.eq(tile.imgDiv.src, layer.getURL(bounds), "image src correct for async request");
|
||||
var expected = new Image();
|
||||
expected.src = layer.getURL(bounds);
|
||||
t.eq(tile.imgDiv.src, expected.src, "image src correct for async request");
|
||||
t.eq(tile.asyncRequestId, 1, "asyncRequestId correct after renderTile");
|
||||
tile.renderTile();
|
||||
});
|
||||
@@ -118,7 +120,7 @@
|
||||
|
||||
var size = new OpenLayers.Size(5,6);
|
||||
layer = new OpenLayers.Layer.WMS("Name",
|
||||
"http://labs.metacarta.com/TESTURL",
|
||||
"../../img/blank.gif",
|
||||
null,
|
||||
{tileSize: size});
|
||||
map.addLayer(layer);
|
||||
@@ -154,10 +156,10 @@
|
||||
SRS: "EPSG:4326", BBOX: [1,2,3,4],
|
||||
WIDTH: String(size.w), HEIGHT: String(size.h)
|
||||
};
|
||||
var expected = new Image();
|
||||
expected.src = "../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams)
|
||||
t.delay_call(0.1, function() {
|
||||
t.eq( img.src,
|
||||
"http://labs.metacarta.com/TESTURL?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"tile.draw creates an image");
|
||||
t.eq( img.src, expected.src, "tile.draw creates an image");
|
||||
});
|
||||
t.eq( tile.imgDiv.style.width, "5%", "Image width is correct" );
|
||||
t.eq( tile.imgDiv.style.height, "6%", "Image height is correct" );
|
||||
@@ -176,7 +178,7 @@
|
||||
var size = new OpenLayers.Size(5,6);
|
||||
var map = new OpenLayers.Map('map');
|
||||
var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
|
||||
"http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}, {reproject:false, encodeBBOX: true});
|
||||
"../../img/blank.gif", {layers: 'basic'}, {reproject:false, encodeBBOX: true});
|
||||
map.addLayer(layer);
|
||||
tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-185,-90,-180,90), url, size);
|
||||
tile.draw()
|
||||
@@ -191,31 +193,31 @@
|
||||
WIDTH: "256", HEIGHT: "256"
|
||||
};
|
||||
t.eq(tile.url,
|
||||
"http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"Images over edges of maxextent do load");
|
||||
tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-181,-90,180,90), url, size);
|
||||
tile.draw()
|
||||
tParams = OpenLayers.Util.extend(tParams, {BBOX: "-181,-90,180,90"});
|
||||
t.eq(tile.url,
|
||||
"http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"Images over edges of maxextent do load");
|
||||
tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-180,-90,180,90), url, size);
|
||||
tile.draw()
|
||||
tParams = OpenLayers.Util.extend(tParams, {BBOX: "-180,-90,180,90"});
|
||||
t.eq(tile.url,
|
||||
"http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"Image covering all of extent loads");
|
||||
tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-80,-45,80,45), url, size);
|
||||
tile.draw()
|
||||
tParams = OpenLayers.Util.extend(tParams, {BBOX: "-80,-45,80,45"});
|
||||
t.eq(tile.url,
|
||||
"http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"Image covering small part of extent loads");
|
||||
tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-185,-95,185,95), url, size);
|
||||
tile.draw()
|
||||
tParams = OpenLayers.Util.extend(tParams, {BBOX: "-185,-95,185,95"});
|
||||
t.eq(tile.url,
|
||||
"http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"Image covering more than all of extent loads");
|
||||
|
||||
layer.displayOutsideMaxExtent=1;
|
||||
@@ -223,31 +225,31 @@
|
||||
tile.draw()
|
||||
tParams = OpenLayers.Util.extend(tParams, {BBOX: "-185,-90,-180,90"});
|
||||
t.eq(tile.url,
|
||||
"http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"Images against side of maxextent do load with displayOutsideMaxExtent");
|
||||
tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-181,-90,180,90), url, size);
|
||||
tile.draw()
|
||||
tParams = OpenLayers.Util.extend(tParams, {BBOX: "-181,-90,180,90"});
|
||||
t.eq(tile.url,
|
||||
"http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"Images over edges of maxextent do load with displayOutsideMaxExtent set");
|
||||
tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-180,-90,180,90), url, size);
|
||||
tile.draw()
|
||||
tParams = OpenLayers.Util.extend(tParams, {BBOX: "-180,-90,180,90"});
|
||||
t.eq(tile.url,
|
||||
"http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"Image covering all of extent loads with display outside max extent");
|
||||
tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-80,-45,80,45), url, size);
|
||||
tile.draw()
|
||||
tParams = OpenLayers.Util.extend(tParams, {BBOX: "-80,-45,80,45"});
|
||||
t.eq(tile.url,
|
||||
"http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"Image covering small part of extent loads with display outside max extent");
|
||||
tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-185,-95,185,95), url, size);
|
||||
tile.draw()
|
||||
tParams = OpenLayers.Util.extend(tParams, {BBOX: "-185,-95,185,95"});
|
||||
t.eq(tile.url,
|
||||
"http://labs.metacarta.com/wms/vmap0?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"../../img/blank.gif?" + OpenLayers.Util.getParameterString(tParams),
|
||||
"Image covering more than all of extent loads");
|
||||
}
|
||||
function test_Tile_Image_Display_After_Move(t) {
|
||||
@@ -258,7 +260,7 @@
|
||||
var size = new OpenLayers.Size(5,6);
|
||||
var map = new OpenLayers.Map('map');
|
||||
var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
|
||||
"http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'});
|
||||
"../../img/blank.gif", {layers: 'basic'});
|
||||
map.addLayer(layer);
|
||||
map.zoomToMaxExtent();
|
||||
tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-90,-85,-90,85), url, size);
|
||||
@@ -266,7 +268,7 @@
|
||||
tile.moveTo(new OpenLayers.Bounds(-185,-90,-180,-80), new OpenLayers.Pixel(-180,-85), true);
|
||||
t.delay_call( 1, function() { t.eq(tile.imgDiv.style.visibility, "hidden", "Tile image is invisible.") } );
|
||||
var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
|
||||
"http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}, {'alpha':true});
|
||||
"../../img/blank.gif", {layers: 'basic'}, {'alpha':true});
|
||||
map.addLayer(layer);
|
||||
tile = new OpenLayers.Tile.Image(layer, position, new OpenLayers.Bounds(-90,-85,-90,85), url, size);
|
||||
tile.draw();
|
||||
@@ -326,7 +328,7 @@
|
||||
|
||||
var map = new OpenLayers.Map('map');
|
||||
var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
|
||||
"http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'});
|
||||
"../../img/blank.gif", {layers: 'basic'});
|
||||
map.addLayer(layer);
|
||||
map.setCenter(new OpenLayers.LonLat(0,0), 5);
|
||||
var tile = layer.grid[0][0];
|
||||
@@ -351,7 +353,7 @@
|
||||
|
||||
var map = new OpenLayers.Map('map');
|
||||
var layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
|
||||
"http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}, {opacity: 0.5});
|
||||
"../../img/blank.gif", {layers: 'basic'}, {opacity: 0.5});
|
||||
map.addLayer(layer);
|
||||
map.setCenter(new OpenLayers.LonLat(0,0), 5);
|
||||
|
||||
@@ -372,53 +374,6 @@
|
||||
map.destroy();
|
||||
}
|
||||
|
||||
// test for https://github.com/openlayers/openlayers/pull/36
|
||||
// (more an integration test than a unit test)
|
||||
function test_olImageLoadError(t) {
|
||||
t.plan(6);
|
||||
|
||||
var map = new OpenLayers.Map('map');
|
||||
var layer = new OpenLayers.Layer.WMS("invalid", "", {layers: 'basic'});
|
||||
map.addLayer(layer);
|
||||
|
||||
var size = new OpenLayers.Size(5, 6);
|
||||
var position = new OpenLayers.Pixel(20, 30);
|
||||
var bounds = new OpenLayers.Bounds(1, 2, 3, 4);
|
||||
|
||||
var tile = new OpenLayers.Tile.Image(layer, position, bounds, null, size);
|
||||
var log = [];
|
||||
tile.events.register("loaderror", this, function(e) {
|
||||
log.push([
|
||||
e.object.imgDiv.style.visibility,
|
||||
OpenLayers.Element.hasClass(e.object.imgDiv, 'olImageLoadError')
|
||||
]);
|
||||
});
|
||||
tile.events.register("loadend", this, function(e) {
|
||||
log.push(e);
|
||||
})
|
||||
tile.draw();
|
||||
|
||||
t.delay_call(0.1, function() {
|
||||
|
||||
t.eq(log.length, 2, "loaderror and loadend events triggered");
|
||||
t.eq(log[0][0], "hidden", "tile still hidden when loaderror is triggered");
|
||||
t.eq(log[0][1], true, "tile has olImageLoadError class already when loaderror is triggered");
|
||||
t.ok(log[1].object === tile, "loadend event triggered after loaderror");
|
||||
|
||||
// check initial state
|
||||
t.ok(OpenLayers.Element.hasClass(tile.imgDiv, 'olImageLoadError'),
|
||||
'tile image has the olImageLoadError class (init state)');
|
||||
|
||||
layer.setVisibility(false);
|
||||
layer.setVisibility(true);
|
||||
|
||||
t.ok(OpenLayers.Element.hasClass(tile.imgDiv, 'olImageLoadError'),
|
||||
'tile image still has the olImageLoadError class');
|
||||
|
||||
map.destroy();
|
||||
});
|
||||
}
|
||||
|
||||
function test_getCanvasContext(t) {
|
||||
if (!OpenLayers.CANVAS_SUPPORTED) {
|
||||
t.plan(0);
|
||||
@@ -426,8 +381,8 @@
|
||||
t.plan(1);
|
||||
|
||||
var map = new OpenLayers.Map('map');
|
||||
var layer = new OpenLayers.Layer.WMS("OpenLayers WMS",
|
||||
"http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'});
|
||||
var layer = new OpenLayers.Layer.WMS("blank",
|
||||
"../../img/blank.gif", {layers: 'fake'});
|
||||
map.addLayer(layer);
|
||||
map.setCenter(new OpenLayers.LonLat(0, 0), 5);
|
||||
|
||||
@@ -443,7 +398,7 @@
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -0,0 +1,305 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<script>
|
||||
/**
|
||||
* Because browsers that implement requestAnimationFrame may not execute
|
||||
* animation functions while a window is not displayed (e.g. in a hidden
|
||||
* iframe as in these tests), we mask the native implementations here. The
|
||||
* native requestAnimationFrame functionality is tested in Util.html and
|
||||
* in PanZoom.html (where a popup is opened before panning). The panTo tests
|
||||
* here will test the fallback setTimeout implementation for animation.
|
||||
*/
|
||||
window.requestAnimationFrame =
|
||||
window.webkitRequestAnimationFrame =
|
||||
window.mozRequestAnimationFrame =
|
||||
window.oRequestAnimationFrame =
|
||||
window.msRequestAnimationFrame = null;
|
||||
</script>
|
||||
<script src="../OLLoader.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
var map, layer;
|
||||
function setUp() {
|
||||
layer = new OpenLayers.Layer.UTFGrid({
|
||||
url: "../data/utfgrid/world_utfgrid/${z}/${x}/${y}.json",
|
||||
isBaseLayer: true,
|
||||
utfgridResolution: 4
|
||||
});
|
||||
map = new OpenLayers.Map({
|
||||
div: "map",
|
||||
projection: "EPSG:900913",
|
||||
layers: [layer],
|
||||
center: [0, 0],
|
||||
zoom: 1
|
||||
});
|
||||
}
|
||||
|
||||
function tearDown() {
|
||||
map.destroy();
|
||||
map = null;
|
||||
layer = null;
|
||||
}
|
||||
|
||||
function test_constructor(t) {
|
||||
t.plan(7);
|
||||
|
||||
setUp();
|
||||
|
||||
var position = new OpenLayers.Pixel(20, 30);
|
||||
var bounds = new OpenLayers.Bounds(1, 2, 3, 4);
|
||||
var url = "http://example.com/";
|
||||
var size = new OpenLayers.Size(5, 6);
|
||||
var tile = new OpenLayers.Tile.UTFGrid(layer, position, bounds, url, size);
|
||||
|
||||
t.ok(tile instanceof OpenLayers.Tile, "tile instance");
|
||||
t.ok(tile instanceof OpenLayers.Tile.UTFGrid, "UTFGrid tile instance");
|
||||
t.ok(tile.layer === layer, "layer set");
|
||||
t.ok(tile.position.equals(position), "position set");
|
||||
t.ok(tile.bounds.equals(bounds), "bounds set");
|
||||
t.eq(tile.url, url, "url set");
|
||||
t.ok(tile.size.equals(size), "size set");
|
||||
|
||||
tearDown();
|
||||
}
|
||||
|
||||
function test_parseData(t) {
|
||||
t.plan(2);
|
||||
setUp();
|
||||
|
||||
var tile = layer.grid[0][0];
|
||||
|
||||
tile.parseData('{"foo": "bar"}');
|
||||
t.eq(tile.json, {foo: "bar"}, "valid json parsed");
|
||||
|
||||
var err, obj;
|
||||
try {
|
||||
obj = tile.parseData('foo bar');
|
||||
} catch (e) {
|
||||
err = e;
|
||||
}
|
||||
// The JSON format doesn't actually throw on IE6, so we also check
|
||||
// for undefined here.
|
||||
t.ok(err instanceof Error || obj === undefined, "throws on invalid json");
|
||||
|
||||
tearDown();
|
||||
}
|
||||
|
||||
function test_draw(t) {
|
||||
t.plan(7);
|
||||
setUp();
|
||||
|
||||
var position = new OpenLayers.Pixel(20, 30);
|
||||
var bounds = new OpenLayers.Bounds(1, 2, 3, 4);
|
||||
var url = "../data/utfgrid/world_utfgrid/${z}/${x}/${y}.json";
|
||||
var size = new OpenLayers.Size(256, 256);
|
||||
var tile = new OpenLayers.Tile.UTFGrid(layer, position, bounds, url, size);
|
||||
|
||||
var log = [];
|
||||
function logger(event) {
|
||||
log.push(event);
|
||||
}
|
||||
tile.events.on({
|
||||
loadstart: logger,
|
||||
reload: logger,
|
||||
loadend: logger
|
||||
});
|
||||
|
||||
t.eq(log.length, 0, "no events logged");
|
||||
|
||||
// start tile loading
|
||||
tile.draw();
|
||||
t.eq(log.length, 1, "[first draw] one event");
|
||||
t.eq(log[0].type, "loadstart", "[first draw] loadstart");
|
||||
|
||||
// restart tile loading
|
||||
log.length = 0;
|
||||
tile.draw();
|
||||
t.eq(log.length, 1, "[second draw] first event");
|
||||
t.eq(log[0].type, "reload", "[second draw] reload");
|
||||
|
||||
// wait for tile loading to finish
|
||||
t.delay_call(1, function() {
|
||||
t.eq(log.length, 2, "[second draw] second event");
|
||||
t.eq(log[1].type, "loadend", "[second draw] loadend");
|
||||
tearDown();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function test_abortLoading(t) {
|
||||
t.plan(7);
|
||||
setUp();
|
||||
|
||||
var position = new OpenLayers.Pixel(20, 30);
|
||||
var bounds = new OpenLayers.Bounds(1, 2, 3, 4);
|
||||
var url = "../data/utfgrid/world_utfgrid/${z}/${x}/${y}.json";
|
||||
var size = new OpenLayers.Size(256, 256);
|
||||
var tile = new OpenLayers.Tile.UTFGrid(layer, position, bounds, url, size);
|
||||
|
||||
var log = [];
|
||||
function logger(event) {
|
||||
log.push(event);
|
||||
}
|
||||
tile.events.on({
|
||||
loadstart: logger,
|
||||
reload: logger,
|
||||
loadend: logger
|
||||
});
|
||||
|
||||
t.eq(log.length, 0, "no events logged");
|
||||
|
||||
// start tile loading
|
||||
tile.draw();
|
||||
t.eq(log.length, 1, "[first draw] one event");
|
||||
t.eq(log[0].type, "loadstart", "[first draw] loadstart");
|
||||
|
||||
// abort tile loading
|
||||
log.length = 0;
|
||||
tile.abortLoading();
|
||||
t.eq(log.length, 0, "[first abort] no events logged"); // TODO: does anybody need an abort event?
|
||||
|
||||
// abort again for the heck of it
|
||||
var err;
|
||||
try {
|
||||
tile.abortLoading();
|
||||
} catch (e) {
|
||||
err = e;
|
||||
}
|
||||
t.ok(!err, "[second abort] no trouble");
|
||||
t.eq(log.length, 0, "[second abort] no events");
|
||||
|
||||
// wait to confirm tile loading doesn't happen after abort
|
||||
t.delay_call(1, function() {
|
||||
t.eq(log.length, 0, "[wait] no events");
|
||||
tearDown();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function test_getFeatureId(t) {
|
||||
t.plan(3);
|
||||
setUp();
|
||||
|
||||
var tile = layer.grid[1][1];
|
||||
t.delay_call(0.5, function() {
|
||||
var id = tile.getFeatureId(16, 60);
|
||||
t.eq(id, "238", "feature 238 at 16, 60");
|
||||
t.eq(tile.getFeatureId(18, 63), id, "same feature at 18, 63");
|
||||
|
||||
t.eq(tile.getFeatureId(300, 10), null, "null id outside tile");
|
||||
|
||||
tearDown();
|
||||
});
|
||||
}
|
||||
|
||||
function test_getFeatureInfo(t) {
|
||||
t.plan(3);
|
||||
setUp();
|
||||
|
||||
var tile = layer.grid[1][1];
|
||||
t.delay_call(0.5, function() {
|
||||
var info = tile.getFeatureInfo(16, 60);
|
||||
var exp = {
|
||||
id: "238",
|
||||
data: {
|
||||
NAME: "Svalbard",
|
||||
POP2005: 0
|
||||
}
|
||||
};
|
||||
t.eq(info, exp, "feature info at 16, 60");
|
||||
t.eq(tile.getFeatureInfo(17, 62), exp, "same feature at 17, 62");
|
||||
|
||||
t.eq(tile.getFeatureInfo(300, 10), null, "undefined outside tile");
|
||||
|
||||
tearDown();
|
||||
});
|
||||
}
|
||||
|
||||
// While I dislike committing tests that aren't run, I'd like to make an
|
||||
// exception here. This test (or something like it) should pass. When
|
||||
// https://github.com/mapbox/utfgrid-spec/issues/1 is resolved, we should
|
||||
// either modify this or update demo.json and enable the test.
|
||||
function xtest_getFeatureId_demo(t) {
|
||||
/**
|
||||
* The UTFGrid 1.2 spec (https://github.com/mapbox/utfgrid-spec/blob/master/1.2/utfgrid.md)
|
||||
* links to a demo.json to be used for testing implementations. This
|
||||
* file is constructed with 256x256 data points. Each data point maps
|
||||
* to a "feature id" using this heuristic:
|
||||
*
|
||||
* // x and y are pixel offsets from top left of 256x256 tile
|
||||
* if (y < 255 || x < 222) {
|
||||
* id = (y * 256) + x
|
||||
* } else {
|
||||
* id = 65501; // max number of ids that can be encoded
|
||||
* }
|
||||
*/
|
||||
t.plan(1);
|
||||
setUp();
|
||||
|
||||
// look at this beauty of a constructor
|
||||
var tile = new OpenLayers.Tile.UTFGrid(
|
||||
layer, // layer
|
||||
new OpenLayers.Pixel(0, 0), // position
|
||||
new OpenLayers.Bounds(0, 0, 256, 256), // bounds
|
||||
"../data/utfgrid/demo-1.1.json", // url
|
||||
new OpenLayers.Size(256, 256), // size
|
||||
{utfgridResolution: 1} // options
|
||||
);
|
||||
|
||||
var err;
|
||||
var request = new OpenLayers.Request.GET({
|
||||
url: tile.url,
|
||||
success: function(req) {
|
||||
try {
|
||||
tile.parseData(req.responseText);
|
||||
} catch (e) {
|
||||
err = e;
|
||||
}
|
||||
},
|
||||
failure: function(req) {
|
||||
err = new Error("Failed to fetch json. Status: " + req.status);
|
||||
}
|
||||
});
|
||||
|
||||
// wait for response and parsing, then make assertions
|
||||
t.delay_call(1, function() {
|
||||
if (err) {
|
||||
t.fail(err);
|
||||
} else {
|
||||
var got, exp, failure;
|
||||
outer: for (var y=0; y<256; ++y) {
|
||||
for (var x=0; x<256; ++x) {
|
||||
if (y<255 || x<222) {
|
||||
exp = String((y * 256) + x);
|
||||
} else {
|
||||
exp = "65501";
|
||||
}
|
||||
got = tile.getFeatureId(x, y);
|
||||
if (got !== exp) {
|
||||
failure = "Failed to get id for (" + x + ", " + y + "): " +
|
||||
"got " + got + " but expected " + exp;
|
||||
|
||||
break outer;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!failure) {
|
||||
t.ok(true, "resolved feature ids for all data points");
|
||||
} else {
|
||||
t.fail(failure);
|
||||
}
|
||||
}
|
||||
tearDown();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="map" style="height:550px;width:500px"></div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+2
-3
@@ -498,9 +498,8 @@
|
||||
|
||||
t.eq(element.style.opacity, '',
|
||||
"element.style.opacity is removed when opacity = " + opacity);
|
||||
//Safari 3 returns null for this value, which is okay
|
||||
var filterString = (OpenLayers.BROWSER_NAME == 'safari') ? null : '';
|
||||
t.eq(element.style.filter, filterString,
|
||||
// Some browser returns null instead of '', which is okay
|
||||
t.ok(element.style.filter == '' || element.style.filter == null,
|
||||
"element.style.filter is removed when opacity = " + opacity);
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}
|
||||
@@ -0,0 +1 @@
|
||||
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}
|
||||
@@ -0,0 +1 @@
|
||||
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}
|
||||
@@ -0,0 +1 @@
|
||||
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}
|
||||
@@ -0,0 +1 @@
|
||||
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}
|
||||
@@ -0,0 +1 @@
|
||||
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}
|
||||
@@ -0,0 +1 @@
|
||||
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}
|
||||
@@ -1,122 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<!-- multimap api key for http://(www.)openlayers.org -->
|
||||
<script type="text/javascript" src="http://developer.multimap.com/API/maps/1.2/OA10072915821139765"></script>
|
||||
<script src="../../OLLoader.js"></script>
|
||||
<script src="../../../lib/deprecated.js"></script>
|
||||
<script type="text/javascript">
|
||||
var doTest = true;
|
||||
function test_Layer_MultiMap_constructor (t) {
|
||||
// WebKit browsers fail when the API key is for a different url, so we
|
||||
// do not test in this case.
|
||||
try {
|
||||
var map = new OpenLayers.Map("map");
|
||||
var layer = new OpenLayers.Layer.MultiMap('MultiMap Layer');
|
||||
map.addLayer(layer);
|
||||
}
|
||||
catch(e) {
|
||||
doTest = false;
|
||||
}
|
||||
|
||||
if (!doTest) { t.plan(0); return; }
|
||||
t.plan( 4 );
|
||||
|
||||
var map = new OpenLayers.Map('map');
|
||||
var layer = new OpenLayers.Layer.MultiMap('MultiMap Layer');
|
||||
map.addLayer(layer);
|
||||
|
||||
|
||||
t.ok( layer instanceof OpenLayers.Layer.MultiMap, "new OpenLayers.Layer.MultiMap returns object" );
|
||||
t.eq( layer.CLASS_NAME, "OpenLayers.Layer.MultiMap", "CLASS_NAME variable set correctly");
|
||||
|
||||
t.eq( layer.name, "MultiMap Layer", "layer.name is correct" );
|
||||
|
||||
t.ok ( layer.mapObject != null, "MultiMap Object correctly loaded");
|
||||
}
|
||||
|
||||
function test_Layer_MultiMap_isBaseLayer (t) {
|
||||
if (!doTest) { t.plan(0); return; }
|
||||
t.plan(1);
|
||||
|
||||
var layer = new OpenLayers.Layer.MultiMap('MultiMap Layer');
|
||||
|
||||
t.ok(layer.isBaseLayer, "a default load of multimap layer responds as a base layer");
|
||||
}
|
||||
|
||||
function test_Layer_MultiMap_Translation_lonlat (t) {
|
||||
if (!doTest) { t.plan(0); return; }
|
||||
|
||||
t.plan( 4 );
|
||||
|
||||
var map = new OpenLayers.Map('map');
|
||||
var layer = new OpenLayers.Layer.MultiMap('MultiMap Layer');
|
||||
map.addLayer(layer);
|
||||
|
||||
// these two lines specify an appropriate translation.
|
||||
// the code afterwards works by itself to test that translation
|
||||
// works correctly both ways.
|
||||
var gLatLng = new MMLatLon(50,100);
|
||||
var correspondingOLLonLat = new OpenLayers.LonLat(100,50);
|
||||
|
||||
|
||||
olLonLat = layer.getOLLonLatFromMapObjectLonLat(gLatLng);
|
||||
t.ok(olLonLat.equals(correspondingOLLonLat), "Translation from GLatLng to OpenLayers.LonLat works");
|
||||
|
||||
var transGLatLng = layer.getMapObjectLonLatFromOLLonLat(olLonLat);
|
||||
t.ok( (transGLatLng.lat == gLatLng.lat) && (transGLatLng.lon == transGLatLng.lon), "Translation from OpenLayers.LonLat to GLatLng works");
|
||||
|
||||
t.ok( layer.getMapObjectLonLatFromOLLonLat(null) == null, "getGLatLngFromOLLonLat(null) returns null");
|
||||
t.ok( layer.getOLLonLatFromMapObjectLonLat(null) == null, "getOLLonLatFromGLatLng(null) returns null");
|
||||
}
|
||||
|
||||
function test_Layer_MultiMap_Translation_pixel (t) {
|
||||
if (!doTest) { t.plan(0); return; }
|
||||
|
||||
t.plan( 4 );
|
||||
|
||||
var map = new OpenLayers.Map('map');
|
||||
var layer = new OpenLayers.Layer.MultiMap('MultiMap Layer');
|
||||
map.addLayer(layer);
|
||||
|
||||
// these two lines specify an appropriate translation.
|
||||
// the code afterwards works by itself to test that translation
|
||||
// works correctly both ways.
|
||||
var gPoint = new MMPoint(50,100);
|
||||
var correspondingOLPixel = new OpenLayers.Pixel(50, 100);
|
||||
|
||||
|
||||
olPixel = layer.getOLPixelFromMapObjectPixel(gPoint);
|
||||
t.ok( olPixel.equals(correspondingOLPixel), "Translation from GPoint to OpenLayers.Pixel works");
|
||||
|
||||
var transGPoint = layer.getMapObjectPixelFromOLPixel(olPixel);
|
||||
t.ok( ((transGPoint.x == transGPoint.x) && (transGPoint.y == transGPoint.y)), "Translation from OpenLayers.Pixel to GPoint works");
|
||||
|
||||
t.ok( layer.getMapObjectPixelFromOLPixel(null) == null, "getGPointFromOLPixel(null) returns null");
|
||||
t.ok( layer.getOLPixelFromMapObjectPixel(null) == null, "getOLPixelFromGPoint(null) returns null");
|
||||
}
|
||||
|
||||
|
||||
function test_Layer_destroy (t) {
|
||||
if (!doTest) { t.plan(0); return; }
|
||||
t.plan( 5 );
|
||||
|
||||
var map = new OpenLayers.Map('map');
|
||||
|
||||
layer = new OpenLayers.Layer.MultiMap('Test Layer');
|
||||
map.addLayer(layer);
|
||||
|
||||
layer.destroy();
|
||||
|
||||
t.eq( layer.name, null, "layer.name is null after destroy" );
|
||||
t.eq( layer.div, null, "layer.div is null after destroy" );
|
||||
t.eq( layer.map, null, "layer.map is null after destroy" );
|
||||
t.eq( layer.options, null, "layer.options is null after destroy" );
|
||||
t.eq( layer.multimap, null, "layer.gmap is null after destroy" );
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="map"></div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,6 +1,7 @@
|
||||
<html>
|
||||
<head>
|
||||
<script src="../OLLoader.js"></script>
|
||||
<script src="../../OLLoader.js"></script>
|
||||
<script src="../../../lib/deprecated.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
var geometry = null, node = null;
|
||||
+10
-2
@@ -13,6 +13,8 @@
|
||||
<li>Control/Attribution.html</li>
|
||||
<li>Control/ArgParser.html</li>
|
||||
<li>Control/Button.html</li>
|
||||
<li>Control/CacheRead.html</li>
|
||||
<li>Control/CacheWrite.html</li>
|
||||
<li>Control/DragFeature.html</li>
|
||||
<li>Control/DragPan.html</li>
|
||||
<li>Control/DrawFeature.html</li>
|
||||
@@ -41,10 +43,12 @@
|
||||
<li>Control/Split.html</li>
|
||||
<li>Control/TouchNavigation.html</li>
|
||||
<li>Control/TransformFeature.html</li>
|
||||
<li>Control/UTFGrid.html</li>
|
||||
<li>Control/WMSGetFeatureInfo.html</li>
|
||||
<li>Control/WMTSGetFeatureInfo.html</li>
|
||||
<li>Control/PanPanel.html</li>
|
||||
<li>Control/SLDSelect.html</li>
|
||||
<li>Control/Zoom.html</li>
|
||||
<li>Events.html</li>
|
||||
<li>Events/buttonclick.html</li>
|
||||
<li>Extras.html</li>
|
||||
@@ -164,6 +168,7 @@
|
||||
<li>Layer/Text.html</li>
|
||||
<li>Layer/TileCache.html</li>
|
||||
<li>Layer/TMS.html</li>
|
||||
<li>Layer/UTFGrid.html</li>
|
||||
<li>Layer/Vector.html</li>
|
||||
<li>Layer/Vector/RootContainer.html</li>
|
||||
<li>Layer/WMS.html</li>
|
||||
@@ -179,6 +184,9 @@
|
||||
<li>OpenLayers3.html</li>
|
||||
<li>OpenLayers4.html</li>
|
||||
<li>OpenLayersJsFiles.html</li>
|
||||
<li>SingleFile1.html</html>
|
||||
<li>SingleFile2.html</html>
|
||||
<li>SingleFile3.html</html>
|
||||
<li>Popup.html</li>
|
||||
<li>Popup/Anchored.html</li>
|
||||
<li>Popup/AnchoredBubble.html</li>
|
||||
@@ -194,7 +202,6 @@
|
||||
<li>Renderer/Canvas.html</li>
|
||||
<li>Renderer/Elements.html</li>
|
||||
<li>Renderer/SVG.html</li>
|
||||
<li>Renderer/SVG2.html</li>
|
||||
<li>Renderer/VML.html</li>
|
||||
<li>Request.html</li>
|
||||
<li>Request/XMLHttpRequest.html</li>
|
||||
@@ -219,6 +226,7 @@
|
||||
<li>Tile.html</li>
|
||||
<li>Tile/Image.html</li>
|
||||
<li>Tile/Image/IFrame.html</li>
|
||||
<li>Tile/UTFGrid.html</li>
|
||||
<li>Tween.html</li>
|
||||
<li>Kinetic.html</li>
|
||||
<li>Util.html</li>
|
||||
@@ -230,12 +238,12 @@
|
||||
<li>deprecated/Layer/GML.html</li>
|
||||
<li>deprecated/Layer/MapServer.html</li>
|
||||
<li>deprecated/Layer/MapServer/Untiled.html</li>
|
||||
<li>deprecated/Layer/MultiMap.html</li>
|
||||
<li>deprecated/Layer/WFS.html</li>
|
||||
<li>deprecated/Layer/WMS.html</li>
|
||||
<li>deprecated/Layer/WMS/Post.html</li>
|
||||
<li>deprecated/Protocol/SQL.html</li>
|
||||
<li>deprecated/Protocol/SQL/Gears.html</li>
|
||||
<li>deprecated/Renderer/SVG2.html</li>
|
||||
<li>deprecated/Layer/Yahoo.html</li>
|
||||
<li>deprecated/Tile/WFS.html</li>
|
||||
</ul>
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<link rel="stylesheet" href="../../theme/default/style.css" type="text/css">
|
||||
<link rel="stylesheet" href="../../examples/style.css" type="text/css">
|
||||
<script src="../../lib/OpenLayers.js"></script>
|
||||
<script type="text/javascript">
|
||||
var lon = 5;
|
||||
var lat = 40;
|
||||
var zoom = 5;
|
||||
var map, layer;
|
||||
|
||||
var numLoadingLayers = 0;
|
||||
|
||||
function init(){
|
||||
map = new OpenLayers.Map( 'map' );
|
||||
layer = new OpenLayers.Layer.WMS( "OpenLayers WMS",
|
||||
"http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'});
|
||||
|
||||
layer.events.register('loadstart', this, onloadstart);
|
||||
layer.events.register('loadend', this, onloadend);
|
||||
|
||||
map.addLayer(layer);
|
||||
|
||||
map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
|
||||
}
|
||||
|
||||
function log(msg) {
|
||||
document.getElementById("output").innerHTML += msg + "<br />";
|
||||
}
|
||||
|
||||
function onloadstart(evt) {
|
||||
numLoadingLayers++;
|
||||
var msg = ['loadstart', '# layers loading:', numLoadingLayers].join(' ');
|
||||
log (msg);
|
||||
};
|
||||
|
||||
function onloadend(evt) {
|
||||
numLoadingLayers--;
|
||||
var msg = ['loadend ', '# layers loading:', numLoadingLayers].join(' ');
|
||||
log (msg);
|
||||
};
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body onload="init()">
|
||||
<h1 id="title">WMS loadstart/loadend events</h1>
|
||||
|
||||
<div id="tags">
|
||||
wms, layer, singletile
|
||||
</div>
|
||||
<p id="shortdesc">
|
||||
Shows the loadstart and loadend events of a WMS layer
|
||||
</p>
|
||||
|
||||
<div id="map" class="smallmap"></div>
|
||||
|
||||
<div id="docs">
|
||||
<p>
|
||||
This example is helpful in testing whether all loadstart events are followed
|
||||
by a loadend event.
|
||||
Test by using scroll-wheel up and down.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<h1>loadstart and loadend events</h1>
|
||||
<pre id="output"></pre>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,50 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
|
||||
<link rel="stylesheet" href="../../theme/default/style.css" type="text/css" />
|
||||
<style type="text/css">
|
||||
#map {
|
||||
width: 512px;
|
||||
height: 512px;
|
||||
border: 1px solid gray;
|
||||
}
|
||||
</style>
|
||||
<title>SVG2 coordinate range check</title>
|
||||
<script type="text/javascript" src="../../lib/OpenLayers.js"></script>
|
||||
<script>
|
||||
|
||||
var WGS84 = new OpenLayers.Projection("EPSG:4326");
|
||||
var Mercator = new OpenLayers.Projection("EPSG:900913");
|
||||
var wkt = new OpenLayers.Format.WKT({ internalProjection: Mercator, externalProjection: WGS84 });
|
||||
|
||||
function init() {
|
||||
var externalGraphic, baseURL, baseLayer, layerOptions, hidemessenger;
|
||||
|
||||
var map = new OpenLayers.Map('map', {
|
||||
controls: [
|
||||
new OpenLayers.Control.Navigation(),
|
||||
new OpenLayers.Control.PanZoom(),
|
||||
new OpenLayers.Control.Attribution()
|
||||
],
|
||||
theme: null
|
||||
});
|
||||
|
||||
baseLayer = new OpenLayers.Layer.OSM("OSM");
|
||||
|
||||
var viewLayer = new OpenLayers.Layer.Vector("View Layer", {renderers: ["SVG2"]});
|
||||
map.addLayers([baseLayer, viewLayer]);
|
||||
|
||||
viewLayer.addFeatures([wkt.read("LINESTRING(2.4356174739332 48.816618174539, 2.4313688548536 48.826083884311)")]);
|
||||
var lonLat = new OpenLayers.LonLat( 2.43686, 48.81742) .transform( WGS84, Mercator);
|
||||
map.setCenter (lonLat, 16);
|
||||
}
|
||||
</script>
|
||||
|
||||
<body onload="init()">
|
||||
<div id="map"></div>
|
||||
<p>The map should show a line on top of the OSM layer. If it does not, then
|
||||
either the CSS or the SVG coordinate range is exceeded.</p>
|
||||
<p>This test only works on browsers that support SVG.</p>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user