Skip to content

Commit 780970f

Browse files
test(lexer): add string literal and raw string literal test cases
1 parent 93b0dfc commit 780970f

1 file changed

Lines changed: 124 additions & 0 deletions

File tree

tests/lexer_tests/lexer_literal_test.cxx

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,12 +172,136 @@ TEST(fuzzing_float_literal_nagative_exponent_random)
172172
}
173173
DONE
174174

175+
TEST(test_float_literal_undefined)
176+
const char *source = "-42e----49194-e4771";
177+
Lexer lexer(source);
178+
179+
auto t1 = lexer.next_token();
180+
auto t2 = lexer.next_token();
181+
auto t3 = lexer.next_token();
182+
auto t4 = lexer.next_token();
183+
184+
VERIFY_THIS(TokenKind::MINUS).token_as(t1.kind);
185+
VERIFY_THIS(TokenKind::MINUS).token_str_eq_to(t1, "-", STR_LEN("-"));
186+
VERIFY_THIS(TokenKind::MINUS).token_metadata_eq_to(
187+
lexer.get_source_location(t1), 1, 1, 0
188+
);
189+
190+
VERIFY_THIS(TokenKind::FLOAT_LITERAL).token_as(t2.kind);
191+
VERIFY_THIS(TokenKind::FLOAT_LITERAL).token_str_eq_to(t2, "42e----49194", STR_LEN("42e----49194"));
192+
VERIFY_THIS(TokenKind::FLOAT_LITERAL).token_metadata_eq_to(
193+
lexer.get_source_location(t2), 1, 2, 1
194+
);
195+
196+
VERIFY_THIS(TokenKind::MINUS).token_as(t3.kind);
197+
VERIFY_THIS(TokenKind::MINUS).token_str_eq_to(t3, "-", STR_LEN("-"));
198+
VERIFY_THIS(TokenKind::MINUS).token_metadata_eq_to(
199+
lexer.get_source_location(t3), 1, 14, 13
200+
);
201+
202+
VERIFY_THIS(TokenKind::IDENT).token_as(t4.kind);
203+
VERIFY_THIS(TokenKind::IDENT).token_str_eq_to(t4, "e4771", STR_LEN("e4771"));
204+
VERIFY_THIS(TokenKind::IDENT).token_metadata_eq_to(
205+
lexer.get_source_location(t4), 1, 15, 14
206+
);
207+
DONE
208+
209+
TEST(test_normal_string_literal)
210+
const char *source = "\"My String\"";
211+
Lexer lexer(source);
212+
213+
auto token = lexer.next_token();
214+
VERIFY_THIS(TokenKind::STRING_LITERAL).token_as(token.kind);
215+
VERIFY_THIS(TokenKind::STRING_LITERAL).token_str_eq_to(
216+
token,
217+
"\"My String\"", STR_LEN("\"My String\"")
218+
);
219+
VERIFY_THIS(TokenKind::STRING_LITERAL).token_metadata_eq_to(
220+
lexer.get_source_location(token),
221+
1, 1, 0
222+
);
223+
DONE
224+
225+
TEST(test_string_literal_without_closed)
226+
const char *source = "\"My String";
227+
Lexer lexer(source);
228+
229+
auto token = lexer.next_token();
230+
VERIFY_THIS(TokenKind::STRING_LITERAL).token_as(token.kind);
231+
VERIFY_THIS(TokenKind::STRING_LITERAL).token_str_eq_to(
232+
token,
233+
"\"My String", STR_LEN("\"My String")
234+
);
235+
VERIFY_THIS(TokenKind::STRING_LITERAL).token_metadata_eq_to(
236+
lexer.get_source_location(token),
237+
1, 1, 0
238+
);
239+
DONE
240+
241+
TEST(test_normal_raw_string_literal)
242+
const char *source = "r\"My raw string\"";
243+
Lexer lexer(source);
244+
245+
auto token = lexer.next_token();
246+
247+
VERIFY_THIS(TokenKind::RAW_STRING_LITERAL).token_as(token.kind);
248+
VERIFY_THIS(TokenKind::RAW_STRING_LITERAL).token_str_eq_to(
249+
token,
250+
"r\"My raw string\"", STR_LEN("r\"My raw string\"")
251+
);
252+
VERIFY_THIS(TokenKind::RAW_STRING_LITERAL).token_metadata_eq_to(
253+
lexer.get_source_location(token),
254+
1, 1, 0
255+
);
256+
DONE
257+
258+
TEST(test_raw_string_literal_without_closed)
259+
const char *source = "r\"My raw string";
260+
Lexer lexer(source);
261+
262+
auto token = lexer.next_token();
263+
264+
VERIFY_THIS(TokenKind::RAW_STRING_LITERAL).token_as(token.kind);
265+
VERIFY_THIS(TokenKind::RAW_STRING_LITERAL).token_str_eq_to(
266+
token,
267+
"r\"My raw string", STR_LEN("r\"My raw string")
268+
);
269+
VERIFY_THIS(TokenKind::RAW_STRING_LITERAL).token_metadata_eq_to(
270+
lexer.get_source_location(token),
271+
1, 1, 0
272+
);
273+
DONE
274+
275+
TEST(test_special_ident_r)
276+
const char *source = "r";
277+
Lexer lexer(source);
278+
279+
auto token = lexer.next_token();
280+
281+
VERIFY_THIS(TokenKind::IDENT).token_as(token.kind);
282+
VERIFY_THIS(TokenKind::IDENT).token_str_eq_to(
283+
token,
284+
"r", STR_LEN("r")
285+
);
286+
VERIFY_THIS(TokenKind::IDENT).token_metadata_eq_to(
287+
lexer.get_source_location(token),
288+
1, 1, 0
289+
);
290+
DONE
291+
175292
TEST_ENTRY
176293
RUN_TEST(test_int_literal)
177294
RUN_TEST(test_float_literal_decimal)
178295
RUN_TEST(test_float_literal_exponent)
179296
RUN_TEST(test_float_literal_exponent_negative)
180297
RUN_TEST(test_wrong_float_literal)
298+
RUN_TEST(test_float_literal_undefined)
299+
300+
RUN_TEST(test_normal_string_literal)
301+
RUN_TEST(test_string_literal_without_closed)
302+
RUN_TEST(test_normal_raw_string_literal)
303+
RUN_TEST(test_raw_string_literal_without_closed)
304+
RUN_TEST(test_special_ident_r)
181305

182306
RUN_TEST(fuzzing_int_literal_random)
183307
RUN_TEST(fuzzing_float_literal_random)

0 commit comments

Comments
 (0)