]> git.wincent.com - walrat.git/blob - spec/walrat/proc_parslet_spec.rb
Initial import (extraction from Walrus repo, commit 0c9d44c)
[walrat.git] / spec / walrat / proc_parslet_spec.rb
1 # Copyright 2007-2010 Wincent Colaiuta. All rights reserved.
2 # Redistribution and use in source and binary forms, with or without
3 # modification, are permitted provided that the following conditions are met:
4 #
5 # 1. Redistributions of source code must retain the above copyright notice,
6 #    this list of conditions and the following disclaimer.
7 # 2. Redistributions in binary form must reproduce the above copyright notice,
8 #    this list of conditions and the following disclaimer in the documentation
9 #    and/or other materials provided with the distribution.
10 #
11 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
12 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
13 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
14 # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
15 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
16 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
17 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
18 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
19 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
20 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
21 # POSSIBILITY OF SUCH DAMAGE.
22
23 require File.expand_path('../spec_helper', File.dirname(__FILE__))
24
25 describe Walrat::ProcParslet do
26   before do
27     @parslet = lambda do |string, options|
28       if string == 'foobar'
29         string
30       else
31         raise Walrat::ParseError.new("expected foobar but got '#{string}'")
32       end
33     end.to_parseable
34   end
35
36   it 'raises an ArgumentError if initialized with nil' do
37     expect do
38       Walrat::ProcParslet.new nil
39     end.to raise_error(ArgumentError, /nil proc/)
40   end
41
42   it 'complains if asked to parse nil' do
43     expect do
44       @parslet.parse nil
45     end.to raise_error(ArgumentError, /nil string/)
46   end
47
48   it 'raises Walrat::ParseError if unable to parse' do
49     expect do
50       @parslet.parse 'bar'
51     end.to raise_error(Walrat::ParseError)
52   end
53
54   it 'returns a parsed value if able to parse' do
55     @parslet.parse('foobar').should == 'foobar'
56   end
57
58   it 'can be compared for equality' do
59     # in practice only parslets created with the exact same Proc instance will
60     # be eql because Proc returns different hashes for each
61     @parslet.should eql(@parslet.clone)
62     @parslet.should eql(@parslet.dup)
63     @parslet.should_not eql(lambda { nil }.to_parseable)
64   end
65 end