27 lines
1.6 KiB
C++
27 lines
1.6 KiB
C++
|
#include "../../extern/doctest.hpp"
|
||
|
#include "../../src/Parser/Lexer/Lexer.hpp"
|
||
|
#include "../../src/Parser/Parser.hpp"
|
||
|
|
||
|
using namespace MalachScript;
|
||
|
|
||
|
#define PARSE_TEST(name, scriptText, asserts) \
|
||
|
TEST_CASE(name) { \
|
||
|
Diagnostics::Diagnostics diags; \
|
||
|
auto lexer = Parser::Lexer(name, scriptText, &diags); \
|
||
|
auto token = lexer.Lex(); \
|
||
|
auto parser = Parser::Parser(name, token, &diags); \
|
||
|
auto script = parser.Parse(); \
|
||
|
asserts; \
|
||
|
}
|
||
|
|
||
|
PARSE_TEST("Parse class without definition", "class foobar;", {
|
||
|
REQUIRE(diags.GetMessages().empty());
|
||
|
REQUIRE(script->GetStatements().size() == 1);
|
||
|
REQUIRE(script->GetStatements()[0].get()->GetKind() == Parser::ParsedStatementKind::Class);
|
||
|
})
|
||
|
|
||
|
PARSE_TEST("Parse class with empty definition", "class foobar {}", {
|
||
|
REQUIRE(diags.GetMessages().empty());
|
||
|
REQUIRE(script->GetStatements().size() == 1);
|
||
|
REQUIRE(script->GetStatements()[0].get()->GetKind() == Parser::ParsedStatementKind::Class);
|
||
|
})
|