11# Encoding: UTF-8
22
33# Run tests with "py.test" in the project root dir
4- import os , sys
4+ import os
5+ import sys
56import pytest
67import datetime
8+ import json
79
8- sys .path .insert (0 , os .path .normpath (os .path .join (os .path .dirname (os .path .abspath (__file__ )),"../" )))
10+ root_dir = os .path .join (os .path .dirname (os .path .abspath (__file__ )), "../" )
11+ sys .path .insert (0 , os .path .normpath (root_dir ))
912
1013import sc2reader
11- from sc2reader .exceptions import ParseError
1214from sc2reader .plugins .replay import APMTracker , SelectionTracker , toJSON
1315
14- sc2reader .log_utils .log_to_console ('INFO' )
16+ sc2reader .log_utils .log_to_console ("INFO" )
17+
1518
1619def test_standard_1v1 ():
1720 replay = sc2reader .load_replay ("test_replays/1.2.2.17811/1.SC2Replay" )
1821
19- assert replay .expansion == ' WoL'
22+ assert replay .expansion == " WoL"
2023 assert str (replay .length ) == "32.47"
24+ assert str (replay .game_length ) == "32.47"
25+ assert str (replay .real_length ) == "23.25"
2126 assert replay .map_name == "Lost Temple"
2227 assert replay .build == 17811
2328 assert replay .release_string == "1.2.2.17811"
2429 assert replay .speed == "Faster"
2530 assert replay .type == "1v1"
2631
27- assert replay .is_ladder == True
28- assert replay .is_private == False
32+ assert replay .is_ladder is True
33+ assert replay .is_private is False
2934
3035 assert len (replay .players ) == 2
3136 assert replay .person [1 ].name == "Emperor"
@@ -34,16 +39,16 @@ def test_standard_1v1():
3439 assert emperor .team .number == 1
3540 assert emperor .pick_race == "Protoss"
3641 assert emperor .play_race == "Protoss"
37- assert emperor .recorder == False
42+ assert emperor .recorder is False
3843
3944 boom = replay .person [2 ]
4045 assert boom .team .number == 2
4146 assert boom .pick_race == "Terran"
4247 assert boom .play_race == "Terran"
43- assert boom .recorder == True
48+ assert boom .recorder is True
4449
4550 for player in replay .players :
46- assert player .is_human == True
51+ assert player .is_human is True
4752
4853 # Because it is a 1v1 and the recording player quit, we should know the winner.
4954 assert emperor .result == "Win"
@@ -79,70 +84,79 @@ def test_standard_1v1():
7984 assert replay .messages [11 ].player .name == "Boom"
8085
8186 for msg in replay .messages :
82- assert msg .to_all == True
87+ assert msg .to_all is True
88+
8389
8490def test_private_category ():
8591 replay = sc2reader .load_replay ("test_replays/1.2.2.17811/2.SC2Replay" )
86- assert replay .expansion == ' WoL'
92+ assert replay .expansion == " WoL"
8793 assert replay .is_private == True
8894 assert replay .is_ladder == False
8995
9096def test_3v3 ():
9197 replay = sc2reader .load_replay ("test_replays/1.2.2.17811/3.SC2Replay" )
9298 assert replay .type == "3v3"
9399
94- # Because it' s a 3v3 and all of the members of Team 2 quit, we should know the winner.
100+ # Because it" s a 3v3 and all of the members of Team 2 quit, we should know the winner.
95101 assert replay .team [1 ].result == "Win"
96102 assert replay .team [2 ].result == "Loss"
97103
104+
98105def test_4v4 ():
99106 replay = sc2reader .load_replay ("test_replays/1.2.0.17326/9.SC2Replay" )
100107 assert replay .type == "4v4"
101108
109+
102110def test_2v2 ():
103111 replay = sc2reader .load_replay ("test_replays/1.2.2.17811/7.SC2Replay" )
104112 assert replay .type == "2v2"
105113
114+
106115def test_ffa ():
107116 replay = sc2reader .load_replay ("test_replays/1.2.2.17811/8.SC2Replay" )
108117 assert replay .type == "FFA"
109118
110- assert replay .winner .players [0 ].name == 'Boom'
119+ assert replay .winner .players [0 ].name == "Boom"
120+
111121
112122def test_unknown_winner ():
113123 replay = sc2reader .load_replay ("test_replays/1.2.2.17811/10.SC2Replay" )
114124
115- # Recording player (Boom) left second in a 4v4, so the winner shouldn't be known
116- assert replay .winner == None
125+ # Recording player (Boom) left second in a 4v4, so the winner shouldn"t be known
126+ assert replay .winner is None
127+
117128
118129def test_random_player ():
119130 replay = sc2reader .load_replay ("test_replays/1.2.2.17811/3.SC2Replay" )
120131
121- gogeta = next (player for player in replay .players if player .name == ' Gogeta' )
132+ gogeta = next (player for player in replay .players if player .name == " Gogeta" )
122133 assert gogeta .pick_race == "Random"
123134 assert gogeta .play_race == "Terran"
124135
136+
125137def test_random_player2 ():
126138 replay = sc2reader .load_replay ("test_replays/1.2.2.17811/6.SC2Replay" )
127- permafrost = next (player for player in replay .players if player .name == ' Permafrost' )
139+ permafrost = next (player for player in replay .players if player .name == " Permafrost" )
128140 assert permafrost .pick_race == "Random"
129141 assert permafrost .play_race == "Protoss"
130142
143+
131144def test_us_realm ():
132145 replay = sc2reader .load_replay ("test_replays/1.2.2.17811/5.SC2Replay" )
133- shadesofgray = next (player for player in replay .players if player .name == ' ShadesofGray' )
134- reddawn = next (player for player in replay .players if player .name == ' reddawn' )
146+ shadesofgray = next (player for player in replay .players if player .name == " ShadesofGray" )
147+ reddawn = next (player for player in replay .players if player .name == " reddawn" )
135148 assert shadesofgray .url == "http://us.battle.net/sc2/en/profile/2358439/1/ShadesofGray/"
136149 assert reddawn .url == "http://us.battle.net/sc2/en/profile/2198663/1/reddawn/"
137150
151+
138152# TODO: Current problem.. both players are set as the recording players
139153# Waiting for response https://github.com/arkx/mpyq/issues/closed#issue/7
140154def test_kr_realm_and_tampered_messages ():
141155 replay = sc2reader .load_replay ("test_replays/1.1.3.16939/11.SC2Replay" )
142- assert replay .expansion == ' WoL'
156+ assert replay .expansion == " WoL"
143157
144- first = next (player for player in replay .players if player .name == ' 명지대학교' )
145- second = next (player for player in replay .players if player .name == ' 티에스엘사기수' )
158+ first = next (player for player in replay .players if player .name == " 명지대학교" )
159+ second = next (player for player in replay .players if player .name == " 티에스엘사기수" )
146160
147161 assert first .url == "http://kr.battle.net/sc2/en/profile/258945/1/명지대학교/"
148162 assert second .url == "http://kr.battle.net/sc2/en/profile/102472/1/티에스엘사기수/"
@@ -156,19 +170,23 @@ def test_kr_realm_and_tampered_messages():
156170 print replay .players [0 ].pick_race
157171 print replay .players [0 ].play_race
158172
159- print replay .map
173+ print replay .map_name
174+
160175
161176# TODO: Failing with
162177# TypeError: Unknown event: 0x4 - 0xe3 at 16
163178def test_referee ():
164179 replay = sc2reader .load_replay ("test_replays/1.2.2.17811/14.SC2Replay" )
165180
181+
166182def test_encrypted ():
167183 replay = sc2reader .load_replay ("test_replays/1.2.2.17811/4.SC2Replay" )
168184
185+
169186def test_observers ():
170187 replay = sc2reader .load_replay ("test_replays/1.2.2.17811/13.SC2Replay" ,debug = True )
171188
189+
172190def test_datetimes ():
173191 # Ignore seconds in comparisons, because they are off by one what is reported by Windows.
174192 # This might be a little nuance worth investigating at some point.
@@ -185,6 +203,7 @@ def test_datetimes():
185203 replay = sc2reader .load_replay ("test_replays/1.2.2.17811/3.SC2Replay" )
186204 assert replay .end_time == datetime .datetime (2011 , 2 , 25 , 14 , 36 , 26 )
187205
206+
188207def test_hots_pids ():
189208 for replayfilename in [
190209 "test_replays/2.0.3.24764/Akilon Wastes (10).SC2Replay" ,
@@ -195,67 +214,88 @@ def test_hots_pids():
195214 print "Processing {fname}" .format (fname = replayfilename )
196215 replay = sc2reader .load_replay (replayfilename )
197216
198- assert replay .expansion == ' HotS'
217+ assert replay .expansion == " HotS"
199218
200- player_pids = set ( [ player .pid for player in replay .players if player .is_human ] )
201- ability_pids = set ( [ event .player .pid for event in replay .events if ' AbilityEvent' in event .name ] )
219+ player_pids = set ([ player .pid for player in replay .players if player .is_human ])
220+ ability_pids = set ([ event .player .pid for event in replay .events if " AbilityEvent" in event .name ] )
202221
203222 assert ability_pids == player_pids
204223
224+
205225def test_wol_pids ():
206226 replay = sc2reader .load_replay ("test_replays/1.5.4.24540/ggtracker_1471849.SC2Replay" )
207227
208- assert replay .expansion == ' WoL'
228+ assert replay .expansion == " WoL"
209229
210- ability_pids = set ( [ event .player .pid for event in replay .events if ' AbilityEvent' in event .name ] )
211- player_pids = set ( [ player .pid for player in replay .players ] )
230+ ability_pids = set ([ event .player .pid for event in replay .events if " AbilityEvent" in event .name ] )
231+ player_pids = set ([ player .pid for player in replay .players ] )
212232
213233 assert ability_pids == player_pids
214234
235+
215236def test_hots_hatchfun ():
216237 replay = sc2reader .load_replay ("test_replays/2.0.0.24247/molten.SC2Replay" )
217- player_pids = set ( [ player .pid for player in replay .players ] )
218- spawner_pids = set ( [ event .player .pid for event in replay .events if ' TargetAbilityEvent' in event .name and event .ability .name == ' SpawnLarva' ] )
238+ player_pids = set ([ player .pid for player in replay .players ] )
239+ spawner_pids = set ([ event .player .pid for event in replay .events if " TargetAbilityEvent" in event .name and event .ability .name == " SpawnLarva" ] )
219240 print "player_pids = {player_pids}, spawner_pids = {spawner_pids}" .format (player_pids = player_pids , spawner_pids = spawner_pids )
220241 assert spawner_pids .issubset (player_pids )
221242
243+
222244def test_hots_vs_ai ():
223245 replay = sc2reader .load_replay ("test_replays/2.0.0.24247/Cloud Kingdom LE (13).SC2Replay" )
224- assert replay .expansion == ' HotS'
246+ assert replay .expansion == " HotS"
225247 replay = sc2reader .load_replay ("test_replays/2.0.0.24247/Korhal City (19).SC2Replay" )
226- assert replay .expansion == 'HotS'
248+ assert replay .expansion == "HotS"
249+
227250
228251def test_oracle_parsing ():
229252 replay = sc2reader .load_replay ("test_replays/2.0.3.24764/ggtracker_1571740.SC2Replay" )
230- assert replay .expansion == ' HotS'
231- oracles = [unit for unit in replay .objects .values () if unit .name == ' Oracle' ]
253+ assert replay .expansion == " HotS"
254+ oracles = [unit for unit in replay .objects .values () if unit .name == " Oracle" ]
232255 assert len (oracles ) == 2
233256
257+
234258def test_resume_from_replay ():
235259 replay = sc2reader .load_replay ("test_replays/2.0.3.24764/resume_from_replay.SC2Replay" )
236260
261+
237262def test_clan_players ():
238263 replay = sc2reader .load_replay ("test_replays/2.0.4.24944/Lunar Colony V.SC2Replay" )
239- assert replay .expansion == ' WoL'
264+ assert replay .expansion == " WoL"
240265 assert len (replay .people ) == 4
241266
267+
242268def test_WoL_204 ():
243269 replay = sc2reader .load_replay ("test_replays/2.0.4.24944/ggtracker_1789768.SC2Replay" )
244- assert replay .expansion == ' WoL'
270+ assert replay .expansion == " WoL"
245271 assert len (replay .people ) == 2
246272
273+
247274def test_send_resources ():
248275 replay = sc2reader .load_replay ("test_replays/2.0.4.24944/Backwater Complex (15).SC2Replay" )
249276
277+
250278def test_cn_replays ():
251279 replay = sc2reader .load_replay ("test_replays/2.0.5.25092/cn1.SC2Replay" )
252- assert replay .gateway == 'cn'
253- assert replay .expansion == 'WoL'
280+ assert replay .gateway == "cn"
281+ assert replay .expansion == "WoL"
282+
254283
255284def test_plugins ():
256285 factory = sc2reader .factories .SC2Factory ()
257- factory .register_plugin (' Replay' , APMTracker ())
258- factory .register_plugin (' Replay' , SelectionTracker ())
259- factory .register_plugin (' Replay' , toJSON ())
286+ factory .register_plugin (" Replay" , APMTracker ())
287+ factory .register_plugin (" Replay" , SelectionTracker ())
288+ factory .register_plugin (" Replay" , toJSON ())
260289 replay = factory .load_replay ("test_replays/2.0.5.25092/cn1.SC2Replay" )
261290
291+ # Load and quickly check the JSON output consistency
292+ result = json .loads (replay )
293+ assert result ["map_name" ] == u"生化实验区"
294+ assert result ["players" ][2 ]["name" ] == "ImYoonA"
295+ assert result ["players" ][2 ]["avg_apm" ] == 84.52332657200812
296+ assert result ["release" ] == "2.0.5.25092"
297+ assert result ["game_length" ] == 986
298+ assert result ["real_length" ] == 704
299+ assert result ["gateway" ] == "cn"
300+ assert result ["game_fps" ] == 16.0
301+ assert result ["is_ladder" ] is True
0 commit comments