Skip to content

Commit 0213a84

Browse files
committed
More test coverage improvements
1 parent 4de0876 commit 0213a84

File tree

13 files changed

+224
-23
lines changed

13 files changed

+224
-23
lines changed

pytiled_parser/parsers/json/tiled_map.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -75,32 +75,33 @@ def parse(file: Path) -> TiledMap:
7575
tileset_path = Path(parent_dir / raw_tileset["source"])
7676
parser = check_format(tileset_path)
7777
with open(tileset_path) as raw_tileset_file:
78-
if parser == "json":
79-
tilesets[raw_tileset["firstgid"]] = parse_json_tileset(
80-
json.load(raw_tileset_file),
81-
raw_tileset["firstgid"],
82-
external_path=tileset_path.parent,
83-
)
84-
elif parser == "tmx":
78+
if parser == "tmx":
8579
raw_tileset_external = etree.parse(raw_tileset_file).getroot()
8680
tilesets[raw_tileset["firstgid"]] = parse_tmx_tileset(
8781
raw_tileset_external,
8882
raw_tileset["firstgid"],
8983
external_path=tileset_path.parent,
9084
)
9185
else:
92-
raise UnknownFormat(
93-
"Unkown Tileset format, please use either the TSX or JSON format."
94-
)
95-
86+
try:
87+
tilesets[raw_tileset["firstgid"]] = parse_json_tileset(
88+
json.load(raw_tileset_file),
89+
raw_tileset["firstgid"],
90+
external_path=tileset_path.parent,
91+
)
92+
except ValueError:
93+
raise UnknownFormat(
94+
"Unknown Tileset Format, please use either the TSX or JSON format. "
95+
"This message could also mean your tileset file is invalid or corrupted."
96+
)
9697
else:
9798
# Is an embedded Tileset
9899
raw_tileset = cast(RawTileSet, raw_tileset)
99100
tilesets[raw_tileset["firstgid"]] = parse_json_tileset(
100101
raw_tileset, raw_tileset["firstgid"]
101102
)
102103

103-
if isinstance(raw_tiled_map["version"], float):
104+
if isinstance(raw_tiled_map["version"], float): # pragma: no cover
104105
version = str(raw_tiled_map["version"])
105106
else:
106107
version = raw_tiled_map["version"]

pytiled_parser/parsers/json/tileset.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -178,10 +178,14 @@ def _parse_tile(raw_tile: RawTile, external_path: Optional[Path] = None) -> Tile
178178
else:
179179
tile.image = Path(raw_tile["image"])
180180

181-
if raw_tile.get("imagewidth") is not None:
181+
# These are ignored from coverage because there does not exist a scenario where
182+
# image is set, but these aren't, so the branches will never fully be hit.
183+
# However, leaving these checks in place is nice to prevent fatal errors on
184+
# a manually edited map that has an "incorrect" but not "unusable" structure
185+
if raw_tile.get("imagewidth") is not None: # pragma: no cover
182186
tile.image_width = raw_tile["imagewidth"]
183187

184-
if raw_tile.get("imageheight") is not None:
188+
if raw_tile.get("imageheight") is not None: # pragma: no cover
185189
tile.image_height = raw_tile["imageheight"]
186190

187191
if raw_tile.get("type") is not None:
@@ -218,7 +222,11 @@ def parse(
218222
)
219223

220224
if raw_tileset.get("version") is not None:
221-
if isinstance(raw_tileset["version"], float):
225+
# This is here to support old versions of Tiled Maps. It's a pain
226+
# to keep old versions in the test data and not update them with the
227+
# rest so I'm excluding this from coverage. In reality it's probably
228+
# not needed. Tiled hasn't been using floats for the version for a long time
229+
if isinstance(raw_tileset["version"], float): # pragma: no cover
222230
tileset.version = str(raw_tileset["version"])
223231
else:
224232
tileset.version = raw_tileset["version"]
@@ -234,10 +242,12 @@ def parse(
234242
else:
235243
tileset.image = Path(raw_tileset["image"])
236244

237-
if raw_tileset.get("imagewidth") is not None:
245+
# See above note about imagewidth and imageheight on parse_tile function
246+
# for an explanation on why these are ignored
247+
if raw_tileset.get("imagewidth") is not None: # pragma: no cover
238248
tileset.image_width = raw_tileset["imagewidth"]
239249

240-
if raw_tileset.get("imageheight") is not None:
250+
if raw_tileset.get("imageheight") is not None: # pragma: no cover
241251
tileset.image_height = raw_tileset["imageheight"]
242252

243253
if raw_tileset.get("objectalignment") is not None:
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from pathlib import Path
2+
3+
from pytiled_parser import common_types, tiled_map, tileset
4+
5+
EXPECTED = tiled_map.TiledMap(
6+
infinite=False,
7+
layers=[],
8+
map_size=common_types.Size(8, 6),
9+
next_layer_id=2,
10+
next_object_id=1,
11+
orientation="orthogonal",
12+
render_order="right-down",
13+
tiled_version="1.6.0",
14+
tile_size=common_types.Size(32, 32),
15+
version="1.6",
16+
background_color=common_types.Color(255, 0, 4, 255),
17+
tilesets={
18+
1: tileset.Tileset(
19+
columns=8,
20+
image=Path(Path(__file__).parent / "../../images/tmw_desert_spacing.png")
21+
.absolute()
22+
.resolve(),
23+
image_width=265,
24+
image_height=199,
25+
firstgid=1,
26+
margin=1,
27+
spacing=1,
28+
name="tile_set_image",
29+
tile_count=48,
30+
tiled_version="1.6.0",
31+
tile_height=32,
32+
tile_width=32,
33+
version="1.6",
34+
type="tileset",
35+
)
36+
},
37+
properties={
38+
"bool property - true": True,
39+
"color property": common_types.Color(73, 252, 255, 255),
40+
"file property": Path("../../../../../../var/log/syslog"),
41+
"float property": 1.23456789,
42+
"int property": 13,
43+
"string property": "Hello, World!!",
44+
},
45+
)
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
{ "backgroundcolor":"#ff0004",
2+
"compressionlevel":0,
3+
"height":6,
4+
"infinite":false,
5+
"layers":[],
6+
"nextlayerid":2,
7+
"nextobjectid":1,
8+
"orientation":"orthogonal",
9+
"properties":[
10+
{
11+
"name":"bool property - true",
12+
"type":"bool",
13+
"value":true
14+
},
15+
{
16+
"name":"color property",
17+
"type":"color",
18+
"value":"#ff49fcff"
19+
},
20+
{
21+
"name":"file property",
22+
"type":"file",
23+
"value":"..\/..\/..\/..\/..\/..\/var\/log\/syslog"
24+
},
25+
{
26+
"name":"float property",
27+
"type":"float",
28+
"value":1.23456789
29+
},
30+
{
31+
"name":"int property",
32+
"type":"int",
33+
"value":13
34+
},
35+
{
36+
"name":"string property",
37+
"type":"string",
38+
"value":"Hello, World!!"
39+
}],
40+
"renderorder":"right-down",
41+
"tiledversion":"1.6.0",
42+
"tileheight":32,
43+
"tilesets":[
44+
{
45+
"firstgid":1,
46+
"source":"tileset.tsx"
47+
}],
48+
"tilewidth":32,
49+
"type":"map",
50+
"version":"1.6",
51+
"width":8
52+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<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" backgroundcolor="#ff0004" nextlayerid="2" nextobjectid="1">
3+
<properties>
4+
<property name="bool property - true" type="bool" value="true"/>
5+
<property name="color property" type="color" value="#ff49fcff"/>
6+
<property name="file property" type="file" value="../../../../../../var/log/syslog"/>
7+
<property name="float property" type="float" value="1.23456789"/>
8+
<property name="int property" type="int" value="13"/>
9+
<property name="string property" value="Hello, World!!"/>
10+
</properties>
11+
<tileset firstgid="1" source="tileset.json"/>
12+
</map>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{ "columns":8,
2+
"image":"..\/..\/images\/tmw_desert_spacing.png",
3+
"imageheight":199,
4+
"imagewidth":265,
5+
"margin":1,
6+
"name":"tile_set_image",
7+
"spacing":1,
8+
"tilecount":48,
9+
"tiledversion":"1.6.0",
10+
"tileheight":32,
11+
"tilewidth":32,
12+
"type":"tileset",
13+
"version":"1.6"
14+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<tileset version="1.6" tiledversion="1.6.0" name="tile_set_image" tilewidth="32" tileheight="32" spacing="1" margin="1" tilecount="48" columns="8">
3+
<image source="../../images/tmw_desert_spacing.png" width="265" height="199"/>
4+
</tileset>
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
{ "backgroundcolor":"#ff0004",
2+
"compressionlevel":0,
3+
"height":6,
4+
"infinite":false,
5+
"layers":[],
6+
"nextlayerid":2,
7+
"nextobjectid":1,
8+
"orientation":"orthogonal",
9+
"properties":[
10+
{
11+
"name":"bool property - true",
12+
"type":"bool",
13+
"value":true
14+
},
15+
{
16+
"name":"color property",
17+
"type":"color",
18+
"value":"#ff49fcff"
19+
},
20+
{
21+
"name":"file property",
22+
"type":"file",
23+
"value":"..\/..\/..\/..\/..\/..\/var\/log\/syslog"
24+
},
25+
{
26+
"name":"float property",
27+
"type":"float",
28+
"value":1.23456789
29+
},
30+
{
31+
"name":"int property",
32+
"type":"int",
33+
"value":13
34+
},
35+
{
36+
"name":"string property",
37+
"type":"string",
38+
"value":"Hello, World!!"
39+
}],
40+
"renderorder":"right-down",
41+
"tiledversion":"1.6.0",
42+
"tileheight":32,
43+
"tilesets":[
44+
{
45+
"firstgid":1,
46+
"source":"tileset.garbage"
47+
}],
48+
"tilewidth":32,
49+
"type":"map",
50+
"version":"1.6",
51+
"width":8
52+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
|||thisisgarbage|||||itwillbreak|||butthatswhatwewant||

tests/test_data/tilesets/image/expected.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@
1212
spacing=1,
1313
name="tile_set_image",
1414
tile_count=48,
15-
tiled_version="1.6.0",
15+
tiled_version="1.8.5",
1616
tile_height=32,
1717
tile_width=32,
18-
version="1.6",
18+
version="1.8",
1919
type="tileset",
20+
alignment="topleft"
2021
)

0 commit comments

Comments
 (0)