1
+ # As of right now all tests can be run by either one of the following commands in the terminal:
2
+ # python -m unittest discover -s ./tests -p test_*.py
3
+ # python -m unittest discover -s tests
4
+
5
+ import unittest
6
+ from unittest import TestCase
7
+
8
+ import lexer
9
+ from lexer import Lexer
10
+
11
+ class TestLexer (TestCase ):
12
+ def setUp (self ):
13
+ self .lexer = Lexer ("Test" )
14
+
15
+ def tearDown (self ):
16
+ self .lexer = None
17
+
18
+ def test_current_character_in_focus_should_be_T (self ):
19
+ self .assertEqual (self .lexer .current_character , 'T' )
20
+
21
+ def test_peeked_character_should_be_e (self ):
22
+ self .assertEqual (self .lexer .peek (), 'e' )
23
+
24
+ def test_next_character_in_focus_should_be_s (self ):
25
+ self .lexer .next_character ()
26
+ self .lexer .next_character ()
27
+ self .assertEqual (self .lexer .current_character , 's' )
28
+
29
+ def test_advance_3_characters_should_be_t (self ):
30
+ self .lexer .advance_n (3 )
31
+ self .assertEqual (self .lexer .current_character , 't' )
32
+
33
+ def test_peeked_word_ahead_should_be_Batman (self ):
34
+ self .lexer = Lexer (" Batman" )
35
+ self .assertEqual (self .lexer .peek_word_ahead (), "Batman" )
36
+
37
+ def test_digit_tokenize_should_return_integer_42_token (self ):
38
+ self .lexer = Lexer ("42" )
39
+ token = self .lexer .digit_tokenize ()
40
+ self .assertTrue (token .type , "INTEGER" )
41
+ self .assertEqual (token .value , 42 )
42
+
43
+ def test_digit_tokenize_should_return_float_3_14_token (self ):
44
+ self .lexer = Lexer ("3.14" )
45
+ token = self .lexer .digit_tokenize ()
46
+ self .assertTrue (token .type , "FLOAT" )
47
+ self .assertEqual (token .value , 3.14 )
48
+
49
+ def test_escape_character_token_should_be_newline (self ):
50
+ self .lexer = Lexer ('\n ' )
51
+ token = self .lexer .escape_tokenize ()
52
+ self .assertTrue (token .type , "NEWLINE" )
53
+ self .assertEqual (token .value , None )
54
+
55
+ if __name__ == '__main__' :
56
+ unittest .main ()
0 commit comments