Example #1
0
    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()
Example #2
0
    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()
Example #3
0
    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()
Example #4
0
    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()
Example #5
0
    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()
Example #6
0
    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()
Example #7
0
    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()
Example #8
0
    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)
Example #9
0
    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()
Example #10
0
    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()
Example #11
0
    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()
Example #12
0
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