diff options
author | Bryan Bishop <kanzure@gmail.com> | 2013-09-08 02:01:47 -0500 |
---|---|---|
committer | Bryan Bishop <kanzure@gmail.com> | 2013-09-08 02:01:47 -0500 |
commit | 15c04c9885c639bd9b52cd94f6dc5442df52fab0 (patch) | |
tree | 5d19a8bb6e8a77b3a0a89e5b7bac87a2baa1b641 /tests/vba_tests.py | |
parent | 11f86368a49fd2b3759e1e2ee4debd85d6d322f0 (diff) |
crude tests for the vba automation software
Diffstat (limited to 'tests/vba_tests.py')
-rw-r--r-- | tests/vba_tests.py | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/tests/vba_tests.py b/tests/vba_tests.py new file mode 100644 index 0000000..a257f20 --- /dev/null +++ b/tests/vba_tests.py @@ -0,0 +1,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() |