mirror of
https://github.com/OMGeeky/pytiled_parser.git
synced 2025-12-26 17:02:28 +01:00
tests: All layer unit tests for TMX parser
This commit is contained in:
28
tests/test_data/layer_tests/all_layer_types/map.tmx
Normal file
28
tests/test_data/layer_tests/all_layer_types/map.tmx
Normal 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>
|
||||
4
tests/test_data/layer_tests/all_layer_types/tileset.tsx
Normal file
4
tests/test_data/layer_tests/all_layer_types/tileset.tsx
Normal 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>
|
||||
17
tests/test_data/layer_tests/b64/map.tmx
Normal file
17
tests/test_data/layer_tests/b64/map.tmx
Normal 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>
|
||||
4
tests/test_data/layer_tests/b64/tileset.tsx
Normal file
4
tests/test_data/layer_tests/b64/tileset.tsx
Normal 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>
|
||||
17
tests/test_data/layer_tests/b64_gzip/map.tmx
Normal file
17
tests/test_data/layer_tests/b64_gzip/map.tmx
Normal 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>
|
||||
4
tests/test_data/layer_tests/b64_gzip/tileset.tsx
Normal file
4
tests/test_data/layer_tests/b64_gzip/tileset.tsx
Normal 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>
|
||||
17
tests/test_data/layer_tests/b64_zlib/map.tmx
Normal file
17
tests/test_data/layer_tests/b64_zlib/map.tmx
Normal 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>
|
||||
4
tests/test_data/layer_tests/b64_zlib/tileset.tsx
Normal file
4
tests/test_data/layer_tests/b64_zlib/tileset.tsx
Normal 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>
|
||||
35
tests/test_data/layer_tests/infinite_map/map.tmx
Normal file
35
tests/test_data/layer_tests/infinite_map/map.tmx
Normal 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>
|
||||
14
tests/test_data/layer_tests/infinite_map_b64/map.tmx
Normal file
14
tests/test_data/layer_tests/infinite_map_b64/map.tmx
Normal 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>
|
||||
13
tests/test_data/layer_tests/no_layers/map.tmx
Normal file
13
tests/test_data/layer_tests/no_layers/map.tmx
Normal 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>
|
||||
4
tests/test_data/layer_tests/no_layers/tileset.tsx
Normal file
4
tests/test_data/layer_tests/no_layers/tileset.tsx
Normal 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>
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user