public
Description: Ruby on Rails
Homepage: http://rubyonrails.org
Clone URL: git://github.com/rails/rails.git
Search Repo:
Added fine-grained assertions for Routing

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@742 
5ecf4fe2-1ee6-0310-87b1-e25e094e27de
dhh (author)
Tue Feb 22 06:07:26 -0800 2005
commit  51bb090d867fbf3606dfd4113dc228529e12112e
tree    d7b4fd89a4ff796e84b27434110f7271f2cba5d0
parent  e9426d22646eed19627784ca07adc902f6c5fe9e
...
161
162
163
164
165
166
 
 
 
 
 
167
168
 
 
169
170
 
 
171
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
 
 
 
189
190
 
 
 
 
 
 
 
191
192
193
...
161
162
163
 
 
 
164
165
166
167
168
169
 
170
171
172
 
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
 
 
 
 
 
 
 
 
 
 
 
 
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
0
@@ -161,33 +161,50 @@
0
       # -- routing assertions --------------------------------------------------
0
 
0
       # Asserts that the routing of the given path is handled correctly and that the parsed options match.
0
- # Also verifies that the provided options can be used to generate the provided path.
0
- def assert_routing(path, options, defaults={}, extras={}, message=nil)
0
- defaults[:controller] ||= options[:controller] # Assume given controller,
0
+ def assert_recognizes(expected_options, path, extras={}, message=nil)
0
+ # Load routes.rb if it hasn't been loaded.
0
+ ActionController::Routing::Routes.reload if ActionController::Routing::Routes.empty?
0
+
0
+ # Assume given controller
0
         request = ActionController::TestRequest.new({}, {}, nil)
0
- request.path_parameters = defaults.clone
0
+ request.path = path
0
+ ActionController::Routing::Routes.recognize!(request)
0
         
0
- ActionController::Routing::Routes.reload if ActionController::Routing::Routes.empty? # Load routes.rb if it hasn't been loaded.
0
+ expected_options = expected_options.clone
0
+ extras.each_key { |key| expected_options.delete key } unless extras.nil?
0
         
0
+ msg = build_message(message, "The recognized options <?> did not match <?>",
0
+ request.path_parameters, expected_options)
0
+ assert_block(msg) { request.path_parameters == expected_options }
0
+ end
0
+
0
+ # Asserts that the provided options can be used to generate the provided path.
0
+ def assert_generates(expected_path, options, defaults={}, extras = {}, message=nil)
0
+ # Load routes.rb if it hasn't been loaded.
0
+ ActionController::Routing::Routes.reload if ActionController::Routing::Routes.empty?
0
+
0
+ # Assume given controller
0
+ request = ActionController::TestRequest.new({}, {}, nil)
0
+ request.path_parameters = (defaults or {}).clone
0
+ request.path_parameters[:controller] ||= options[:controller]
0
+
0
         generated_path, found_extras = ActionController::Routing::Routes.generate(options, request)
0
         generated_path = generated_path.join('/')
0
         msg = build_message(message, "found extras <?>, not <?>", found_extras, extras)
0
         assert_block(msg) { found_extras == extras }
0
         
0
- msg = build_message(message, "The generated path <?> did not match <?>", generated_path, path)
0
- assert_block(msg) { path == generated_path }
0
-
0
- request = ActionController::TestRequest.new({}, {}, nil)
0
- request.path = path
0
- ActionController::Routing::Routes.recognize!(request)
0
-
0
- expected_options = options.clone
0
- extras.each {|k,v| expected_options.delete k}
0
-
0
- msg = build_message(message, "The recognized options <?> did not match <?>", request.path_parameters, expected_options)
0
- assert_block(msg) { request.path_parameters == expected_options }
0
+ msg = build_message(message, "The generated path <?> did not match <?>", generated_path,
0
+ expected_path)
0
+ assert_block(msg) { expected_path == generated_path }
0
       end
0
 
0
+ # asserts that path and options match both ways, in other words, the URL generated from
0
+ # options is same as path, and also that the options recognized from path are same as options
0
+ def assert_routing(path, options, defaults={}, extras={}, message=nil)
0
+ assert_recognizes(options, path, extras, message)
0
+ assert_generates(path, options, defaults, extras, message)
0
+ end
0
+
0
       # -- template assertions ------------------------------------------------
0
 
0
       # ensure that a template object with the given name exists

Comments

    No one has commented yet.