summaryrefslogtreecommitdiff
path: root/misc/openlayers/tests/Control/NavigationHistory.html
diff options
context:
space:
mode:
Diffstat (limited to 'misc/openlayers/tests/Control/NavigationHistory.html')
-rw-r--r--misc/openlayers/tests/Control/NavigationHistory.html245
1 files changed, 245 insertions, 0 deletions
diff --git a/misc/openlayers/tests/Control/NavigationHistory.html b/misc/openlayers/tests/Control/NavigationHistory.html
new file mode 100644
index 0000000..c992ff2
--- /dev/null
+++ b/misc/openlayers/tests/Control/NavigationHistory.html
@@ -0,0 +1,245 @@
+<html>
+<head>
+ <script src="../OLLoader.js"></script>
+ <script type="text/javascript">
+
+ function test_initialize(t) {
+ t.plan(4);
+ control = new OpenLayers.Control.NavigationHistory();
+ t.ok(control instanceof OpenLayers.Control.NavigationHistory,
+ "constructor returns correct instance");
+ t.eq(control.displayClass, "olControlNavigationHistory",
+ "displayClass is correct");
+ t.ok(control.next instanceof OpenLayers.Control.Button,
+ "constructor creates next control");
+ t.ok(control.previous instanceof OpenLayers.Control.Button,
+ "constructor creates previous control");
+ }
+
+ function test_destroy(t) {
+ t.plan(2);
+ control = new OpenLayers.Control.NavigationHistory();
+ control.next.destroy = function() {
+ t.ok(true, "destroy calls next.destroy");
+ }
+ control.previous.destroy = function() {
+ t.ok(true, "destroy calls previous.destroy");
+ }
+ control.destroy();
+ }
+
+ function test_previous(t) {
+ var numStates = 10;
+
+ t.plan(
+ numStates * 3 // for lon, lat, zoom
+ + 3 // for confirming that previous with empty stack works
+ );
+
+ var history = new Array(numStates);
+ for(var i=0; i<numStates; ++i) {
+ history[i] = {
+ center: new OpenLayers.LonLat(
+ (i * 360 / numStates) - 180, (i * 180 / numStates) - 90
+ ),
+ zoom: i
+ };
+ }
+
+ var map = new OpenLayers.Map("map");
+ var layer = new OpenLayers.Layer(
+ "test", {isBaseLayer: true}
+ );
+ map.addLayer(layer);
+ var control = new OpenLayers.Control.NavigationHistory();
+ map.addControl(control);
+
+ // set previous states
+ for(i=0; i<numStates; ++i) {
+ map.setCenter(history[i].center, history[i].zoom);
+ }
+ // test previous states
+ for(i=numStates-1; i>=0; --i) {
+ t.eq(map.getCenter().lon, history[i].center.lon, "(step " + i + ") lon correct");
+ t.eq(map.getCenter().lat, history[i].center.lat, "(step " + i + ") lat correct");
+ t.eq(map.getZoom(), history[i].zoom, "(step " + i + ") zoom correct");
+ control.previous.trigger();
+ }
+ // test previous with empty stack
+ t.eq(map.getCenter().lon, history[0].center.lon, "(step 0 again) lon correct");
+ t.eq(map.getCenter().lat, history[0].center.lat, "(step 0 again) lat correct");
+ t.eq(map.getZoom(), history[0].zoom, "(step 0 again) zoom correct");
+ }
+
+ function test_next(t) {
+ var numStates = 10;
+
+ t.plan(
+ numStates * 3 // for lon, lat, zoom
+ + 3 // for confirming that next with empty stack works
+ );
+
+ var history = new Array(numStates);
+ for(var i=0; i<numStates; ++i) {
+ history[i] = {
+ center: new OpenLayers.LonLat(
+ (i * 360 / numStates) - 180, (i * 180 / numStates) - 90
+ ),
+ zoom: i
+ };
+ }
+
+ var map = new OpenLayers.Map("map");
+ var layer = new OpenLayers.Layer(
+ "test", {isBaseLayer: true}
+ );
+ map.addLayer(layer);
+ var control = new OpenLayers.Control.NavigationHistory();
+ map.addControl(control);
+
+ // set previous states
+ for(i=0; i<numStates; ++i) {
+ map.setCenter(history[i].center, history[i].zoom);
+ }
+ // set next states
+ for(i=numStates-1; i>=0; --i) {
+ control.previous.trigger();
+ }
+ // test next states
+ for(i=0; i<numStates; ++i) {
+ t.eq(map.getCenter().lon, history[i].center.lon, "(step " + i + ") lon correct");
+ t.eq(map.getCenter().lat, history[i].center.lat, "(step " + i + ") lat correct");
+ t.eq(map.getZoom(), history[i].zoom, "(step " + i + ") zoom correct");
+ control.next.trigger();
+ }
+ // test next with empty stack
+ t.eq(map.getCenter().lon, history[numStates-1].center.lon, "(step " + (numStates-1) + " again) lon correct");
+ t.eq(map.getCenter().lat, history[numStates-1].center.lat, "(step " + (numStates-1) + " again) lat correct");
+ t.eq(map.getZoom(), history[numStates-1].zoom, "(step " + (numStates-1) + " again) zoom correct");
+ }
+
+ function test_limit(t) {
+ var numStates = 10;
+ var limit = 3;
+
+ t.plan(
+ numStates * 6 // for previous & next lon, lat, zoom
+ );
+
+ var history = new Array(numStates);
+ for(var i=0; i<numStates; ++i) {
+ history[i] = {
+ center: new OpenLayers.LonLat(
+ (i * 360 / numStates) - 180, (i * 180 / numStates) - 90
+ ),
+ zoom: i
+ };
+ }
+
+ var map = new OpenLayers.Map("map");
+ var layer = new OpenLayers.Layer(
+ "test", {isBaseLayer: true}
+ );
+ map.addLayer(layer);
+ var control = new OpenLayers.Control.NavigationHistory({limit: limit});
+ map.addControl(control);
+
+ // set previous states
+ for(i=0; i<numStates; ++i) {
+ map.setCenter(history[i].center, history[i].zoom);
+ }
+ // test previous states (only up to limit should work)
+ var state;
+ for(i=numStates-1; i>=0; --i) {
+ state = Math.max(i, numStates - limit - 1);
+ t.eq(map.getCenter().lon, history[state].center.lon, "(previous step " + i + ") lon correct: state " + state);
+ t.eq(map.getCenter().lat, history[state].center.lat, "(previous step " + i + ") lat correct: state " + state);
+ t.eq(map.getZoom(), history[state].zoom, "(previous step " + i + ") zoom correct: state " + state);
+ control.previous.trigger();
+ }
+ // test next states
+ for(i=0; i<numStates; ++i) {
+ state = Math.min(numStates - 1, numStates - limit - 1 + i);
+ t.eq(map.getCenter().lon, history[state].center.lon, "(next step " + i + ") lon correct: state " + state);
+ t.eq(map.getCenter().lat, history[state].center.lat, "(next step " + i + ") lat correct: state " + state);
+ t.eq(map.getZoom(), history[state].zoom, "(next step " + i + ") zoom correct: state " + state);
+ control.next.trigger();
+ }
+
+ }
+
+ function test_clear(t) {
+ t.plan(7);
+ var map = new OpenLayers.Map("map", {zoomMethod: null});
+ var layer = new OpenLayers.Layer(
+ "test", {isBaseLayer: true}
+ );
+ map.addLayer(layer);
+ map.zoomToMaxExtent();
+
+ var control = new OpenLayers.Control.NavigationHistory();
+ map.addControl(control);
+
+ t.ok(!control.previous.active, "previous control not active");
+ t.ok(!control.next.active, "next control not active");
+
+ map.zoomTo(4);
+ t.ok(control.previous.active, "previous control is active after a move");
+ t.ok(!control.next.active, "next control is not active after a move");
+
+ control.clear();
+ t.eq(control.previousStack.length + control.nextStack.length, 0, "stacks are empty after a clear");
+ t.ok(!control.previous.active, "previous control not active after a clear");
+ t.ok(!control.next.active, "next control not active after a clear");
+
+ control.destroy();
+ }
+
+ function test_reprojection(t) {
+ t.plan(2);
+ var map = new OpenLayers.Map("map");
+ var layer = new OpenLayers.Layer(
+ "test", {isBaseLayer: true}
+ );
+ map.addLayer(layer);
+ map.zoomToMaxExtent();
+
+ var control = new OpenLayers.Control.NavigationHistory();
+ map.addControl(control);
+
+ map.zoomTo(4);
+ var bounds = map.getExtent().clone();
+ var expected = bounds.transform(new OpenLayers.Projection('EPSG:4326'),
+ new OpenLayers.Projection('EPSG:900913'));
+ // change the projection to EPSG:900913
+ var projSettings = {
+ units: "m",
+ maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508),
+ maxResolution: 156543.0339
+ };
+ map.setOptions(projSettings);
+ map.projection = 'EPSG:900913';
+ delete projSettings.maxResolution;
+ projSettings.projection = new OpenLayers.Projection('EPSG:900913');
+ layer.addOptions(projSettings);
+ layer.initResolutions();
+
+ map.zoomTo(7);
+
+ // go back one in the history
+ control.previous.trigger();
+
+ t.eq(map.getExtent().left.toFixed(3), expected.left.toFixed(3), "The extent [left] is reprojected correctly");
+ t.eq(map.getExtent().right.toFixed(3), expected.right.toFixed(3), "The extent [right] is reprojected correctly");
+ // top and bottom cannot be checked here since in EPSG:900913 the extent is not a rectangle so they are adjusted.
+
+ control.destroy();
+
+ }
+
+ </script>
+</head>
+<body>
+ <div id="map" style="width: 100px; height: 100px;"/>
+</body>
+</html>