#include #include "../src/Lexer.hpp" class LexerTest { public: explicit LexerTest() {} virtual ~LexerTest() {} void test_next(grino::Lexer& lexer, std::string const& oracle) { auto node = lexer.next(); REQUIRE(node != nullptr); REQUIRE(oracle == node->string()); } void test_end(grino::Lexer& lexer) { auto node = lexer.next(); REQUIRE(node == nullptr); } protected: grino::Logger m_logger; }; TEST_CASE_METHOD(LexerTest, "Lexer_errors") { grino::Lexer lexer {m_logger, "tests/lexer"}; lexer.scan(" ยง "); REQUIRE_THROWS_AS(lexer.next(), grino::lexical_error); } TEST_CASE_METHOD(LexerTest, "Lexer_booleans") { grino::Lexer lexer {m_logger, "tests/lexer"}; SECTION("space around") { lexer.scan(" true false "); test_next(lexer, "BOOL[true]"); test_next(lexer, "BOOL[false]"); test_end(lexer); } SECTION("no space around") { lexer.scan("true false"); test_next(lexer, "BOOL[true]"); test_next(lexer, "BOOL[false]"); test_end(lexer); } }