def test_notify_game(self): """ Make sure that when we move/add/remove cards from a zone that the game picks up on it. """ game = Game() game.register([self.zone, self.card1]) expected_transitions = [("add", self.card1.game_id, self.zone.game_id)] expected_transitions2 = [("add", self.card1.game_id, self.zone.game_id), ("remove", self.card1.game_id)] # Test add card self.zone.add_card(self.card1) self.assertEqual(game.get_public_transitions(), expected_transitions) self.zone.remove_card(self.card1) game.flush_transitions() # Test push card self.zone.push(self.card1) self.assertEqual(game.get_public_transitions(), expected_transitions) self.zone.remove_card(self.card1) game.flush_transitions() # Test remove card self.zone.add_card(self.card1) self.zone.remove_card(self.card1) self.assertEqual(game.get_public_transitions(), expected_transitions2) game.flush_transitions() # Test pop card self.zone.push(self.card1) card = self.zone.pop() self.assertEqual(self.card1, card) self.assertEqual(game.get_public_transitions(), expected_transitions2) game.flush_transitions() # Make sure we don't get transitions if there's bad data self.zone.add_card(self.card1) self.zone.add_card(self.card1) self.assertEqual(game.get_public_transitions(), expected_transitions) self.zone.remove_card(self.card1) game.flush_transitions() self.zone.pop() self.zone.remove_card(self.card1) self.assertEqual(game.get_public_transitions(), [])
class StatefulGameObjectTestCase(TestCase): """ A simple test case for testing anything related to game objects that have important state. """ def setUp(self): self.game = Game() self.stateful_game_object = StatefulGameObject() self.stateful_game_object.game_object_type = "foo" self.game.register([self.stateful_game_object]) def test_change_state(self): """ Make sure that when we change the state the change is registered in the game and that we can still set attributes without a game. """ expected_state_changes = [ ("set", "foo", self.stateful_game_object.game_id, "life", 10) ] self.stateful_game_object.life = 10 self.assertEqual(self.stateful_game_object.life, 10) self.assertEqual(expected_state_changes, self.game.get_public_transitions()) # Make sure we can set an attribute even if game is None self.stateful_game_object.game = None self.stateful_game_object.life = 20 self.assertEqual(self.stateful_game_object.life, 20) def test_player_values(self): """ Make sure that we can set values for a specific player. """ player = Player() self.game.register([player]) # Make sure that we can't get any values from a default player object self.assertIsNone( self.stateful_game_object.get_value("visible", player)) expected_state_changes = [ ("set", "foo", self.stateful_game_object.game_id, "visible", True) ] # Add per player transition self.stateful_game_object.set_value("visible", True, player) self.assertIsNone(self.stateful_game_object.get_value("visible")) self.assertEqual( self.stateful_game_object.get_value("visible", player), True) # Make sure the game got the right transitions self.assertEqual(expected_state_changes, self.game.get_player_transitions(player.game_id)) # Make sure we can get the proper dictionary representation self.assertDictEqual(self.stateful_game_object.to_dict(), {'game_id': self.stateful_game_object.game_id}) self.assertDictEqual(self.stateful_game_object.to_dict(player), { 'game_id': self.stateful_game_object.game_id, 'visible': True }) def test_set_values(self): """ Make sure that calling set_value and get_value without a player just pass through to get and setattr. """ self.stateful_game_object.life = 10 self.stateful_game_object.set_value("poison", 1) self.assertEqual(10, self.stateful_game_object.get_value("life")) self.assertEqual(1, self.stateful_game_object.poison)