mush

git clone git://git.lin.moe/mush.git

 1#include "Parser.hpp"
 2#include "macros.hpp"
 3#include <array>
 4#include <cassert>
 5#include <catch2/catch_all.hpp>
 6#include <catch2/catch_test_macros.hpp>
 7
 8using namespace std::literals;
 9
10TEST_CASE("Parser single quote", "[parser]")
11{
12	auto in = std::istringstream{"'ab\n\"c'"};
13	auto p = parsing::Parser(in);
14	auto w = p.singleQuotes();
15	REQUIRE(w != nullptr);
16	REQUIRE(w->str == "ab\n\"c"s);
17}
18
19TEST_CASE("Parse double quote", "[parser]")
20{
21	std::array expressions = {
22	    "\"abc\\n'\"", "\"abc\\\"\"", "\"abc\\\"\"",
23	    "\"a${b}c\"",  "\"a$(b)c\"",  "\"a`ls`b\"",
24	};
25
26	for (const auto &i : expressions) {
27		auto in = std::istringstream{i};
28		auto p = parsing::Parser(in);
29		auto s = p.doubleQuotes();
30		CAPTURE_PARSER_ERROR(p);
31		REQUIRE(s != nullptr);
32		REQUIRE(s->type == ast::WordType::list);
33		REQUIRE(s->double_quoted == true);
34	}
35}
36
37TEST_CASE("Parse back quote", "[parser]")
38{
39	std::array expressions = {"`ls2`", "`ls3 \\`ls4\\``"};
40	for (const auto &i : expressions) {
41		auto in = std::istringstream{i};
42		auto p = parsing::Parser(in);
43		auto s = p.backQuotes();
44		CAPTURE_PARSER_ERROR(p);
45		REQUIRE(s != nullptr);
46	}
47}