diff --git a/tests/Layer/Grid.html b/tests/Layer/Grid.html
index ca13298278..0e9852d9a7 100644
--- a/tests/Layer/Grid.html
+++ b/tests/Layer/Grid.html
@@ -762,6 +762,97 @@
map.destroy();
}
+ function test_moveTo_backbuffer_singletile(t) {
+ t.plan(4);
+
+ var map = new OpenLayers.Map('map', {
+ resolutions: [1, 0.5, 0.025]
+ });
+ var resolution;
+ var layer = new OpenLayers.Layer.WMS('', '', {}, {
+ singleTile: true,
+ isBaseLayer: true,
+ transitionEffect: 'resize',
+ applyBackBuffer: function(res) {
+ resolution = res;
+ }
+ });
+ map.addLayer(layer);
+
+ // initial resolution is 0.025
+ resolution = undefined;
+ map.setCenter(new OpenLayers.LonLat(0, 0), 2);
+ t.eq(resolution, undefined,
+ 'applyBackBuffer not called on first moveTo');
+ layer.backBufferData.resolution = 0.025;
+
+ // move to (-90, 45)
+ resolution = undefined;
+ map.setCenter(new OpenLayers.LonLat(-90, 45));
+ t.eq(resolution, 0.025,
+ 'applyBackBuffer called when map is moved');
+ layer.backBufferData.resolution = 0.025;
+
+ // change to resolution 1
+ resolution = undefined;
+ map.zoomTo(0);
+ t.eq(resolution, 1,
+ 'applyBackBuffer called when map is zoomed out');
+ layer.backBufferData.resolution = 1;
+
+ // change to resolution 0.5
+ resolution = undefined;
+ map.zoomTo(1);
+ t.eq(resolution, 0.5,
+ 'applyBackBuffer called when map is zoomed out');
+
+ map.destroy();
+ }
+
+ function test_moveTo_backbuffer(t) {
+ t.plan(4);
+
+ var map = new OpenLayers.Map('map', {
+ resolutions: [1, 0.5, 0.025]
+ });
+ var resolution;
+ var layer = new OpenLayers.Layer.WMS('', '', {}, {
+ isBaseLayer: true,
+ transitionEffect: 'resize',
+ applyBackBuffer: function(res) {
+ resolution = res;
+ }
+ });
+ map.addLayer(layer);
+
+ // initial resolution is 0.025
+ resolution = undefined;
+ map.setCenter(new OpenLayers.LonLat(0, 0), 2);
+ t.eq(resolution, undefined,
+ 'applyBackBuffer not called on first moveTo');
+ layer.backBufferData.resolution = 0.025;
+
+ // move to (-90, 45)
+ resolution = undefined;
+ map.setCenter(new OpenLayers.LonLat(-90, 45));
+ t.eq(resolution, undefined,
+ 'applyBackBuffer not called when map is moved');
+ layer.backBufferData.resolution = 0.025;
+
+ // change to resolution 1
+ resolution = undefined;
+ map.zoomTo(0);
+ t.eq(resolution, 1,
+ 'applyBackBuffer called when map is zoomed out');
+ layer.backBufferData.resolution = 1;
+
+ // change to resolution 0.5
+ map.zoomTo(1);
+ t.eq(resolution, 0.5,
+ 'applyBackBuffer called when map is zoomed out');
+
+ map.destroy();
+ }
function test_transformDiv(t) {
t.plan(8);
@@ -942,6 +1033,105 @@
map.destroy();
}
+ function test_backbuffer_scaled_layer(t) {
+ t.plan(15);
+
+ //
+ // set up
+ //
+
+ var map = new OpenLayers.Map('map', {
+ resolutions: [32, 16, 8, 4, 2, 1]
+ });
+ var layer = new OpenLayers.Layer.WMS(
+ "WMS",
+ window.location.href + "#",
+ null,
+ {transitionEffect: "resize"}
+ );
+
+ layer.serverResolutions = [32, 16, 8];
+ layer.createBackBuffer = function() {
+ return document.createElement('div');
+ };
+
+ map.addLayer(layer);
+ map.setCenter(new OpenLayers.LonLat(0, 0), 2);
+
+ layer.updateBackBufferData();
+
+ //
+ // test
+ //
+
+ // change resolution from 8 to 4
+ map.zoomTo(3);
+ t.ok(layer.backBuffer == undefined,
+ '[8->4] back buffer not applied');
+ layer.updateBackBufferData();
+
+ // change resolution from 8 to 2
+ map.zoomTo(2); layer.updateBackBufferData(); map.zoomTo(4);
+ t.ok(layer.backBuffer == undefined,
+ '[8->2] back buffer not applies');
+ layer.updateBackBufferData();
+
+ // change resolution from 16 to 4
+ map.zoomTo(1); layer.updateBackBufferData(); map.zoomTo(3);
+ t.ok(layer.backBuffer != undefined,
+ '[16->4] back buffer applied');
+ t.eq(layer.backBuffer.style.width, '200%',
+ '[16->4] back buffer width is as expected');
+ t.eq(layer.backBuffer.style.width, '200%',
+ '[16->4] back buffer height is as expected');
+ layer.updateBackBufferData();
+
+ // change resolution from 32 to 1
+ map.zoomTo(0); layer.updateBackBufferData(); map.zoomTo(5);
+ t.ok(layer.backBuffer != undefined,
+ '[32->1] back buffer applied');
+ t.eq(layer.backBuffer.style.width, '400%',
+ '[32->1] back buffer width is as expected');
+ t.eq(layer.backBuffer.style.width, '400%',
+ '[32->1] back buffer height is as expected');
+ layer.updateBackBufferData();
+
+ // change resolution from 4 to 2
+ map.zoomTo(3); layer.updateBackBufferData(); map.zoomTo(4);
+ t.ok(layer.backBuffer == undefined,
+ '[4->2] back buffer not applied');
+ layer.updateBackBufferData();
+
+ // change resolution from 4 to 1
+ map.zoomTo(3); layer.updateBackBufferData(); map.zoomTo(5);
+ t.ok(layer.backBuffer == undefined,
+ '[4->1] back buffer not applied');
+
+ // change resolution from 1 to 4
+ map.zoomTo(5); layer.updateBackBufferData(); map.zoomTo(3);
+ t.ok(layer.backBuffer == undefined,
+ '[1->4] back buffer not applied');
+
+ // change resolution from 4 to 8
+ map.zoomTo(3); layer.updateBackBufferData(); map.zoomTo(2);
+ t.ok(layer.backBuffer == undefined,
+ '[4->8] back buffer not applied');
+
+ // change resolution from 4 to 16
+ map.zoomTo(3); layer.updateBackBufferData(); map.zoomTo(1);
+ t.ok(layer.backBuffer != undefined,
+ '[4->16] back buffer applied');
+ t.eq(layer.backBuffer.style.width, '50%',
+ '[4->16] back buffer width is as expected');
+ t.eq(layer.backBuffer.style.width, '50%',
+ '[4->16] back buffer height is as expected');
+
+ //
+ // tear down
+ //
+
+ map.destroy();
+ }