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 @@ + + + + + + + + +1,2,3,4,5,6,7,8, +9,10,11,12,13,14,15,16, +17,18,19,20,21,22,23,24, +25,26,27,28,29,30,31,32, +33,34,35,36,37,38,39,40, +41,42,43,44,45,46,47,48 + + + + + + + + + + + + + + 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 @@ + + + + + + AQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAA + + + + + + + + + + + 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 @@ + + + + + + H4sIAAAAAAAACg3DBRKCQAAAwDMRA7BQLMTE9v+vY3dmWyGEth279uwbOTB26MixExNTM6fOnLtwae7KtYUbt+7ce7D0aOXJsxev3rxb+/Dpy7cfv/782wAcvDirwAAAAA== + + + + + + + + + + + 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 @@ + + + + + + eJwNwwUSgkAAAMAzEQOwUCzExPb/r2N3ZlshhLYdu/bsGzkwdujIsRMTUzOnzpy7cGnuyrWFG7fu3Huw9GjlybMXr968W/vw6cu3H7/+/NsAMw8EmQ== + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + +1,2,3,4, +9,10,11,12, +17,18,19,20, +25,26,27,28, +33,34,35,36, +41,42,43,44, +0,0,0,0, +0,0,0,0 + + +5,6,7,8, +13,14,15,16, +21,22,23,24, +29,30,31,32, +37,38,39,40, +45,46,47,48, +0,0,0,0, +0,0,0,0 + + + + 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 @@ + + + + + + + + + + AQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + + 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