mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-08 06:48:41 +00:00
restore torture mdesk tests
This commit is contained in:
@@ -168,6 +168,7 @@
|
|||||||
|
|
||||||
#include "torture.c"
|
#include "torture.c"
|
||||||
#include "torture_base.c"
|
#include "torture_base.c"
|
||||||
|
#include "torture_md.c"
|
||||||
#include "torture_radlink.c"
|
#include "torture_radlink.c"
|
||||||
#include "torture_dwarf.c"
|
#include "torture_dwarf.c"
|
||||||
#include "torture_d2r.c"
|
#include "torture_d2r.c"
|
||||||
|
|||||||
@@ -0,0 +1,130 @@
|
|||||||
|
#define T_Group "MD"
|
||||||
|
|
||||||
|
TEST(md_tokenizer)
|
||||||
|
{
|
||||||
|
MD_TokenizeResult result;
|
||||||
|
|
||||||
|
// empty
|
||||||
|
result = md_tokenize_from_text(arena, str8_lit(""));
|
||||||
|
T_Ok(result.tokens.count == 0);
|
||||||
|
T_Ok(result.msgs.count == 0);
|
||||||
|
|
||||||
|
// identifiers
|
||||||
|
char *ids[] = {
|
||||||
|
"a",
|
||||||
|
"abc",
|
||||||
|
"_",
|
||||||
|
"_abc",
|
||||||
|
"abc123",
|
||||||
|
"abc_def123",
|
||||||
|
};
|
||||||
|
for EachElement(i, ids) {
|
||||||
|
String8 in = str8_cstring(ids[i]);
|
||||||
|
result = md_tokenize_from_text(arena, in);
|
||||||
|
|
||||||
|
T_Ok(result.tokens.count == 1);
|
||||||
|
T_Ok(result.tokens.v[0].range.min == 0);
|
||||||
|
T_Ok(result.tokens.v[0].range.max == in.size);
|
||||||
|
T_Ok(result.tokens.v[0].flags & MD_TokenFlag_Identifier);
|
||||||
|
T_Ok((result.tokens.v[0].flags & ~MD_TokenFlag_Identifier) == 0);
|
||||||
|
T_Ok(result.msgs.count == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// numerics
|
||||||
|
char *numerics[] = {
|
||||||
|
"0",
|
||||||
|
"123",
|
||||||
|
"123.456",
|
||||||
|
".5",
|
||||||
|
"-1",
|
||||||
|
"-123.45"
|
||||||
|
"123_abc",
|
||||||
|
"1.2.3",
|
||||||
|
};
|
||||||
|
for EachElement(i, numerics) {
|
||||||
|
String8 in = str8_cstring(numerics[i]);
|
||||||
|
result = md_tokenize_from_text(arena, in);
|
||||||
|
|
||||||
|
T_Ok(result.tokens.count == 1);
|
||||||
|
T_Ok(result.tokens.v[0].range.min == 0);
|
||||||
|
T_Ok(result.tokens.v[0].range.max == in.size);
|
||||||
|
T_Ok(result.tokens.v[0].flags & MD_TokenFlag_Numeric);
|
||||||
|
T_Ok((result.tokens.v[0].flags & ~MD_TokenFlag_Numeric) == 0);
|
||||||
|
T_Ok(result.msgs.count == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// comments
|
||||||
|
char *good_comments[] = {
|
||||||
|
"/**/",
|
||||||
|
"/* */",
|
||||||
|
"/* abc */",
|
||||||
|
"/* ** */",
|
||||||
|
"/**/",
|
||||||
|
"/**************/",
|
||||||
|
"/*abc*/",
|
||||||
|
"//foo",
|
||||||
|
"// bar",
|
||||||
|
"//"
|
||||||
|
};
|
||||||
|
B32 good_comments_passed = 0;
|
||||||
|
for EachElement(i, good_comments) {
|
||||||
|
String8 in = str8_cstring(good_comments[i]);
|
||||||
|
result = md_tokenize_from_text(arena, in);
|
||||||
|
|
||||||
|
T_Ok(result.tokens.count == 1);
|
||||||
|
T_Ok(dim_1u64(result.tokens.v[0].range) == in.size);
|
||||||
|
T_Ok(result.tokens.v[0].flags & MD_TokenFlag_Comment);
|
||||||
|
T_Ok((result.tokens.v[0].flags & ~MD_TokenFlag_Comment) == 0);
|
||||||
|
T_Ok(result.msgs.count == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *broken_comments[] = {
|
||||||
|
"/*",
|
||||||
|
"/*/",
|
||||||
|
};
|
||||||
|
for EachElement(i, broken_comments) {
|
||||||
|
String8 in = str8_cstring(broken_comments[i]);
|
||||||
|
result = md_tokenize_from_text(arena, in);
|
||||||
|
T_Ok(result.msgs.worst_message_kind == MD_MsgKind_Error);
|
||||||
|
T_Ok(result.msgs.count > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// unterminated string
|
||||||
|
result = md_tokenize_from_text(arena, str8_lit("\"abc\nc"));
|
||||||
|
T_Ok(result.msgs.worst_message_kind == MD_MsgKind_Error);
|
||||||
|
T_Ok(result.msgs.count > 0);
|
||||||
|
|
||||||
|
// terminated string
|
||||||
|
//
|
||||||
|
// TODO: strings with \n in the middle are not correctly tokenized
|
||||||
|
result = md_tokenize_from_text(arena, str8_lit("\"abc\""));
|
||||||
|
T_Ok(result.msgs.count == 0);
|
||||||
|
|
||||||
|
// line column tracking
|
||||||
|
{
|
||||||
|
result = md_tokenize_from_text(arena, str8_lit("a\nb"));
|
||||||
|
T_Ok(result.tokens.count == 3);
|
||||||
|
|
||||||
|
// verify 'a'
|
||||||
|
T_Ok(result.tokens.v[0].flags & MD_TokenFlag_Identifier);
|
||||||
|
|
||||||
|
// verify '\n'
|
||||||
|
T_Ok(result.tokens.v[1].flags & MD_TokenFlag_Newline);
|
||||||
|
|
||||||
|
// verify 'b'
|
||||||
|
T_Ok(result.tokens.v[2].flags & MD_TokenFlag_Identifier);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
result = md_tokenize_from_text(arena, str8_lit(" abc"));
|
||||||
|
T_Ok(result.tokens.count == 2);
|
||||||
|
T_Ok(result.msgs.count == 0);
|
||||||
|
|
||||||
|
// verify white space
|
||||||
|
T_Ok(result.tokens.v[0].flags & MD_TokenFlag_Whitespace);
|
||||||
|
|
||||||
|
// verify identifier
|
||||||
|
T_Ok(result.tokens.v[1].flags & MD_TokenFlag_Identifier);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef T_Group
|
||||||
Reference in New Issue
Block a user