aboutsummaryrefslogtreecommitdiff
path: root/spec/parser_chain_spec.cr
diff options
context:
space:
mode:
authorMatthew Hall <hallmatthew314@gmail.com>2023-04-02 23:43:23 +1200
committerMatthew Hall <hallmatthew314@gmail.com>2023-04-02 23:43:23 +1200
commit8bd7f4ec8f4885c0d8a915d4693e25935503d5bb (patch)
tree24d8c865e320f99fed69a658b46768a324fb7010 /spec/parser_chain_spec.cr
parentbecabe55c4882a32e759430ae399c5e1e4057e2c (diff)
Add 'make' and 'pure' arguments to parser_chain
Diffstat (limited to 'spec/parser_chain_spec.cr')
-rw-r--r--spec/parser_chain_spec.cr23
1 files changed, 19 insertions, 4 deletions
diff --git a/spec/parser_chain_spec.cr b/spec/parser_chain_spec.cr
index 05156ac..9510897 100644
--- a/spec/parser_chain_spec.cr
+++ b/spec/parser_chain_spec.cr
@@ -4,7 +4,7 @@ include Parcom
describe "parser_chain" do
it "works with zero intermediate steps" do
- p = parser_chain Char, Char, "test", finally: Parser(Char, Char).pure('x')
+ p = parser_chain Char, Char, "test", pure: 'x'
tokens = Tokens.from_string("abcd")
result = p.parse(tokens)
@@ -15,7 +15,7 @@ describe "parser_chain" do
it "works with one intermediate step" do
p = parser_chain Char, Char, "test",
{c, Parser(Char, Char).any_token},
- finally: Parser(Char, Char).pure(c)
+ pure: c
tokens = Tokens.from_string("abcd")
result = p.parse(tokens)
@@ -30,7 +30,7 @@ describe "parser_chain" do
{front, digit.many},
{point, Parser.token('.').optional},
{back, digit.many},
- finally: case {front.empty?, point.nil?, back.empty?}
+ make: case {front.empty?, point.nil?, back.empty?}
when {false, _, true}
Parser(Char, Float64).pure(front.join.to_f64 * sign)
when {true, false, false}
@@ -64,7 +64,7 @@ describe "parser_chain" do
two_words = parser_chain Char, {String, String}, "two_words",
{word, any_word},
{_, ws},
- finally: Parser.token_sequence(word.chars).map_const({word, word})
+ make: Parser.token_sequence(word.chars).map_const({word, word})
tokens = Tokens.from_string("foo \n foo")
result = two_words.parse(tokens)
@@ -75,5 +75,20 @@ describe "parser_chain" do
tokens = Tokens.from_string("foofoo")
expect_raises(ParserFail) { two_words.parse(tokens) }
end
+
+ it "fails without being given either `make` or `pure`" do
+ expect_raises(ArgumentError) do
+ _ = parser_chain Char, Char, "fails", {c, Parser.token('t')}
+ end
+ end
+
+ it "fails when given both `make` and `pure` at the same time" do
+ expect_raises(ArgumentError) do
+ _ = parser_chain Char, Char, "fails",
+ {c, Parser.token('t')},
+ pure: c,
+ make: Parser(Char, Char).pure('s')
+ end
+ end
end