summaryrefslogtreecommitdiff
path: root/tool
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2019-08-05 10:47:36 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-08-05 10:48:49 +0900
commit29092d35d33d3a879634e173604edc9d201aa87a (patch)
treed03ee3482a518895e7f10b407b59f26a5289a298 /tool
parent548cd6e2b51ee0ed7b59799950681d46a43c6c85 (diff)
Moved FailDesc to EnvUtil.failure_description
So EnvUtil does not depends on test/unit.
Diffstat (limited to 'tool')
-rw-r--r--tool/lib/envutil.rb34
-rw-r--r--tool/lib/test/unit/core_assertions.rb32
2 files changed, 35 insertions, 31 deletions
diff --git a/tool/lib/envutil.rb b/tool/lib/envutil.rb
index b4eb63da90..bc08ad3c3b 100644
--- a/tool/lib/envutil.rb
+++ b/tool/lib/envutil.rb
@@ -150,6 +150,7 @@ module EnvUtil
timeout_error = nil
else
status = terminate(pid, signal, opt[:pgroup], reprieve)
+ terminated = Time.now
end
stdout = th_stdout.value if capture_stdout
stderr = th_stderr.value if capture_stderr && capture_stderr != :merge_to_stdout
@@ -161,7 +162,7 @@ module EnvUtil
if timeout_error
bt = caller_locations
msg = "execution of #{bt.shift.label} expired timeout (#{timeout} sec)"
- msg = Test::Unit::Assertions::FailDesc[status, msg, [stdout, stderr].join("\n")].()
+ msg = failure_description(status, terminated, msg, [stdout, stderr].join("\n"))
raise timeout_error, msg, bt.map(&:to_s)
end
return stdout, stderr, status
@@ -286,6 +287,37 @@ module EnvUtil
end
end
+ def self.failure_description(status, now, message = "", out = "")
+ pid = status.pid
+ if signo = status.termsig
+ signame = Signal.signame(signo)
+ sigdesc = "signal #{signo}"
+ end
+ log = diagnostic_reports(signame, pid, now)
+ if signame
+ sigdesc = "SIG#{signame} (#{sigdesc})"
+ end
+ if status.coredump?
+ sigdesc = "#{sigdesc} (core dumped)"
+ end
+ full_message = ''.dup
+ message = message.call if Proc === message
+ if message and !message.empty?
+ full_message << message << "\n"
+ end
+ full_message << "pid #{pid}"
+ full_message << " exit #{status.exitstatus}" if status.exited?
+ full_message << " killed by #{sigdesc}" if sigdesc
+ if out and !out.empty?
+ full_message << "\n" << out.b.gsub(/^/, '| ')
+ full_message.sub!(/(?<!\n)\z/, "\n")
+ end
+ if log
+ full_message << "Diagnostic reports:\n" << log.b.gsub(/^/, '| ')
+ end
+ full_message
+ end
+
def self.gc_stress_to_class?
unless defined?(@gc_stress_to_class)
_, _, status = invoke_ruby(["-e""exit GC.respond_to?(:add_stress_to_class)"])
diff --git a/tool/lib/test/unit/core_assertions.rb b/tool/lib/test/unit/core_assertions.rb
index b637748e5e..1801b910db 100644
--- a/tool/lib/test/unit/core_assertions.rb
+++ b/tool/lib/test/unit/core_assertions.rb
@@ -41,38 +41,10 @@ module Test
end
FailDesc = proc do |status, message = "", out = ""|
- pid = status.pid
now = Time.now
- faildesc = proc do
- if signo = status.termsig
- signame = Signal.signame(signo)
- sigdesc = "signal #{signo}"
- end
- log = EnvUtil.diagnostic_reports(signame, pid, now)
- if signame
- sigdesc = "SIG#{signame} (#{sigdesc})"
- end
- if status.coredump?
- sigdesc = "#{sigdesc} (core dumped)"
- end
- full_message = ''.dup
- message = message.call if Proc === message
- if message and !message.empty?
- full_message << message << "\n"
- end
- full_message << "pid #{pid}"
- full_message << " exit #{status.exitstatus}" if status.exited?
- full_message << " killed by #{sigdesc}" if sigdesc
- if out and !out.empty?
- full_message << "\n" << out.b.gsub(/^/, '| ')
- full_message.sub!(/(?<!\n)\z/, "\n")
- end
- if log
- full_message << "Diagnostic reports:\n" << log.b.gsub(/^/, '| ')
- end
- full_message
+ proc do
+ EnvUtil.failure_description(status, now, message, out)
end
- faildesc
end
def assert_in_out_err(args, test_stdin = "", test_stdout = [], test_stderr = [], message = nil,