Support adding filename to diagnostic.
This commit is contained in:
@@ -6,7 +6,7 @@ using namespace ElohimScript::Parser;
|
||||
#define KEYWORD_TEST(script, symbol) \
|
||||
TEST_CASE("Lex " script) { \
|
||||
ElohimScript::Diagnostics::Diagnostics diag; \
|
||||
auto lexer = Lexer(script, &diag); \
|
||||
auto lexer = Lexer(script, script, &diag); \
|
||||
const auto* token = lexer.Lex(); \
|
||||
CHECK(diag.GetMessages().empty()); \
|
||||
CHECK(token->GetKind() == LexTokenKind::symbol); \
|
||||
@@ -93,7 +93,7 @@ namespace doctest {
|
||||
#define IDENTIFIER_TEST(identifier) \
|
||||
TEST_CASE("Lex identifier " identifier) { \
|
||||
ElohimScript::Diagnostics::Diagnostics diag; \
|
||||
auto lexer = Lexer(identifier, &diag); \
|
||||
auto lexer = Lexer(identifier, identifier, &diag); \
|
||||
const auto* token = lexer.Lex(); \
|
||||
CHECK(diag.GetMessages().empty()); \
|
||||
REQUIRE(token->GetKind() == LexTokenKind::Identifier); \
|
||||
|
||||
@@ -6,7 +6,7 @@ using namespace ElohimScript::Parser;
|
||||
#define LEX_TEST(script, ...) \
|
||||
TEST_CASE("Lex: " script) { \
|
||||
ElohimScript::Diagnostics::Diagnostics diag; \
|
||||
auto lexer = Lexer(script, &diag); \
|
||||
auto lexer = Lexer(script, script, &diag); \
|
||||
const auto* token = lexer.Lex(); \
|
||||
CHECK(diag.GetMessages().empty()); \
|
||||
std::vector<LexTokenKind> vec = {__VA_ARGS__, LexTokenKind::EndOfFile}; \
|
||||
|
||||
@@ -6,7 +6,7 @@ using namespace ElohimScript::Parser;
|
||||
#define INTEGER_TEST(script, expected) \
|
||||
TEST_CASE("Lex " script) { \
|
||||
ElohimScript::Diagnostics::Diagnostics diag; \
|
||||
auto lexer = Lexer(script, &diag); \
|
||||
auto lexer = Lexer(script, script, &diag); \
|
||||
const auto* token = lexer.Lex(); \
|
||||
CHECK(diag.GetMessages().empty()); \
|
||||
REQUIRE(token->GetKind() == LexTokenKind::IntegerLiteral); \
|
||||
@@ -18,7 +18,7 @@ using namespace ElohimScript::Parser;
|
||||
#define FLOAT_TEST(script, expected) \
|
||||
TEST_CASE("Lex " script) { \
|
||||
ElohimScript::Diagnostics::Diagnostics diag; \
|
||||
auto lexer = Lexer(script, &diag); \
|
||||
auto lexer = Lexer(script, script, &diag); \
|
||||
const auto* token = lexer.Lex(); \
|
||||
CHECK(diag.GetMessages().empty()); \
|
||||
REQUIRE(token->GetKind() == LexTokenKind::FloatLiteral); \
|
||||
@@ -73,11 +73,12 @@ INTEGER_TEST("0B110011", 51);
|
||||
|
||||
TEST_CASE("Lex invalid numerical base") {
|
||||
ElohimScript::Diagnostics::Diagnostics diag;
|
||||
auto lexer = Lexer("0f553", &diag);
|
||||
auto lexer = Lexer("bad base", "0f553", &diag);
|
||||
lexer.Lex();
|
||||
const auto& messages = diag.GetMessages();
|
||||
REQUIRE(messages.size() == 1);
|
||||
CHECK(messages[0].GetType() == ElohimScript::Diagnostics::DiagnosticType::InvalidNumericalBase);
|
||||
CHECK(messages[0].GetLevel() == ElohimScript::Diagnostics::DiagnosticLevel::Error);
|
||||
CHECK(messages[0].GetSpan() == ElohimScript::TextSpan(0, 2));
|
||||
CHECK(messages[0].GetScriptName() == u8"bad base");
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ using namespace ElohimScript::Parser;
|
||||
#define STRING_TEST(str, constraint) \
|
||||
TEST_CASE("Lex string " constraint str constraint) { \
|
||||
ElohimScript::Diagnostics::Diagnostics diag; \
|
||||
auto lexer = Lexer(constraint str constraint, &diag); \
|
||||
auto lexer = Lexer(str, constraint str constraint, &diag); \
|
||||
const auto* token = lexer.Lex(); \
|
||||
CHECK(diag.GetMessages().empty()); \
|
||||
REQUIRE(token->GetKind() == LexTokenKind::StringLiteral); \
|
||||
@@ -23,7 +23,7 @@ STRING_TEST("\"\"foo bar\"\"", "\"\"\"");
|
||||
|
||||
TEST_CASE("Lex multiline string") {
|
||||
ElohimScript::Diagnostics::Diagnostics diag;
|
||||
auto lexer = Lexer(R"("""foo
|
||||
auto lexer = Lexer("multiline", R"("""foo
|
||||
bar""")",
|
||||
&diag);
|
||||
const auto* token = lexer.Lex();
|
||||
|
||||
@@ -7,7 +7,7 @@ using namespace ElohimScript::Parser;
|
||||
#define SYMBOL_TEST(script, symbol) \
|
||||
TEST_CASE("Lex " script) { \
|
||||
ElohimScript::Diagnostics::Diagnostics diag; \
|
||||
auto lexer = Lexer(script, &diag); \
|
||||
auto lexer = Lexer(script, script, &diag); \
|
||||
const auto* token = lexer.Lex(); \
|
||||
CHECK(diag.GetMessages().empty()); \
|
||||
CHECK(token->GetKind() == LexTokenKind::symbol); \
|
||||
@@ -72,9 +72,9 @@ SYMBOL_TEST(" ", Whitespace)
|
||||
|
||||
TEST_CASE("Lex whitespace") {
|
||||
auto whitespace = {" ", "\t", "\n", "\r", "\xef\xbb\xbf"};
|
||||
for (const auto *v : whitespace) {
|
||||
for (const auto* v : whitespace) {
|
||||
ElohimScript::Diagnostics::Diagnostics diag;
|
||||
auto lexer = Lexer(v, &diag);
|
||||
auto lexer = Lexer("whitespace", v, &diag);
|
||||
const auto* token = lexer.Lex();
|
||||
CHECK(diag.GetMessages().empty());
|
||||
CHECK(token->GetKind() == LexTokenKind::Whitespace);
|
||||
|
||||
Reference in New Issue
Block a user