def test_draw_box_delegated(self, mock_renderer, mock_config): # Given renderer = mock_renderer.return_value under_test = Board(0, 0) # When under_test.draw_box() # Verify renderer.draw_box.assert_called() mock_config.return_value.assert_not_called()
def test_update_time(self, mock_renderer, mock_config): # Given renderer = mock_renderer.return_value under_test = Board(0, 0) # When under_test.update_time() # Verify renderer.update_time.assert_called() renderer.commit.assert_called() mock_config.return_value.assert_not_called()
def test_show_no_services(self, mock_renderer, mock_config): # Given renderer = mock_renderer.return_value under_test = Board(0, 0) # When under_test.show_no_services() # Verify renderer.show_no_departures.assert_called() renderer.clear_additional_service_row.assert_called() renderer.commit.assert_called() mock_config.return_value.assert_not_called()
def test_redraw_with_services(self, mock_renderer, mock_config): # Given renderer = mock_renderer.return_value under_test = Board(0, 0) station = "Clapham Junction" platform = "7" services = [ _define_service('a1234b', datetime.date(2021, 3, 21), '1140', 'London Waterloo', '1140', '1'), _define_service('a5678c', datetime.date(2021, 3, 21), '1157', 'Basingstoke', '1202', '2') ] # When under_test.set_station(station, platform) under_test.update_services(services) under_test.redraw() # Verify renderer.update_station_name.assert_called_with(station, platform) renderer.update_primary_departure.assert_called_with( services[0].location_detail) renderer.update_additional_service_row.assert_called() renderer.commit.assert_called() mock_config.return_value.assert_not_called()
def test_set_station(self, mock_renderer, mock_config): # Given station = "Clapham Junction" platform = "7" renderer = mock_renderer.return_value under_test = Board(0, 0) # When under_test.set_station(station, platform) # Verify renderer.update_station_name.assert_called_with(station, platform) renderer.commit.assert_called() mock_config.return_value.assert_not_called()
def test_update_calling_points(self, mock_renderer, mock_config): # Given mock_ticker = unittest.mock.Mock() mock_ticker_instance = mock_ticker.return_value with patch('display.board.Ticker', mock_ticker_instance): under_test = Board(0, 0) calling_points = [ _define_location('Woking', 'WOK', '1202', '1202'), _define_location('Clapham Junction', 'CLJ', '1227', '1227'), _define_location('Vauxhall', 'VXH', '1235', '1235'), _define_location('London Waterloo', 'WAT', '1240', '1241'), ] # When under_test.update_service_calling_points(calling_points, 'CLJ') # Verify mock_renderer.return_value.assert_not_called() mock_ticker.return_value.assert_called() mock_config.return_value.assert_not_called()
def test_advance_ticker_without_services(self, mock_renderer, mock_config): # Given renderer = mock_renderer.return_value under_test = Board(0, 0) station = "Clapham Junction" platform = "7" services = [] # When under_test.set_station(station, platform) under_test.update_services(services) under_test.advance_ticker() # Verify renderer.assert_not_called() mock_config.return_value.assert_not_called()
def __init__(self, player, screen): self._player = player self._board = Board(24, 10, screen) self._snake = Snake([(2, 5), (3, 5), (4, 5)], player.symbol, player.color) self._fruits = set() self._eaten_fruits = set() self._walls = set() self._score = 0 self._direction = Direction.RIGHT self._game_over = False self._add_fruit() for w in range(1, self._board.width - 1): self._walls.add(HorizontalWall((w, 0))) self._walls.add(HorizontalWall((w, self._board.height - 1))) for h in range(self._board.height): self._walls.add(VerticalWall((0, h))) self._walls.add(VerticalWall((self._board.width - 1, h))) walls_pos = list(map(lambda wall: wall.render(), self._walls)) self._board.set_walls_pos(walls_pos)
def __init__(self): for config_station in self.__config.stations: if config_station.code not in self.__station_data: self.__station_data[config_station.code] = StationData( config_station.code) if config_station.code not in self.__boards: self.__boards[config_station.code] = dict() # TODO calculate board positions based on available terminal size # We need to cast platform as a string i.e. in case we have platform 1a self.__boards[config_station.code][str( config_station.platform)] = Board( (self.__board_count * 10) + 1, 0) self.__board_count += 1 self.__stdscr = curses.initscr() self.__update_size()
def test_redraw_without_services(self, mock_renderer, mock_config): # Given renderer = mock_renderer.return_value under_test = Board(0, 0) station = "Clapham Junction" platform = "7" services = [] # When under_test.set_station(station, platform) under_test.update_services(services) under_test.redraw() # Verify renderer.update_station_name.assert_called_with(station, platform) renderer.show_no_departures.assert_called() renderer.clear_additional_service_row.assert_called() renderer.commit.assert_called() mock_config.return_value.assert_not_called()
def test_advance_ticker(self, mock_renderer, mock_config): # Given renderer = mock_renderer.return_value under_test = Board(0, 0) station = "Clapham Junction" platform = "7" services = [ _define_service('a1234b', datetime.date(2021, 3, 21), '1140', 'London Waterloo', '1140', '1'), _define_service('a5678c', datetime.date(2021, 3, 21), '1157', 'Basingstoke', '1202', '2') ] # When under_test.set_station(station, platform) under_test.update_services(services) under_test.advance_ticker() # Verify renderer.update_ticker_row.assert_called() renderer.commit.assert_called() mock_config.return_value.assert_not_called()
class Game: def __init__(self, player, screen): self._player = player self._board = Board(24, 10, screen) self._snake = Snake([(2, 5), (3, 5), (4, 5)], player.symbol, player.color) self._fruits = set() self._eaten_fruits = set() self._walls = set() self._score = 0 self._direction = Direction.RIGHT self._game_over = False self._add_fruit() for w in range(1, self._board.width - 1): self._walls.add(HorizontalWall((w, 0))) self._walls.add(HorizontalWall((w, self._board.height - 1))) for h in range(self._board.height): self._walls.add(VerticalWall((0, h))) self._walls.add(VerticalWall((self._board.width - 1, h))) walls_pos = list(map(lambda wall: wall.render(), self._walls)) self._board.set_walls_pos(walls_pos) def _check_fruits(self, pos): for fruit in self._fruits: if pos == fruit.pos: bonus = fruit.value self._eaten_fruits.add(fruit) self._add_fruit() return bonus return 0 def _clean_fruits(self): for fruit in self._eaten_fruits: self._fruits.remove(fruit) self._eaten_fruits.clear() def _check_collision(self, pos): for w in self._walls: if w.pos == pos: return True for s in self._snake.body: if s == pos: return True return False def _add_fruit(self): occupied = set(list(self._snake.body)) occupied.add(self._snake.head) new_fruit_pos = ( randint(1, self._board.width - 2), randint(1, self._board.height - 2), ) while new_fruit_pos in occupied: new_fruit_pos = ( randint(1, self._board.width - 2), randint(1, self._board.height - 2), ) self._fruits.add(Apple(new_fruit_pos)) def _set_direction(self, direction): if not Direction.is_opposite(direction, self._direction): self._direction = direction def play(self): while not self._game_over: self._clean_fruits() key = self._player.get_input() new_dir = Direction.from_key(key) if new_dir: self._set_direction(new_dir) self._snake.move(self._direction) snake_head = self._snake.head if self._check_collision(snake_head): self._game_over = True else: bonus = self._check_fruits(snake_head) self._snake.add_bonus(bonus) self._player.score += bonus self._board.set_snake_pos(self._snake.render()) fruits_pos = list(map(lambda fruit: fruit.render(), self._fruits)) self._board.set_fruits_pos(fruits_pos) self._board.set_score(self._player.score) self._board.render() time.sleep(0.125) return self._player