def test_simple_string(self): stream = string_is('"Some Text is here"') self.assertTrue(self.handler.can_handle(stream)) r = self.handler.handle(stream) self.assertTrue(isinstance(r, String)) self.assertEqual(r.value, 'Some Text is here')
def test_not_enclosed_string(self): stream = string_is('"Some Text is here') self.assertTrue(self.handler.can_handle(stream)) with self.assertRaises(Exception) as cm: self.handler.handle(stream)
def test_comment(self): stream = string_is('# This is some comment') self.assertTrue(self.handler.can_handle(stream)) r = self.handler.handle(stream) self.assertEqual(r, ' This is some comment')
def test_negative_float(self): stream = string_is('-9567.9876') self.assertTrue(self.number_handler.can_handle(stream), 'NumberHandler should handle positive floats') number = self.number_handler.handle(stream) self.assertTrue(isinstance(number, Number)) self.assertTrue(number.value, '-9567.9876')
def test_negative_integer(self): stream = string_is('-43298') self.assertTrue(self.number_handler.can_handle(stream), 'NumberHandler should handle negative integers') number = self.number_handler.handle(stream) self.assertTrue(isinstance(number, Number)) self.assertTrue(number.value, '-43298')
def test_close_bracket(self): stream = string_is(')') self.assertTrue(self.handler.can_handle(stream)) result = self.handler.handle(stream) self.assertTrue(isinstance(result, Punctuation)) self.assertEqual(result.value, ')')
def test_consume_all_stream_gives_same_string(self): input_sting = 'some string' input_stream = string_is(input_sting) aggregate = [] while not input_stream.eof(): aggregate.append(input_stream.next()) self.assertEqual(input_sting, ''.join(aggregate), '')
def test_peek_returns_same_values_as_next(self): input_sting = 'some string' input_stream = string_is(input_sting) aggregate = [] while not input_stream.eof(): peek_result = input_stream.peek() next_result = input_stream.next() self.assertEqual(peek_result, next_result, 'peek should return same values as next')
def test_next_properly_updates_stream_position(self): input_sting = 'some string\n \nsome' input_stream = string_is(input_sting) position_1 = input_stream.current_position() self.assertEqual(position_1.col, 0) self.assertEqual(position_1.line, 1) for i in range(0, 12): input_stream.next() position_2 = input_stream.current_position() self.assertEqual(0, position_2.col) self.assertEqual(2, position_2.line) while not input_stream.eof(): input_stream.next() position_3 = input_stream.current_position() self.assertEqual(position_3.line, 3) self.assertEqual(position_3.col, 4)
def test_peek_does_not_change_stream_position(self): input_sting = 'some string' input_stream = string_is(input_sting) position_1 = input_stream.current_position() peek1_1 = input_stream.peek() peek1_2 = input_stream.peek() self.assertEqual(position_1, input_stream.current_position(), 'peek should not change position in the stream') self.assertEqual( peek1_1, peek1_2, 'peeks from same position in the stream should return same value') next_1 = input_stream.next() after_next_position = input_stream.current_position() self.assertNotEqual(position_1, after_next_position, 'next should change position in the stream') self.assertEqual(position_1.line, after_next_position.line, 'line should remain the same') self.assertEqual(position_1.col + 1, after_next_position.col, 'next should increase col + 1') self.assertEqual(peek1_2, next_1, 'peek should return same values as next') peek2_1 = input_stream.peek() peek2_2 = input_stream.peek() next_2 = input_stream.next() self.assertEqual( peek2_1, peek2_2, 'peeks from same position in the stream should return same value') self.assertEqual(peek2_2, next_2, 'peek should return same values as next')
def test_incorrect_scientific_form_throws_exception(self): stream = string_is('-2.78Ea') with self.assertRaises(Exception) as cm: number = self.number_handler.handle(stream)
def test_negative_scientific_float(self): stream = string_is('-2.78E5') number = self.number_handler.handle(stream) self.assertTrue(isinstance(number, Number)) self.assertTrue(number.value, '-2.78E5')
def test_positive_scientific_integer(self): stream = string_is('25E5') number = self.number_handler.handle(stream) self.assertTrue(isinstance(number, Number)) self.assertTrue(number.value, '25E5')
def test_can_handle_negative_numbers(self): stream = string_is('-5234.239') self.assertTrue(self.number_handler.can_handle(stream))
def test_properly_moves_stream_position_to_nonwhite_character(self): stream = string_is(' \t\t \t W') self.assertTrue(self.handler.can_handle(stream)) self.handler.handle(stream) self.assertEqual('W', stream.peek())