summaryrefslogtreecommitdiff
path: root/misc/openlayers/tests/TileManager.html
diff options
context:
space:
mode:
Diffstat (limited to 'misc/openlayers/tests/TileManager.html')
-rw-r--r--misc/openlayers/tests/TileManager.html137
1 files changed, 137 insertions, 0 deletions
diff --git a/misc/openlayers/tests/TileManager.html b/misc/openlayers/tests/TileManager.html
new file mode 100644
index 0000000..23398be
--- /dev/null
+++ b/misc/openlayers/tests/TileManager.html
@@ -0,0 +1,137 @@
+<html>
+<head>
+ <script src="OLLoader.js"></script>
+ <script type="text/javascript">
+
+ function test_initialize(t) {
+ t.plan(4);
+
+ var tileManager = new OpenLayers.TileManager();
+ var map = new OpenLayers.Map('map', {
+ zoomMethod: null,
+ tileManager: tileManager
+ });
+ var layer = new OpenLayers.Layer.WMS('WMS1', '../img/blank.gif');
+ map.addLayer(layer);
+ map.setCenter([16, 48], 9);
+ t.ok(tileManager.tileQueue[map.id].length, "Tiles queued from layer");
+ map.removeLayer(layer);
+ t.eq(tileManager.tileQueue[map.id].length, 0, "Tiles unqueued when layer is removed");
+ map.addLayer(new OpenLayers.Layer.WMS('WMS2', '../img/blank.gif'));
+ map.zoomIn();
+ t.ok(tileManager.tileQueue[map.id].length, "Tiles queued from added layer");
+ map.destroy();
+ t.eq(tileManager.tileQueue[map.id], undefined, "Tile queue removed when map was destroyed");
+ }
+
+ function test_destroy(t) {
+ t.plan(3);
+
+ var tileManager = new OpenLayers.TileManager();
+ var map = new OpenLayers.Map('map', {tileManager: tileManager});
+ var layer = new OpenLayers.Layer.WMS('WMS', '../img/blank.gif');
+ map.addLayer(layer);
+ map.setCenter([16, 48], 9);
+ var numTileListeners = layer.grid[0][0].events.listeners.beforeload.length;
+ var numLayerListeners = layer.events.listeners.retile.length;
+ var numMapListeners = map.events.listeners.preremovelayer.length;
+ tileManager.destroy();
+ t.eq(layer.grid[0][0].events.listeners.beforeload.length, numTileListeners - 1, "no listener on tile after destroy");
+ t.eq(layer.events.listeners.retile.length, numLayerListeners - 1, "no listeners on layer after destroy");
+ t.eq(map.events.listeners.preremovelayer.length, numMapListeners - 1, "no listeners on map after destroy");
+ map.destroy();
+ }
+
+ function test_manageTileCache(t) {
+ t.plan(10);
+
+ var tileManager = new OpenLayers.TileManager({
+ cacheSize: 12
+ });
+ var map = new OpenLayers.Map('map', {tileManager: tileManager});
+ layer = new OpenLayers.Layer.WMS('WMS', '../img/blank.gif');
+ map.addLayer(layer);
+ map.setCenter([16, 48], 9);
+ var gridSize;
+
+ var firstInCache, sharedTile;
+ t.delay_call(2, function() {
+ t.eq(tileManager.tileCacheIndex.length, 12, "tiles cached");
+ t.ok(~OpenLayers.Util.indexOf(tileManager.tileCacheIndex, layer.grid[1][2].url), "tile found in cache");
+ t.ok(tileManager.tileCache[layer.grid[1][2].url] === layer.grid[1][2].imgDiv, "correct object cached");
+ firstInCache = tileManager.tileCache[tileManager.tileCacheIndex[0]];
+ sharedTile = tileManager.tileCache[tileManager.tileCacheIndex[11]];
+ gridSize = layer.div.childNodes.length;
+ map.setCenter([17, 47]);
+ });
+
+ function inCache(img) {
+ var search = img.src.split('?')[1];
+ for (var s in tileManager.tileCache) {
+ if (s.split('?')[1] == search) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ t.delay_call(4, function() {
+ t.eq(tileManager.tileCacheIndex.length, 12, "tiles cached");
+ t.ok(tileManager.tileCache[layer.grid[1][2].url] === layer.grid[1][2].imgDiv, "correct object cached");
+ t.ok(!inCache(firstInCache), "old tile discarded");
+ t.ok(inCache(sharedTile), "shared tile still in cache");
+ firstInCache = tileManager.tileCache[tileManager.tileCacheIndex[0]];
+ map.setCenter([16, 48]);
+ });
+ t.delay_call(6, function() {
+ t.ok(!inCache(firstInCache), "old tile discarded");
+ t.ok(inCache(sharedTile), "shared tile still in cache");
+ t.eq(layer.div.childNodes.length, gridSize, 'no unused images left in dom');
+ map.destroy();
+ });
+ }
+
+ function test_queueTileDraw(t) {
+ t.plan(3);
+
+ var tileManager = new OpenLayers.TileManager();
+ var map = new OpenLayers.Map('map', {tileManager: tileManager});
+ layer = new OpenLayers.Layer.WMS('WMS', '../img/blank.gif');
+ map.addLayer(layer);
+ map.setCenter([0, 0], 3);
+ var queued = tileManager.tileQueue[map.id].length;
+ t.ok(tileManager.tileQueue[map.id].length, "Tiles queued for drawing");
+ map.zoomIn();
+ t.eq(tileManager.tileQueue[map.id].length, queued, "Tile queue has same length after immediate zoom change");
+ t.delay_call(1, function() {
+ t.eq(tileManager.tileQueue[map.id].length, 0, "Tiles from queue processed");
+ map.destroy();
+ });
+ }
+
+ function test_deferTileDraw(t) {
+
+ t.plan(3);
+
+ var tileManager = new OpenLayers.TileManager();
+ var map = new OpenLayers.Map('map', {tileManager: tileManager});
+ layer = new OpenLayers.Layer.WMS('WMS', '../img/blank.gif');
+ layer.destroy = function() {}; //we're going to do funky things with the grid
+ layer.applyBackBuffer = function() {}; // backbuffering isn't under test here
+ map.addLayer(layer);
+ map.setCenter([-10, 0], 5);
+
+ map.moveTo([5, 0]);
+ t.ok(tileManager.tileQueue[map.id].length, "tile loading deferred after moveTo");
+ map.moveTo([0, 0]);
+ t.ok(tileManager.tileQueue[map.id].length, "deferred again after another moveTo");
+ t.delay_call(1, function() {
+ t.eq(tileManager.tileQueue[map.id].length, 0, "tiles loaded after moveDelay");
+ });
+ }
+ </script>
+</head>
+<body>
+<div id="map" style="width:499px;height:549px;display:none"></div>
+</body>
+</html>