tests: All layer unit tests for TMX parser

This commit is contained in:
Darren Eberly
2021-12-19 22:12:23 -05:00
parent 5763e8e497
commit 62746b63be
13 changed files with 221 additions and 6 deletions

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.5" tiledversion="1.7.0" orientation="orthogonal" renderorder="right-down" width="8" height="6" tilewidth="32" tileheight="32" infinite="0" nextlayerid="6" nextobjectid="3">
<tileset firstgid="1" source="tileset.tsx"/>
<layer id="1" name="Tile Layer 1" width="8" height="6" tintcolor="#aaffff" offsetx="1" offsety="3" parallaxx="1.4" parallaxy="1.3">
<properties>
<property name="test" value="test property"/>
</properties>
<data encoding="csv">
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
</data>
</layer>
<group id="4" name="Group 1" tintcolor="#0000ff" parallaxx="1.4">
<objectgroup id="2" name="Object Layer 1">
<object id="1" x="46.3333" y="39" width="69.3333" height="52.6667"/>
</objectgroup>
</group>
<imagelayer id="3" name="Image Layer 1" tintcolor="#ff0000" offsetx="1" offsety="4">
<image source="../../images/tile_04.png" trans="000000" width="32" height="32"/>
</imagelayer>
<imagelayer id="5" name="Image Layer 2" parallaxy="1.4">
<image source="../../images/tile_04.png" width="32" height="32"/>
</imagelayer>
</map>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.5" tiledversion="1.7.0" name="tile_set_image" tilewidth="32" tileheight="32" spacing="1" margin="1" tilecount="48" columns="8">
<image source="../../images/tmw_desert_spacing.png" width="265" height="199"/>
</tileset>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.5" tiledversion="1.7.0" orientation="orthogonal" renderorder="right-down" width="8" height="6" tilewidth="32" tileheight="32" infinite="0" nextlayerid="5" nextobjectid="3">
<tileset firstgid="1" source="../all_layer_types/tileset.tsx"/>
<layer id="1" name="Tile Layer 1" width="8" height="6">
<data encoding="base64">
AQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAA
</data>
</layer>
<group id="4" name="Group 1">
<objectgroup id="2" name="Object Layer 1">
<object id="1" x="46.3333" y="39" width="69.3333" height="52.6667"/>
</objectgroup>
</group>
<imagelayer id="3" name="Image Layer 1">
<image source="../../images/tile_04.png" trans="000000" width="32" height="32"/>
</imagelayer>
</map>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.5" tiledversion="1.7.0" name="tile_set_image" tilewidth="32" tileheight="32" spacing="1" margin="1" tilecount="48" columns="8">
<image source="../../images/tmw_desert_spacing.png" width="265" height="199"/>
</tileset>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.5" tiledversion="1.7.0" orientation="orthogonal" renderorder="right-down" width="8" height="6" tilewidth="32" tileheight="32" infinite="0" nextlayerid="5" nextobjectid="3">
<tileset firstgid="1" source="../all_layer_types/tileset.tsx"/>
<layer id="1" name="Tile Layer 1" width="8" height="6">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAACg3DBRKCQAAAwDMRA7BQLMTE9v+vY3dmWyGEth279uwbOTB26MixExNTM6fOnLtwae7KtYUbt+7ce7D0aOXJsxev3rxb+/Dpy7cfv/782wAcvDirwAAAAA==
</data>
</layer>
<group id="4" name="Group 1">
<objectgroup id="2" name="Object Layer 1">
<object id="1" x="46.3333" y="39" width="69.3333" height="52.6667"/>
</objectgroup>
</group>
<imagelayer id="3" name="Image Layer 1">
<image source="../../images/tile_04.png" trans="000000" width="32" height="32"/>
</imagelayer>
</map>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.5" tiledversion="1.7.0" name="tile_set_image" tilewidth="32" tileheight="32" spacing="1" margin="1" tilecount="48" columns="8">
<image source="../../images/tmw_desert_spacing.png" width="265" height="199"/>
</tileset>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.5" tiledversion="1.7.0" orientation="orthogonal" renderorder="right-down" width="8" height="6" tilewidth="32" tileheight="32" infinite="0" nextlayerid="5" nextobjectid="3">
<tileset firstgid="1" source="../all_layer_types/tileset.tsx"/>
<layer id="1" name="Tile Layer 1" width="8" height="6">
<data encoding="base64" compression="zlib">
eJwNwwUSgkAAAMAzEQOwUCzExPb/r2N3ZlshhLYdu/bsGzkwdujIsRMTUzOnzpy7cGnuyrWFG7fu3Huw9GjlybMXr968W/vw6cu3H7/+/NsAMw8EmQ==
</data>
</layer>
<group id="4" name="Group 1">
<objectgroup id="2" name="Object Layer 1">
<object id="1" x="46.3333" y="39" width="69.3333" height="52.6667"/>
</objectgroup>
</group>
<imagelayer id="3" name="Image Layer 1">
<image source="../../images/tile_04.png" trans="000000" width="32" height="32"/>
</imagelayer>
</map>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.5" tiledversion="1.7.0" name="tile_set_image" tilewidth="32" tileheight="32" spacing="1" margin="1" tilecount="48" columns="8">
<image source="../../images/tmw_desert_spacing.png" width="265" height="199"/>
</tileset>

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.5" tiledversion="1.7.0" orientation="orthogonal" renderorder="right-down" width="8" height="6" tilewidth="32" tileheight="32" infinite="1" nextlayerid="6" nextobjectid="3">
<editorsettings>
<chunksize width="4" height="8"/>
<export target="../tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/all_layer_types"/>
</editorsettings>
<tileset firstgid="1" source="../all_layer_types/tileset.tsx"/>
<layer id="1" name="Tile Layer 1" width="16" height="16" offsetx="163.089" offsety="116.463">
<properties>
<property name="test" value="test property"/>
</properties>
<data encoding="csv">
<chunk x="0" y="0" width="4" height="8">
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
</chunk>
<chunk x="4" y="0" width="4" height="8">
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
</chunk>
</data>
</layer>
</map>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.5" tiledversion="1.7.0" orientation="orthogonal" renderorder="right-down" width="8" height="6" tilewidth="32" tileheight="32" infinite="1" nextlayerid="6" nextobjectid="3">
<tileset firstgid="1" source="../all_layer_types/tileset.tsx"/>
<layer id="1" name="Tile Layer 1" width="16" height="16" offsetx="1" offsety="3">
<properties>
<property name="test" value="test property"/>
</properties>
<data encoding="base64">
<chunk x="0" y="0" width="16" height="16">
AQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
</chunk>
</data>
</layer>
</map>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.5" tiledversion="1.7.0" orientation="orthogonal" renderorder="right-down" compressionlevel="0" width="8" height="6" tilewidth="32" tileheight="32" infinite="0" nextlayerid="2" nextobjectid="1">
<properties>
<property name="bool property - false" type="bool" value="false"/>
<property name="bool property - true" type="bool" value="true"/>
<property name="color property" type="color" value="#ff49fcff"/>
<property name="file property" type="file" value="../tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/test_data/layer_tests/tests/var/log/syslog"/>
<property name="float property" type="float" value="1.23456789"/>
<property name="int property" type="int" value="13"/>
<property name="string property" value="Hello, World!!"/>
</properties>
<tileset firstgid="1" source="tileset.tsx"/>
</map>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.5" tiledversion="1.7.0" name="tile_set_image" tilewidth="32" tileheight="32" spacing="1" margin="1" tilecount="48" columns="8">
<image source="../../images/tmw_desert_spacing.png" width="265" height="199"/>
</tileset>

View File

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