diff options
Diffstat (limited to 'src/sexpr')
-rw-r--r-- | src/sexpr/lexer.hpp | 9 | ||||
-rw-r--r-- | src/sexpr/lexer_test.cpp | 22 | ||||
-rw-r--r-- | src/sexpr/parser_test.cpp | 22 |
3 files changed, 12 insertions, 41 deletions
diff --git a/src/sexpr/lexer.hpp b/src/sexpr/lexer.hpp index 744d8c5..9b198a0 100644 --- a/src/sexpr/lexer.hpp +++ b/src/sexpr/lexer.hpp @@ -58,10 +58,13 @@ namespace sexpr Lexer(ZString filename) : _in(filename), _current(TOK_EOF), _span(), _depth() { adv(); } - // for unit tests - Lexer(ZString fake, io::FD fd) - : _in(fake, fd), _current(TOK_EOF), _span(), _depth() + Lexer(io::read_file_from_string, ZString name, XString str) + : _in(io::from_string, name, str), _current(TOK_EOF), _span(), _depth() { adv(); } + Lexer(io::read_file_from_string, ZString name, LString str) + : _in(io::from_string, name, str), _current(TOK_EOF), _span(), _depth() + { adv(); } + Lexeme peek() { return _current; } void adv() { _current = _adv(); } ZString val_string() { return _string; } diff --git a/src/sexpr/lexer_test.cpp b/src/sexpr/lexer_test.cpp index 5904894..d84312e 100644 --- a/src/sexpr/lexer_test.cpp +++ b/src/sexpr/lexer_test.cpp @@ -29,22 +29,6 @@ namespace tmwa { -static -io::FD string_pipe(ZString sz) -{ - io::FD rfd, wfd; - if (-1 == io::FD::pipe(rfd, wfd)) - return io::FD(); - if (sz.size() != wfd.write(sz.c_str(), sz.size())) - { - rfd.close(); - wfd.close(); - return io::FD(); - } - wfd.close(); - return rfd; -} - TEST(sexpr, escape) { EXPECT_EQ(sexpr::escape('\0'), "\\x00"_s); @@ -73,7 +57,7 @@ TEST(sexpr, escape) TEST(sexpr, lexer) { io::LineSpan span; - sexpr::Lexer lexer("<lexer-test1>"_s, string_pipe(" foo( ) 123\"\" \n"_s)); + sexpr::Lexer lexer(io::from_string, "<lexer-test1>"_s, " foo( ) 123\"\" \n"_s); EXPECT_EQ(lexer.peek(), sexpr::TOK_TOKEN); EXPECT_EQ(lexer.val_string(), "foo"_s); EXPECT_EQ(lexer.span().error_str("test"_s), @@ -120,7 +104,7 @@ TEST(sexpr, lexbad) QuietFd q; { io::LineSpan span; - sexpr::Lexer lexer("<lexer-bad>"_s, string_pipe("(\n"_s)); + sexpr::Lexer lexer(io::from_string, "<lexer-bad>"_s, "(\n"_s); EXPECT_EQ(lexer.peek(), sexpr::TOK_OPEN); lexer.adv(); EXPECT_EQ(lexer.peek(), sexpr::TOK_ERROR); @@ -135,7 +119,7 @@ TEST(sexpr, lexbad) }) { io::LineSpan span; - sexpr::Lexer lexer("<lexer-bad>"_s, string_pipe(bad)); + sexpr::Lexer lexer(io::from_string, "<lexer-bad>"_s, bad); EXPECT_EQ(lexer.peek(), sexpr::TOK_ERROR); } } diff --git a/src/sexpr/parser_test.cpp b/src/sexpr/parser_test.cpp index 8619c15..bbaf5eb 100644 --- a/src/sexpr/parser_test.cpp +++ b/src/sexpr/parser_test.cpp @@ -27,27 +27,11 @@ namespace tmwa { -static -io::FD string_pipe(ZString sz) -{ - io::FD rfd, wfd; - if (-1 == io::FD::pipe(rfd, wfd)) - return io::FD(); - if (sz.size() != wfd.write(sz.c_str(), sz.size())) - { - rfd.close(); - wfd.close(); - return io::FD(); - } - wfd.close(); - return rfd; -} - TEST(sexpr, parser) { sexpr::SExpr s; io::LineSpan span; - sexpr::Lexer lexer("<parser-test1>"_s, string_pipe(" foo( ) 123\"\" \n"_s)); + sexpr::Lexer lexer(io::from_string, "<parser-test1>"_s, " foo( ) 123\"\" \n"_s); EXPECT_TRUE(sexpr::parse(lexer, s)); EXPECT_EQ(s._type, sexpr::TOKEN); @@ -72,7 +56,7 @@ TEST(sexpr, parser) TEST(sexpr, parselist) { sexpr::SExpr s; - sexpr::Lexer lexer("<parser-test1>"_s, string_pipe("(foo)(bar)\n"_s)); + sexpr::Lexer lexer(io::from_string, "<parser-test1>"_s, "(foo)(bar)\n"_s); EXPECT_TRUE(sexpr::parse(lexer, s)); EXPECT_EQ(s._type, sexpr::LIST); @@ -108,7 +92,7 @@ TEST(sexpr, parsebad) { sexpr::SExpr s; io::LineSpan span; - sexpr::Lexer lexer("<parse-bad>"_s, string_pipe(bad)); + sexpr::Lexer lexer(io::from_string, "<parse-bad>"_s, bad); EXPECT_FALSE(sexpr::parse(lexer, s)); EXPECT_EQ(lexer.peek(), sexpr::TOK_ERROR); } |