| 1 |
<html> |
|---|
| 2 |
<head> |
|---|
| 3 |
<script src="../lib/OpenLayers.js"></script> |
|---|
| 4 |
<script type="text/javascript"> |
|---|
| 5 |
|
|---|
| 6 |
var isMozilla = (navigator.userAgent.indexOf("compatible") == -1); |
|---|
| 7 |
var map; |
|---|
| 8 |
|
|---|
| 9 |
function test_01_Map_constructor (t) { |
|---|
| 10 |
t.plan( 10 ); |
|---|
| 11 |
|
|---|
| 12 |
map = new OpenLayers.Map('map'); |
|---|
| 13 |
var baseLayer = new OpenLayers.Layer.WMS("Test Layer", |
|---|
| 14 |
"http://octo.metacarta.com/cgi-bin/mapserv?", |
|---|
| 15 |
{map: "/mapdata/vmap_wms.map", layers: "basic"}); |
|---|
| 16 |
map.addLayer(baseLayer); |
|---|
| 17 |
|
|---|
| 18 |
t.ok( map instanceof OpenLayers.Map, "new OpenLayers.Map returns object" ); |
|---|
| 19 |
if (!isMozilla) { |
|---|
| 20 |
t.ok( true, "skipping element test outside of Mozilla"); |
|---|
| 21 |
t.ok( true, "skipping element test outside of Mozilla"); |
|---|
| 22 |
t.ok( true, "skipping element test outside of Mozilla"); |
|---|
| 23 |
} else { |
|---|
| 24 |
t.ok( map.div instanceof HTMLDivElement, "map.div is an HTMLDivElement" ); |
|---|
| 25 |
t.ok( map.viewPortDiv instanceof HTMLDivElement, "map.viewPortDiv is an HTMLDivElement" ); |
|---|
| 26 |
t.ok( map.layerContainerDiv instanceof HTMLDivElement, "map.layerContainerDiv is an HTMLDivElement" ); |
|---|
| 27 |
} |
|---|
| 28 |
t.ok( map.layers instanceof Array, "map.layers is an Array" ); |
|---|
| 29 |
t.ok( map.controls instanceof Array, "map.controls is an Array" ); |
|---|
| 30 |
t.eq( map.controls.length, 4, "Default map has 4 controls." ); |
|---|
| 31 |
t.ok( map.events instanceof OpenLayers.Events, "map.events is an OpenLayers.Events" ); |
|---|
| 32 |
t.ok( map.getMaxExtent() instanceof OpenLayers.Bounds, "map.maxExtent is an OpenLayers.Bounds" ); |
|---|
| 33 |
t.ok( map.getNumZoomLevels() > 0, "map has a default numZoomLevels" ); |
|---|
| 34 |
} |
|---|
| 35 |
|
|---|
| 36 |
function test_02_Map_center(t) { |
|---|
| 37 |
t.plan(3); |
|---|
| 38 |
map = new OpenLayers.Map('map'); |
|---|
| 39 |
var baseLayer = new OpenLayers.Layer.WMS("Test Layer", |
|---|
| 40 |
"http://octo.metacarta.com/cgi-bin/mapserv?", |
|---|
| 41 |
{map: "/mapdata/vmap_wms.map", layers: "basic"}); |
|---|
| 42 |
map.addLayer(baseLayer); |
|---|
| 43 |
var ll = new OpenLayers.LonLat(2,1); |
|---|
| 44 |
map.setCenter(ll, 0); |
|---|
| 45 |
t.ok( map.getCenter() instanceof OpenLayers.LonLat, "map.getCenter returns a LonLat"); |
|---|
| 46 |
t.eq( map.getZoom(), 0, "map.zoom is correct after calling setCenter"); |
|---|
| 47 |
t.ok( map.getCenter().equals(ll), "map center is correct after calling setCenter"); |
|---|
| 48 |
} |
|---|
| 49 |
|
|---|
| 50 |
function test_03_Map_add_layers(t) { |
|---|
| 51 |
t.plan(6); |
|---|
| 52 |
map = new OpenLayers.Map('map'); |
|---|
| 53 |
var layer1 = new OpenLayers.Layer.WMS("Layer 1", |
|---|
| 54 |
"http://octo.metacarta.com/cgi-bin/mapserv?", |
|---|
| 55 |
{map: "/mapdata/vmap_wms.map", layers: "basic"}); |
|---|
| 56 |
var layer2 = new OpenLayers.Layer.WMS("Layer 2", |
|---|
| 57 |
"http://wms.jpl.nasa.gov/wms.cgi", {layers: "modis,global_mosaic"}); |
|---|
| 58 |
|
|---|
| 59 |
map.addLayers([layer1, layer2]) |
|---|
| 60 |
t.eq( map.layers.length, 2, "map has exactly two layers" ); |
|---|
| 61 |
t.ok( map.layers[0] === layer1, "1st layer is layer1" ); |
|---|
| 62 |
t.ok( map.layers[1] === layer2, "2nd layer is layer2" ); |
|---|
| 63 |
t.ok( layer1.map === map, "layer.map is map" ); |
|---|
| 64 |
t.eq( parseInt(layer1.div.style.zIndex), map.Z_INDEX_BASE['BaseLayer'], |
|---|
| 65 |
"layer1 zIndex is set" ); |
|---|
| 66 |
t.eq( parseInt(layer2.div.style.zIndex), map.Z_INDEX_BASE['BaseLayer'] + 5, |
|---|
| 67 |
"layer2 zIndex is set" ); |
|---|
| 68 |
} |
|---|
| 69 |
|
|---|
| 70 |
function test_04_Map_options(t) { |
|---|
| 71 |
t.plan(3); |
|---|
| 72 |
map = new OpenLayers.Map('map', {numZoomLevels: 6, maxResolution: 3.14159, theme: 'foo'}); |
|---|
| 73 |
t.eq( map.numZoomLevels, 6, "map.numZoomLevels set correctly via options hashtable" ); |
|---|
| 74 |
t.eq( map.maxResolution, 3.14159, "map.maxResolution set correctly via options hashtable" ); |
|---|
| 75 |
t.eq( map.theme, 'foo', "map theme set correctly." ); |
|---|
| 76 |
} |
|---|
| 77 |
|
|---|
| 78 |
function test_05_Map_center(t) { |
|---|
| 79 |
t.plan(4); |
|---|
| 80 |
map = new OpenLayers.Map('map'); |
|---|
| 81 |
var baseLayer = new OpenLayers.Layer.WMS("Test Layer", |
|---|
| 82 |
"http://octo.metacarta.com/cgi-bin/mapserv?", |
|---|
| 83 |
{map: "/mapdata/vmap_wms.map", layers: "basic"} ); |
|---|
| 84 |
map.addLayer(baseLayer); |
|---|
| 85 |
var ll = new OpenLayers.LonLat(2,1); |
|---|
| 86 |
map.setCenter(ll, 0); |
|---|
| 87 |
map.zoomIn(); |
|---|
| 88 |
t.eq( map.getZoom(), 1, "map.zoom is correct after calling setCenter,zoom in"); |
|---|
| 89 |
t.ok( map.getCenter().equals(ll), "map center is correct after calling setCenter, zoom in"); |
|---|
| 90 |
map.zoomOut(); |
|---|
| 91 |
t.eq( map.getZoom(), 0, "map.zoom is correct after calling setCenter,zoom in, zoom out"); |
|---|
| 92 |
|
|---|
| 93 |
map.zoomTo(5); |
|---|
| 94 |
t.eq( map.getZoom(), 5, "map.zoom is correct after calling zoomTo" ); |
|---|
| 95 |
|
|---|
| 96 |
|
|---|
| 97 |
|
|---|
| 98 |
|
|---|
| 99 |
|
|---|
| 100 |
|
|---|
| 101 |
|
|---|
| 102 |
|
|---|
| 103 |
|
|---|
| 104 |
} |
|---|
| 105 |
|
|---|
| 106 |
function test_06_Map_zoomend_event (t) { |
|---|
| 107 |
t.plan(2); |
|---|
| 108 |
|
|---|
| 109 |
map = new OpenLayers.Map('map'); |
|---|
| 110 |
var baseLayer = new OpenLayers.Layer.WMS("Test Layer", |
|---|
| 111 |
"http://octo.metacarta.com/cgi-bin/mapserv?", |
|---|
| 112 |
{map: "/mapdata/vmap_wms.map", layers: "basic"}); |
|---|
| 113 |
map.addLayer(baseLayer); |
|---|
| 114 |
map.events.register("zoomend", {count: 0}, function() { |
|---|
| 115 |
this.count++; |
|---|
| 116 |
t.ok(true, "zoomend event was triggered " + this.count + " times"); |
|---|
| 117 |
}); |
|---|
| 118 |
map.setCenter(new OpenLayers.LonLat(2, 1), 0); |
|---|
| 119 |
map.zoomIn(); |
|---|
| 120 |
map.zoomOut(); |
|---|
| 121 |
} |
|---|
| 122 |
|
|---|
| 123 |
function test_07_Map_add_remove_popup (t) { |
|---|
| 124 |
t.plan(4); |
|---|
| 125 |
|
|---|
| 126 |
map = new OpenLayers.Map('map'); |
|---|
| 127 |
var baseLayer = new OpenLayers.Layer.WMS("Test Layer", |
|---|
| 128 |
"http://octo.metacarta.com/cgi-bin/mapserv?", |
|---|
| 129 |
{map: "/mapdata/vmap_wms.map", layers: "basic"}); |
|---|
| 130 |
map.addLayer(baseLayer); |
|---|
| 131 |
|
|---|
| 132 |
var popup = new OpenLayers.Popup("chicken", |
|---|
| 133 |
new OpenLayers.LonLat(0,0), |
|---|
| 134 |
new OpenLayers.Size(200,200)); |
|---|
| 135 |
map.setCenter(new OpenLayers.LonLat(0, 0), 0); |
|---|
| 136 |
|
|---|
| 137 |
map.addPopup(popup); |
|---|
| 138 |
var pIndex = OpenLayers.Util.indexOf(map.popups, popup); |
|---|
| 139 |
t.eq(pIndex, 0, "popup successfully added to Map's internal popups array"); |
|---|
| 140 |
|
|---|
| 141 |
var nodes = map.layerContainerDiv.childNodes; |
|---|
| 142 |
|
|---|
| 143 |
var found = false; |
|---|
| 144 |
for (var i=0; i < nodes.length; i++) { |
|---|
| 145 |
if (nodes.item(i) == popup.div) { |
|---|
| 146 |
found = true; |
|---|
| 147 |
break; |
|---|
| 148 |
} |
|---|
| 149 |
} |
|---|
| 150 |
t.ok(found, "popup.div successfully added to the map's viewPort"); |
|---|
| 151 |
|
|---|
| 152 |
|
|---|
| 153 |
map.removePopup(popup); |
|---|
| 154 |
var pIndex = OpenLayers.Util.indexOf(map.popups, popup); |
|---|
| 155 |
t.eq(pIndex, -1, "popup successfully removed from Map's internal popups array"); |
|---|
| 156 |
|
|---|
| 157 |
var found = false; |
|---|
| 158 |
for (var i=0; i < nodes.length; i++) { |
|---|
| 159 |
if (nodes.item(i) == popup.div) { |
|---|
| 160 |
found = true; |
|---|
| 161 |
break; |
|---|
| 162 |
} |
|---|
| 163 |
} |
|---|
| 164 |
t.ok(!found, "popup.div successfully removed from the map's viewPort"); |
|---|
| 165 |
}; |
|---|
| 166 |
|
|---|
| 167 |
|
|---|
| 168 |
|
|---|
| 169 |
|
|---|
| 170 |
|
|---|
| 171 |
|
|---|
| 172 |
|
|---|
| 173 |
|
|---|
| 174 |
|
|---|
| 175 |
|
|---|
| 176 |
|
|---|
| 177 |
|
|---|
| 178 |
|
|---|
| 179 |
|
|---|
| 180 |
|
|---|
| 181 |
|
|---|
| 182 |
|
|---|
| 183 |
|
|---|
| 184 |
|
|---|
| 185 |
|
|---|
| 186 |
|
|---|
| 187 |
|
|---|
| 188 |
|
|---|
| 189 |
|
|---|
| 190 |
|
|---|
| 191 |
|
|---|
| 192 |
|
|---|
| 193 |
|
|---|
| 194 |
|
|---|
| 195 |
|
|---|
| 196 |
|
|---|
| 197 |
|
|---|
| 198 |
|
|---|
| 199 |
|
|---|
| 200 |
|
|---|
| 201 |
|
|---|
| 202 |
function test_09_Map_isValidLonLat(t) { |
|---|
| 203 |
t.plan( 3 ); |
|---|
| 204 |
|
|---|
| 205 |
map = new OpenLayers.Map('map'); |
|---|
| 206 |
layer = new OpenLayers.Layer.WMS('Test Layer', |
|---|
| 207 |
"http://octo.metacarta.com/cgi-bin/mapserv", |
|---|
| 208 |
{map: '/mapdata/vmap_wms.map', layers: 'basic', format: 'image/jpeg'}, |
|---|
| 209 |
{maxExtent: new OpenLayers.Bounds(33861, 717605, 330846, 1019656), maxResolution: 296985/1024, projection:"EPSG:2805" } ); |
|---|
| 210 |
map.addLayer(layer); |
|---|
| 211 |
|
|---|
| 212 |
t.ok( !map.isValidLonLat(null), "null lonlat is not valid" ); |
|---|
| 213 |
t.ok( map.isValidLonLat(new OpenLayers.LonLat(33862, 717606)), "lonlat outside max extent is valid" ); |
|---|
| 214 |
t.ok( !map.isValidLonLat(new OpenLayers.LonLat(10, 10)), "lonlat outside max extent is not valid" ); |
|---|
| 215 |
} |
|---|
| 216 |
|
|---|
| 217 |
function test_10_Map_getLayer(t) { |
|---|
| 218 |
t.plan( 2 ); |
|---|
| 219 |
|
|---|
| 220 |
map = new OpenLayers.Map('map'); |
|---|
| 221 |
layer = new OpenLayers.Layer.WMS('Test Layer', |
|---|
| 222 |
"http://octo.metacarta.com/cgi-bin/mapserv", |
|---|
| 223 |
{map: '/mapdata/vmap_wms.map', layers: 'basic', format: 'image/jpeg'}, |
|---|
| 224 |
{maxExtent: new OpenLayers.Bounds(33861, 717605, 330846, 1019656), maxResolution: 296985/1024, projection:"EPSG:2805" } ); |
|---|
| 225 |
|
|---|
| 226 |
map.addLayer(layer); |
|---|
| 227 |
var gotLayer = map.getLayer(layer.id); |
|---|
| 228 |
|
|---|
| 229 |
t.ok( layer == gotLayer, "getLayer correctly returns layer" ); |
|---|
| 230 |
|
|---|
| 231 |
gotLayer = map.getLayer("chicken"); |
|---|
| 232 |
|
|---|
| 233 |
t.ok( gotLayer == null, "getLayer correctly returns null when layer not found"); |
|---|
| 234 |
} |
|---|
| 235 |
|
|---|
| 236 |
function test_11_Map_double_addLayer(t) { |
|---|
| 237 |
t.plan( 1 ); |
|---|
| 238 |
|
|---|
| 239 |
map = new OpenLayers.Map($('map')); |
|---|
| 240 |
layer = new OpenLayers.Layer.WMS('Test Layer', |
|---|
| 241 |
"http://octo.metacarta.com/cgi-bin/mapserv", |
|---|
| 242 |
{map: '/mapdata/vmap_wms.map', layers: 'basic', format: 'image/jpeg'} |
|---|
| 243 |
); |
|---|
| 244 |
|
|---|
| 245 |
map.addLayers([layer,layer]); |
|---|
| 246 |
|
|---|
| 247 |
t.eq( map.layers.length, 1, "Map does not allow double adding of layers." ); |
|---|
| 248 |
|
|---|
| 249 |
} |
|---|
| 250 |
|
|---|
| 251 |
function test_12_Map_setBaseLayer(t) { |
|---|
| 252 |
t.plan( 4 ); |
|---|
| 253 |
|
|---|
| 254 |
map = new OpenLayers.Map('map'); |
|---|
| 255 |
|
|---|
| 256 |
var wmslayer = new OpenLayers.Layer.WMS('Test Layer', |
|---|
| 257 |
"http://octo.metacarta.com/cgi-bin/mapserv", |
|---|
| 258 |
{map: '/mapdata/vmap_wms.map', layers: 'basic', format: 'image/jpeg'}, |
|---|
| 259 |
{maxExtent: new OpenLayers.Bounds(33861, 717605, 330846, 1019656), maxResolution: 296985/1024, projection:"EPSG:2805" } ); |
|---|
| 260 |
|
|---|
| 261 |
var wmslayer2 = new OpenLayers.Layer.WMS('Test Layer2', |
|---|
| 262 |
"http://octo.metacarta.com/cgi-bin/mapserv", |
|---|
| 263 |
{map: '/mapdata/vmap_wms.map', layers: 'basic', format: 'image/jpeg'}, |
|---|
| 264 |
{maxExtent: new OpenLayers.Bounds(33861, 717605, 330846, 1019656), maxResolution: 296985/1024, projection:"EPSG:2805" } ); |
|---|
| 265 |
|
|---|
| 266 |
map.addLayers([wmslayer, wmslayer2]); |
|---|
| 267 |
|
|---|
| 268 |
t.ok(map.baseLayer == wmslayer, "default base layer is first one added"); |
|---|
| 269 |
|
|---|
| 270 |
map.setBaseLayer(null); |
|---|
| 271 |
t.ok(map.baseLayer == wmslayer, "setBaseLayer on null object does nothing (and does not break)"); |
|---|
| 272 |
|
|---|
| 273 |
map.setBaseLayer("chicken"); |
|---|
| 274 |
t.ok(map.baseLayer == wmslayer, "setBaseLayer on non-layer object does nothing (and does not break)"); |
|---|
| 275 |
|
|---|
| 276 |
map.setBaseLayer(wmslayer2); |
|---|
| 277 |
t.ok(map.baseLayer == wmslayer2, "setbaselayer correctly sets 'baseLayer' property"); |
|---|
| 278 |
} |
|---|
| 279 |
|
|---|
| 280 |
function test_13_Map_setBaseLayer_after_pan (t) { |
|---|
| 281 |
t.plan(1); |
|---|
| 282 |
|
|---|
| 283 |
map = new OpenLayers.Map('map'); |
|---|
| 284 |
var wmsLayer = new OpenLayers.Layer.WMS( "OpenLayers WMS", |
|---|
| 285 |
"http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} ); |
|---|
| 286 |
var tmsLayer = new OpenLayers.Layer.TMS("TMS", |
|---|
| 287 |
"http://labs.metacarta.com/wms-c/Basic.py/", |
|---|
| 288 |
{'layername':'basic', 'type':'png'}); |
|---|
| 289 |
map.addLayers([wmsLayer,tmsLayer]); |
|---|
| 290 |
map.setBaseLayer(wmsLayer); |
|---|
| 291 |
map.zoomToMaxExtent(); |
|---|
| 292 |
map.setBaseLayer(tmsLayer); |
|---|
| 293 |
map.zoomIn(); |
|---|
| 294 |
map.pan(0, -200); |
|---|
| 295 |
map.setBaseLayer(wmsLayer); |
|---|
| 296 |
t.eq(map.layerContainerDiv.style.top, "0px", "layerContainer is recentered after setBaseLayer"); |
|---|
| 297 |
} |
|---|
| 298 |
|
|---|
| 299 |
function test_14_Map_moveLayer (t) { |
|---|
| 300 |
t.plan(10); |
|---|
| 301 |
|
|---|
| 302 |
var ct = 0; |
|---|
| 303 |
map = new OpenLayers.Map('map'); |
|---|
| 304 |
var wmslayer = new OpenLayers.Layer.WMS('Test Layer', |
|---|
| 305 |
"http://octo.metacarta.com/cgi-bin/mapserv", |
|---|
| 306 |
{map: '/mapdata/vmap_wms.map', layers: 'basic', format: 'image/jpeg'}, |
|---|
| 307 |
{maxExtent: new OpenLayers.Bounds(33861, 717605, 330846, 1019656), maxResolution: 296985/1024, projection:"EPSG:2805" } ); |
|---|
| 308 |
|
|---|
| 309 |
var wmslayer2 = new OpenLayers.Layer.WMS('Test Layer2', |
|---|
| 310 |
"http://octo.metacarta.com/cgi-bin/mapserv", |
|---|
| 311 |
{map: '/mapdata/vmap_wms.map', layers: 'basic', format: 'image/jpeg'}, |
|---|
| 312 |
{maxExtent: new OpenLayers.Bounds(33861, 717605, 330846, 1019656), maxResolution: 296985/1024, projection:"EPSG:2805" } ); |
|---|
| 313 |
|
|---|
| 314 |
var wmslayer3 = new OpenLayers.Layer.WMS('Test Layer2', |
|---|
| 315 |
"http://octo.metacarta.com/cgi-bin/mapserv", |
|---|
| 316 |
{map: '/mapdata/vmap_wms.map', layers: 'basic', format: 'image/jpeg'}, |
|---|
| 317 |
{maxExtent: new OpenLayers.Bounds(33861, 717605, 330846, 1019656), maxResolution: 296985/1024, projection:"EPSG:2805" } ); |
|---|
| 318 |
|
|---|
| 319 |
map.addLayers([wmslayer, wmslayer2, wmslayer3]); |
|---|
| 320 |
map.events.register("changelayer", map, function (e) { ct++; }); |
|---|
| 321 |
t.eq( map.getNumLayers(), 3, "getNumLayers returns the number of layers" ); |
|---|
| 322 |
t.eq( map.getLayerIndex(wmslayer3), 2, "getLayerIndex returns the right index" ); |
|---|
| 323 |
map.raiseLayer(wmslayer3, 1); |
|---|
| 324 |
t.eq( map.getLayerIndex(wmslayer3), 2, "can't moveLayer up past the top of the stack" ); |
|---|
| 325 |
map.raiseLayer(wmslayer, -1); |
|---|
| 326 |
t.eq( map.getLayerIndex(wmslayer), 0, "can't moveLayer down past the bottom of the stack" ); |
|---|
| 327 |
map.raiseLayer(wmslayer3, -1); |
|---|
| 328 |
t.eq( map.getLayerIndex(wmslayer3), 1, "can moveLayer down from the top" ); |
|---|
| 329 |
t.eq( parseInt(wmslayer3.div.style.zIndex), map.Z_INDEX_BASE['BaseLayer'] + 5, |
|---|
| 330 |
"layer div has the right zIndex after moving down" ); |
|---|
| 331 |
map.raiseLayer(wmslayer, 2); |
|---|
| 332 |
t.eq( map.getLayerIndex(wmslayer), 2, "can moveLayer up from the bottom" ); |
|---|
| 333 |
t.eq( parseInt(wmslayer.div.style.zIndex), map.Z_INDEX_BASE['BaseLayer'] + 2 * 5, |
|---|
| 334 |
"layer div has the right zIndex after moving up" ); |
|---|
| 335 |
t.eq( map.getLayerIndex(wmslayer3), 0, "top layer is now on the bottom" ); |
|---|
| 336 |
t.eq( ct, 3, "raiseLayer triggered changelayer the right # of times" ); |
|---|
| 337 |
} |
|---|
| 338 |
|
|---|
| 339 |
function test_15_Map_setCenter(t) { |
|---|
| 340 |
t.plan(1); |
|---|
| 341 |
|
|---|
| 342 |
map = new OpenLayers.Map('map'); |
|---|
| 343 |
var baseLayer = new OpenLayers.Layer.WMS("Test Layer", |
|---|
| 344 |
"http://octo.metacarta.com/cgi-bin/mapserv?", |
|---|
| 345 |
{map: "/mapdata/vmap_wms.map", layers: "basic"}, |
|---|
| 346 |
{maxResolution: 'auto', maxExtent: new OpenLayers.Bounds(-10,-10,10,10)}); |
|---|
| 347 |
map.addLayer(baseLayer); |
|---|
| 348 |
var ll = new OpenLayers.LonLat(-100,-150); |
|---|
| 349 |
map.setCenter(ll, 0); |
|---|
| 350 |
t.ok(map.getCenter().equals(new OpenLayers.LonLat(0,0)), "safely sets out-of-bounds lonlat"); |
|---|
| 351 |
} |
|---|
| 352 |
|
|---|
| 353 |
function test_16_Map_defaultTheme(t) { |
|---|
| 354 |
t.plan(5); |
|---|
| 355 |
|
|---|
| 356 |
var links = document.getElementsByTagName('link'); |
|---|
| 357 |
map = new OpenLayers.Map('map'); |
|---|
| 358 |
var gotNodes = 0; |
|---|
| 359 |
var themeNode = null; |
|---|
| 360 |
for(var i=0; i<links.length; ++i) { |
|---|
| 361 |
if(OpenLayers.Util.isEquivalentUrl(map.theme, links.item(i).href)) { |
|---|
| 362 |
gotNodes += 1; |
|---|
| 363 |
themeNode = links.item(i); |
|---|
| 364 |
} |
|---|
| 365 |
} |
|---|
| 366 |
t.eq(gotNodes, 1, "by default, a single link node is added to document"); |
|---|
| 367 |
t.ok(themeNode != null, "a link node with the theme href was added"); |
|---|
| 368 |
t.eq(themeNode.rel, "stylesheet", "node added has rel set to stylesheet"); |
|---|
| 369 |
t.eq(themeNode.type, "text/css", "node added has type set to text/css"); |
|---|
| 370 |
|
|---|
| 371 |
|
|---|
| 372 |
map = new OpenLayers.Map('map'); |
|---|
| 373 |
t.eq(links.length, document.getElementsByTagName('link').length, |
|---|
| 374 |
"calling the map constructor twice with the same theme doesn't add duplicate link nodes"); |
|---|
| 375 |
} |
|---|
| 376 |
|
|---|
| 377 |
function test_17_Map_customTheme(t) { |
|---|
| 378 |
t.plan(5); |
|---|
| 379 |
|
|---|
| 380 |
var customTheme = 'foo'; |
|---|
| 381 |
var options = {theme: customTheme}; |
|---|
| 382 |
map = new OpenLayers.Map('map', options); |
|---|
| 383 |
|
|---|
| 384 |
var links = document.getElementsByTagName('link'); |
|---|
| 385 |
var gotNodes = 0; |
|---|
| 386 |
var themeNode = null; |
|---|
| 387 |
for(var i=0; i<links.length; ++i) { |
|---|
| 388 |
if(OpenLayers.Util.isEquivalentUrl(map.theme, links.item(i).href)) { |
|---|
| 389 |
gotNodes += 1; |
|---|
| 390 |
themeNode = links.item(i); |
|---|
| 391 |
} |
|---|
| 392 |
} |
|---|
| 393 |
|
|---|
| 394 |
t.eq(map.theme, customTheme, "map theme is properly set"); |
|---|
| 395 |
t.eq(gotNodes, 1, "with custom theme, a single link node is added to document"); |
|---|
| 396 |
t.ok(themeNode != null, "a link node with the theme href was added"); |
|---|
| 397 |
t.eq(themeNode.rel, "stylesheet", "node added has rel set to stylesheet"); |
|---|
| 398 |
t.eq(themeNode.type, "text/css", "node added has type set to text/css"); |
|---|
| 399 |
} |
|---|
| 400 |
|
|---|
| 401 |
function test_18_Map_noTheme(t) { |
|---|
| 402 |
t.plan(1); |
|---|
| 403 |
|
|---|
| 404 |
var head = document.getElementsByTagName('head')[0]; |
|---|
| 405 |
var nodeCount = head.childNodes.length; |
|---|
| 406 |
|
|---|
| 407 |
var options = {theme: null}; |
|---|
| 408 |
map = new OpenLayers.Map('map', options); |
|---|
| 409 |
|
|---|
| 410 |
t.eq(nodeCount, head.childNodes.length, "with no theme, a node is not added to document head" ); |
|---|
| 411 |
} |
|---|
| 412 |
|
|---|
| 413 |
function test_19_Map_getControl(t) { |
|---|
| 414 |
t.plan(2); |
|---|
| 415 |
|
|---|
| 416 |
var map1 = new OpenLayers.Map('map'); |
|---|
| 417 |
|
|---|
| 418 |
var control = new OpenLayers.Control(); |
|---|
| 419 |
map1.addControl(control); |
|---|
| 420 |
|
|---|
| 421 |
var gotControl = map1.getControl(control.id); |
|---|
| 422 |
t.ok(gotControl == control, "got right control"); |
|---|
| 423 |
|
|---|
| 424 |
gotControl = map1.getControl("bogus id"); |
|---|
| 425 |
t.ok(gotControl == null, "getControl() for bad id returns null"); |
|---|
| 426 |
} |
|---|
| 427 |
|
|---|
| 428 |
function test_19_Map_removeControl(t) { |
|---|
| 429 |
t.plan(6); |
|---|
| 430 |
|
|---|
| 431 |
var oldNumControls, newNumControls; |
|---|
| 432 |
|
|---|
| 433 |
var map1 = new OpenLayers.Map('map'); |
|---|
| 434 |
oldNumControls = map1.controls.length; |
|---|
| 435 |
|
|---|
| 436 |
var control = new OpenLayers.Control(); |
|---|
| 437 |
map1.addControl(control); |
|---|
| 438 |
|
|---|
| 439 |
|
|---|
| 440 |
newNumControls = map1.controls.length; |
|---|
| 441 |
t.ok( newNumControls = oldNumControls + 1, "adding a control increases control count") |
|---|
| 442 |
|
|---|
| 443 |
var foundDiv = false; |
|---|
| 444 |
for(var i=0; i < map1.viewPortDiv.childNodes.length; i++) { |
|---|
| 445 |
var childNode = map1.viewPortDiv.childNodes[i]; |
|---|
| 446 |
if (childNode == control.div) { |
|---|
| 447 |
foundDiv = true; |
|---|
| 448 |
} |
|---|
| 449 |
} |
|---|
| 450 |
t.ok(foundDiv, "new control's div correctly added to viewPort"); |
|---|
| 451 |
|
|---|
| 452 |
|
|---|
| 453 |
map1.removeControl(control) |
|---|
| 454 |
newNumControls = map1.controls.length; |
|---|
| 455 |
t.ok( newNumControls == oldNumControls, "removing the control decreases control count") |
|---|
| 456 |
|
|---|
| 457 |
var gotControl = map1.getControl(control.id); |
|---|
| 458 |
t.ok( gotControl == null, "control no longer in map's controls array"); |
|---|
| 459 |
|
|---|
| 460 |
var foundDiv = false; |
|---|
| 461 |
for(var i=0; i < map1.viewPortDiv.childNodes.length; i++) { |
|---|
| 462 |
var childNode = map1.viewPortDiv.childNodes[i]; |
|---|
| 463 |
if (childNode == control.div) { |
|---|
| 464 |
foundDiv = true; |
|---|
| 465 |
} |
|---|
| 466 |
} |
|---|
| 467 |
t.ok(!foundDiv, "control no longer child of viewPort"); |
|---|
| 468 |
|
|---|
| 469 |
|
|---|
| 470 |
control = { id: "bogus id" }; |
|---|
| 471 |
map1.removeControl(control); |
|---|
| 472 |
newNumControls = map1.controls.length; |
|---|
| 473 |
t.ok( newNumControls == oldNumControls, "removing bad controlid doesnt crash or decrease control count") |
|---|
| 474 |
} |
|---|
| 475 |
|
|---|
| 476 |
function test_Map_restrictedExtent(t) { |
|---|
| 477 |
t.plan(24); |
|---|
| 478 |
var extent = new OpenLayers.Bounds(-180, -90, 180, 90); |
|---|
| 479 |
var options = { |
|---|
| 480 |
maxResolution: "auto" |
|---|
| 481 |
}; |
|---|
| 482 |
var map = new OpenLayers.Map("map", options); |
|---|
| 483 |
var layer = new OpenLayers.Layer.WMS( |
|---|
| 484 |
"test", |
|---|
| 485 |
"http://octo.metacarta.com/cgi-bin/mapserv?", |
|---|
| 486 |
{map: "/mapdata/vmap_wms.map", layers: "basic"} |
|---|
| 487 |
); |
|---|
| 488 |
map.addLayer(layer); |
|---|
| 489 |
map.zoomToMaxExtent(); |
|---|
| 490 |
var nw = new OpenLayers.LonLat(extent.left, extent.top); |
|---|
| 491 |
var ne = new OpenLayers.LonLat(extent.right, extent.top); |
|---|
| 492 |
var sw = new OpenLayers.LonLat(extent.left, extent.bottom); |
|---|
| 493 |
var se = new OpenLayers.LonLat(extent.right, extent.bottom); |
|---|
| 494 |
|
|---|
| 495 |
|
|---|
| 496 |
map.setOptions({restrictedExtent: extent}); |
|---|
| 497 |
map.setCenter(nw, 0); |
|---|
| 498 |
t.eq(map.getExtent().getCenterLonLat().toString(), |
|---|
| 499 |
extent.getCenterLonLat().toString(), |
|---|
| 500 |
"map extent properly restricted to northwest at zoom 0"); |
|---|
| 501 |
t.eq(map.zoom, 0, "zoom not restricted for nw, 0"); |
|---|
| 502 |
map.setCenter(nw, 5); |
|---|
| 503 |
t.eq(map.getExtent().top, extent.top, |
|---|
| 504 |
"map extent top properly restricted to northwest at zoom 5"); |
|---|
| 505 |
t.eq(map.getExtent().left, extent.left, |
|---|
| 506 |
"map extent left properly restricted to northwest at zoom 5"); |
|---|
| 507 |
t.eq(map.zoom, 5, "zoom not restricted for nw, 5"); |
|---|
| 508 |
map.setOptions({restrictedExtent: null}); |
|---|
| 509 |
map.setCenter(nw, 0); |
|---|
| 510 |
t.eq(map.getExtent().getCenterLonLat().toString(), |
|---|
| 511 |
nw.toString(), |
|---|
| 512 |
"map extent not restricted with null restrictedExtent for nw"); |
|---|
| 513 |
|
|---|
| 514 |
|
|---|
| 515 |
map.setOptions({restrictedExtent: extent}); |
|---|
| 516 |
map.setCenter(ne, 0); |
|---|
| 517 |
t.eq(map.getExtent().getCenterLonLat().toString(), |
|---|
| 518 |
extent.getCenterLonLat().toString(), |
|---|
| 519 |
"map extent properly restricted to northeast at zoom 0"); |
|---|
| 520 |
t.eq(map.zoom, 0, "zoom not restricted for ne, 0"); |
|---|
| 521 |
map.setCenter(ne, 5); |
|---|
| 522 |
t.eq(map.getExtent().top, extent.top, |
|---|
| 523 |
"map extent top properly restricted to northeast at zoom 5"); |
|---|
| 524 |
t.eq(map.getExtent().right, extent.right, |
|---|
| 525 |
"map extent right properly restricted to northeast at zoom 5"); |
|---|
| 526 |
t.eq(map.zoom, 5, "zoom not restricted for ne, 5"); |
|---|
| 527 |
map.setOptions({restrictedExtent: null}); |
|---|
| 528 |
map.setCenter(ne, 0); |
|---|
| 529 |
t.eq(map.getExtent().getCenterLonLat().toString(), |
|---|
| 530 |
ne.toString(), |
|---|
| 531 |
"map extent not restricted with null restrictedExtent for ne"); |
|---|
| 532 |
|
|---|
| 533 |
|
|---|
| 534 |
map.setOptions({restrictedExtent: extent}); |
|---|
| 535 |
map.setCenter(sw, 0); |
|---|
| 536 |
t.eq(map.getExtent().getCenterLonLat().toString(), |
|---|
| 537 |
extent.getCenterLonLat().toString(), |
|---|
| 538 |
"map extent properly restricted to southwest at zoom 0"); |
|---|
| 539 |
t.eq(map.zoom, 0, "zoom not restricted for sw, 0"); |
|---|
| 540 |
map.setCenter(sw, 5); |
|---|
| 541 |
t.eq(map.getExtent().bottom, extent.bottom, |
|---|
| 542 |
"map extent bottom properly restricted to southwest at zoom 5"); |
|---|
| 543 |
t.eq(map.getExtent().left, extent.left, |
|---|
| 544 |
"map extent left properly restricted to southwest at zoom 5"); |
|---|
| 545 |
t.eq(map.zoom, 5, "zoom not restricted for sw, 5"); |
|---|
| 546 |
map.setOptions({restrictedExtent: null}); |
|---|
| 547 |
map.setCenter(sw, 0); |
|---|
| 548 |
t.eq(map.getExtent().getCenterLonLat().toString(), |
|---|
| 549 |
sw.toString(), |
|---|
| 550 |
"map extent not restricted with null restrictedExtent for sw"); |
|---|
| 551 |
|
|---|
| 552 |
|
|---|
| 553 |
map.setOptions({restrictedExtent: extent}); |
|---|
| 554 |
map.setCenter(se, 0); |
|---|
| 555 |
t.eq(map.getExtent().getCenterLonLat().toString(), |
|---|
| 556 |
extent.getCenterLonLat().toString(), |
|---|
| 557 |
"map extent properly restricted to southeast at zoom 0"); |
|---|
| 558 |
t.eq(map.zoom, 0, "zoom not restricted for se, 0"); |
|---|
| 559 |
map.setCenter(se, 5); |
|---|
| 560 |
t.eq(map.getExtent().bottom, extent.bottom, |
|---|
| 561 |
"map extent bottom properly restricted to southeast at zoom 5"); |
|---|
| 562 |
t.eq(map.getExtent().right, extent.right, |
|---|
| 563 |
"map extent right properly restricted to southeast at zoom 5"); |
|---|
| 564 |
t.eq(map.zoom, 5, "zoom not restricted for se, 5"); |
|---|
| 565 |
map.setOptions({restrictedExtent: null}); |
|---|
| 566 |
map.setCenter(se, 0); |
|---|
| 567 |
t.eq(map.getExtent().getCenterLonLat().toString(), |
|---|
| 568 |
se.toString(), |
|---|
| 569 |
"map extent not restricted with null restrictedExtent for se"); |
|---|
| 570 |
} |
|---|
| 571 |
|
|---|
| 572 |
function test_99_Map_destroy (t) { |
|---|
| 573 |
t.plan( 3 ); |
|---|
| 574 |
map = new OpenLayers.Map('map'); |
|---|
| 575 |
map.destroy(); |
|---|
| 576 |
t.eq( map.layers, null, "map.layers is null after destroy" ); |
|---|
| 577 |
t.eq( map.controls, null, "map.controls is null after destroy" ); |
|---|
| 578 |
t.eq( map.viewPortDiv, null, "map's viewportDiv nullified"); |
|---|
| 579 |
} |
|---|
| 580 |
|
|---|
| 581 |
</script> |
|---|
| 582 |
</head> |
|---|
| 583 |
<body> |
|---|
| 584 |
<div id="map" style="width: 600px; height: 300px;"/> |
|---|
| 585 |
</body> |
|---|
| 586 |
</html> |
|---|