spec/private/parser_spec.rb in usher-0.5.10 vs spec/private/parser_spec.rb in usher-0.5.11

- old
+ new

@@ -21,10 +21,14 @@ end it "should split on ' ' delimited routes for more complex routes as well" do Usher.new(:delimiters => [' '], :valid_regex => '[0-9A-Za-z\$\-_\+!\*\',]+').parser.parse_and_expand('(test|this) split').should == [['test', ' ', 'split'], ['this', ' ', 'split']] end + + it "should correctly handle multichar delimiters as well" do + Usher.new(:delimiters => ['%28', '%29'], :valid_regex => '[0-9A-Za-z\$\-_\+!\*\',]+').parser.parse_and_expand('cheese%28parmesan%29').should == [['cheese', '%28', 'parmesan', '%29']] + end it "should group optional parts with brackets" do Usher.new(:delimiters => ['/', '.'], :valid_regex => '[0-9A-Za-z\$\-_\+!\*\',]+').parser.parse_and_expand('/test/this(/split)').should == [ ['/', 'test', '/', 'this'], ['/', 'test', '/', 'this', '/', 'split'] @@ -71,6 +75,29 @@ it "should == variable types" do parts = Usher.new(:delimiters => ['/', '.'], :valid_regex => '[0-9A-Za-z\$\-_\+!\*\',]+').parser.parse_and_expand('/:split/:split').first parts[1].should == parts[3] end -end + it "should let me escape reserved characters" do + Usher.new.parser.parse_and_expand('/my\/thing/is\*lovingyou').should == [["/", "my/thing", "/", "is*lovingyou"]] + end + + it "should let me use escaped characters as delimiters" do + Usher.new(:delimiters => ['/', '\(', '\)']).parser.parse_and_expand('/cheese\(:kind\)').should == [['/', 'cheese', '(', Usher::Route::Variable::Single.new(:kind), ')']] + end + + describe "#generate_route" do + describe "when delimiters contain escaped characters" do + before :each do + @parser = Usher.new(:delimiters => ['/', '\(', '\)']).parser + end + + it "should correctly generate route with a variable" do + route = @parser.generate_route('/cheese\(:kind\)', nil, nil, nil, nil) + variable = route.paths[0].parts[3] + + variable.should be_kind_of(Usher::Route::Variable::Single) + variable.look_ahead.should == ')' + end + end + end +end \ No newline at end of file