muzgen/tests/Lexer.cpp

63 lines
1.2 KiB
C++
Raw Normal View History

#include <catch2/catch.hpp>
#include <lib/Lexer.hpp>
class LexerTest
{
public:
explicit LexerTest() {}
virtual ~LexerTest() {}
protected:
};
static std::string next_val(muz::Lexer& lexer)
{
auto tok = lexer.next();
if (tok)
{
return tok->string();
}
return "";
}
TEST_CASE_METHOD(LexerTest, "Lexer_num")
{
muz::Lexer lexer;
lexer.scan(" 34 2.9 -7 -3.14 .1 1.");
REQUIRE("NUM[34]" == next_val(lexer));
REQUIRE("NUM[2.9]" == next_val(lexer));
REQUIRE("NUM[-7]" == next_val(lexer));
REQUIRE("NUM[-3.14]" == next_val(lexer));
REQUIRE("NUM[.1]" == next_val(lexer));
REQUIRE("NUM[1.]" == next_val(lexer));
REQUIRE("" == next_val(lexer));
}
TEST_CASE_METHOD(LexerTest, "Lexer_ident")
{
muz::Lexer lexer;
lexer.scan(" hello hello_world @hello");
REQUIRE("IDENT[hello]" == next_val(lexer));
REQUIRE("IDENT[hello_world]" == next_val(lexer));
REQUIRE("DIR_IDENT[@hello]" == next_val(lexer));
REQUIRE("" == next_val(lexer));
}
TEST_CASE_METHOD(LexerTest, "Lexer_commands")
{
muz::Lexer lexer;
lexer.scan(" [[]");
REQUIRE("OSQUARE" == next_val(lexer));
REQUIRE("OSQUARE" == next_val(lexer));
REQUIRE("CSQUARE" == next_val(lexer));
REQUIRE("" == next_val(lexer));
}