module Tapioca::Helpers::Test::Isolation::Forking
def run_in_isolation(&_blk)
def run_in_isolation(&_blk) read, write = IO.pipe read.binmode write.binmode this = T.cast(self, Minitest::Test) pid = fork do read.close yield begin if this.error? this.failures.map! do |e| Marshal.dump(e) e rescue TypeError ex = Exception.new(e.message) ex.set_backtrace(e.backtrace) Minitest::UnexpectedError.new(ex) end end test_result = defined?(Minitest::Result) ? Minitest::Result.from(self) : this.dup result = Marshal.dump(test_result) end write.puts [result].pack("m") write.close exit!(false) end write.close result = read.read read.close Process.wait2(T.must(pid)) T.must(result).unpack1("m") end