diff --git a/tests/test_data/layer_tests/all_layer_types/map.tmx b/tests/test_data/layer_tests/all_layer_types/map.tmx
new file mode 100644
index 0000000..c94d181
--- /dev/null
+++ b/tests/test_data/layer_tests/all_layer_types/map.tmx
@@ -0,0 +1,28 @@
+
+
diff --git a/tests/test_data/layer_tests/all_layer_types/tileset.tsx b/tests/test_data/layer_tests/all_layer_types/tileset.tsx
new file mode 100644
index 0000000..8aee17a
--- /dev/null
+++ b/tests/test_data/layer_tests/all_layer_types/tileset.tsx
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/tests/test_data/layer_tests/b64/map.tmx b/tests/test_data/layer_tests/b64/map.tmx
new file mode 100644
index 0000000..060ebe1
--- /dev/null
+++ b/tests/test_data/layer_tests/b64/map.tmx
@@ -0,0 +1,17 @@
+
+
diff --git a/tests/test_data/layer_tests/b64/tileset.tsx b/tests/test_data/layer_tests/b64/tileset.tsx
new file mode 100644
index 0000000..8aee17a
--- /dev/null
+++ b/tests/test_data/layer_tests/b64/tileset.tsx
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/tests/test_data/layer_tests/b64_gzip/map.tmx b/tests/test_data/layer_tests/b64_gzip/map.tmx
new file mode 100644
index 0000000..21316ba
--- /dev/null
+++ b/tests/test_data/layer_tests/b64_gzip/map.tmx
@@ -0,0 +1,17 @@
+
+
diff --git a/tests/test_data/layer_tests/b64_gzip/tileset.tsx b/tests/test_data/layer_tests/b64_gzip/tileset.tsx
new file mode 100644
index 0000000..8aee17a
--- /dev/null
+++ b/tests/test_data/layer_tests/b64_gzip/tileset.tsx
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/tests/test_data/layer_tests/b64_zlib/map.tmx b/tests/test_data/layer_tests/b64_zlib/map.tmx
new file mode 100644
index 0000000..343bd2b
--- /dev/null
+++ b/tests/test_data/layer_tests/b64_zlib/map.tmx
@@ -0,0 +1,17 @@
+
+
diff --git a/tests/test_data/layer_tests/b64_zlib/tileset.tsx b/tests/test_data/layer_tests/b64_zlib/tileset.tsx
new file mode 100644
index 0000000..8aee17a
--- /dev/null
+++ b/tests/test_data/layer_tests/b64_zlib/tileset.tsx
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/tests/test_data/layer_tests/infinite_map/map.tmx b/tests/test_data/layer_tests/infinite_map/map.tmx
new file mode 100644
index 0000000..2a826bb
--- /dev/null
+++ b/tests/test_data/layer_tests/infinite_map/map.tmx
@@ -0,0 +1,35 @@
+
+
diff --git a/tests/test_data/layer_tests/infinite_map_b64/map.tmx b/tests/test_data/layer_tests/infinite_map_b64/map.tmx
new file mode 100644
index 0000000..d83d427
--- /dev/null
+++ b/tests/test_data/layer_tests/infinite_map_b64/map.tmx
@@ -0,0 +1,14 @@
+
+
diff --git a/tests/test_data/layer_tests/no_layers/map.tmx b/tests/test_data/layer_tests/no_layers/map.tmx
new file mode 100644
index 0000000..fb995a3
--- /dev/null
+++ b/tests/test_data/layer_tests/no_layers/map.tmx
@@ -0,0 +1,13 @@
+
+
diff --git a/tests/test_data/layer_tests/no_layers/tileset.tsx b/tests/test_data/layer_tests/no_layers/tileset.tsx
new file mode 100644
index 0000000..8aee17a
--- /dev/null
+++ b/tests/test_data/layer_tests/no_layers/tileset.tsx
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/tests/test_layer.py b/tests/test_layer.py
index 75cb733..bce74b3 100644
--- a/tests/test_layer.py
+++ b/tests/test_layer.py
@@ -2,11 +2,14 @@
import importlib.util
import json
import os
+import xml.etree.ElementTree as etree
from pathlib import Path
import pytest
-from pytiled_parser.parsers.json.layer import parse
+from pytiled_parser.common_types import OrderedPair, Size
+from pytiled_parser.parsers.json.layer import parse as parse_json
+from pytiled_parser.parsers.tmx.layer import parse as parse_tmx
TESTS_DIR = Path(os.path.dirname(os.path.abspath(__file__)))
TEST_DATA = TESTS_DIR / "test_data"
@@ -25,8 +28,36 @@ ALL_LAYER_TESTS = [
]
+def fix_object(my_object):
+ my_object.coordinates = OrderedPair(
+ round(my_object.coordinates[0], 4),
+ round(my_object.coordinates[1], 4),
+ )
+ my_object.size = Size(round(my_object.size[0], 4), round(my_object.size[1], 4))
+
+
+def fix_layer(layer):
+ layer.offset = OrderedPair(round(layer.offset[0], 3), round(layer.offset[1], 3))
+ layer.coordinates = OrderedPair(
+ round(layer.coordinates[0], 4), round(layer.coordinates[1], 4)
+ )
+ if layer.size:
+ layer.size = Size(round(layer.size[0], 4), round(layer.size[1], 4))
+ layer.parallax_factor = OrderedPair(
+ round(layer.parallax_factor[0], 4),
+ round(layer.parallax_factor[1], 4),
+ )
+ if hasattr(layer, "tiled_objects"):
+ for tiled_object in layer.tiled_objects:
+ fix_object(tiled_object)
+ if hasattr(layer, "layers"):
+ for child_layer in layer.layers:
+ fix_layer(child_layer)
+
+
+@pytest.mark.parametrize("parser_type", ["json", "tmx"])
@pytest.mark.parametrize("layer_test", ALL_LAYER_TESTS)
-def test_layer_integration(layer_test):
+def test_layer_integration(parser_type, layer_test):
# it's a PITA to import like this, don't do it
# https://stackoverflow.com/a/67692/1342874
spec = importlib.util.spec_from_file_location(
@@ -35,10 +66,33 @@ def test_layer_integration(layer_test):
expected = importlib.util.module_from_spec(spec)
spec.loader.exec_module(expected)
- raw_layers_path = layer_test / "map.json"
+ if parser_type == "json":
+ raw_layers_path = layer_test / "map.json"
+ with open(raw_layers_path) as raw_layers_file:
+ raw_layers = json.load(raw_layers_file)["layers"]
+ layers = [parse_json(raw_layer) for raw_layer in raw_layers]
+ elif parser_type == "tmx":
+ raw_layers_path = layer_test / "map.tmx"
+ with open(raw_layers_path) as raw_layers_file:
+ raw_layer = etree.parse(raw_layers_file).getroot()
+ layers = []
+ for layer in raw_layer.findall("./layer"):
+ layers.append(parse_tmx(layer))
- with open(raw_layers_path) as raw_layers_file:
- raw_layers = json.load(raw_layers_file)["layers"]
- layers = [parse(raw_layer) for raw_layer in raw_layers]
+ for layer in raw_layer.findall("./objectgroup"):
+ layers.append(parse_tmx(layer))
+
+ for layer in raw_layer.findall("./group"):
+ layers.append(parse_tmx(layer))
+
+ for layer in raw_layer.findall("./imagelayer"):
+ layers.append(parse_tmx(layer))
+
+ for layer in layers:
+ fix_layer(layer)
+
+ for layer in expected.EXPECTED:
+ fix_layer(layer)
+ print(layer.size)
assert layers == expected.EXPECTED