blob: a257f204c804e152dda3b2da45a3385467c602f4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
"""
Tests for VBA automation tools
"""
import unittest
import vba
try:
import vba_autoplayer
except ImportError:
import autoplayer as vba_autoplayer
vba_autoplayer.vba = vba
def setup_wram():
"""
Loads up some default addresses. Should eventually be replaced with the
actual wram parser.
"""
wram = {}
wram["PlayerDirection"] = 0xd4de
wram["PlayerAction"] = 0xd4e1
wram["MapX"] = 0xd4e6
wram["MapY"] = 0xd4e7
return wram
def bootstrap():
"""
Every test needs to be run against a certain minimum context. That context
is constructed by this function.
"""
# reset the rom
vba.shutdown()
vba.load_rom()
# skip=False means run the skip_intro function instead of just skipping to
# a saved state.
vba_autoplayer.skip_intro()
state = vba.get_state()
# clean everything up again
vba.shutdown()
return state
class VbaTests(unittest.TestCase):
# unittest in jython2.5 doesn't seem to have setUpClass ?? Man, why am I on
# jython2.5? This is ancient.
#@classmethod
#def setUpClass(cls):
# # get a good game state
# cls.state = bootstrap()
#
# # figure out addresses
# cls.wram = setup_wram()
# FIXME: work around jython2.5 unittest
state = bootstrap()
wram = setup_wram()
def get_wram_value(self, name):
return vba.get_memory_at(self.wram[name])
def setUp(self):
# clean the state
vba.shutdown()
vba.load_rom()
# reset to whatever the bootstrapper created
vba.set_state(self.state)
def tearDown(self):
vba.shutdown()
def test_movement_changes_player_direction(self):
player_direction = self.get_wram_value("PlayerDirection")
vba.crystal.move("u")
# direction should have changed
self.assertNotEqual(player_direction, self.get_wram_value("PlayerDirection"))
def test_movement_changes_y_coord(self):
first_map_y = self.get_wram_value("MapY")
vba.crystal.move("u")
# y location should be different
second_map_y = self.get_wram_value("MapY")
self.assertNotEqual(first_map_y, second_map_y)
def test_movement_ends_in_standing(self):
# should start with standing
self.assertEqual(self.get_wram_value("PlayerAction"), 1)
vba.crystal.move("l")
# should be standing
player_action = self.get_wram_value("PlayerAction")
self.assertEqual(player_action, 1) # 1 = standing
if __name__ == "__main__":
unittest.main()
|