Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
# File test/unit/parallel.rb, line 27 def _run_suite(suite, type) r = report.dup orig_testout = MiniTest::Unit.output i,o = IO.pipe MiniTest::Unit.output = o orig_stdin, orig_stdout = $stdin, $stdout th = Thread.new do begin while buf = (self.verbose ? i.gets : i.read(5)) @stdout.puts "p #{[buf].pack("m").gsub("\n","")}" end rescue IOError rescue Errno::EPIPE end end e, f, s = @errors, @failures, @skips begin result = orig_run_suite(suite, type) rescue Interrupt @need_exit = true result = [nil,nil] end MiniTest::Unit.output = orig_testout $stdin = orig_stdin $stdout = orig_stdout o.close begin th.join rescue IOError raise unless ["stream closed","closed stream"].include? $!.message end i.close result << (report - r) result << [@errors-e,@failures-f,@skips-s] result << ($: - @old_loadpath) result << suite.name begin @stdout.puts "done #{[Marshal.dump(result)].pack("m").gsub("\n","")}" rescue Errno::EPIPE; end return result ensure MiniTest::Unit.output = orig_stdout $stdin = orig_stdin $stdout = orig_stdout o.close if o && !o.closed? i.close if i && !i.closed? end
# File test/unit/parallel.rb, line 21 def _run_suites(suites, type) suites.map do |suite| _run_suite(suite, type) end end
# File test/unit/parallel.rb, line 15 def increment_io(orig) *rest, io = 32.times.inject([orig.dup]){|ios, | ios << ios.last.dup } rest.each(&:close) io end
# File test/unit/parallel.rb, line 83 def run(args = []) process_args args @@stop_auto_run = true @opts = @options.dup @need_exit = false @old_loadpath = [] begin @stdout = increment_io(STDOUT) @stdin = increment_io(STDIN) @stdout.sync = true @stdout.puts "ready" while buf = @stdin.gets case buf.chomp when /^loadpath (.+?)$/ @old_loadpath = $:.dup $:.push(*Marshal.load($1.unpack("m")[0].force_encoding("ASCII-8BIT"))).uniq! when /^run (.+?) (.+?)$/ @stdout.puts "okay" @options = @opts.dup suites = MiniTest::Unit::TestCase.test_suites begin require $1 rescue LoadError @stdout.puts "after #{[Marshal.dump([$1, $!])].pack("m").gsub("\n","")}" @stdout.puts "ready" next end _run_suites MiniTest::Unit::TestCase.test_suites-suites, $2.to_sym if @need_exit begin @stdout.puts "bye" rescue Errno::EPIPE; end exit else @stdout.puts "ready" end when /^quit$/ begin @stdout.puts "bye" rescue Errno::EPIPE; end exit end end rescue Errno::EPIPE rescue Exception => e begin @stdout.puts "bye #{[Marshal.dump(e)].pack("m").gsub("\n","")}" rescue Errno::EPIPE;end exit ensure @stdin.close @stdout.close end end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.