Tests for UTFGrid tiles.

This commit is contained in:
Tim Schaub
2012-02-25 23:07:31 -07:00
parent 8c95a90052
commit faeb691f3a
21 changed files with 205 additions and 4 deletions

View File

@@ -62,7 +62,7 @@ OpenLayers.Tile.UTFGrid = OpenLayers.Class(OpenLayers.Tile, {
/** /**
* APIMethod: destroy * APIMethod: destroy
* nullify references to prevent circular references and memory leaks * Clean up.
*/ */
destroy: function() { destroy: function() {
this.clear(); this.clear();
@@ -82,6 +82,7 @@ OpenLayers.Tile.UTFGrid = OpenLayers.Class(OpenLayers.Tile, {
var drawn = OpenLayers.Tile.prototype.draw.apply(this, arguments); var drawn = OpenLayers.Tile.prototype.draw.apply(this, arguments);
if (drawn) { if (drawn) {
if (this.isLoading) { if (this.isLoading) {
this.abortLoading();
//if we're already loading, send 'reload' instead of 'loadstart'. //if we're already loading, send 'reload' instead of 'loadstart'.
this.events.triggerEvent("reload"); this.events.triggerEvent("reload");
} else { } else {
@@ -93,7 +94,7 @@ OpenLayers.Tile.UTFGrid = OpenLayers.Class(OpenLayers.Tile, {
if (this.layer.useJSONP) { if (this.layer.useJSONP) {
// Use JSONP method to avoid xbrowser policy // Use JSONP method to avoid xbrowser policy
var ols = new OpenLayers.Protocol.Script({ var ols = new OpenLayers.Protocol.Script({
url: this.url, url: this.url,
callback: function(response) { callback: function(response) {
this.isLoading = false; this.isLoading = false;
this.events.triggerEvent("loadend"); this.events.triggerEvent("loadend");
@@ -102,9 +103,10 @@ OpenLayers.Tile.UTFGrid = OpenLayers.Class(OpenLayers.Tile, {
scope: this scope: this
}); });
ols.read(); ols.read();
this.request = ols;
} else { } else {
// Use standard XHR // Use standard XHR
OpenLayers.Request.GET({ this.request = OpenLayers.Request.GET({
url: this.url, url: this.url,
callback: function(response) { callback: function(response) {
this.isLoading = false; this.isLoading = false;
@@ -121,9 +123,21 @@ OpenLayers.Tile.UTFGrid = OpenLayers.Class(OpenLayers.Tile, {
} }
return drawn; return drawn;
}, },
/**
* Method: abortLoading
* Cancel a pending request.
*/
abortLoading: function() {
if (this.request) {
this.request.abort();
delete this.request;
}
this.isLoading = false;
},
/** /**
* Method: parseJSON * Method: parseData
* Parse the JSON from a request * Parse the JSON from a request
* *
* Parameters: * Parameters:

168
tests/Tile/UTFGrid.html Normal file
View File

@@ -0,0 +1,168 @@
<html>
<head>
<script src="../OLLoader.js"></script>
<script type="text/javascript">
var map, layer;
function setUp() {
layer = new OpenLayers.Layer.UTFGrid(
null,
"../data/utfgrid/world_utfgrid/${z}/${x}/${y}.json",
{isBaseLayer: true}
);
map = new OpenLayers.Map({
div: "map",
projection: "EPSG:900913",
layers: [layer],
center: [0, 0],
zoom: 0
});
}
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;
try {
tile.parseData('foo bar');
} catch (e) {
err = e;
}
t.ok(err instanceof Error, "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();
});
}
</script>
</head>
<body>
<div id="map" style="height:550px;width:500px"></div>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -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

View File

@@ -0,0 +1 @@
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}

View File

@@ -0,0 +1 @@
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}

View File

@@ -0,0 +1 @@
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1 @@
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}

View File

@@ -0,0 +1 @@
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}

View File

@@ -0,0 +1 @@
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}

View File

@@ -0,0 +1 @@
{"keys": [""], "data": {}, "grid": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "]}

View File

@@ -219,6 +219,7 @@
<li>Tile.html</li> <li>Tile.html</li>
<li>Tile/Image.html</li> <li>Tile/Image.html</li>
<li>Tile/Image/IFrame.html</li> <li>Tile/Image/IFrame.html</li>
<li>Tile/UTFGrid.html</li>
<li>Tween.html</li> <li>Tween.html</li>
<li>Kinetic.html</li> <li>Kinetic.html</li>
<li>Util.html</li> <li>Util.html</li>