diff options
Diffstat (limited to 'spec')
| -rw-r--r-- | spec/parcom_spec.cr | 47 |
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 |
