def build_final_frame(self, frame_input): ''' Builds the final frame ''' converted_frame = [] for character in frame_input: if character == 'X': converted_frame += [10] else: converted_frame += [int(character)] if len(converted_frame) == 3: return FinalFrame(converted_frame[0], converted_frame[1], converted_frame[2]) else: return FinalFrame(converted_frame[0], converted_frame[1])
def test_last_frame_strike_spare(self): ''' Second last frame has a strike ''' frames = [Frame(0, 0)] * 8 + [Frame(10, 0)] frames += [FinalFrame(7, 3, 3)] self._assert_score_equals(frames, 33)
def test_final_frame_equals(self): ''' A FinalFrame is not a Frame! ''' frame = Frame(10, 0) final_frame = FinalFrame(10, 0, 0) self.assertFalse(frame == final_frame)
def test_full_game_into_frames(self): ''' Pass a full normal game and check it's correctly converted into frames ''' game_string = "00102030405060708090" expected_frames = [Frame(0, 0)] + [Frame(1, 0)] + [Frame(2, 0)] expected_frames += [Frame(3, 0)] + [Frame(4, 0)] + [Frame(5, 0)] expected_frames += [Frame(6, 0)] + [Frame(7, 0)] + [Frame(8, 0)] expected_frames += [FinalFrame(9, 0, 0)] factory = FrameFactory() self.assertEqual(factory.build_game(game_string), expected_frames)
def test_builds_frame_references(self): ''' Check the builder is able to correctly transform a list of frames to linked frames ''' frames = [] for index in range(0, 9): frames += [Frame(index, 0)] frames += [FinalFrame(1, 2, 3)] first_linked_frame = self._ready_linked_frame_list(frames) builder = FrameListBuilder(frames) built_frame = builder.build() next_frame = built_frame next_expected_frame = first_linked_frame while next_frame.has_next_frame(): self.assertEquals(next_expected_frame, next_frame) next_frame = next_frame.next_frame next_expected_frame = next_expected_frame.next_frame
def test_final_frame_strike(self): ''' Test the final frame strikes act as expected ''' frames = [Frame(0, 0)] * 9 + [FinalFrame(10, 1, 1)] self._assert_score_equals(frames, 12)
def test_final_frame_spare(self): ''' Test the final frame acts as expected ''' frames = [Frame(0, 0)] * 9 + [FinalFrame(5, 5, 3)] self._assert_score_equals(frames, 13)
def test_total_maximum_score(self): ''' The 300! ''' frames = [Frame(10, 0)] * 9 + [FinalFrame(10, 10, 10)] self._assert_score_equals(frames, 300)
def test_final_frame_spare_strike(self): ''' Spare + strike on the final frame ''' frames = [Frame(0, 0)] * 9 + [FinalFrame(5, 5, 10)] self._assert_score_equals(frames, 20)
def test_final_frame_two_strikes(self): ''' Two strikes on the final frame ''' frames = [Frame(0, 0)] * 9 + [FinalFrame(10, 10, 1)] self._assert_score_equals(frames, 21)