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