diff --git a/src/tilemap/Tilemap.js b/src/tilemap/Tilemap.js
index e9530a30..c227f20d 100644
--- a/src/tilemap/Tilemap.js
+++ b/src/tilemap/Tilemap.js
@@ -918,8 +918,8 @@ Phaser.Tilemap.prototype = {
}
// Find out the difference between tileblock[1].x/y and x/y and use it as an offset, as it's the top left of the block to paste
- var diffX = tileblock[1].x - x;
- var diffY = tileblock[1].y - y;
+ var diffX = x - tileblock[1].x;
+ var diffY = y - tileblock[1].y;
for (var i = 1; i < tileblock.length; i++)
{
diff --git a/test/test.html b/test/test.html
new file mode 100644
index 00000000..50d99dd2
--- /dev/null
+++ b/test/test.html
@@ -0,0 +1,21 @@
+
+
+
+
+ QUnit Example
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/tilemap/Tilemap.js b/test/tilemap/Tilemap.js
new file mode 100644
index 00000000..9a7cf2dc
--- /dev/null
+++ b/test/tilemap/Tilemap.js
@@ -0,0 +1,55 @@
+/**
+ * Created by Brett on 08/02/14.
+ */
+var game,
+ tilemap,
+ mockedMap;
+
+module("Tilemap", {
+ setup: function() {
+ mockedMap = JSON.parse('{"url":"assets/maps/desert.json","data":{"height":40,"layers":[{"data":[30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,14,15,16,30,30,30,30,30,30,30,30,30,30,30,30,30,30,46,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,46,14,15,16,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,14,15,16,30,30,30,30,30,30,30,30,30,32,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,22,23,24,30,30,30,30,30,30,30,30,32,30,30,32,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,1,3,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,25,26,26,26,26,26,26,26,26,26,26,26,27,30,9,11,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,33,34,34,34,34,34,34,34,34,34,34,34,35,30,9,11,30,30,30,30,6,7,7,7,8,30,46,30,30,30,30,30,30,30,30,40,30,30,30,30,33,34,36,42,37,34,34,34,34,34,34,34,35,30,9,11,30,30,30,30,14,15,15,15,16,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,33,34,35,30,33,34,34,34,34,34,34,34,35,30,9,11,30,30,30,30,14,15,15,15,12,8,30,30,30,30,30,30,30,30,30,30,30,38,30,30,33,34,35,31,33,34,34,34,34,34,34,34,35,30,9,11,30,30,30,30,22,23,5,15,15,16,30,30,30,30,30,30,30,30,48,38,30,30,30,30,33,34,44,26,45,34,34,34,34,34,34,34,35,30,9,11,30,30,30,30,30,30,14,15,15,16,30,30,30,30,30,30,40,30,30,30,40,30,30,30,33,34,34,34,34,34,34,34,36,42,37,34,35,30,9,11,30,30,30,30,30,31,22,23,23,24,30,30,30,40,30,30,30,30,40,38,30,30,38,30,41,42,42,42,42,37,34,34,44,26,45,34,35,30,9,11,30,30,30,30,30,30,30,30,30,30,30,30,30,30,39,30,30,30,38,30,40,30,30,30,30,30,30,30,30,41,42,42,42,42,42,42,43,30,9,11,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,39,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,9,11,30,30,30,31,30,30,30,30,30,30,30,30,30,7,7,8,1,2,2,2,2,2,3,30,30,30,1,2,2,2,2,2,2,2,2,2,2,2,29,11,30,30,30,30,31,30,31,30,30,30,30,30,30,15,15,16,9,10,10,10,10,10,11,30,30,30,9,10,10,10,10,10,10,10,10,10,10,10,10,11,30,30,30,31,30,30,30,30,30,30,30,30,30,23,23,24,17,18,18,18,18,18,19,30,30,30,17,18,18,18,18,18,18,18,18,18,18,18,18,19,30,30,30,30,30,30,32,30,30,30,30,30,30,30,30,39,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,32,30,30,30,30,30,30,30,30,32,31,30,30,30,30,39,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,32,39,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,32,30,30,30,30,30,30,30,30,25,26,26,26,26,26,26,26,26,26,26,26,27,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,46,30,33,34,34,34,34,34,34,34,34,36,42,37,35,30,30,30,30,30,30,30,30,30,30,30,30,30,30,32,30,30,30,30,30,30,30,30,30,30,30,30,33,34,34,34,34,34,34,34,34,35,48,33,35,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,32,30,30,30,30,30,30,30,47,33,34,34,34,34,34,34,34,34,35,48,33,35,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,39,30,30,30,33,34,34,34,34,34,34,34,34,35,48,33,35,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,33,34,34,34,34,34,34,34,34,44,26,45,35,30,30,30,30,30,30,39,30,39,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,47,30,33,34,34,34,34,34,34,34,34,34,34,34,35,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,33,34,34,34,34,34,34,34,34,34,34,34,35,48,30,30,30,30,30,39,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,33,34,34,34,34,34,34,34,34,34,34,34,35,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,42,42,42,42,42,42,42,42,42,42,42,43,30,30,30,38,30,38,30,30,30,30,32,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,38,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,40,30,30,30,30,30,30,30,30,30,30,30,30,30,32,30,30,30,30,30,30,38,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,40,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,32,30,30,30,30,30,30,30,30,30,30,40,30,30,30,30,30,30,30,30,30,30,30,30,30,32,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,6,7,7,7,7,8,30,30,30,30,30,30,30,40,30,40,30,30,30,30,30,30,30,30,30,30,30,30,30,30,32,30,30,26,26,26,26,26,26,26,45,34,34,34,34,44,27,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,34,34,34,34,34,34,34,34,34,34,34,34,34,35,30,30,30,30,40,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,34,34,34,34,34,34,34,34,34,34,34,34,34,35,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,34,34,34,34,34,34,34,34,34,34,34,34,34,35,30,30,30,32,30,30,30,30,30,30,30,30,32,30,30,30,30,30,30,30,30,30,30,30,30,30,34,34,34,34,34,34,34,34,34,34,34,34,34,35,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30],"height":40,"name":"Ground","opacity":1,"type":"tilelayer","visible":true,"width":40,"x":0,"y":0}],"orientation":"orthogonal","properties":{},"tileheight":32,"tilesets":[{"firstgid":1,"image":"C:/Program Files (x86)/Tiled/examples/tmw_desert_spacing.png","imageheight":199,"imagewidth":265,"margin":1,"name":"Desert","properties":{},"spacing":1,"tileheight":32,"tilewidth":32}],"tilewidth":32,"version":1,"width":40},"format":1,"layers":[{"name":"Ground","width":40,"height":40,"alpha":1,"visible":true,"indexes":[30,14,15,16,46,31,32,22,23,24,1,3,25,26,27,9,11,33,34,35,6,7,8,40,36,42,37,12,38,5,48,44,45,41,39,43,2,29,10,17,18,19,47],"tileMargin":1,"tileSpacing":1,"data":[[30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,14,15,16,30,30,30,30,30,30,30,30,30,30,30,30,30],[30,46,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,46,14,15,16,30,31,30,30,30,30,30,30,30,30,30,30,30],[30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,30,30,30,30,14,15,16,30,30,30,30,30,30,30,30,30,32,30,30,30],[30,30,31,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,30,30,30,31,22,23,24,30,30,30,30,30,30,30,30,32,30,30,32,30],[30,30,30,30,30,31,30,30,30,30,30,30,30,30,31,31,31,31,31,31,30,30,30,30,30,1,3,30,30,31,30,30,30,30,30,30,30,30,30,30],[30,30,30,30,30,30,30,30,30,30,30,25,26,26,31,31,31,31,31,31,26,26,26,27,30,9,11,30,30,30,30,30,30,30,30,30,30,30,30,30],[30,30,30,30,30,30,30,30,30,30,30,33,34,34,31,31,31,31,31,31,34,34,34,35,30,9,11,30,30,30,30,6,7,7,7,8,30,46,30,30],[30,30,30,30,30,30,40,30,30,30,30,33,34,36,31,31,31,31,31,31,34,34,34,35,30,9,11,30,30,30,30,14,15,15,15,16,30,30,30,30],[30,30,30,30,30,30,30,30,30,30,30,33,34,35,30,33,34,34,34,34,34,34,34,35,30,9,11,30,30,30,30,14,15,15,15,12,8,30,30,30],[30,30,30,30,30,30,30,30,38,30,30,33,34,35,31,33,34,34,34,34,34,34,34,35,30,9,11,30,30,30,30,22,23,5,15,15,16,30,30,30],[30,30,30,30,30,48,38,30,30,30,30,33,34,44,26,45,34,34,34,34,34,34,34,35,30,9,11,30,30,30,30,30,30,14,15,15,16,30,30,30],[30,30,30,40,30,30,30,40,30,30,30,33,34,34,34,34,34,34,34,36,42,37,34,35,30,9,11,30,30,30,30,30,31,22,23,23,24,30,30,30],[40,30,30,30,30,40,38,30,30,38,30,41,42,42,42,42,37,34,34,44,26,45,34,35,30,9,11,30,30,30,30,30,30,30,30,30,30,30,30,30],[30,39,30,30,30,38,30,40,30,30,30,30,30,30,30,30,41,42,42,42,42,42,42,43,30,9,11,30,30,30,30,30,30,30,30,30,30,30,30,30],[30,30,30,39,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,9,11,30,30,30,31,30,30,30,30,30,30,30,30,30],[7,7,8,1,2,2,2,2,2,3,30,30,30,1,2,2,2,2,2,2,2,2,2,2,2,29,11,30,30,30,30,31,30,31,30,30,30,30,30,30],[15,15,16,9,10,10,10,10,10,11,30,30,30,9,10,10,10,10,10,10,10,10,10,10,10,10,11,30,30,30,31,30,30,30,30,30,30,30,30,30],[23,23,24,17,18,18,18,18,18,19,30,30,30,17,18,18,18,18,18,18,18,18,18,18,18,18,19,30,30,30,30,30,30,32,30,30,30,30,30,30],[30,30,39,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,32,30,30,30,30,30,30,30,30,32,31],[30,30,30,30,39,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,32],[39,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,32,30,30,30,30,30,30,30,30,25,26,26,26,26,26,26,26,26,26,26,26,27,30],[30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,46,30,33,34,34,34,34,34,34,34,34,36,42,37,35,30],[30,30,30,30,30,30,30,30,30,30,30,30,30,32,30,30,30,30,30,30,30,30,30,30,30,30,33,34,34,34,34,34,34,34,34,35,48,33,35,30],[30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,32,30,30,30,30,30,30,30,47,33,34,34,34,34,34,34,34,34,35,48,33,35,30],[30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,39,30,30,30,33,34,34,34,34,34,34,34,34,35,48,33,35,30],[30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,33,34,34,34,34,34,34,34,34,44,26,45,35,30],[30,30,30,30,30,39,30,39,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,47,30,33,34,34,34,34,34,34,34,34,34,34,34,35,30],[30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,33,34,34,34,34,34,34,34,34,34,34,34,35,48],[30,30,30,30,30,39,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,33,34,34,34,34,34,34,34,34,34,34,34,35,30],[30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,41,42,42,42,42,42,42,42,42,42,42,42,43,30],[30,30,38,30,38,30,30,30,30,32,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[30,38,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,40,30,30,30,30,30,30,30,30,30,30,30,30,30,32,30,30,30],[30,30,30,38,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,40,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[30,30,30,30,30,30,32,30,30,30,30,30,30,30,30,30,30,40,30,30,30,30,30,30,30,30,30,30,30,30,30,32,30,30,30,31,30,30,30,30],[30,30,30,30,30,30,30,6,7,7,7,7,8,30,30,30,30,30,30,30,40,30,40,30,30,30,30,30,30,30,30,30,30,30,30,30,30,32,30,30],[26,26,26,26,26,26,26,45,34,34,34,34,44,27,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[34,34,34,34,34,34,34,34,34,34,34,34,34,35,30,30,30,30,40,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[34,34,34,34,34,34,34,34,34,34,34,34,34,35,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[34,34,34,34,34,34,34,34,34,34,34,34,34,35,30,30,30,32,30,30,30,30,30,30,30,30,32,30,30,30,30,30,30,30,30,30,30,30,30,30],[34,34,34,34,34,34,34,34,34,34,34,34,34,35,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]]}]}');
+ game = {
+ cache: {
+ getTilemapData: function (key) {
+ return mockedMap;
+ }
+ }
+ };
+ tilemap = new Phaser.Tilemap(game);
+ },
+ teardown: function() {
+ mockedMap = null;
+ game = null;
+ tilemap = null;
+ }
+});
+
+test( "Tilemap#copy", function() {
+ var result = tilemap.copy(0, 0, 2, 2);
+ equal( result.length, 5 );
+ equal( result[0].x, 0 );
+ equal( result[0].y, 0 );
+ equal( result[0].width, 2 );
+ equal( result[0].height, 2 );
+});
+
+test("Tilemap#paste", function() {
+ var result = tilemap.copy(0, 0, 2, 2);
+
+ var currentTilemapLayer = tilemap.layers[tilemap.currentLayer];
+ notEqual(currentTilemapLayer.dirty, true);
+ equal(currentTilemapLayer.data[0][0].index, 30);
+
+ result[1].index = 99; // this changes both the index in the result and in the tilemap even before paste
+ // ... probably not desired behaviour
+
+ tilemap.paste(0, 0, result);
+ equal(currentTilemapLayer.dirty, true);
+ equal(currentTilemapLayer.data[0][0].index, 99);
+
+ currentTilemapLayer.dirty = false;
+
+ tilemap.paste(10, 0, result);
+ equal(currentTilemapLayer.dirty, true);
+ equal(currentTilemapLayer.data[0][10].index, 99);
+});
\ No newline at end of file