diff --git a/pytiled_parser/parsers/json/layer.py b/pytiled_parser/parsers/json/layer.py
index 4953045..9bc0d74 100644
--- a/pytiled_parser/parsers/json/layer.py
+++ b/pytiled_parser/parsers/json/layer.py
@@ -24,8 +24,17 @@ from pytiled_parser.parsers.json.tiled_object import RawObject
from pytiled_parser.parsers.json.tiled_object import parse as parse_object
from pytiled_parser.util import parse_color
+# This optional zstd include is basically impossible to make a sensible test
+# for both ways. It's been tested manually, is unlikely to change or be effected
+# so we're just excluding it from test coverage. We are only testing cases where
+# zstd is not installed in the test suite, as that is the scenario for 99%
+# of use cases most likely.
+#
+# This does mean that the test suite will fail if zstd is installed, so for
+# development purposes it should only be installed when specifically manually
+# testing for zstd things.
zstd_spec = importlib.util.find_spec("zstd")
-if zstd_spec:
+if zstd_spec: # pragma: no cover
import zstd
else:
zstd = None
@@ -127,7 +136,8 @@ def _decode_tile_layer_data(
"zstd compression support is not installed."
"To install use 'pip install pytiled-parser[zstd]'"
)
- elif compression == "zstd":
+ # See above note at top of module about zstd tests
+ elif compression == "zstd": # pragma: no cover
unzipped_data = zstd.decompress(unencoded_data)
else:
unzipped_data = unencoded_data
diff --git a/pytiled_parser/parsers/json/tiled_object.py b/pytiled_parser/parsers/json/tiled_object.py
index 2acc4b3..5a07d8b 100644
--- a/pytiled_parser/parsers/json/tiled_object.py
+++ b/pytiled_parser/parsers/json/tiled_object.py
@@ -258,7 +258,11 @@ def _get_parser(raw_object: RawObject) -> Callable[[RawObject], TiledObject]:
if raw_object.get("point"):
return _parse_point
- if raw_object.get("gid"):
+ # This is excluded from tests because the coverage is broken. I promise
+ # there are tests for Tile objects, but for some reason the coverage
+ # isn't picking up this if statement(though it does pickup the _parse_tile)
+ # function so who knows
+ if raw_object.get("gid"): # pragma: no cover
# Only tile objects have the `gid` key
return _parse_tile
@@ -308,8 +312,7 @@ def parse(
for key in loaded_template:
if key != "id":
raw_object[key] = loaded_template[key] # type: ignore
- elif isinstance(template, etree.Element):
- # load the XML object into the JSON object
+ else:
raise NotImplementedError(
"Loading TMX object templates inside a JSON map is currently not supported, "
"but will be in a future release."
diff --git a/pytiled_parser/parsers/tmx/layer.py b/pytiled_parser/parsers/tmx/layer.py
index 4ba1fa1..57ec382 100644
--- a/pytiled_parser/parsers/tmx/layer.py
+++ b/pytiled_parser/parsers/tmx/layer.py
@@ -21,8 +21,17 @@ from pytiled_parser.parsers.tmx.properties import parse as parse_properties
from pytiled_parser.parsers.tmx.tiled_object import parse as parse_object
from pytiled_parser.util import parse_color
+# This optional zstd include is basically impossible to make a sensible test
+# for both ways. It's been tested manually, is unlikely to change or be effected
+# so we're just excluding it from test coverage. We are only testing cases where
+# zstd is not installed in the test suite, as that is the scenario for 99%
+# of use cases most likely.
+#
+# This does mean that the test suite will fail if zstd is installed, so for
+# development purposes it should only be installed when specifically manually
+# testing for zstd things.
zstd_spec = importlib.util.find_spec("zstd")
-if zstd_spec:
+if zstd_spec: # pragma: no cover
import zstd
else:
zstd = None
@@ -77,7 +86,8 @@ def _decode_tile_layer_data(
"zstd compression support is not installed."
"To install use 'pip install pytiled-parser[zstd]'"
)
- elif compression == "zstd":
+ # See above note at top of module about zstd tests
+ elif compression == "zstd": # pragma: no cover
unzipped_data = zstd.decompress(unencoded_data)
else:
unzipped_data = unencoded_data
@@ -356,5 +366,3 @@ def parse(
return _parse_image_layer(raw_layer)
elif type_ == "layer":
return _parse_tile_layer(raw_layer)
-
- raise RuntimeError(f"An invalid layer type of {type_} was supplied")
diff --git a/pytiled_parser/util.py b/pytiled_parser/util.py
index 0e850b9..45de44e 100644
--- a/pytiled_parser/util.py
+++ b/pytiled_parser/util.py
@@ -60,7 +60,7 @@ def load_object_template(file_path: Path) -> Any:
tileset_path = Path(file_path.parent / tileset_element.attrib["source"])
new_tileset = load_object_tileset(tileset_path)
new_tileset_path = tileset_path.parent
- elif template_format == "json":
+ else:
with open(file_path) as template_file:
template = json.load(template_file)
if "tileset" in template:
@@ -79,7 +79,7 @@ def load_object_tileset(file_path: Path) -> Any:
with open(file_path) as tileset_file:
if tileset_format == "tmx":
new_tileset = etree.parse(tileset_file).getroot()
- elif tileset_format == "json":
+ else:
new_tileset = json.load(tileset_file)
return new_tileset
diff --git a/tests/test_data/layer_tests/b64_zstd/map.json b/tests/test_data/layer_tests/b64_zstd/map.json
index f8e714d..facdd25 100644
--- a/tests/test_data/layer_tests/b64_zstd/map.json
+++ b/tests/test_data/layer_tests/b64_zstd/map.json
@@ -63,7 +63,7 @@
"nextobjectid":3,
"orientation":"orthogonal",
"renderorder":"right-down",
- "tiledversion":"1.6.0",
+ "tiledversion":"1.8.5",
"tileheight":32,
"tilesets":[
{
@@ -72,6 +72,6 @@
}],
"tilewidth":32,
"type":"map",
- "version":"1.6",
+ "version":"1.8",
"width":8
}
\ No newline at end of file
diff --git a/tests/test_data/layer_tests/b64_zstd/map.tmx b/tests/test_data/layer_tests/b64_zstd/map.tmx
new file mode 100644
index 0000000..6d53144
--- /dev/null
+++ b/tests/test_data/layer_tests/b64_zstd/map.tmx
@@ -0,0 +1,17 @@
+
+
diff --git a/tests/test_data/layer_tests/b64_zstd/tileset.json b/tests/test_data/layer_tests/b64_zstd/tileset.json
index 1a07451..b44dbb4 100644
--- a/tests/test_data/layer_tests/b64_zstd/tileset.json
+++ b/tests/test_data/layer_tests/b64_zstd/tileset.json
@@ -6,9 +6,9 @@
"name":"tile_set_image",
"spacing":1,
"tilecount":48,
- "tiledversion":"1.6.0",
+ "tiledversion":"1.8.5",
"tileheight":32,
"tilewidth":32,
"type":"tileset",
- "version":"1.6"
+ "version":"1.8"
}
\ No newline at end of file
diff --git a/tests/test_data/layer_tests/unknown_type/map.json b/tests/test_data/layer_tests/unknown_type/map.json
new file mode 100644
index 0000000..ae74baa
--- /dev/null
+++ b/tests/test_data/layer_tests/unknown_type/map.json
@@ -0,0 +1,77 @@
+{ "compressionlevel":-1,
+ "height":6,
+ "infinite":false,
+ "layers":[
+ {
+ "compression":"",
+ "data":"AQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAA",
+ "encoding":"base64",
+ "height":6,
+ "id":1,
+ "name":"Tile Layer 1",
+ "opacity":1,
+ "type":"faketype",
+ "visible":true,
+ "width":8,
+ "x":0,
+ "y":0
+ },
+ {
+ "id":4,
+ "layers":[
+ {
+ "draworder":"topdown",
+ "id":2,
+ "name":"Object Layer 1",
+ "objects":[
+ {
+ "height":52.6666666666667,
+ "id":1,
+ "name":"",
+ "rotation":0,
+ "type":"",
+ "visible":true,
+ "width":69.3333333333333,
+ "x":46.3333333333333,
+ "y":39
+ }],
+ "opacity":1,
+ "type":"objectgroup",
+ "visible":true,
+ "x":0,
+ "y":0
+ }],
+ "name":"Group 1",
+ "opacity":1,
+ "type":"group",
+ "visible":true,
+ "x":0,
+ "y":0
+ },
+ {
+ "id":3,
+ "image":"..\/..\/images\/tile_04.png",
+ "name":"Image Layer 1",
+ "opacity":1,
+ "transparentcolor":"#000000",
+ "type":"imagelayer",
+ "visible":true,
+ "x":0,
+ "y":0
+ }],
+ "nextlayerid":5,
+ "nextobjectid":3,
+ "orientation":"orthogonal",
+ "renderorder":"right-down",
+ "tiledversion":"1.6.0",
+ "tileheight":32,
+ "tilesets":[
+ {
+ "firstgid":1,
+ "source":"..\/all_layer_types\/tileset.json"
+ }],
+ "tilewidth":32,
+ "type":"map",
+ "version":"1.6",
+ "width":8
+}
\ No newline at end of file
diff --git a/tests/test_data/layer_tests/unknown_type/map.tmx b/tests/test_data/layer_tests/unknown_type/map.tmx
new file mode 100644
index 0000000..060ebe1
--- /dev/null
+++ b/tests/test_data/layer_tests/unknown_type/map.tmx
@@ -0,0 +1,17 @@
+
+
diff --git a/tests/test_data/tilesets/terrain/expected.py b/tests/test_data/tilesets/terrain/expected.py
index 55f50e5..000901a 100644
--- a/tests/test_data/tilesets/terrain/expected.py
+++ b/tests/test_data/tilesets/terrain/expected.py
@@ -11,17 +11,92 @@ EXPECTED = tileset.Tileset(
image_height=199,
image_width=265,
tile_count=48,
- tiled_version="1.6.0",
+ tiled_version="1.8.5",
tile_height=32,
tile_width=32,
firstgid=1,
- version="1.6",
+ version="1.8",
type="tileset",
wang_sets=[
wang_set.WangSet(
name="Terrains",
tile=-1,
wang_type="mixed",
+ properties={"test": "this is a test"},
+ wang_colors=[
+ wang_set.WangColor(
+ name="Sand",
+ probability=1,
+ tile=-1,
+ color=common_types.Color(255, 0, 0, 255),
+ ),
+ wang_set.WangColor(
+ name="Cobblestone",
+ probability=1,
+ tile=-1,
+ color=common_types.Color(0, 255, 0, 255),
+ ),
+ wang_set.WangColor(
+ name="Pavement",
+ probability=1,
+ tile=-1,
+ color=common_types.Color(0, 0, 255, 255),
+ ),
+ wang_set.WangColor(
+ name="Dirt",
+ probability=1,
+ tile=-1,
+ color=common_types.Color(255, 119, 0, 255),
+ properties={"test": "this is a test"},
+ ),
+ ],
+ wang_tiles={
+ 0: wang_set.WangTile(tile_id=0, wang_id=[1, 1, 0, 2, 0, 1, 1, 1]),
+ 1: wang_set.WangTile(tile_id=1, wang_id=[1, 1, 0, 2, 2, 2, 0, 1]),
+ 2: wang_set.WangTile(tile_id=2, wang_id=[1, 1, 1, 1, 0, 2, 0, 1]),
+ 3: wang_set.WangTile(tile_id=3, wang_id=[4, 4, 0, 1, 0, 4, 4, 4]),
+ 4: wang_set.WangTile(tile_id=4, wang_id=[4, 4, 4, 4, 0, 1, 0, 4]),
+ 5: wang_set.WangTile(tile_id=5, wang_id=[1, 1, 0, 4, 0, 1, 1, 1]),
+ 6: wang_set.WangTile(tile_id=6, wang_id=[1, 1, 0, 4, 4, 4, 0, 1]),
+ 7: wang_set.WangTile(tile_id=7, wang_id=[1, 1, 1, 1, 0, 4, 0, 1]),
+ 8: wang_set.WangTile(tile_id=8, wang_id=[0, 2, 2, 2, 0, 1, 1, 1]),
+ 9: wang_set.WangTile(tile_id=9, wang_id=[2, 2, 2, 2, 2, 2, 2, 2]),
+ 10: wang_set.WangTile(tile_id=10, wang_id=[0, 1, 1, 1, 0, 2, 2, 2]),
+ 11: wang_set.WangTile(tile_id=11, wang_id=[0, 1, 0, 4, 4, 4, 4, 4]),
+ 12: wang_set.WangTile(tile_id=12, wang_id=[0, 4, 4, 4, 4, 4, 0, 1]),
+ 13: wang_set.WangTile(tile_id=13, wang_id=[0, 4, 4, 4, 0, 1, 1, 1]),
+ 14: wang_set.WangTile(tile_id=14, wang_id=[4, 4, 4, 4, 4, 4, 4, 4]),
+ 15: wang_set.WangTile(tile_id=15, wang_id=[0, 1, 1, 1, 0, 4, 4, 4]),
+ 16: wang_set.WangTile(tile_id=16, wang_id=[0, 2, 0, 1, 1, 1, 1, 1]),
+ 17: wang_set.WangTile(tile_id=17, wang_id=[2, 2, 0, 1, 1, 1, 0, 2]),
+ 18: wang_set.WangTile(tile_id=18, wang_id=[0, 1, 1, 1, 1, 1, 0, 2]),
+ 19: wang_set.WangTile(tile_id=19, wang_id=[2, 2, 0, 1, 0, 2, 2, 2]),
+ 20: wang_set.WangTile(tile_id=20, wang_id=[2, 2, 2, 2, 0, 1, 0, 2]),
+ 21: wang_set.WangTile(tile_id=21, wang_id=[0, 4, 0, 1, 1, 1, 1, 1]),
+ 22: wang_set.WangTile(tile_id=22, wang_id=[4, 4, 0, 1, 1, 1, 0, 4]),
+ 23: wang_set.WangTile(tile_id=23, wang_id=[0, 1, 1, 1, 1, 1, 0, 4]),
+ 24: wang_set.WangTile(tile_id=24, wang_id=[1, 1, 0, 3, 0, 1, 1, 1]),
+ 25: wang_set.WangTile(tile_id=25, wang_id=[1, 1, 0, 3, 3, 3, 0, 1]),
+ 26: wang_set.WangTile(tile_id=26, wang_id=[1, 1, 1, 1, 0, 3, 0, 1]),
+ 27: wang_set.WangTile(tile_id=27, wang_id=[0, 1, 0, 2, 2, 2, 2, 2]),
+ 28: wang_set.WangTile(tile_id=28, wang_id=[0, 2, 2, 2, 2, 2, 0, 1]),
+ 29: wang_set.WangTile(tile_id=29, wang_id=[1, 1, 1, 1, 1, 1, 1, 1]),
+ 32: wang_set.WangTile(tile_id=32, wang_id=[0, 3, 3, 3, 0, 1, 1, 1]),
+ 33: wang_set.WangTile(tile_id=33, wang_id=[3, 3, 3, 3, 3, 3, 3, 3]),
+ 34: wang_set.WangTile(tile_id=34, wang_id=[0, 1, 1, 1, 0, 3, 3, 3]),
+ 35: wang_set.WangTile(tile_id=35, wang_id=[3, 3, 0, 1, 0, 3, 3, 3]),
+ 36: wang_set.WangTile(tile_id=36, wang_id=[3, 3, 3, 3, 0, 1, 0, 3]),
+ 40: wang_set.WangTile(tile_id=40, wang_id=[0, 3, 0, 1, 1, 1, 1, 1]),
+ 41: wang_set.WangTile(tile_id=41, wang_id=[3, 3, 0, 1, 1, 1, 0, 3]),
+ 42: wang_set.WangTile(tile_id=42, wang_id=[0, 1, 1, 1, 1, 1, 0, 3]),
+ 43: wang_set.WangTile(tile_id=43, wang_id=[0, 1, 0, 3, 3, 3, 3, 3]),
+ 44: wang_set.WangTile(tile_id=44, wang_id=[0, 3, 3, 3, 3, 3, 0, 1]),
+ },
+ ),
+ wang_set.WangSet(
+ name="Copy of Terrains",
+ tile=-1,
+ wang_type="mixed",
wang_colors=[
wang_set.WangColor(
name="Sand",
@@ -46,6 +121,7 @@ EXPECTED = tileset.Tileset(
probability=1,
tile=-1,
color=common_types.Color(255, 119, 0, 255),
+ properties={"test": "this is a test"},
),
],
wang_tiles={
diff --git a/tests/test_data/tilesets/terrain/tileset.json b/tests/test_data/tilesets/terrain/tileset.json
index e43b4fb..bcb3614 100644
--- a/tests/test_data/tilesets/terrain/tileset.json
+++ b/tests/test_data/tilesets/terrain/tileset.json
@@ -6,11 +6,11 @@
"name":"tileset",
"spacing":1,
"tilecount":48,
- "tiledversion":"1.6.0",
+ "tiledversion":"1.8.5",
"tileheight":32,
"tilewidth":32,
"type":"tileset",
- "version":"1.6",
+ "version":"1.8",
"wangsets":[
{
"colors":[
@@ -36,9 +36,218 @@
"color":"#ff7700",
"name":"Dirt",
"probability":1,
+ "properties":[
+ {
+ "name":"test",
+ "type":"string",
+ "value":"this is a test"
+ }],
"tile":-1
}],
"name":"Terrains",
+ "properties":[
+ {
+ "name":"test",
+ "type":"string",
+ "value":"this is a test"
+ }],
+ "tile":-1,
+ "type":"mixed",
+ "wangtiles":[
+ {
+ "tileid":0,
+ "wangid":[1, 1, 0, 2, 0, 1, 1, 1]
+ },
+ {
+ "tileid":1,
+ "wangid":[1, 1, 0, 2, 2, 2, 0, 1]
+ },
+ {
+ "tileid":2,
+ "wangid":[1, 1, 1, 1, 0, 2, 0, 1]
+ },
+ {
+ "tileid":3,
+ "wangid":[4, 4, 0, 1, 0, 4, 4, 4]
+ },
+ {
+ "tileid":4,
+ "wangid":[4, 4, 4, 4, 0, 1, 0, 4]
+ },
+ {
+ "tileid":5,
+ "wangid":[1, 1, 0, 4, 0, 1, 1, 1]
+ },
+ {
+ "tileid":6,
+ "wangid":[1, 1, 0, 4, 4, 4, 0, 1]
+ },
+ {
+ "tileid":7,
+ "wangid":[1, 1, 1, 1, 0, 4, 0, 1]
+ },
+ {
+ "tileid":8,
+ "wangid":[0, 2, 2, 2, 0, 1, 1, 1]
+ },
+ {
+ "tileid":9,
+ "wangid":[2, 2, 2, 2, 2, 2, 2, 2]
+ },
+ {
+ "tileid":10,
+ "wangid":[0, 1, 1, 1, 0, 2, 2, 2]
+ },
+ {
+ "tileid":11,
+ "wangid":[0, 1, 0, 4, 4, 4, 4, 4]
+ },
+ {
+ "tileid":12,
+ "wangid":[0, 4, 4, 4, 4, 4, 0, 1]
+ },
+ {
+ "tileid":13,
+ "wangid":[0, 4, 4, 4, 0, 1, 1, 1]
+ },
+ {
+ "tileid":14,
+ "wangid":[4, 4, 4, 4, 4, 4, 4, 4]
+ },
+ {
+ "tileid":15,
+ "wangid":[0, 1, 1, 1, 0, 4, 4, 4]
+ },
+ {
+ "tileid":16,
+ "wangid":[0, 2, 0, 1, 1, 1, 1, 1]
+ },
+ {
+ "tileid":17,
+ "wangid":[2, 2, 0, 1, 1, 1, 0, 2]
+ },
+ {
+ "tileid":18,
+ "wangid":[0, 1, 1, 1, 1, 1, 0, 2]
+ },
+ {
+ "tileid":19,
+ "wangid":[2, 2, 0, 1, 0, 2, 2, 2]
+ },
+ {
+ "tileid":20,
+ "wangid":[2, 2, 2, 2, 0, 1, 0, 2]
+ },
+ {
+ "tileid":21,
+ "wangid":[0, 4, 0, 1, 1, 1, 1, 1]
+ },
+ {
+ "tileid":22,
+ "wangid":[4, 4, 0, 1, 1, 1, 0, 4]
+ },
+ {
+ "tileid":23,
+ "wangid":[0, 1, 1, 1, 1, 1, 0, 4]
+ },
+ {
+ "tileid":24,
+ "wangid":[1, 1, 0, 3, 0, 1, 1, 1]
+ },
+ {
+ "tileid":25,
+ "wangid":[1, 1, 0, 3, 3, 3, 0, 1]
+ },
+ {
+ "tileid":26,
+ "wangid":[1, 1, 1, 1, 0, 3, 0, 1]
+ },
+ {
+ "tileid":27,
+ "wangid":[0, 1, 0, 2, 2, 2, 2, 2]
+ },
+ {
+ "tileid":28,
+ "wangid":[0, 2, 2, 2, 2, 2, 0, 1]
+ },
+ {
+ "tileid":29,
+ "wangid":[1, 1, 1, 1, 1, 1, 1, 1]
+ },
+ {
+ "tileid":32,
+ "wangid":[0, 3, 3, 3, 0, 1, 1, 1]
+ },
+ {
+ "tileid":33,
+ "wangid":[3, 3, 3, 3, 3, 3, 3, 3]
+ },
+ {
+ "tileid":34,
+ "wangid":[0, 1, 1, 1, 0, 3, 3, 3]
+ },
+ {
+ "tileid":35,
+ "wangid":[3, 3, 0, 1, 0, 3, 3, 3]
+ },
+ {
+ "tileid":36,
+ "wangid":[3, 3, 3, 3, 0, 1, 0, 3]
+ },
+ {
+ "tileid":40,
+ "wangid":[0, 3, 0, 1, 1, 1, 1, 1]
+ },
+ {
+ "tileid":41,
+ "wangid":[3, 3, 0, 1, 1, 1, 0, 3]
+ },
+ {
+ "tileid":42,
+ "wangid":[0, 1, 1, 1, 1, 1, 0, 3]
+ },
+ {
+ "tileid":43,
+ "wangid":[0, 1, 0, 3, 3, 3, 3, 3]
+ },
+ {
+ "tileid":44,
+ "wangid":[0, 3, 3, 3, 3, 3, 0, 1]
+ }]
+ },
+ {
+ "colors":[
+ {
+ "color":"#ff0000",
+ "name":"Sand",
+ "probability":1,
+ "tile":-1
+ },
+ {
+ "color":"#00ff00",
+ "name":"Cobblestone",
+ "probability":1,
+ "tile":-1
+ },
+ {
+ "color":"#0000ff",
+ "name":"Pavement",
+ "probability":1,
+ "tile":-1
+ },
+ {
+ "color":"#ff7700",
+ "name":"Dirt",
+ "probability":1,
+ "properties":[
+ {
+ "name":"test",
+ "type":"string",
+ "value":"this is a test"
+ }],
+ "tile":-1
+ }],
+ "name":"Copy of Terrains",
"tile":-1,
"type":"mixed",
"wangtiles":[
diff --git a/tests/test_data/tilesets/terrain/tileset.tsx b/tests/test_data/tilesets/terrain/tileset.tsx
index 2a57297..a22e1c5 100644
--- a/tests/test_data/tilesets/terrain/tileset.tsx
+++ b/tests/test_data/tilesets/terrain/tileset.tsx
@@ -1,12 +1,69 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/test_layer.py b/tests/test_layer.py
index bce74b3..727fca4 100644
--- a/tests/test_layer.py
+++ b/tests/test_layer.py
@@ -21,12 +21,14 @@ ALL_LAYER_TESTS = [
LAYER_TESTS / "b64",
LAYER_TESTS / "b64_gzip",
LAYER_TESTS / "b64_zlib",
- # LAYER_TESTS / "b64_zstd",
LAYER_TESTS / "no_layers",
LAYER_TESTS / "infinite_map",
LAYER_TESTS / "infinite_map_b64",
]
+ZSTD_LAYER_TEST = LAYER_TESTS / "b64_zstd"
+UNKNOWN_LAYER_TYPE_TEST = LAYER_TESTS / "unknown_type"
+
def fix_object(my_object):
my_object.coordinates = OrderedPair(
@@ -96,3 +98,41 @@ def test_layer_integration(parser_type, layer_test):
print(layer.size)
assert layers == expected.EXPECTED
+
+@pytest.mark.parametrize("parser_type", ["json", "tmx"])
+def test_zstd_not_installed(parser_type):
+ if parser_type == "json":
+ raw_layers_path = ZSTD_LAYER_TEST / "map.json"
+ with open(raw_layers_path) as raw_layers_file:
+ raw_layers = json.load(raw_layers_file)["layers"]
+ with pytest.raises(ValueError):
+ layers = [parse_json(raw_layer) for raw_layer in raw_layers]
+ elif parser_type == "tmx":
+ raw_layers_path = ZSTD_LAYER_TEST / "map.tmx"
+ with open(raw_layers_path) as raw_layers_file:
+ with pytest.raises(ValueError):
+ raw_layer = etree.parse(raw_layers_file).getroot()
+ layers = []
+ for layer in raw_layer.findall("./layer"):
+ layers.append(parse_tmx(layer))
+
+ 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))
+
+def test_unknown_layer_type():
+ # We only test JSON here because due to the nature of the TMX format
+ # there does not exist a scenario where pytiled_parser can attempt to
+ # parse an unknown layer type. In JSON a RuntimeError error will be
+ # raised if an unknown type is provided. In TMX the layer will just
+ # be ignored.
+ raw_layers_path = UNKNOWN_LAYER_TYPE_TEST / "map.json"
+ with open(raw_layers_path) as raw_layers_file:
+ raw_layers = json.load(raw_layers_file)["layers"]
+ with pytest.raises(RuntimeError):
+ layers = [parse_json(raw_layer) for raw_layer in raw_layers]