22
33#include " gtest/gtest.h"
44
5- using jucc::Lexer;
5+ using jucc::lexer:: Lexer;
66
77TEST (lexer, lexer1) {
88 std::string filename (" ../test/lexer/input.txt" );
@@ -12,26 +12,51 @@ TEST(lexer, lexer1) {
1212 int token;
1313
1414 token = lex.GetToken (is);
15- ASSERT_EQ (jucc::TOK_INT, token);
15+ ASSERT_EQ (jucc::lexer:: TOK_INT, token);
1616 token = lex.GetToken (is);
17- ASSERT_EQ (jucc::TOK_IDENTIFIER, token);
17+ ASSERT_EQ (jucc::lexer:: TOK_IDENTIFIER, token);
1818 token = lex.GetToken (is);
19- ASSERT_EQ (jucc::TOK_PAREN_OPEN, token);
19+ ASSERT_EQ (jucc::lexer:: TOK_PAREN_OPEN, token);
2020 token = lex.GetToken (is);
21- ASSERT_EQ (jucc::TOK_PAREN_CLOSE, token);
21+ ASSERT_EQ (jucc::lexer:: TOK_PAREN_CLOSE, token);
2222 token = lex.GetToken (is);
23- ASSERT_EQ (jucc::TOK_CURLY_OPEN, token);
23+ ASSERT_EQ (jucc::lexer:: TOK_CURLY_OPEN, token);
2424 token = lex.GetToken (is);
25- ASSERT_EQ (jucc::TOK_COUT , token);
25+ ASSERT_EQ (jucc::lexer::TOK_INT , token);
2626 token = lex.GetToken (is);
27- ASSERT_EQ (jucc::TOK_LEFT_SHIFT , token);
27+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER , token);
2828 token = lex.GetToken (is);
29- ASSERT_EQ (jucc::TOK_LITERAL , token);
29+ ASSERT_EQ (jucc::lexer::TOK_COMMA , token);
3030 token = lex.GetToken (is);
31- ASSERT_EQ (jucc::TOK_SEMICOLON , token);
31+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER , token);
3232 token = lex.GetToken (is);
33- ASSERT_EQ (jucc::TOK_CURLY_CLOSE, token);
34-
33+ ASSERT_EQ (jucc::lexer::TOK_ASSIGNMENT, token);
34+ token = lex.GetToken (is);
35+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
36+ token = lex.GetToken (is);
37+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON, token);
38+ token = lex.GetToken (is);
39+ ASSERT_EQ (jucc::lexer::TOK_FLOAT, token);
40+ token = lex.GetToken (is);
41+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
42+ token = lex.GetToken (is);
43+ ASSERT_EQ (jucc::lexer::TOK_ASSIGNMENT, token);
44+ token = lex.GetToken (is);
45+ ASSERT_EQ (jucc::lexer::TOK_FRACTIONAL, token);
46+ token = lex.GetToken (is);
47+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON, token);
48+ token = lex.GetToken (is);
49+ ASSERT_EQ (jucc::lexer::TOK_COUT, token);
50+ token = lex.GetToken (is);
51+ ASSERT_EQ (jucc::lexer::TOK_LEFT_SHIFT, token);
52+ token = lex.GetToken (is);
53+ ASSERT_EQ (jucc::lexer::TOK_LITERAL, token);
54+ token = lex.GetToken (is);
55+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON, token);
56+ token = lex.GetToken (is);
57+ ASSERT_EQ (jucc::lexer::TOK_CURLY_CLOSE, token);
58+ token = lex.GetToken (is);
59+ ASSERT_EQ (jucc::lexer::TOK_EOF, token);
3560 is.close ();
3661}
3762
@@ -42,45 +67,71 @@ TEST(lexer, lexer2) {
4267 std::ifstream is (filename);
4368 int token;
4469 token = lex.GetToken (is);
45- ASSERT_EQ (jucc::TOK_INT, token);
70+ ASSERT_EQ (jucc::lexer::TOK_INT, token);
71+ token = lex.GetToken (is);
72+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
73+ token = lex.GetToken (is);
74+ ASSERT_EQ (jucc::lexer::TOK_PAREN_OPEN, token);
75+ token = lex.GetToken (is);
76+ ASSERT_EQ (jucc::lexer::TOK_PAREN_CLOSE, token);
77+ token = lex.GetToken (is);
78+ ASSERT_EQ (jucc::lexer::TOK_CURLY_OPEN, token);
79+ token = lex.GetToken (is);
80+ ASSERT_EQ (jucc::lexer::TOK_INT, token);
81+ token = lex.GetToken (is);
82+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
83+ token = lex.GetToken (is);
84+ ASSERT_EQ (jucc::lexer::TOK_ASSIGNMENT, token);
85+ token = lex.GetToken (is);
86+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
87+ token = lex.GetToken (is);
88+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON, token);
4689 token = lex.GetToken (is);
47- ASSERT_EQ (jucc::TOK_IDENTIFIER , token);
90+ ASSERT_EQ (jucc::lexer::TOK_INT , token);
4891 token = lex.GetToken (is);
49- ASSERT_EQ (jucc::TOK_PAREN_OPEN , token);
92+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER , token);
5093 token = lex.GetToken (is);
51- ASSERT_EQ (jucc::TOK_PAREN_CLOSE , token);
94+ ASSERT_EQ (jucc::lexer::TOK_ASSIGNMENT , token);
5295 token = lex.GetToken (is);
53- ASSERT_EQ (jucc::TOK_CURLY_OPEN , token);
96+ ASSERT_EQ (jucc::lexer::TOK_ERROR , token);
5497 token = lex.GetToken (is);
55- ASSERT_EQ (jucc::TOK_INT , token);
98+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON , token);
5699 token = lex.GetToken (is);
57- ASSERT_EQ (jucc::TOK_IDENTIFIER , token);
100+ ASSERT_EQ (jucc::lexer::TOK_CIN , token);
58101 token = lex.GetToken (is);
59- ASSERT_EQ (jucc::TOK_ASSIGNMENT , token);
102+ ASSERT_EQ (jucc::lexer::TOK_RIGHT_SHIFT , token);
60103 token = lex.GetToken (is);
61- ASSERT_EQ (jucc::TOK_DECIMAL , token);
104+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER , token);
62105 token = lex.GetToken (is);
63- ASSERT_EQ (jucc::TOK_SEMICOLON, token);
106+ ASSERT_EQ (jucc::lexer:: TOK_SEMICOLON, token);
64107 token = lex.GetToken (is);
65- ASSERT_EQ (jucc::TOK_INT , token);
108+ ASSERT_EQ (jucc::lexer::TOK_IF , token);
66109 token = lex.GetToken (is);
67- ASSERT_EQ (jucc::TOK_IDENTIFIER , token);
110+ ASSERT_EQ (jucc::lexer::TOK_PAREN_OPEN , token);
68111 token = lex.GetToken (is);
69- ASSERT_EQ (jucc::TOK_ASSIGNMENT , token);
112+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL , token);
70113 token = lex.GetToken (is);
71- ASSERT_EQ (jucc::TOK_ERROR , token);
114+ ASSERT_EQ (jucc::lexer::TOK_LESS_THAN , token);
72115 token = lex.GetToken (is);
73- ASSERT_EQ (jucc::TOK_SEMICOLON , token);
116+ ASSERT_EQ (jucc::lexer::TOK_FRACTIONAL , token);
74117 token = lex.GetToken (is);
75- ASSERT_EQ (jucc::TOK_COUT , token);
118+ ASSERT_EQ (jucc::lexer::TOK_PAREN_CLOSE , token);
76119 token = lex.GetToken (is);
77- ASSERT_EQ (jucc::TOK_LEFT_SHIFT , token);
120+ ASSERT_EQ (jucc::lexer::TOK_CURLY_OPEN , token);
78121 token = lex.GetToken (is);
79- ASSERT_EQ (jucc::TOK_IDENTIFIER , token);
122+ ASSERT_EQ (jucc::lexer::TOK_COUT , token);
80123 token = lex.GetToken (is);
81- ASSERT_EQ (jucc::TOK_SEMICOLON , token);
124+ ASSERT_EQ (jucc::lexer::TOK_LEFT_SHIFT , token);
82125 token = lex.GetToken (is);
83- ASSERT_EQ (jucc::TOK_CURLY_CLOSE, token);
126+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
127+ token = lex.GetToken (is);
128+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON, token);
129+ token = lex.GetToken (is);
130+ ASSERT_EQ (jucc::lexer::TOK_CURLY_CLOSE, token);
131+ token = lex.GetToken (is);
132+ ASSERT_EQ (jucc::lexer::TOK_CURLY_CLOSE, token);
133+ token = lex.GetToken (is);
134+ ASSERT_EQ (jucc::lexer::TOK_EOF, token);
84135 is.close ();
85136}
86137
@@ -91,32 +142,64 @@ TEST(lexer, lexer3) {
91142 std::ifstream is (filename);
92143 int token;
93144 token = lex.GetToken (is);
94- ASSERT_EQ (jucc::TOK_COMMENT, token);
145+ ASSERT_EQ (jucc::lexer::TOK_COMMENT, token);
146+ token = lex.GetToken (is);
147+ ASSERT_EQ (jucc::lexer::TOK_COMMENT, token);
148+ token = lex.GetToken (is);
149+ ASSERT_EQ (jucc::lexer::TOK_INT, token);
150+ token = lex.GetToken (is);
151+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
152+ token = lex.GetToken (is);
153+ ASSERT_EQ (jucc::lexer::TOK_PAREN_OPEN, token);
154+ token = lex.GetToken (is);
155+ ASSERT_EQ (jucc::lexer::TOK_PAREN_CLOSE, token);
156+ token = lex.GetToken (is);
157+ ASSERT_EQ (jucc::lexer::TOK_CURLY_OPEN, token);
158+ token = lex.GetToken (is);
159+ ASSERT_EQ (jucc::lexer::TOK_COMMENT, token);
95160 token = lex.GetToken (is);
96- ASSERT_EQ (jucc::TOK_COMMENT, token);
161+ ASSERT_EQ (jucc::lexer:: TOK_COMMENT, token);
97162 token = lex.GetToken (is);
98- ASSERT_EQ (jucc::TOK_INT , token);
163+ ASSERT_EQ (jucc::lexer::TOK_COUT , token);
99164 token = lex.GetToken (is);
100- ASSERT_EQ (jucc::TOK_IDENTIFIER , token);
165+ ASSERT_EQ (jucc::lexer::TOK_LEFT_SHIFT , token);
101166 token = lex.GetToken (is);
102- ASSERT_EQ (jucc::TOK_PAREN_OPEN , token);
167+ ASSERT_EQ (jucc::lexer::TOK_LITERAL , token);
103168 token = lex.GetToken (is);
104- ASSERT_EQ (jucc::TOK_PAREN_CLOSE , token);
169+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON , token);
105170 token = lex.GetToken (is);
106- ASSERT_EQ (jucc::TOK_CURLY_OPEN , token);
171+ ASSERT_EQ (jucc::lexer::TOK_CURLY_CLOSE , token);
107172 token = lex.GetToken (is);
108- ASSERT_EQ (jucc::TOK_COMMENT, token);
173+ ASSERT_EQ (jucc::lexer::TOK_EOF, token);
174+ is.close ();
175+ }
176+
177+ TEST (lexer, lexer4) {
178+ std::string filename (" ../test/lexer/input_err2.txt" );
179+ Lexer lex = Lexer ();
180+
181+ std::ifstream is (filename);
182+ int token;
183+ token = lex.GetToken (is);
184+ ASSERT_EQ (jucc::lexer::TOK_INT, token);
185+ token = lex.GetToken (is);
186+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
109187 token = lex.GetToken (is);
110- ASSERT_EQ (jucc::TOK_COMMENT , token);
188+ ASSERT_EQ (jucc::lexer::TOK_PAREN_OPEN , token);
111189 token = lex.GetToken (is);
112- ASSERT_EQ (jucc::TOK_COUT , token);
190+ ASSERT_EQ (jucc::lexer::TOK_PAREN_CLOSE , token);
113191 token = lex.GetToken (is);
114- ASSERT_EQ (jucc::TOK_LEFT_SHIFT , token);
192+ ASSERT_EQ (jucc::lexer::TOK_CURLY_OPEN , token);
115193 token = lex.GetToken (is);
116- ASSERT_EQ (jucc::TOK_LITERAL , token);
194+ ASSERT_EQ (jucc::lexer::TOK_INT , token);
117195 token = lex.GetToken (is);
118- ASSERT_EQ (jucc::TOK_SEMICOLON , token);
196+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER , token);
119197 token = lex.GetToken (is);
120- ASSERT_EQ (jucc::TOK_CURLY_CLOSE, token);
198+ ASSERT_EQ (jucc::lexer::TOK_EQUAL_TO, token);
199+ token = lex.GetToken (is);
200+ ASSERT_EQ (jucc::lexer::TOK_ERROR, token);
201+
202+ // UNEXPECTED BEHAVIOR AFTER THIS
203+ // TOKENS received -2 -100 -2 -1
121204 is.close ();
122205}
0 commit comments