# module ActiveSupport::Testing::Isolation::Subprocess

### Constants

ORIG_ARGV

### Public Instance Methods

run_in_isolation() { |proxy| ... } click to toggle source

Crazy H4X to get this working in windows / jruby with no forking.

    # File lib/active_support/testing/isolation.rb, line 117
    def run_in_isolation(&blk)
      require "tempfile"

      if ENV["ISOLATION_TEST"]
        proxy = ProxyTestResult.new
        retval = yield proxy
        File.open(ENV["ISOLATION_OUTPUT"], "w") do |file|
          file.puts [Marshal.dump([retval, 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(" ")
          %x#{Gem.ruby} #{load_paths} #{$0} #{ORIG_ARGV.join(" ")} -t\"#{self.class}\"`

          ENV.delete("ISOLATION_TEST")
          ENV.delete("ISOLATION_OUTPUT")

          return tmpfile.read.unpack("m")[0]
        end
      end
    end