reinit
This commit is contained in:
242
TankMan/test/test_case.py
Normal file
242
TankMan/test/test_case.py
Normal file
@ -0,0 +1,242 @@
|
||||
from os import path
|
||||
|
||||
from mlgame.view.view_model import create_asset_init_data, create_image_view_data
|
||||
from TankBattleMode import TankBattleMode
|
||||
from TankPlayer import TankPlayer
|
||||
from env import MAP_DIR
|
||||
|
||||
|
||||
class TestTankBattleMode(object):
|
||||
map_path = path.join(MAP_DIR, "map_00.tmx")
|
||||
mode = TankBattleMode(map_path, 1200, True)
|
||||
|
||||
def test_calculate_score_type(self):
|
||||
assert type(self.mode.calculate_score()) == tuple
|
||||
assert type(self.mode.calculate_score()[0]) == int
|
||||
assert type(self.mode.calculate_score()[1]) == int
|
||||
|
||||
def test_is_list_type_of_get_1P_command(self):
|
||||
assert type(self.mode.get_1P_command()) == list
|
||||
|
||||
def test_is_list_type_of_get_2P_command(self):
|
||||
assert type(self.mode.get_2P_command()) == list
|
||||
|
||||
def test_draw_sprite_data(self):
|
||||
sprite_data = self.mode.draw_sprite_data()
|
||||
image_init_data_template = create_image_view_data("1P", 0, 0, 60, 60, 0)
|
||||
for data in sprite_data:
|
||||
assert data.keys() == image_init_data_template.keys()
|
||||
for key in data.keys():
|
||||
assert type(data[key]) == type(image_init_data_template[key])
|
||||
|
||||
|
||||
class TestTankPlayer(object):
|
||||
construction = {"_id": 1, "_no": 0, "x": 0, "y": 0, "width": 60, "height": 60}
|
||||
player = TankPlayer(construction)
|
||||
|
||||
# TODO how to test update
|
||||
def test_update(self):
|
||||
pass
|
||||
|
||||
# TODO how to test rotate
|
||||
def test_rotate(self):
|
||||
pass
|
||||
|
||||
def get_shoot_info(self):
|
||||
return {"id": 0, "center_pos": (0, 0), "rot": 0}
|
||||
|
||||
def test_get_player_shoot_info(self):
|
||||
shoot_info = self.player.create_shoot_info()
|
||||
assert shoot_info.keys() == self.get_shoot_info().keys()
|
||||
for key in shoot_info.keys():
|
||||
assert type(shoot_info[key]) == type(self.get_shoot_info()[key])
|
||||
|
||||
def test_arg(self):
|
||||
assert self.player.origin_size == (60, 60)
|
||||
assert self.player.speed == 8
|
||||
assert type(self.player.angle) == int
|
||||
assert type(self.player.score) == int
|
||||
assert type(self.player.used_frame) == int
|
||||
assert type(self.player.rot) == int
|
||||
assert self.player.rot_speed == 45
|
||||
assert 100 >= self.player.shield > 0
|
||||
assert 10 >= self.player.power > 0
|
||||
assert 100 >= self.player.oil > 0
|
||||
assert type(self.player.last_turn_frame) == int
|
||||
assert type(self.player.is_shoot) == bool
|
||||
assert self.player.is_alive
|
||||
assert type(self.player.is_turn) == bool
|
||||
assert type(self.player.is_forward) == bool
|
||||
assert type(self.player.is_backward) == bool
|
||||
|
||||
def test_move_arg(self):
|
||||
move = {"left_up": (-self.player.speed, -self.player.speed),
|
||||
"right_up": (self.player.speed, -self.player.speed),
|
||||
"left_down": (-self.player.speed, self.player.speed),
|
||||
"right_down": (self.player.speed, self.player.speed),
|
||||
"left": (-self.player.speed, 0), "right": (self.player.speed, 0), "up": (0, -self.player.speed),
|
||||
"down": (0, self.player.speed)}
|
||||
assert self.player.move_dict == move
|
||||
|
||||
def test_act(self):
|
||||
# TODO 增加限制type
|
||||
# TODO how test shoot act
|
||||
self.player.act(["SHOOT"])
|
||||
# assert self.player.is_shoot and self.player.power == 9 and self.player.last_shoot_frame == 50
|
||||
self.player.act(["TURN_LEFT"])
|
||||
assert self.player.is_turn and round(self.player.oil, 1) == 99.9
|
||||
self.player.act(["TURN_RIGHT"])
|
||||
assert self.player.is_turn and round(self.player.oil, 1) == 99.8
|
||||
self.player.act(["FORWARD"])
|
||||
assert self.player.is_forward and not self.player.is_backward and round(self.player.oil, 1) == 99.7
|
||||
self.player.act(["BACKWARD"])
|
||||
assert self.player.is_backward and not self.player.is_forward and round(self.player.oil, 1) == 99.6
|
||||
|
||||
def go_straight(self, forward_or_backward: str):
|
||||
self.player.rot = 0
|
||||
self.player.hit_rect.center = self.player.origin_center
|
||||
if forward_or_backward == "forward":
|
||||
self.player.forward()
|
||||
else:
|
||||
self.player.backward()
|
||||
return self.player.origin_center, self.player.hit_rect.center
|
||||
|
||||
# TODO how better
|
||||
def test_go_straight(self):
|
||||
speed = self.player.speed
|
||||
origin_center, now_center = self.go_straight("forward")
|
||||
assert (origin_center[0]-speed, origin_center[1]) == now_center
|
||||
origin_center, now_center = self.go_straight("backward")
|
||||
assert (origin_center[0]+speed, origin_center[1]) == now_center
|
||||
|
||||
def turn(self, right_or_left: str, is_turn: bool):
|
||||
origin_rot = self.player.rot
|
||||
self.player.is_turn = is_turn
|
||||
self.player.last_turn_frame = 500
|
||||
if right_or_left == "right":
|
||||
self.player.turn_right()
|
||||
else:
|
||||
self.player.turn_left()
|
||||
return self.player.last_turn_frame, origin_rot, self.player.rot, self.player.is_turn
|
||||
|
||||
# TODO how better
|
||||
def test_turn_method(self):
|
||||
turn_cd, origin_rot, new_rot, is_turn = self.turn("right", True)
|
||||
assert turn_cd == 500 and new_rot == origin_rot and is_turn
|
||||
turn_cd, origin_rot, new_rot, is_turn = self.turn("right", False)
|
||||
assert turn_cd == 0 and new_rot == origin_rot-self.player.rot_speed and is_turn
|
||||
turn_cd, origin_rot, new_rot, is_turn = self.turn("left", True)
|
||||
assert turn_cd == 500 and new_rot == origin_rot and is_turn
|
||||
turn_cd, origin_rot, new_rot, is_turn = self.turn("left", False)
|
||||
assert turn_cd == 0 and new_rot == origin_rot+self.player.rot_speed and is_turn
|
||||
|
||||
def collide_with_walls(self, is_forward: bool):
|
||||
self.player.rot = 0
|
||||
self.player.hit_rect.center = (100, 100)
|
||||
old_center = self.player.hit_rect.center
|
||||
self.player.is_forward = is_forward
|
||||
self.player.collide_with_walls()
|
||||
return old_center, self.player.hit_rect.center
|
||||
|
||||
def test_collide_with_walls(self):
|
||||
speed = self.player.speed
|
||||
old_center, new_center = self.collide_with_walls(is_forward=True)
|
||||
assert (old_center[0]+speed, old_center[1]) == new_center
|
||||
old_center, new_center = self.collide_with_walls(is_forward=False)
|
||||
assert (old_center[0]-speed, old_center[1]) == new_center
|
||||
|
||||
def collide_with_bullets(self, shield: int, lives: int):
|
||||
self.player.shield = shield
|
||||
self.player.lives = lives
|
||||
self.player.collide_with_bullets()
|
||||
return {"shield": self.player.shield, "lives": self.player.lives, "pos": self.player.rect.center}
|
||||
|
||||
def test_collide_with_bullets(self):
|
||||
self.player.rect.center = (50, 50)
|
||||
self.collide_with_bullets(1, 1)
|
||||
assert self.player.shield == 100
|
||||
assert self.player.lives == 0
|
||||
assert self.player.rect.center == self.player.origin_center
|
||||
self.player.rect.center = (50, 50)
|
||||
self.collide_with_bullets(1, 2)
|
||||
assert self.player.shield == 100
|
||||
assert self.player.lives == 1
|
||||
assert self.player.rect.center == self.player.origin_center
|
||||
self.player.rect.center = (50, 50)
|
||||
self.collide_with_bullets(100, 2)
|
||||
assert 100 > self.player.shield > 89
|
||||
assert self.player.lives == 2
|
||||
assert self.player.rect.center == (50, 50)
|
||||
assert self.player.rect.center != self.player.origin_center
|
||||
|
||||
def test_get_power(self):
|
||||
self.player.get_power(-10)
|
||||
assert self.player.power == 0
|
||||
self.player.get_power(10)
|
||||
assert self.player.power == 10
|
||||
self.player.get_power(-11)
|
||||
assert self.player.power == 0
|
||||
self.player.get_power(11)
|
||||
assert self.player.power == 10
|
||||
self.player.get_power(-5)
|
||||
assert self.player.power == 5
|
||||
self.player.get_power(3)
|
||||
assert self.player.power == 8
|
||||
|
||||
def test_get_oil(self):
|
||||
self.player.get_oil(-100)
|
||||
assert self.player.oil == 0
|
||||
self.player.get_oil(100)
|
||||
assert self.player.oil == 100
|
||||
self.player.get_oil(-110)
|
||||
assert self.player.oil == 0
|
||||
self.player.get_oil(110)
|
||||
assert self.player.oil == 100
|
||||
self.player.get_oil(-50)
|
||||
assert self.player.oil == 50
|
||||
self.player.get_oil(30)
|
||||
assert self.player.oil == 80
|
||||
|
||||
def get_info(self):
|
||||
return {"id": f"{0}P",
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"speed": 0,
|
||||
"score": 0,
|
||||
"power": 0,
|
||||
"oil": 0,
|
||||
"shield": 0,
|
||||
"lives": 0
|
||||
}
|
||||
|
||||
def test_get_player_info(self):
|
||||
info = self.player.get_info()
|
||||
assert info.keys() == self.get_info().keys()
|
||||
for key in info.keys():
|
||||
assert type(info[key]) == type(self.get_info()[key])
|
||||
|
||||
def get_result(self):
|
||||
return {"id": f"{0}P", "x": 0, "y": 0, "score": 0, "shield": 0, "lives": 0}
|
||||
|
||||
def test_get_result(self):
|
||||
result = self.player.get_result()
|
||||
assert result.keys() == self.get_result().keys()
|
||||
for key in result.keys():
|
||||
assert type(result[key]) == type(self.get_result()[key])
|
||||
|
||||
def get_image_data(self):
|
||||
return {ID: f"{0}P", X: 0, Y: 0, WIDTH: 0, HEIGHT: 0, ANGLE: 0}
|
||||
|
||||
def test_get_image_data(self):
|
||||
image_data = self.player.get_image_data()
|
||||
assert image_data.keys() == self.get_image_data().keys()
|
||||
for key in image_data.keys():
|
||||
assert type(image_data[key]) == type(self.get_image_data()[key])
|
||||
|
||||
def test_get_image_init_data(self):
|
||||
image_init_data = self.player.get_image_init_data()
|
||||
image_init_data_template = create_asset_init_data("1P", 60, 60, "path", "url")
|
||||
for data in image_init_data:
|
||||
assert data.keys() == image_init_data_template.keys()
|
||||
for key in data.keys():
|
||||
assert type(data[key]) == type(image_init_data_template[key])
|
Reference in New Issue
Block a user