Skip to content

Commit

Permalink
add test for Credit Mode
Browse files Browse the repository at this point in the history
  • Loading branch information
jabdoa2 committed May 7, 2016
1 parent 3b4a708 commit 00bdb4c
Show file tree
Hide file tree
Showing 3 changed files with 278 additions and 0 deletions.
49 changes: 49 additions & 0 deletions mpf/tests/machine_files/credits/config/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#config_version=4

modes:
- credits

machine:
min_balls: 0

switches:
s_left_coin:
number:
s_center_coin:
number:
s_right_coin:
number:
s_esc:
number:
s_start:
number:
tags: start

coils:
c_eject:
number:

credits:
max_credits: 12
free_play: no
service_credits_switch: s_esc
switches:
- switch: s_left_coin
type: money
value: .25
- switch: s_center_coin
type: money
value: .25
- switch: s_right_coin
type: money
value: 1
pricing_tiers:
- price: .50
credits: 1
- price: 2
credits: 5
fractional_credit_expiration_time: 15m
credit_expiration_time: 2h
persist_credits_while_off_time: 1h
free_play_string: FREE PLAY
credits_string: CREDITS
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#config_version=4

mode:
priority: 11000
start_events: machine_reset_phase_3
stop_on_ball_end: False


221 changes: 221 additions & 0 deletions mpf/tests/test_CreditsMode.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,221 @@
from mock import MagicMock
from mpf.tests.MpfTestCase import MpfTestCase


class TestShots(MpfTestCase):

def getConfigFile(self):
return 'config.yaml'

def getMachinePath(self):
return 'tests/machine_files/credits/'

def start_game(self, should_work):
# shots only work in games so we have to do this a lot
self.machine.playfield.add_ball = MagicMock()
self.machine.ball_controller.num_balls_known = 3
self.hit_and_release_switch("s_start")
self.advance_time_and_run()
if should_work:
self.assertIsNotNone(self.machine.game)
self.machine.game.balls_in_play = 0
self.advance_time_and_run()
else:
self.assertIsNone(self.machine.game)

def stop_game(self):
# stop game
self.assertIsNotNone(self.machine.game)
self.machine.game.game_ending()
self.advance_time_and_run()
self.assertIsNone(self.machine.game)

def testFreePlay(self):
self.machine.modes.credits.stop()
self.machine_run()
self.assertEqual("FREE PLAY", self.machine.get_machine_var('credits_string'))

self.machine.modes.credits.credits_config['free_play'] = True
self.machine.modes.credits.credits_config['free_play_string'] = "FREEEE"
self.machine.modes.credits.start()
self.machine_run()

self.assertEqual("FREEEE", self.machine.get_machine_var('credits_string'))

# game start should work
self.start_game(True)

def testToggleEvents(self):
self.assertTrue(self.machine.mode_controller.is_active('credits'))
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string'))

self.post_event("toggle_credit_play")
self.assertEqual("FREE PLAY", self.machine.get_machine_var('credits_string'))

self.post_event("toggle_credit_play")
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string'))

self.start_game(False)

self.post_event("toggle_credit_play")
self.assertEqual("FREE PLAY", self.machine.get_machine_var('credits_string'))

self.start_game(True)
self.stop_game()

self.post_event("enable_credit_play")
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string'))

self.post_event("enable_credit_play")
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string'))

self.post_event("enable_free_play")
self.assertEqual("FREE PLAY", self.machine.get_machine_var('credits_string'))

self.post_event("enable_free_play")
self.assertEqual("FREE PLAY", self.machine.get_machine_var('credits_string'))

def testCredits(self):
self.assertTrue(self.machine.mode_controller.is_active('credits'))
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string'))

# no credits no game
self.start_game(False)

self.hit_and_release_switch("s_left_coin")
self.machine_run()

self.assertEqual("CREDITS 1/2", self.machine.get_machine_var('credits_string'))

# not enough credits. no game
self.start_game(False)

self.hit_and_release_switch("s_left_coin")
self.machine_run()

self.assertEqual("CREDITS 1", self.machine.get_machine_var('credits_string'))

# one is enough for a game
self.start_game(True)
self.stop_game()

self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string'))

# but only one
self.start_game(False)

self.hit_and_release_switch("s_right_coin")
self.machine_run()
self.assertEqual("CREDITS 2", self.machine.get_machine_var('credits_string'))

# no more price tier after game
self.hit_and_release_switch("s_left_coin")
self.hit_and_release_switch("s_left_coin")
self.machine_run()
self.assertEqual("CREDITS 3", self.machine.get_machine_var('credits_string'))

def testMorePlayers(self):
self.assertTrue(self.machine.mode_controller.is_active('credits'))
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string'))

self.hit_and_release_switch("s_left_coin")
self.hit_and_release_switch("s_left_coin")
self.machine_run()

self.assertEqual("CREDITS 1", self.machine.get_machine_var('credits_string'))

# one is enough for a game
self.machine.playfield.add_ball = MagicMock()
self.machine.ball_controller.num_balls_known = 3
self.hit_and_release_switch("s_start")
self.advance_time_and_run()
self.assertIsNotNone(self.machine.game)

# no more credits
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string'))
self.assertEqual(1, self.machine.game.num_players)
# try to add another player
self.hit_and_release_switch("s_start")
# fails
self.assertEqual(1, self.machine.game.num_players)

# add credits
self.hit_and_release_switch("s_right_coin")
self.machine_run()
self.assertEqual("CREDITS 2", self.machine.get_machine_var('credits_string'))

# try to add another player
self.hit_and_release_switch("s_start")
# wrorks
self.assertEqual(2, self.machine.game.num_players)
self.machine_run()
self.assertEqual("CREDITS 1", self.machine.get_machine_var('credits_string'))

def testPricingTiers(self):
self.hit_and_release_switch("s_right_coin")
self.machine_run()
self.assertEqual("CREDITS 2", self.machine.get_machine_var('credits_string'))

self.hit_and_release_switch("s_right_coin")
self.machine_run()
self.assertEqual("CREDITS 5", self.machine.get_machine_var('credits_string'))

def testFractionalTimeout(self):
self.hit_and_release_switch("s_right_coin")
self.hit_and_release_switch("s_left_coin")
self.machine_run()
self.assertEqual("CREDITS 2 1/2", self.machine.get_machine_var('credits_string'))

self.advance_time_and_run(60 * 15)

self.assertEqual("CREDITS 2", self.machine.get_machine_var('credits_string'))

# but not during game
self.hit_and_release_switch("s_left_coin")
self.machine_run()
self.assertEqual("CREDITS 2 1/2", self.machine.get_machine_var('credits_string'))

self.start_game(True)
self.advance_time_and_run(60 * 15)
self.stop_game()

self.machine_run()
self.assertEqual("CREDITS 1 1/2", self.machine.get_machine_var('credits_string'))

# but timeout restarts
self.advance_time_and_run(60 * 15)

self.assertEqual("CREDITS 1", self.machine.get_machine_var('credits_string'))

def testCreditTimeout(self):
self.hit_and_release_switch("s_right_coin")
self.hit_and_release_switch("s_left_coin")
self.machine_run()
self.assertEqual("CREDITS 2 1/2", self.machine.get_machine_var('credits_string'))

self.advance_time_and_run(3600 * 2)

self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string'))

# but not during game
self.hit_and_release_switch("s_right_coin")
self.hit_and_release_switch("s_left_coin")
self.machine_run()
self.assertEqual("CREDITS 2 1/2", self.machine.get_machine_var('credits_string'))

self.start_game(True)
self.advance_time_and_run(3600 * 2)
self.stop_game()

self.machine_run()
self.assertEqual("CREDITS 1 1/2", self.machine.get_machine_var('credits_string'))

# but timeout restarts
self.advance_time_and_run(3600 * 2)

self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string'))

def testServiceCredits(self):
self.hit_and_release_switch("s_esc")
self.machine_run()
self.assertEqual("CREDITS 1", self.machine.get_machine_var('credits_string'))

0 comments on commit 00bdb4c

Please sign in to comment.