aboutsummaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
Diffstat (limited to 'spec')
-rw-r--r--spec/parcom_spec.cr47
1 files changed, 47 insertions, 0 deletions
diff --git a/spec/parcom_spec.cr b/spec/parcom_spec.cr
index 14e232e..6acd1b2 100644
--- a/spec/parcom_spec.cr
+++ b/spec/parcom_spec.cr
@@ -239,5 +239,52 @@ describe Parser do
expect_raises(ParserFail) { p.parse(tokens) }
end
end
+
+ describe "#recover" do
+ p = Parser(Char, Char).token('a').recover('z')
+
+ it "behaves as normal on success" do
+ tokens = Tokens.from_string("abcd")
+ result = p.parse(tokens)
+
+ result.value.should eq('a')
+ result.tokens.should eq(tokens[1..])
+ end
+
+ tokens2 = Tokens.from_string("bbcd")
+ result2 = p.parse(tokens2)
+
+ it "returns the default value instead of failing" do
+ result2.value.should eq('z')
+ end
+
+ it "does not modify the input when recovering" do
+ result2.tokens.should eq(tokens2)
+ end
+ end
+
+ describe "#optional" do
+ p = Parser(Char, Char).token('a').optional
+
+ it "behaves as normal on success" do
+ tokens = Tokens.from_string("abcd")
+ result = p.parse(tokens)
+
+ result.value.should eq('a')
+ result.tokens.should eq(tokens[1..])
+ end
+
+ tokens2 = Tokens.from_string("bbcd")
+ result2 = p.parse(tokens2)
+
+ it "returns nil instead of failing" do
+ result2.value.should be_nil
+ end
+
+ it "does not modify the input when recovering" do
+ result2.tokens.should eq(tokens2)
+ end
+
+ end
end