diff options
author | Emilio Tagua <miloops@gmail.com> | 2009-07-01 16:07:45 -0300 |
---|---|---|
committer | Emilio Tagua <miloops@gmail.com> | 2009-07-01 16:07:45 -0300 |
commit | a9cd9f4c751d4664d8f0eaf3026e0792694c2244 (patch) | |
tree | cc8480b2de4578d2aa794d4ced262006636b5014 | |
parent | cbf8ecc1cba733c92191cacdf9bdfa0f5555b68a (diff) | |
parent | 0515256fd32e6efb67fe90aedf0dadc25dc9e1ba (diff) | |
download | rails-a9cd9f4c751d4664d8f0eaf3026e0792694c2244.tar.gz rails-a9cd9f4c751d4664d8f0eaf3026e0792694c2244.tar.bz2 rails-a9cd9f4c751d4664d8f0eaf3026e0792694c2244.zip |
Merge commit 'rails/master'
-rw-r--r-- | actionpack/lib/action_controller/routing/route_set.rb | 2 | ||||
-rw-r--r-- | actionpack/test/controller/routing_test.rb | 11 | ||||
-rw-r--r-- | activesupport/lib/active_support/testing/isolation.rb | 79 | ||||
-rw-r--r-- | activesupport/test/abstract_unit.rb | 2 | ||||
-rw-r--r-- | railties/test/abstract_unit.rb | 2 |
5 files changed, 85 insertions, 11 deletions
diff --git a/actionpack/lib/action_controller/routing/route_set.rb b/actionpack/lib/action_controller/routing/route_set.rb index 45ad8a3a3b..87b4b0571c 100644 --- a/actionpack/lib/action_controller/routing/route_set.rb +++ b/actionpack/lib/action_controller/routing/route_set.rb @@ -436,7 +436,7 @@ module ActionController def recognize(request) params = recognize_path(request.path, extract_request_environment(request)) request.path_parameters = params.with_indifferent_access - "#{params[:controller].camelize}Controller".constantize + "#{params[:controller].to_s.camelize}Controller".constantize end def recognize_path(path, environment={}) diff --git a/actionpack/test/controller/routing_test.rb b/actionpack/test/controller/routing_test.rb index c2acc03a1b..16d7df4843 100644 --- a/actionpack/test/controller/routing_test.rb +++ b/actionpack/test/controller/routing_test.rb @@ -1667,6 +1667,17 @@ class RouteSetTest < Test::Unit::TestCase assert_equal 1, set.routes.size end + def test_draw_symbol_controller_name + assert_equal 0, set.routes.size + set.draw do |map| + map.connect '/users/index', :controller => :users, :action => :index + end + @request = ActionController::TestRequest.new + @request.request_uri = '/users/index' + assert_nothing_raised { set.recognize(@request) } + assert_equal 1, set.routes.size + end + def test_named_draw assert_equal 0, set.routes.size set.draw do |map| diff --git a/activesupport/lib/active_support/testing/isolation.rb b/activesupport/lib/active_support/testing/isolation.rb index 8b2957fbe1..090e0c5c89 100644 --- a/activesupport/lib/active_support/testing/isolation.rb +++ b/activesupport/lib/active_support/testing/isolation.rb @@ -16,24 +16,83 @@ module ActiveSupport::Testing end module Isolation + def self.forking_env? + !ENV["NO_FORK"] && RUBY_PLATFORM !~ /mswin|mingw|java/ + end + def run(result) yield(Test::Unit::TestCase::STARTED, name) - read, write = IO.pipe + @_result = result - pid = fork do - # child - read.close - proxy = ProxyTestResult.new + proxy = run_in_isolation do |proxy| super(proxy) { } - write.puts [Marshal.dump(proxy)].pack("m") - exit! end - write.close - Marshal.load(read.read.unpack("m")[0]).__replay__(result) - Process.wait2(pid) + proxy.__replay__(@_result) + yield(Test::Unit::TestCase::FINISHED, name) end + + module Forking + def run_in_isolation(&blk) + read, write = IO.pipe + + pid = fork do + read.close + proxy = ProxyTestResult.new + yield proxy + write.puts [Marshal.dump(proxy)].pack("m") + exit! + end + + write.close + result = read.read + Process.wait2(pid) + Marshal.load(result.unpack("m")[0]) + end + end + + module Subprocess + # Crazy H4X to get this working in windows / jruby with + # no forking. + def run_in_isolation(&blk) + require "tempfile" + + if ENV["ISOLATION_TEST"] + proxy = ProxyTestResult.new + yield proxy + File.open(ENV["ISOLATION_OUTPUT"], "w") do |file| + file.puts [Marshal.dump(proxy)].pack("m") + end + exit! + else + Tempfile.open("isolation") do |tmpfile| + ENV["ISOLATION_TEST"] = @method_name + ENV["ISOLATION_OUTPUT"] = tmpfile.path + + load_paths = $-I.map {|p| "-I\"#{File.expand_path(p)}\"" }.join(" ") + `#{Gem.ruby} #{load_paths} #{$0} #{ORIG_ARGV.join(" ")} -t\"#{self.class}\"` + + ENV.delete("ISOLATION_TEST") + ENV.delete("ISOLATION_OUTPUT") + + return Marshal.load(tmpfile.read.unpack("m")[0]) + end + end + end + end + + include forking_env? ? Forking : Subprocess + end +end + +# Only in subprocess for windows / jruby. +if ENV['ISOLATION_TEST'] + require "test/unit/collector/objectspace" + class Test::Unit::Collector::ObjectSpace + def include?(test) + super && test.method_name == ENV['ISOLATION_TEST'] + end end end
\ No newline at end of file diff --git a/activesupport/test/abstract_unit.rb b/activesupport/test/abstract_unit.rb index 428a06b0bf..77294db798 100644 --- a/activesupport/test/abstract_unit.rb +++ b/activesupport/test/abstract_unit.rb @@ -1,3 +1,5 @@ +ORIG_ARGV = ARGV.dup + require 'rubygems' require 'test/unit' diff --git a/railties/test/abstract_unit.rb b/railties/test/abstract_unit.rb index cef69e90cb..dd9d0448b2 100644 --- a/railties/test/abstract_unit.rb +++ b/railties/test/abstract_unit.rb @@ -1,3 +1,5 @@ +ORIG_ARGV = ARGV.dup + $:.unshift File.dirname(__FILE__) + "/../../activesupport/lib" $:.unshift File.dirname(__FILE__) + "/../../activerecord/lib" $:.unshift File.dirname(__FILE__) + "/../../actionpack/lib" |