def test_should_recognize_the_left_arrow_operator(self): lexer = Lexer('<-') token = lexer.next_token() self.assertEqual(token.type, TokenType.LEFT_ARROW) self.assertEqual(token.value, '<-')
def test_should_recognize_a_string_containing_an_espaced_backslash(self): lexer = Lexer('"a string with a \\\\ backslash"') token = lexer.next_token() self.assertEqual(token.type, TokenType.STRING) self.assertEqual(token.value, '"a string with a \\\\ backslash"')
def test_should_recognize_a_string_containing_escape_sequences(self): lexer = Lexer('"a string containing \\t\\b\\r\\f\\v\\0 escape sequences"') token = lexer.next_token() self.assertEqual(token.type, TokenType.STRING) self.assertEqual(token.value, '"a string containing \\t\\b\\r\\f\\v\\0 escape sequences"')
def test_should_recognize_decimal_in_scientific_notation_with_negative_exponent_part(self): lexer = Lexer('42e-65') token = lexer.next_token() self.assertEqual(token.type, TokenType.DECIMAL) self.assertEqual(token.value, '42e-65')
def test_should_recognize_a_left_parenthesis(self): lexer = Lexer('(') token = lexer.next_token() self.assertEqual(token.type, TokenType.LEFT_PAREN) self.assertEqual(token.value, '(')
def test_should_recognize_a_comma(self): lexer = Lexer(',') token = lexer.next_token() self.assertEqual(token.type, TokenType.COMMA) self.assertEqual(token.value, ',')
def test_should_recognize_a_right_bracket(self): lexer = Lexer(']') token = lexer.next_token() self.assertEqual(token.type, TokenType.RIGHT_BRACKET) self.assertEqual(token.value, ']')
def test_should_recognize_the_plus_operator(self): lexer = Lexer('+') token = lexer.next_token() self.assertEqual(token.type, TokenType.PLUS) self.assertEqual(token.value, '+')
def test_should_recognize_the_times_operator(self): lexer = Lexer('*') token = lexer.next_token() self.assertEqual(token.type, TokenType.TIMES) self.assertEqual(token.value, '*')
def test_should_recognize_the_div_operator(self): lexer = Lexer('/') token = lexer.next_token() self.assertEqual(token.type, TokenType.DIV) self.assertEqual(token.value, '/')
def test_should_recognize_the_modulo_operator(self): lexer = Lexer('%') token = lexer.next_token() self.assertEqual(token.type, TokenType.MOD) self.assertEqual(token.value, '%')
def test_should_recognize_the_right_arrow_operator(self): lexer = Lexer('->') token = lexer.next_token() self.assertEqual(token.type, TokenType.RIGHT_ARROW) self.assertEqual(token.value, '->')
def test_should_recognize_the_minus_equal_operator(self): lexer = Lexer('-=') token = lexer.next_token() self.assertEqual(token.type, TokenType.MINUS_EQUAL) self.assertEqual(token.value, '-=')
def test_should_recognize_simple_decimal_literal(self): lexer = Lexer('3.14') token = lexer.next_token() self.assertEqual(token.type, TokenType.DECIMAL) self.assertEqual(token.value, '3.14')
def test_should_recognize_a_colon(self): lexer = Lexer(':') token = lexer.next_token() self.assertEqual(token.type, TokenType.COLON) self.assertEqual(token.value, ':')
def test_should_recognize_decimal_starting_with_dot(self): lexer = Lexer('.25') token = lexer.next_token() self.assertEqual(token.type, TokenType.DECIMAL) self.assertEqual(token.value, '.25')
def test_should_recognize_decimal_in_scientific_notation(self): lexer = Lexer('2e65') token = lexer.next_token() self.assertEqual(token.type, TokenType.DECIMAL) self.assertEqual(token.value, '2e65')
def test_should_recognize_the_double_equal_operator(self): lexer = Lexer('==') token = lexer.next_token() self.assertEqual(token.type, TokenType.DOUBLE_EQUAL) self.assertEqual(token.value, '==')
def test_should_recognize_a_left_bracket(self): lexer = Lexer('[') token = lexer.next_token() self.assertEqual(token.type, TokenType.LEFT_BRACKET) self.assertEqual(token.value, '[')
def test_should_recognize_the_greater_or_equal_operator(self): lexer = Lexer('>=') token = lexer.next_token() self.assertEqual(token.type, TokenType.GREATER_OR_EQUAL) self.assertEqual(token.value, '>=')
def test_should_recognize_newline_character_as_single_token(self): lexer = Lexer('\n') token = lexer.next_token() self.assertEqual(token.type, TokenType.NEWLINE) self.assertEqual(token.value, '\n')
def test_should_recognize_the_less_or_equal_operator(self): lexer = Lexer('<=') token = lexer.next_token() self.assertEqual(token.type, TokenType.LESS_OR_EQUAL) self.assertEqual(token.value, '<=')
def test_should_recognize_simple_string_literal(self): lexer = Lexer('"Hello, World!"') token = lexer.next_token() self.assertEqual(token.type, TokenType.STRING) self.assertEqual(token.value, '"Hello, World!"')
def test_should_recognize_the_and_operator(self): lexer = Lexer('&&') token = lexer.next_token() self.assertEqual(token.type, TokenType.AND) self.assertEqual(token.value, '&&')
def test_should_recognize_string_containing_a_newline_character(self): lexer = Lexer('"a string containing a \\n newline character."') token = lexer.next_token() self.assertEqual(token.type, TokenType.STRING) self.assertEqual(token.value, '"a string containing a \\n newline character."')
def test_should_recognize_the_not_operator(self): lexer = Lexer('!') token = lexer.next_token() self.assertEqual(token.type, TokenType.NOT) self.assertEqual(token.value, '!')
def test_should_recognize_a_string_containing_escaped_double_quotes(self): lexer = Lexer('"a string containing an \\" escaped double quote"') token = lexer.next_token() self.assertEqual(token.type, TokenType.STRING) self.assertEqual(token.value, '"a string containing an \\" escaped double quote"')
def test_should_recognize_the_or_operator(self): lexer = Lexer('||') token = lexer.next_token() self.assertEqual(token.type, TokenType.OR) self.assertEqual(token.value, '||')
def test_should_recognize_an_identifier_of_a_single_letter(self): lexer = Lexer('i') token = lexer.next_token() self.assertEqual(token.type, TokenType.IDENTIFIER) self.assertEqual(token.value, 'i')
def test_should_recognize_an_identifier_starting_with_a_reserved_keyword(self): lexer = Lexer('toString') token = lexer.next_token() self.assertEqual(token.type, TokenType.IDENTIFIER) self.assertEqual(token.value, 'toString')