Skip to content
Browse files

fixed utterly broken tests

  • Loading branch information...
1 parent 08bfa9c commit 0d94d070ff82fc1a9bceb840b1166e779798c376 @joshbuddy committed Jul 27, 2011
View
4 Rakefile
@@ -25,12 +25,10 @@ task :release_js do
end
test_tasks = ['test:generation', 'test:recognition', 'test:integration', 'test:examples', 'test:rdoc_examples']
-test_tasks << 'test:js' if `which coffee && which node` && $?.success?
+#test_tasks << 'test:js' if `which coffee && which node` && $?.success?
desc "Run all tests"
task :test => test_tasks
-require 'pp'
-
desc "Clean things"
task :clean do
sh 'find . -name "*.rbc" | xargs rm'
View
8 lib/http_router/node.rb
@@ -13,7 +13,7 @@ class Node
autoload :Lookup, 'http_router/node/lookup'
autoload :Path, 'http_router/node/path'
- attr_reader :priority, :router, :node_position, :parent
+ attr_reader :router
def initialize(router, parent, matchers = [])
@router, @parent, @matchers = router, parent, matchers
@@ -86,12 +86,6 @@ def root
@router.root
end
- def depth
- d, p = 0, @parent
- d, p = d + 1, p.parent until p.nil?
- d
- end
-
def use_named_captures?
//.respond_to?(:names)
end
View
5 lib/http_router/node/free_regex.rb
@@ -8,8 +8,9 @@ def initialize(router, parent, matcher)
end
def to_code
- "whole_path#{depth} = \"/\#{request.joined_path}\"
- if match = #{matcher.inspect}.match(whole_path#{depth}) and match[0].size == whole_path#{depth}.size
+ id = root.next_counter
+ "whole_path#{id} = \"/\#{request.joined_path}\"
+ if match = #{matcher.inspect}.match(whole_path#{id}) and match[0].size == whole_path#{id}.size
request.extra_env['router.regex_match'] = match
old_path = request.path
request.path = ['']
View
7 lib/http_router/node/glob.rb
@@ -7,12 +7,13 @@ def usable?(other)
end
def to_code
- "request.params << (globbed_params#{depth} = [])
+ id = root.next_counter
+ "request.params << (globbed_params#{id} = [])
until request.path.empty?
- globbed_params#{depth} << request.path.shift
+ globbed_params#{id} << request.path.shift
#{super}
end
- request.path[0,0] = globbed_params#{depth}"
+ request.path[0,0] = globbed_params#{id}"
end
end
end
View
5 lib/http_router/node/glob_regex.rb
@@ -12,10 +12,11 @@ def usable?(other)
end
def to_code
- "request.params << (globbed_params#{depth} = [])
+ id = root.next_counter
+ "request.params << (globbed_params#{id} = [])
remaining_parts = request.path.dup
while !remaining_parts.empty? and match = remaining_parts.first.match(#{@matcher.inspect}) and match[0] == remaining_parts.first
- globbed_params#{depth} << remaining_parts.shift
+ globbed_params#{id} << remaining_parts.shift
request.path = remaining_parts
#{node_to_code}
end
View
11 lib/http_router/node/spanning_regex.rb
@@ -3,14 +3,15 @@ class Node
class SpanningRegex < Regex
def to_code
params_count = @ordered_indicies.size
- "whole_path#{depth} = request.joined_path
- if match = #{@matcher.inspect}.match(whole_path#{depth}) and match.begin(0).zero?
- original_path#{depth} = request.path.dup
+ whole_path_var = "whole_path#{root.next_counter}"
+ "#{whole_path_var} = request.joined_path
+ if match = #{@matcher.inspect}.match(#{whole_path_var}) and match.begin(0).zero?
+ _#{whole_path_var} = request.path.dup
" << param_capturing_code << "
- remaining_path = whole_path#{depth}[match[0].size + (whole_path#{depth}[match[0].size] == ?/ ? 1 : 0), whole_path#{depth}.size]
+ remaining_path = #{whole_path_var}[match[0].size + (#{whole_path_var}[match[0].size] == ?/ ? 1 : 0), #{whole_path_var}.size]
request.path = remaining_path.split('/')
#{node_to_code}
- request.path = original_path#{depth}
+ request.path = _#{whole_path_var}
request.params.slice!(#{-params_count.size}, #{params_count})
end
"
View
8 lib/http_router/route.rb
@@ -6,10 +6,10 @@ class Route
def initialize(router, path, opts = {})
@router, @original_path, @opts = router, path, opts
- if @original_path && @original_path[-1] == ?*
- @match_partially = true
- path.slice!(-1)
- elsif @original_path.nil?
+ if @original_path
+ @match_partially = true and path.slice!(-1) if @original_path[-1] == ?*
+ @original_path[0, 0] = '/' if @original_path[0] != ?/
+ else
@match_partially = true
end
process_opts
View
9 lib/http_router/util.rb
@@ -14,6 +14,7 @@ def self.add_path_generation(target, route, path, path_validation_regex = nil)
else
regex << (route.matches_with[part[1, part.size].to_sym] || '.*?').to_s unless path_validation_regex
code << "\#{args.shift || (options && options.delete(:#{part[1, part.size]})) || return}"
+ dynamic = true
end
else
regex << Regexp.quote(part) unless path_validation_regex
@@ -25,11 +26,15 @@ def self.add_path_generation(target, route, path, path_validation_regex = nil)
target.instance_eval <<-EOT, __FILE__, __LINE__ + 1
def raw_url(args, options)
url = \"#{code}\"
- #{"url !~ #{path_validation_regex.inspect} ? nil : " if @dynamic} url
+ #{path_validation_regex.inspect}.match(url) ? url : nil
end
EOT
else
- target.instance_eval "def raw_url(args, options); \"#{code}\"; end", __FILE__, __LINE__
+ target.instance_eval <<-EOT, __FILE__, __LINE__ + 1
+ def raw_url(args, options)
+ \"#{code}\"
+ end
+ EOT
end
end
end
View
7 test/common/generate.txt
@@ -1,3 +1,7 @@
+{"a": "/:var"}
+ ["/test", "a", {"var":"test"}]
+# ["/test", "a", ["test"]]
+
{"a": "/"}
{"b": "/test"}
{"c": "/test/time"}
@@ -76,7 +80,8 @@
["/%C3%A4", "a", {"var": "ä"}]
{"a": {"path": ":var", "var": {"regex": "\\d+"}}}
- [null, "a", "asd"]
+ [null, "a", "asd"]
+ ["/123", "a", "123"]
{"a": "/var"}
["/var?foo%5B%5D=baz&foo%5B%5D=bar", "a", {"foo": ["baz", "bar"]}]
View
4 test/generation.rb
@@ -7,7 +7,7 @@ def run_tests
args.compact!
args.map!{|a| a.is_a?(Hash) ? Hash[a.map{|k,v| [k.to_sym, v]}] : a }
result = begin
- router.url(name.to_sym, *args)
+ @router.url(name.to_sym, *args)
rescue HttpRouter::InvalidRouteException
nil
rescue HttpRouter::MissingParameterException
@@ -19,4 +19,4 @@ def run_tests
end
end
-GenerationTest.run("#{File.dirname(__FILE__)}/common/generate.txt")
+GenerationTest.run("#{File.dirname(__FILE__)}/common/generate.txt")
View
7 test/generic.rb
@@ -79,13 +79,13 @@ def run_tests
def invoke
error("invoke called with no tests or routes") if @tests.empty? || @routes.nil?
- router = HttpRouter.new
+ @router = HttpRouter.new
@routes.case.each do |route_definition|
error("Too many keys! #{route_definition.keys.inspect}") unless route_definition.keys.size == 1
route_name, route_properties = route_definition.keys.first, route_definition.values.first
route = case route_properties
when String
- router.add(route_properties)
+ @router.add(route_properties)
when Hash
opts = {}
route_path = interpret_val(route_properties.delete("path"))
@@ -98,13 +98,14 @@ def invoke
route_properties.each do |key, val|
opts[key.to_sym] = interpret_val(val)
end
- router.add(route_path, opts)
+ @router.add(route_path, opts)
else
error("Route isn't a String or hash")
end
route.name(route_name.to_sym)
route.to{|env| [200, {"env-to-test" => env.dup}, [route_name]]}
end
+ run_tests
print '.'
end
end
View
48 test/recognition.rb
@@ -1,18 +1,44 @@
require "#{File.dirname(__FILE__)}/generic"
class RecognitionTest < AbstractTest
def run_tests
- @tests.map(&:case).each do |(expected_result, name, args)|
- args = [args] unless args.is_a?(Array)
- args.compact!
- args.map!{|a| a.is_a?(Hash) ? Hash[a.map{|k,v| [k.to_sym, v]}] : a }
- result = begin
- router.url(name.to_sym, *args)
- rescue HttpRouter::InvalidRouteException
- nil
- rescue HttpRouter::MissingParameterException
- nil
+ @tests.map(&:case).each do |(name, req, params)|
+ env = case req
+ when String
+ Rack::MockRequest.env_for(req)
+ when Hash
+ e = Rack::MockRequest.env_for(req['path'])
+ e['REQUEST_METHOD'] = req['method'] if req.key?('method')
+ e['rack.url_scheme'] = req['scheme'] if req.key?('scheme')
+ e
end
- error("Result #{result.inspect} did not match expectation #{expected_result.inspect}") unless result == expected_result
+ response = @router.call(env)
+ case name
+ when nil
+ error("Expected no response") unless response.first == 404
+ when Array
+ name.each_with_index do |part, i|
+ case part
+ when Hash then part.keys.all? or error("#{part.inspect} didn't match #{response[i].inspect}")
+ else part == response[i] or error("#{part.inspect} didn't match #{response[i].inspect}")
+ end
+ end
+ else
+ error("Expected #{name} for #{req.inspect} got #{response.inspect}") unless response.last == [name]
+ end
+ env['router.params'] ||= {}
+ params ||= {}
+ if params['PATH_INFO']
+ path_info = params.delete("PATH_INFO")
+ error("path_info #{env['PATH_INFO'].inspect} is not #{path_info.inspect}") unless path_info == env['PATH_INFO']
+ end
+
+ env['router.params'].keys.each do |k|
+ p_v = params.delete(k.to_s)
+ v = env['router.params'].delete(k.to_sym)
+ error("I got #{p_v.inspect} but expected #{v.inspect}") unless p_v == v
+ end
+ error("Left over expectations: #{params.inspect}") unless params.empty?
+ error("Left over matched params: #{env['router.params'].inspect}") unless env['router.params'].empty?
end
print '.'
end

0 comments on commit 0d94d07

Please sign in to comment.
Something went wrong with that request. Please try again.