summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/lib/test/unit.rb13
-rw-r--r--test/lib/test/unit/parallel.rb18
-rw-r--r--test/testunit/test_parallel.rb14
3 files changed, 40 insertions, 5 deletions
diff --git a/test/lib/test/unit.rb b/test/lib/test/unit.rb
index 981c1c1f2f..9532584eed 100644
--- a/test/lib/test/unit.rb
+++ b/test/lib/test/unit.rb
@@ -372,6 +372,11 @@ module Test
end
end
+ FakeClass = Struct.new(:name)
+ def fake_class(name)
+ (@fake_classes ||= {})[name] ||= FakeClass.new(name)
+ end
+
def deal(io, type, result, rep, shutting_down = false)
worker = @workers_hash[io]
cmd = worker.read
@@ -409,6 +414,14 @@ module Test
$:.push(*r[4]).uniq!
jobs_status(worker) if @options[:job_status] == :replace
return true
+ when /^record (.+?)$/
+ begin
+ r = Marshal.load($1.unpack("m")[0])
+ rescue => e
+ print "unknown record: #{e.message} #{$1.unpack("m")[0].dump}"
+ return true
+ end
+ record(fake_class(r[0]), *r[1..-1])
when /^p (.+?)$/
del_jobs_status
print $1.unpack("m")[0]
diff --git a/test/lib/test/unit/parallel.rb b/test/lib/test/unit/parallel.rb
index 1e12d18457..c1b6094b8c 100644
--- a/test/lib/test/unit/parallel.rb
+++ b/test/lib/test/unit/parallel.rb
@@ -165,6 +165,24 @@ module Test
@partial_report << [klass.name, meth, e.is_a?(MiniTest::Assertion) ? e : ProxyError.new(e)]
super
end
+
+ def record(suite, method, assertions, time, error) # :nodoc:
+ case error
+ when nil
+ when MiniTest::Assertion, MiniTest::Skip
+ case error.cause
+ when nil, MiniTest::Assertion, MiniTest::Skip
+ else
+ bt = error.backtrace
+ error = error.class.new(error.message)
+ error.set_backtrace(bt)
+ end
+ else
+ error = ProxyError.new(error)
+ end
+ _report "record", Marshal.dump([suite.name, method, assertions, time, error])
+ super
+ end
end
end
end
diff --git a/test/testunit/test_parallel.rb b/test/testunit/test_parallel.rb
index 3d85f9c211..35901df960 100644
--- a/test/testunit/test_parallel.rb
+++ b/test/testunit/test_parallel.rb
@@ -43,6 +43,7 @@ module TestParallel
assert_match(/^ready/,@worker_out.gets)
@worker_in.puts "run #{TESTS}/ptest_first.rb test"
assert_match(/^okay/,@worker_out.gets)
+ assert_match(/^record/,@worker_out.gets)
assert_match(/^p/,@worker_out.gets)
assert_match(/^done/,@worker_out.gets)
assert_match(/^ready/,@worker_out.gets)
@@ -54,8 +55,10 @@ module TestParallel
assert_match(/^ready/,@worker_out.gets)
@worker_in.puts "run #{TESTS}/ptest_second.rb test"
assert_match(/^okay/,@worker_out.gets)
+ assert_match(/^record/,@worker_out.gets)
assert_match(/^p/,@worker_out.gets)
assert_match(/^done/,@worker_out.gets)
+ assert_match(/^record/,@worker_out.gets)
assert_match(/^p/,@worker_out.gets)
assert_match(/^done/,@worker_out.gets)
assert_match(/^ready/,@worker_out.gets)
@@ -67,13 +70,16 @@ module TestParallel
assert_match(/^ready/,@worker_out.gets)
@worker_in.puts "run #{TESTS}/ptest_first.rb test"
assert_match(/^okay/,@worker_out.gets)
+ assert_match(/^record/,@worker_out.gets)
assert_match(/^p/,@worker_out.gets)
assert_match(/^done/,@worker_out.gets)
assert_match(/^ready/,@worker_out.gets)
@worker_in.puts "run #{TESTS}/ptest_second.rb test"
assert_match(/^okay/,@worker_out.gets)
+ assert_match(/^record/,@worker_out.gets)
assert_match(/^p/,@worker_out.gets)
assert_match(/^done/,@worker_out.gets)
+ assert_match(/^record/,@worker_out.gets)
assert_match(/^p/,@worker_out.gets)
assert_match(/^done/,@worker_out.gets)
assert_match(/^ready/,@worker_out.gets)
@@ -93,11 +99,9 @@ module TestParallel
def test_done
Timeout.timeout(10) do
@worker_in.puts "run #{TESTS}/ptest_forth.rb test"
- 7.times { @worker_out.gets }
- buf = @worker_out.gets
- assert_match(/^done (.+?)$/, buf)
-
- /^done (.+?)$/ =~ buf
+ while buf = @worker_out.gets
+ break if /^done (.+?)$/ =~ buf
+ end
result = Marshal.load($1.chomp.unpack("m")[0])