#include #include 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)); }