]> git.wincent.com - walrat.git/blob - spec/parslet_omission_spec.rb
Update to RSpec 3.1.0
[walrat.git] / spec / parslet_omission_spec.rb
1 # Copyright 2007-2014 Greg Hurrell. All rights reserved.
2 # Licensed under the terms of the BSD 2-clause license.
3
4 require 'spec_helper'
5
6 describe Walrat::ParsletOmission do
7   it 'raises if "parseable" argument is nil' do
8     expect do
9       Walrat::ParsletOmission.new nil
10     end.to raise_error(ArgumentError, /nil parseable/)
11   end
12
13   it 'complains if passed nil string for parsing' do
14     expect do
15       Walrat::ParsletOmission.new('foo'.to_parseable).parse nil
16     end.to raise_error(ArgumentError, /nil string/)
17   end
18
19   it 're-raises parse errors from lower levels' do
20     expect do
21       Walrat::ParsletOmission.new('foo'.to_parseable).parse 'bar'
22     end.to raise_error(Walrat::ParseError)
23   end
24
25   it 'indicates parse errors with a SubstringSkippedException' do
26     expect do
27       Walrat::ParsletOmission.new('foo'.to_parseable).parse 'foo'
28     end.to raise_error(Walrat::SkippedSubstringException)
29   end
30
31   specify 'the raised SubstringSkippedException includes the parsed substring' do
32     begin
33       Walrat::ParsletOmission.new('foo'.to_parseable).parse 'foobar'
34     rescue Walrat::SkippedSubstringException => e
35       substring = e.to_s
36     end
37     substring.should == 'foo'
38   end
39
40   specify 'the parsed substring is an an empty string in the case of a zero-width parse success at a lower level' do
41     begin
42       Walrat::ParsletOmission.new('foo'.optional).parse 'bar' # a contrived example
43     rescue Walrat::SkippedSubstringException => e
44       substring = e.to_s
45     end
46     substring.should == ''
47   end
48
49   it 'can be compared for equality' do
50     Walrat::ParsletOmission.new('foo').
51       should eql(Walrat::ParsletOmission.new('foo'))
52     Walrat::ParsletOmission.new('foo').
53       should_not eql(Walrat::ParsletOmission.new('bar'))
54   end
55 end