mirror of
https://github.com/pret/pokemon-reverse-engineering-tools.git
synced 2026-08-24 11:14:10 -05:00
simplify the vba-related tests
The imports for the emulator-related tests are now simplified in the tests/ folder. The bootstrapping.py file contains some shared functions that multiple test files might choose to use. Those functions probably belong in the actual module instead of in tests/. The battle-related tests have been separated from the other emulator tests.
This commit is contained in:
51
tests/bootstrapping.py
Normal file
51
tests/bootstrapping.py
Normal file
@@ -0,0 +1,51 @@
|
||||
"""
|
||||
Functions to bootstrap the emulator state
|
||||
"""
|
||||
|
||||
from setup_vba import (
|
||||
vba,
|
||||
autoplayer,
|
||||
)
|
||||
|
||||
def bootstrap():
|
||||
"""
|
||||
Every test needs to be run against a certain minimum context. That context
|
||||
is constructed by this function.
|
||||
"""
|
||||
|
||||
cry = vba.crystal(config=None)
|
||||
runner = autoplayer.SpeedRunner(cry=cry)
|
||||
|
||||
# skip=False means run the skip_intro function instead of just skipping to
|
||||
# a saved state.
|
||||
runner.skip_intro(skip=True)
|
||||
|
||||
state = cry.vba.state
|
||||
|
||||
# clean everything up again
|
||||
cry.vba.shutdown()
|
||||
|
||||
return state
|
||||
|
||||
def bootstrap_trainer_battle():
|
||||
"""
|
||||
Start a trainer battle.
|
||||
"""
|
||||
# setup
|
||||
cry = vba.crystal(config=None)
|
||||
runner = autoplayer.SpeedRunner(cry=cry)
|
||||
|
||||
runner.skip_intro(skip=True)
|
||||
runner.handle_mom(skip=True)
|
||||
runner.walk_into_new_bark_town(skip=True)
|
||||
runner.handle_elm("totodile", skip=True)
|
||||
|
||||
# levelgrind a pokemon
|
||||
# TODO: make new_bark_level_grind able to figure out how to construct its
|
||||
# initial state if none is provided.
|
||||
runner.new_bark_level_grind(17, skip=True)
|
||||
|
||||
# TODO: figure out a better way to start a trainer battle :(
|
||||
runner.cry.start_trainer_battle_lamely()
|
||||
|
||||
return runner.cry.vba.state
|
||||
4
tests/setup_vba.py
Normal file
4
tests/setup_vba.py
Normal file
@@ -0,0 +1,4 @@
|
||||
import pokemontools.vba.vba as vba
|
||||
import pokemontools.vba.keyboard as keyboard
|
||||
import pokemontools.vba.autoplayer as autoplayer
|
||||
autoplayer.vba = vba
|
||||
@@ -4,20 +4,16 @@ Tests for VBA automation tools
|
||||
|
||||
import unittest
|
||||
|
||||
import pokemontools.vba.vba as vba
|
||||
|
||||
from pokemontools.vba.battle import (
|
||||
Battle,
|
||||
BattleException,
|
||||
from setup_vba import (
|
||||
vba,
|
||||
autoplayer,
|
||||
keyboard,
|
||||
)
|
||||
|
||||
try:
|
||||
import pokemontools.vba.vba_autoplayer as autoplayer
|
||||
except ImportError:
|
||||
import pokemontools.vba.autoplayer as autoplayer
|
||||
autoplayer.vba = vba
|
||||
|
||||
import pokemontools.vba.keyboard as keyboard
|
||||
from bootstrapping import (
|
||||
bootstrap,
|
||||
bootstrap_trainer_battle,
|
||||
)
|
||||
|
||||
def setup_wram():
|
||||
"""
|
||||
@@ -39,49 +35,6 @@ def setup_wram():
|
||||
|
||||
return wram
|
||||
|
||||
def bootstrap():
|
||||
"""
|
||||
Every test needs to be run against a certain minimum context. That context
|
||||
is constructed by this function.
|
||||
"""
|
||||
|
||||
cry = vba.crystal(config=None)
|
||||
runner = autoplayer.SpeedRunner(cry=cry)
|
||||
|
||||
# skip=False means run the skip_intro function instead of just skipping to
|
||||
# a saved state.
|
||||
runner.skip_intro(skip=True)
|
||||
|
||||
state = cry.vba.state
|
||||
|
||||
# clean everything up again
|
||||
cry.vba.shutdown()
|
||||
|
||||
return state
|
||||
|
||||
def bootstrap_trainer_battle():
|
||||
"""
|
||||
Start a trainer battle.
|
||||
"""
|
||||
# setup
|
||||
cry = vba.crystal(config=None)
|
||||
runner = autoplayer.SpeedRunner(cry=cry)
|
||||
|
||||
runner.skip_intro(skip=True)
|
||||
runner.handle_mom(skip=True)
|
||||
runner.walk_into_new_bark_town(skip=True)
|
||||
runner.handle_elm("totodile", skip=True)
|
||||
|
||||
# levelgrind a pokemon
|
||||
# TODO: make new_bark_level_grind able to figure out how to construct its
|
||||
# initial state if none is provided.
|
||||
runner.new_bark_level_grind(17, skip=True)
|
||||
|
||||
# TODO: figure out a better way to start a trainer battle :(
|
||||
runner.cry.start_trainer_battle_lamely()
|
||||
|
||||
return runner.cry.vba.state
|
||||
|
||||
class OtherVbaTests(unittest.TestCase):
|
||||
def test_keyboard_planner(self):
|
||||
button_sequence = keyboard.plan_typing("an")
|
||||
@@ -329,13 +282,5 @@ class VbaTests(unittest.TestCase):
|
||||
pname = self.cry.get_player_name().replace("@", "")
|
||||
self.assertEqual(name, pname)
|
||||
|
||||
def test_battle_is_player_turn(self):
|
||||
state = bootstrap_trainer_battle()
|
||||
self.cry.vba.state = state
|
||||
|
||||
battle = Battle(emulator=self.cry)
|
||||
|
||||
self.assertTrue(battle.is_player_turn())
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
51
tests/test_vba_battle.py
Normal file
51
tests/test_vba_battle.py
Normal file
@@ -0,0 +1,51 @@
|
||||
"""
|
||||
Tests for the battle controller
|
||||
"""
|
||||
|
||||
import unittest
|
||||
|
||||
from setup_vba import (
|
||||
vba,
|
||||
autoplayer,
|
||||
)
|
||||
|
||||
from pokemontools.vba.battle import (
|
||||
Battle,
|
||||
BattleException,
|
||||
)
|
||||
|
||||
from bootstrapping import (
|
||||
bootstrap,
|
||||
bootstrap_trainer_battle,
|
||||
)
|
||||
|
||||
class BattleTests(unittest.TestCase):
|
||||
cry = None
|
||||
vba = None
|
||||
bootstrap_state = None
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.cry = vba.crystal()
|
||||
cls.vba = cls.cry.vba
|
||||
|
||||
cls.bootstrap_state = bootstrap_trainer_battle()
|
||||
cls.vba.state = cls.bootstrap_state
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
cls.vba.shutdown()
|
||||
|
||||
def setUp(self):
|
||||
# reset to whatever the bootstrapper created
|
||||
self.vba.state = self.bootstrap_state
|
||||
|
||||
def test_battle_is_player_turn(self):
|
||||
self.cry.vba.state = self.bootstrap_state
|
||||
|
||||
battle = Battle(emulator=self.cry)
|
||||
|
||||
self.assertTrue(battle.is_player_turn())
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user