86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/tapioca/helpers/test/isolation.rb', line 86
def run_in_isolation(&_blk)
this = T.cast(self, Minitest::Test)
require "tempfile"
if ENV["ISOLATION_TEST"]
yield
test_result = defined?(Minitest::Result) ? Minitest::Result.from(self) : this.dup
File.open(T.must(ENV["ISOLATION_OUTPUT"]), "w") do |file|
file.puts [Marshal.dump(test_result)].pack("m")
end
exit!(false)
else
Tempfile.open("isolation") do |tmpfile|
env = {
"ISOLATION_TEST" => this.class.name,
"ISOLATION_OUTPUT" => tmpfile.path,
}
test_opts = "-n#{this.class.name}##{this.name}"
load_path_args = []
$-I.each do |p|
load_path_args << "-I"
load_path_args << File.expand_path(p)
end
child = IO.popen([env, ::Gem.ruby, *load_path_args, $PROGRAM_NAME, *ORIG_ARGV, test_opts])
begin
Process.wait(child.pid)
rescue Errno::ECHILD nil
end
return T.must(tmpfile.read).unpack1("m")
end
end
end
|