| | 14 | end |
|---|
| | 15 | |
|---|
| | 16 | class UriReservedCharactersRoutingTest < Test::Unit::TestCase |
|---|
| | 17 | # See RFC 3986, section 2.2 Reserved Characters |
|---|
| | 18 | |
|---|
| | 19 | def setup |
|---|
| | 20 | ActionController::Routing.use_controllers! ['controller'] |
|---|
| | 21 | @set = ActionController::Routing::RouteSet.new |
|---|
| | 22 | @set.draw do |map| |
|---|
| | 23 | map.connect ':controller/:action/:var' |
|---|
| | 24 | end |
|---|
| | 25 | end |
|---|
| | 26 | |
|---|
| | 27 | def test_should_escape_reserved_uri_characters_within_individual_path_components |
|---|
| | 28 | assert_equal '/controller/action/p1%3Ap2', @set.generate(:controller => 'controller', :action => 'action', :var => 'p1:p2') |
|---|
| | 29 | assert_equal '/controller/action/p1%2Fp2', @set.generate(:controller => 'controller', :action => 'action', :var => 'p1/p2') |
|---|
| | 30 | assert_equal '/controller/action/p1%3Fp2', @set.generate(:controller => 'controller', :action => 'action', :var => 'p1?p2') |
|---|
| | 31 | assert_equal '/controller/action/p1%23p2', @set.generate(:controller => 'controller', :action => 'action', :var => 'p1#p2') |
|---|
| | 32 | assert_equal '/controller/action/p1%5Bp2', @set.generate(:controller => 'controller', :action => 'action', :var => 'p1[p2') |
|---|
| | 33 | assert_equal '/controller/action/p1%5Dp2', @set.generate(:controller => 'controller', :action => 'action', :var => 'p1]p2') |
|---|
| | 34 | assert_equal '/controller/action/p1%40p2', @set.generate(:controller => 'controller', :action => 'action', :var => 'p1@p2') |
|---|
| | 35 | end |
|---|
| | 36 | |
|---|
| | 37 | def test_should_recognize_escaped_path_component_and_unescape |
|---|
| | 38 | expected_options = {:var => "p1:p2", :controller => "controller", :action => "action"} |
|---|
| | 39 | assert_equal expected_options, @set.recognize_path('/controller/action/p1%3Ap2') |
|---|
| | 40 | expected_options = {:var => "p1/p2", :controller => "controller", :action => "action"} |
|---|
| | 41 | assert_equal expected_options, @set.recognize_path('/controller/action/p1%2Fp2') |
|---|
| | 42 | expected_options = {:var => "p1?p2", :controller => "controller", :action => "action"} |
|---|
| | 43 | assert_equal expected_options, @set.recognize_path('/controller/action/p1%3Fp2') |
|---|
| | 44 | expected_options = {:var => "p1#p2", :controller => "controller", :action => "action"} |
|---|
| | 45 | assert_equal expected_options, @set.recognize_path('/controller/action/p1%23p2') |
|---|
| | 46 | expected_options = {:var => "p1[p2", :controller => "controller", :action => "action"} |
|---|
| | 47 | assert_equal expected_options, @set.recognize_path('/controller/action/p1%5Bp2') |
|---|
| | 48 | expected_options = {:var => "p1]p2", :controller => "controller", :action => "action"} |
|---|
| | 49 | assert_equal expected_options, @set.recognize_path('/controller/action/p1%5Dp2') |
|---|
| | 50 | expected_options = {:var => "p1@p2", :controller => "controller", :action => "action"} |
|---|
| | 51 | assert_equal expected_options, @set.recognize_path('/controller/action/p1%40p2') |
|---|
| | 52 | end |
|---|
| | 53 | |
|---|