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>78using namespace std::literals;910TEST_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}1819TEST_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 };2526 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}3637TEST_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}