32 lines
662 B
C++
32 lines
662 B
C++
|
#include <catch2/catch.hpp>
|
||
|
#include "../src/Parser.hpp"
|
||
|
#include "../src/Lexer.hpp"
|
||
|
|
||
|
class ParserTest
|
||
|
{
|
||
|
public:
|
||
|
explicit ParserTest() {}
|
||
|
virtual ~ParserTest() {}
|
||
|
|
||
|
void test_parse(std::string const& oracle,
|
||
|
std::string const& source)
|
||
|
{
|
||
|
zn::Logger logger;
|
||
|
zn::Loc loc {"tests/parser"};
|
||
|
zn::Lexer lexer { logger, loc };
|
||
|
lexer.scan(source);
|
||
|
std::vector<std::shared_ptr<zn::Node>> tokens = lexer.all();
|
||
|
|
||
|
zn::Parser parser {logger};
|
||
|
auto node = parser.parse(tokens);
|
||
|
|
||
|
REQUIRE(oracle == node->string());
|
||
|
}
|
||
|
protected:
|
||
|
};
|
||
|
|
||
|
TEST_CASE_METHOD(ParserTest, "Parser_int")
|
||
|
{
|
||
|
test_parse("MODULE(INT[37])", " 37");
|
||
|
}
|