2023-08-30 18:06:26 +00:00
|
|
|
#include <catch2/catch.hpp>
|
|
|
|
#include "../lib/Lexer.hpp"
|
|
|
|
#include "../lib/Parser.hpp"
|
|
|
|
#include "../lib/StaticPass.hpp"
|
|
|
|
|
|
|
|
class StaticPassTest
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
explicit StaticPassTest() {}
|
|
|
|
virtual ~StaticPassTest() {}
|
|
|
|
|
|
|
|
void test_ok(std::string const& source)
|
|
|
|
{
|
|
|
|
roza::SrcLoc loc {"compiler_tests"};
|
|
|
|
roza::StatusLog log;
|
|
|
|
roza::Lexer lexer {log, loc};
|
|
|
|
roza::Parser parser {lexer, log};
|
|
|
|
roza::StaticPass static_pass {log};
|
|
|
|
|
|
|
|
lexer.scan(source);
|
|
|
|
auto node = parser.parse();
|
|
|
|
static_pass.check(node);
|
|
|
|
}
|
|
|
|
|
|
|
|
void test_ko(std::string const& source)
|
|
|
|
{
|
|
|
|
REQUIRE_THROWS(test_ok(source));
|
|
|
|
}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
};
|
|
|
|
|
|
|
|
TEST_CASE_METHOD(StaticPassTest, "StaticPass_integer")
|
|
|
|
{
|
|
|
|
test_ok(" 43 ");
|
2023-08-31 09:07:03 +00:00
|
|
|
test_ko(" 43 + 7 * true");
|
2023-08-30 18:06:26 +00:00
|
|
|
}
|
2023-08-31 09:37:13 +00:00
|
|
|
|
|
|
|
TEST_CASE_METHOD(StaticPassTest, "StaticPass_cmp")
|
|
|
|
{
|
|
|
|
test_ok(" 43 < 12 ");
|
|
|
|
test_ko(" 3 == true");
|
|
|
|
test_ko(" 2 > false");
|
|
|
|
}
|