]> git.wincent.com - walrat.git/blob - spec/proc_parslet_spec.rb
Update to RSpec 3.1.0
[walrat.git] / spec / proc_parslet_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::ProcParslet do
7   before do
8     @parslet = lambda do |string, options|
9       if string == 'foobar'
10         string
11       else
12         raise Walrat::ParseError.new("expected foobar but got '#{string}'")
13       end
14     end.to_parseable
15   end
16
17   it 'raises an ArgumentError if initialized with nil' do
18     expect do
19       Walrat::ProcParslet.new nil
20     end.to raise_error(ArgumentError, /nil proc/)
21   end
22
23   it 'complains if asked to parse nil' do
24     expect do
25       @parslet.parse nil
26     end.to raise_error(ArgumentError, /nil string/)
27   end
28
29   it 'raises Walrat::ParseError if unable to parse' do
30     expect do
31       @parslet.parse 'bar'
32     end.to raise_error(Walrat::ParseError)
33   end
34
35   it 'returns a parsed value if able to parse' do
36     @parslet.parse('foobar').should == 'foobar'
37   end
38
39   it 'can be compared for equality' do
40     # in practice only parslets created with the exact same Proc instance will
41     # be eql because Proc returns different hashes for each
42     @parslet.should eql(@parslet.clone)
43     @parslet.should eql(@parslet.dup)
44     @parslet.should_not eql(lambda { nil }.to_parseable)
45   end
46 end