Skip to content

Commit 4de0876

Browse files
committed
Bunch of test coverage improvements
1 parent 96b104c commit 4de0876

File tree

13 files changed

+536
-22
lines changed

13 files changed

+536
-22
lines changed

pytiled_parser/parsers/json/layer.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,17 @@
2424
from pytiled_parser.parsers.json.tiled_object import parse as parse_object
2525
from pytiled_parser.util import parse_color
2626

27+
# This optional zstd include is basically impossible to make a sensible test
28+
# for both ways. It's been tested manually, is unlikely to change or be effected
29+
# so we're just excluding it from test coverage. We are only testing cases where
30+
# zstd is not installed in the test suite, as that is the scenario for 99%
31+
# of use cases most likely.
32+
#
33+
# This does mean that the test suite will fail if zstd is installed, so for
34+
# development purposes it should only be installed when specifically manually
35+
# testing for zstd things.
2736
zstd_spec = importlib.util.find_spec("zstd")
28-
if zstd_spec:
37+
if zstd_spec: # pragma: no cover
2938
import zstd
3039
else:
3140
zstd = None
@@ -127,7 +136,8 @@ def _decode_tile_layer_data(
127136
"zstd compression support is not installed."
128137
"To install use 'pip install pytiled-parser[zstd]'"
129138
)
130-
elif compression == "zstd":
139+
# See above note at top of module about zstd tests
140+
elif compression == "zstd": # pragma: no cover
131141
unzipped_data = zstd.decompress(unencoded_data)
132142
else:
133143
unzipped_data = unencoded_data

pytiled_parser/parsers/json/tiled_object.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,11 @@ def _get_parser(raw_object: RawObject) -> Callable[[RawObject], TiledObject]:
258258
if raw_object.get("point"):
259259
return _parse_point
260260

261-
if raw_object.get("gid"):
261+
# This is excluded from tests because the coverage is broken. I promise
262+
# there are tests for Tile objects, but for some reason the coverage
263+
# isn't picking up this if statement(though it does pickup the _parse_tile)
264+
# function so who knows
265+
if raw_object.get("gid"): # pragma: no cover
262266
# Only tile objects have the `gid` key
263267
return _parse_tile
264268

@@ -308,8 +312,7 @@ def parse(
308312
for key in loaded_template:
309313
if key != "id":
310314
raw_object[key] = loaded_template[key] # type: ignore
311-
elif isinstance(template, etree.Element):
312-
# load the XML object into the JSON object
315+
else:
313316
raise NotImplementedError(
314317
"Loading TMX object templates inside a JSON map is currently not supported, "
315318
"but will be in a future release."

pytiled_parser/parsers/tmx/layer.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,17 @@
2121
from pytiled_parser.parsers.tmx.tiled_object import parse as parse_object
2222
from pytiled_parser.util import parse_color
2323

24+
# This optional zstd include is basically impossible to make a sensible test
25+
# for both ways. It's been tested manually, is unlikely to change or be effected
26+
# so we're just excluding it from test coverage. We are only testing cases where
27+
# zstd is not installed in the test suite, as that is the scenario for 99%
28+
# of use cases most likely.
29+
#
30+
# This does mean that the test suite will fail if zstd is installed, so for
31+
# development purposes it should only be installed when specifically manually
32+
# testing for zstd things.
2433
zstd_spec = importlib.util.find_spec("zstd")
25-
if zstd_spec:
34+
if zstd_spec: # pragma: no cover
2635
import zstd
2736
else:
2837
zstd = None
@@ -77,7 +86,8 @@ def _decode_tile_layer_data(
7786
"zstd compression support is not installed."
7887
"To install use 'pip install pytiled-parser[zstd]'"
7988
)
80-
elif compression == "zstd":
89+
# See above note at top of module about zstd tests
90+
elif compression == "zstd": # pragma: no cover
8191
unzipped_data = zstd.decompress(unencoded_data)
8292
else:
8393
unzipped_data = unencoded_data
@@ -356,5 +366,3 @@ def parse(
356366
return _parse_image_layer(raw_layer)
357367
elif type_ == "layer":
358368
return _parse_tile_layer(raw_layer)
359-
360-
raise RuntimeError(f"An invalid layer type of {type_} was supplied")

pytiled_parser/util.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def load_object_template(file_path: Path) -> Any:
6060
tileset_path = Path(file_path.parent / tileset_element.attrib["source"])
6161
new_tileset = load_object_tileset(tileset_path)
6262
new_tileset_path = tileset_path.parent
63-
elif template_format == "json":
63+
else:
6464
with open(file_path) as template_file:
6565
template = json.load(template_file)
6666
if "tileset" in template:
@@ -79,7 +79,7 @@ def load_object_tileset(file_path: Path) -> Any:
7979
with open(file_path) as tileset_file:
8080
if tileset_format == "tmx":
8181
new_tileset = etree.parse(tileset_file).getroot()
82-
elif tileset_format == "json":
82+
else:
8383
new_tileset = json.load(tileset_file)
8484

8585
return new_tileset

tests/test_data/layer_tests/b64_zstd/map.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
"nextobjectid":3,
6464
"orientation":"orthogonal",
6565
"renderorder":"right-down",
66-
"tiledversion":"1.6.0",
66+
"tiledversion":"1.8.5",
6767
"tileheight":32,
6868
"tilesets":[
6969
{
@@ -72,6 +72,6 @@
7272
}],
7373
"tilewidth":32,
7474
"type":"map",
75-
"version":"1.6",
75+
"version":"1.8",
7676
"width":8
7777
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<map version="1.8" tiledversion="1.8.5" orientation="orthogonal" renderorder="right-down" width="8" height="6" tilewidth="32" tileheight="32" infinite="0" nextlayerid="5" nextobjectid="3">
3+
<tileset firstgid="1" source="../all_layer_types/tileset.json"/>
4+
<layer id="1" name="Tile Layer 1" width="8" height="6">
5+
<data encoding="base64" compression="zstd">
6+
KLUv/SDAZQIAAgwSDBCw3gwwDFcLT4p0Cv/c884531zzzDG/3PLKKZ9c8sghf9zxxhlfXPHEET/c8MIJH1zwwAH/7r079+3as2O/br069enSo0MBAA==
7+
</data>
8+
</layer>
9+
<group id="4" name="Group 1">
10+
<objectgroup id="2" name="Object Layer 1">
11+
<object id="1" x="46.3333" y="39" width="69.3333" height="52.6667"/>
12+
</objectgroup>
13+
</group>
14+
<imagelayer id="3" name="Image Layer 1">
15+
<image source="../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/images/tile_04.png" trans="000000"/>
16+
</imagelayer>
17+
</map>

tests/test_data/layer_tests/b64_zstd/tileset.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
"name":"tile_set_image",
77
"spacing":1,
88
"tilecount":48,
9-
"tiledversion":"1.6.0",
9+
"tiledversion":"1.8.5",
1010
"tileheight":32,
1111
"tilewidth":32,
1212
"type":"tileset",
13-
"version":"1.6"
13+
"version":"1.8"
1414
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
{ "compressionlevel":-1,
2+
"height":6,
3+
"infinite":false,
4+
"layers":[
5+
{
6+
"compression":"",
7+
"data":"AQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAA",
8+
"encoding":"base64",
9+
"height":6,
10+
"id":1,
11+
"name":"Tile Layer 1",
12+
"opacity":1,
13+
"type":"faketype",
14+
"visible":true,
15+
"width":8,
16+
"x":0,
17+
"y":0
18+
},
19+
{
20+
"id":4,
21+
"layers":[
22+
{
23+
"draworder":"topdown",
24+
"id":2,
25+
"name":"Object Layer 1",
26+
"objects":[
27+
{
28+
"height":52.6666666666667,
29+
"id":1,
30+
"name":"",
31+
"rotation":0,
32+
"type":"",
33+
"visible":true,
34+
"width":69.3333333333333,
35+
"x":46.3333333333333,
36+
"y":39
37+
}],
38+
"opacity":1,
39+
"type":"objectgroup",
40+
"visible":true,
41+
"x":0,
42+
"y":0
43+
}],
44+
"name":"Group 1",
45+
"opacity":1,
46+
"type":"group",
47+
"visible":true,
48+
"x":0,
49+
"y":0
50+
},
51+
{
52+
"id":3,
53+
"image":"..\/..\/images\/tile_04.png",
54+
"name":"Image Layer 1",
55+
"opacity":1,
56+
"transparentcolor":"#000000",
57+
"type":"imagelayer",
58+
"visible":true,
59+
"x":0,
60+
"y":0
61+
}],
62+
"nextlayerid":5,
63+
"nextobjectid":3,
64+
"orientation":"orthogonal",
65+
"renderorder":"right-down",
66+
"tiledversion":"1.6.0",
67+
"tileheight":32,
68+
"tilesets":[
69+
{
70+
"firstgid":1,
71+
"source":"..\/all_layer_types\/tileset.json"
72+
}],
73+
"tilewidth":32,
74+
"type":"map",
75+
"version":"1.6",
76+
"width":8
77+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<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">
3+
<tileset firstgid="1" source="../all_layer_types/tileset.tsx"/>
4+
<layer id="1" name="Tile Layer 1" width="8" height="6">
5+
<data encoding="base64">
6+
AQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAA
7+
</data>
8+
</layer>
9+
<group id="4" name="Group 1">
10+
<objectgroup id="2" name="Object Layer 1">
11+
<object id="1" x="46.3333" y="39" width="69.3333" height="52.6667"/>
12+
</objectgroup>
13+
</group>
14+
<imagelayer id="3" name="Image Layer 1">
15+
<image source="../../images/tile_04.png" trans="000000" width="32" height="32"/>
16+
</imagelayer>
17+
</map>

tests/test_data/tilesets/terrain/expected.py

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,18 @@
1111
image_height=199,
1212
image_width=265,
1313
tile_count=48,
14-
tiled_version="1.6.0",
14+
tiled_version="1.8.5",
1515
tile_height=32,
1616
tile_width=32,
1717
firstgid=1,
18-
version="1.6",
18+
version="1.8",
1919
type="tileset",
2020
wang_sets=[
2121
wang_set.WangSet(
2222
name="Terrains",
2323
tile=-1,
2424
wang_type="mixed",
25+
properties={"test": "this is a test"},
2526
wang_colors=[
2627
wang_set.WangColor(
2728
name="Sand",
@@ -46,6 +47,81 @@
4647
probability=1,
4748
tile=-1,
4849
color=common_types.Color(255, 119, 0, 255),
50+
properties={"test": "this is a test"},
51+
),
52+
],
53+
wang_tiles={
54+
0: wang_set.WangTile(tile_id=0, wang_id=[1, 1, 0, 2, 0, 1, 1, 1]),
55+
1: wang_set.WangTile(tile_id=1, wang_id=[1, 1, 0, 2, 2, 2, 0, 1]),
56+
2: wang_set.WangTile(tile_id=2, wang_id=[1, 1, 1, 1, 0, 2, 0, 1]),
57+
3: wang_set.WangTile(tile_id=3, wang_id=[4, 4, 0, 1, 0, 4, 4, 4]),
58+
4: wang_set.WangTile(tile_id=4, wang_id=[4, 4, 4, 4, 0, 1, 0, 4]),
59+
5: wang_set.WangTile(tile_id=5, wang_id=[1, 1, 0, 4, 0, 1, 1, 1]),
60+
6: wang_set.WangTile(tile_id=6, wang_id=[1, 1, 0, 4, 4, 4, 0, 1]),
61+
7: wang_set.WangTile(tile_id=7, wang_id=[1, 1, 1, 1, 0, 4, 0, 1]),
62+
8: wang_set.WangTile(tile_id=8, wang_id=[0, 2, 2, 2, 0, 1, 1, 1]),
63+
9: wang_set.WangTile(tile_id=9, wang_id=[2, 2, 2, 2, 2, 2, 2, 2]),
64+
10: wang_set.WangTile(tile_id=10, wang_id=[0, 1, 1, 1, 0, 2, 2, 2]),
65+
11: wang_set.WangTile(tile_id=11, wang_id=[0, 1, 0, 4, 4, 4, 4, 4]),
66+
12: wang_set.WangTile(tile_id=12, wang_id=[0, 4, 4, 4, 4, 4, 0, 1]),
67+
13: wang_set.WangTile(tile_id=13, wang_id=[0, 4, 4, 4, 0, 1, 1, 1]),
68+
14: wang_set.WangTile(tile_id=14, wang_id=[4, 4, 4, 4, 4, 4, 4, 4]),
69+
15: wang_set.WangTile(tile_id=15, wang_id=[0, 1, 1, 1, 0, 4, 4, 4]),
70+
16: wang_set.WangTile(tile_id=16, wang_id=[0, 2, 0, 1, 1, 1, 1, 1]),
71+
17: wang_set.WangTile(tile_id=17, wang_id=[2, 2, 0, 1, 1, 1, 0, 2]),
72+
18: wang_set.WangTile(tile_id=18, wang_id=[0, 1, 1, 1, 1, 1, 0, 2]),
73+
19: wang_set.WangTile(tile_id=19, wang_id=[2, 2, 0, 1, 0, 2, 2, 2]),
74+
20: wang_set.WangTile(tile_id=20, wang_id=[2, 2, 2, 2, 0, 1, 0, 2]),
75+
21: wang_set.WangTile(tile_id=21, wang_id=[0, 4, 0, 1, 1, 1, 1, 1]),
76+
22: wang_set.WangTile(tile_id=22, wang_id=[4, 4, 0, 1, 1, 1, 0, 4]),
77+
23: wang_set.WangTile(tile_id=23, wang_id=[0, 1, 1, 1, 1, 1, 0, 4]),
78+
24: wang_set.WangTile(tile_id=24, wang_id=[1, 1, 0, 3, 0, 1, 1, 1]),
79+
25: wang_set.WangTile(tile_id=25, wang_id=[1, 1, 0, 3, 3, 3, 0, 1]),
80+
26: wang_set.WangTile(tile_id=26, wang_id=[1, 1, 1, 1, 0, 3, 0, 1]),
81+
27: wang_set.WangTile(tile_id=27, wang_id=[0, 1, 0, 2, 2, 2, 2, 2]),
82+
28: wang_set.WangTile(tile_id=28, wang_id=[0, 2, 2, 2, 2, 2, 0, 1]),
83+
29: wang_set.WangTile(tile_id=29, wang_id=[1, 1, 1, 1, 1, 1, 1, 1]),
84+
32: wang_set.WangTile(tile_id=32, wang_id=[0, 3, 3, 3, 0, 1, 1, 1]),
85+
33: wang_set.WangTile(tile_id=33, wang_id=[3, 3, 3, 3, 3, 3, 3, 3]),
86+
34: wang_set.WangTile(tile_id=34, wang_id=[0, 1, 1, 1, 0, 3, 3, 3]),
87+
35: wang_set.WangTile(tile_id=35, wang_id=[3, 3, 0, 1, 0, 3, 3, 3]),
88+
36: wang_set.WangTile(tile_id=36, wang_id=[3, 3, 3, 3, 0, 1, 0, 3]),
89+
40: wang_set.WangTile(tile_id=40, wang_id=[0, 3, 0, 1, 1, 1, 1, 1]),
90+
41: wang_set.WangTile(tile_id=41, wang_id=[3, 3, 0, 1, 1, 1, 0, 3]),
91+
42: wang_set.WangTile(tile_id=42, wang_id=[0, 1, 1, 1, 1, 1, 0, 3]),
92+
43: wang_set.WangTile(tile_id=43, wang_id=[0, 1, 0, 3, 3, 3, 3, 3]),
93+
44: wang_set.WangTile(tile_id=44, wang_id=[0, 3, 3, 3, 3, 3, 0, 1]),
94+
},
95+
),
96+
wang_set.WangSet(
97+
name="Copy of Terrains",
98+
tile=-1,
99+
wang_type="mixed",
100+
wang_colors=[
101+
wang_set.WangColor(
102+
name="Sand",
103+
probability=1,
104+
tile=-1,
105+
color=common_types.Color(255, 0, 0, 255),
106+
),
107+
wang_set.WangColor(
108+
name="Cobblestone",
109+
probability=1,
110+
tile=-1,
111+
color=common_types.Color(0, 255, 0, 255),
112+
),
113+
wang_set.WangColor(
114+
name="Pavement",
115+
probability=1,
116+
tile=-1,
117+
color=common_types.Color(0, 0, 255, 255),
118+
),
119+
wang_set.WangColor(
120+
name="Dirt",
121+
probability=1,
122+
tile=-1,
123+
color=common_types.Color(255, 119, 0, 255),
124+
properties={"test": "this is a test"},
49125
),
50126
],
51127
wang_tiles={

0 commit comments

Comments
 (0)