diff --git a/tests/test_data/tilesets/image/tileset.tsx b/tests/test_data/tilesets/image/tileset.tsx new file mode 100644 index 0000000..8aee17a --- /dev/null +++ b/tests/test_data/tilesets/image/tileset.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/tests/test_data/tilesets/image_background_color/tileset.tsx b/tests/test_data/tilesets/image_background_color/tileset.tsx new file mode 100644 index 0000000..25cae9b --- /dev/null +++ b/tests/test_data/tilesets/image_background_color/tileset.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/tests/test_data/tilesets/image_grid/tileset.tsx b/tests/test_data/tilesets/image_grid/tileset.tsx new file mode 100644 index 0000000..62ef87e --- /dev/null +++ b/tests/test_data/tilesets/image_grid/tileset.tsx @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/tests/test_data/tilesets/image_properties/tileset.tsx b/tests/test_data/tilesets/image_properties/tileset.tsx new file mode 100644 index 0000000..42478ae --- /dev/null +++ b/tests/test_data/tilesets/image_properties/tileset.tsx @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/tests/test_data/tilesets/image_tile_offset/tileset.tsx b/tests/test_data/tilesets/image_tile_offset/tileset.tsx new file mode 100644 index 0000000..7c0c1bc --- /dev/null +++ b/tests/test_data/tilesets/image_tile_offset/tileset.tsx @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/tests/test_data/tilesets/image_transformations/tileset.tsx b/tests/test_data/tilesets/image_transformations/tileset.tsx new file mode 100644 index 0000000..5b20f69 --- /dev/null +++ b/tests/test_data/tilesets/image_transformations/tileset.tsx @@ -0,0 +1,5 @@ + + + + + diff --git a/tests/test_data/tilesets/image_transparent_color/tileset.tsx b/tests/test_data/tilesets/image_transparent_color/tileset.tsx new file mode 100644 index 0000000..5ab0346 --- /dev/null +++ b/tests/test_data/tilesets/image_transparent_color/tileset.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/tests/test_data/tilesets/individual_images/tileset.tsx b/tests/test_data/tilesets/individual_images/tileset.tsx new file mode 100644 index 0000000..877cf79 --- /dev/null +++ b/tests/test_data/tilesets/individual_images/tileset.tsx @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/test_data/tilesets/terrain/tileset.tsx b/tests/test_data/tilesets/terrain/tileset.tsx new file mode 100644 index 0000000..2a57297 --- /dev/null +++ b/tests/test_data/tilesets/terrain/tileset.tsx @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/test_tileset.py b/tests/test_tileset.py index c5b8f7c..9f88f78 100644 --- a/tests/test_tileset.py +++ b/tests/test_tileset.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.tileset import parse +from pytiled_parser.common_types import OrderedPair, Size +from pytiled_parser.parsers.json.tileset import parse as parse_json +from pytiled_parser.parsers.tmx.tileset import parse as parse_tmx TESTS_DIR = Path(os.path.dirname(os.path.abspath(__file__))) TEST_DATA = TESTS_DIR / "test_data" @@ -26,8 +29,26 @@ ALL_TILESET_DIRS = [ ] +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_tileset(tileset): + tileset.version = None + tileset.tiled_version = None + if tileset.tiles: + for tile in tileset.tiles.values(): + if tile.objects: + for my_object in tile.objects.tiled_objects: + fix_object(my_object) + + +@pytest.mark.parametrize("parser_type", ["json", "tmx"]) @pytest.mark.parametrize("tileset_dir", ALL_TILESET_DIRS) -def test_tilesets_integration(tileset_dir): +def test_tilesets_integration(parser_type, tileset_dir): # 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( @@ -36,9 +57,16 @@ def test_tilesets_integration(tileset_dir): expected = importlib.util.module_from_spec(spec) spec.loader.exec_module(expected) - raw_tileset_path = tileset_dir / "tileset.json" + if parser_type == "json": + raw_tileset_path = tileset_dir / "tileset.json" + with open(raw_tileset_path) as raw_tileset: + tileset_ = parse_json(json.loads(raw_tileset.read()), 1) + elif parser_type == "tmx": + raw_tileset_path = tileset_dir / "tileset.tsx" + with open(raw_tileset_path) as raw_tileset: + tileset_ = parse_tmx(etree.parse(raw_tileset).getroot(), 1) - with open(raw_tileset_path) as raw_tileset: - tileset_ = parse(json.loads(raw_tileset.read()), 1) + fix_tileset(tileset_) + fix_tileset(expected.EXPECTED) assert tileset_ == expected.EXPECTED