2015-02-15 03:24:18 +00:00
|
|
|
# -*- ruby -*-
|
2017-09-03 00:32:27 +00:00
|
|
|
$VERBOSE = false
|
|
|
|
if (opt = ENV["RUBYOPT"]) and (opt = opt.dup).sub!(/(?:\A|\s)-w(?=\z|\s)/, '')
|
|
|
|
ENV["RUBYOPT"] = opt
|
|
|
|
end
|
2024-01-16 20:29:06 +09:00
|
|
|
|
2024-02-14 11:41:33 +01:00
|
|
|
# Enable constant leak checks by ruby/mspec
|
|
|
|
ENV["CHECK_CONSTANT_LEAKS"] ||= "true"
|
2024-01-16 20:29:06 +09:00
|
|
|
|
2017-05-07 12:00:58 +00:00
|
|
|
require "./rbconfig" unless defined?(RbConfig)
|
2023-01-26 14:13:13 +09:00
|
|
|
require_relative "../tool/test-coverage" if ENV.key?("COVERAGE")
|
2017-09-20 20:19:54 +00:00
|
|
|
load File.dirname(__FILE__) + '/ruby/default.mspec'
|
2024-02-15 19:26:58 +09:00
|
|
|
OBJDIR = File.expand_path("spec/ruby/optional/capi/ext") unless defined?(OBJDIR)
|
2008-08-04 11:44:41 +00:00
|
|
|
class MSpecScript
|
2022-03-04 15:56:03 +09:00
|
|
|
@testing_ruby = true
|
|
|
|
|
2009-01-01 13:30:25 +00:00
|
|
|
builddir = Dir.pwd
|
2008-10-31 03:31:09 +00:00
|
|
|
srcdir = ENV['SRCDIR']
|
2021-10-18 10:13:15 +09:00
|
|
|
srcdir ||= File.read("Makefile", encoding: "US-ASCII")[/^\s*srcdir\s*=\s*(.+)/i, 1] rescue nil
|
2015-02-15 03:24:18 +00:00
|
|
|
config = RbConfig::CONFIG
|
2008-08-31 08:31:38 +00:00
|
|
|
|
2008-08-04 11:44:41 +00:00
|
|
|
# The default implementation to run the specs.
|
2008-10-31 03:31:09 +00:00
|
|
|
set :target, File.join(builddir, "miniruby#{config['exeext']}")
|
2017-09-20 20:19:54 +00:00
|
|
|
set :prefix, File.expand_path('ruby', File.dirname(__FILE__))
|
2021-10-18 10:29:51 +09:00
|
|
|
if srcdir
|
|
|
|
srcdir = File.expand_path(srcdir)
|
|
|
|
set :flags, %W[
|
|
|
|
-I#{srcdir}/lib
|
|
|
|
#{srcdir}/tool/runruby.rb --archdir=#{builddir} --extout=#{config['EXTOUT']}
|
|
|
|
--
|
|
|
|
]
|
|
|
|
end
|
2023-01-26 14:13:13 +09:00
|
|
|
|
2024-02-15 09:49:13 +09:00
|
|
|
# Disable to run for bundled gems in test-spec
|
2024-02-15 11:05:35 +09:00
|
|
|
set :bundled_gems, (File.readlines("#{srcdir}/gems/bundled_gems").map do |line|
|
2024-02-15 09:49:13 +09:00
|
|
|
next if /^\s*(?:#|$)/ =~ line
|
2024-11-28 10:17:15 +09:00
|
|
|
gem = line.split.first
|
|
|
|
gem = "openstruct" if gem == "ostruct"
|
|
|
|
"#{srcdir}/spec/ruby/library/#{gem}"
|
2024-02-15 11:05:35 +09:00
|
|
|
end.compact)
|
|
|
|
set :stdlibs, Dir.glob("#{srcdir}/spec/ruby/library/*")
|
|
|
|
set :library, get(:stdlibs).to_a - get(:bundled_gems).to_a
|
2024-02-15 09:49:13 +09:00
|
|
|
|
|
|
|
set :files, get(:command_line) + get(:language) + get(:core) + get(:library) + get(:security) + get(:optional)
|
|
|
|
|
2023-01-26 14:13:13 +09:00
|
|
|
if ENV.key?("COVERAGE")
|
|
|
|
set :excludes, ["Coverage"]
|
|
|
|
end
|
2008-08-04 11:44:41 +00:00
|
|
|
end
|
2017-04-05 01:36:21 +00:00
|
|
|
|
2017-04-09 01:23:02 +00:00
|
|
|
module MSpecScript::JobServer
|
2017-06-16 23:59:33 +00:00
|
|
|
def cores(max = 1)
|
2022-11-07 15:51:04 +09:00
|
|
|
if max > 1 and /(?:\A|\s)--jobserver-(?:auth|fds)=(\d+),(\d+)/ =~ ENV["MAKEFLAGS"]
|
2017-06-16 23:59:33 +00:00
|
|
|
cores = 1
|
2017-04-09 01:23:02 +00:00
|
|
|
begin
|
2022-11-07 15:51:04 +09:00
|
|
|
r = IO.for_fd($1.to_i(10), "rb", autoclose: false)
|
|
|
|
w = IO.for_fd($2.to_i(10), "wb", autoclose: false)
|
2017-06-16 23:59:33 +00:00
|
|
|
jobtokens = r.read_nonblock(max - 1)
|
2017-04-09 01:23:02 +00:00
|
|
|
cores = jobtokens.size
|
|
|
|
if cores > 0
|
2017-06-16 23:59:33 +00:00
|
|
|
cores += 1
|
2017-04-09 01:23:02 +00:00
|
|
|
jobserver = w
|
|
|
|
w = nil
|
|
|
|
at_exit {
|
|
|
|
jobserver.print(jobtokens)
|
|
|
|
jobserver.close
|
|
|
|
}
|
|
|
|
MSpecScript::JobServer.module_eval do
|
|
|
|
remove_method :cores
|
|
|
|
define_method(:cores) do
|
|
|
|
cores
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return cores
|
|
|
|
end
|
2017-05-15 10:32:30 +00:00
|
|
|
rescue Errno::EBADF
|
2017-04-09 01:23:02 +00:00
|
|
|
ensure
|
|
|
|
r&.close
|
|
|
|
w&.close
|
2017-04-05 01:36:21 +00:00
|
|
|
end
|
|
|
|
end
|
2017-04-09 01:23:02 +00:00
|
|
|
super
|
2017-04-05 01:36:21 +00:00
|
|
|
end
|
|
|
|
end
|
2017-04-09 01:23:02 +00:00
|
|
|
|
|
|
|
class MSpecScript
|
|
|
|
prepend JobServer
|
|
|
|
end
|
2021-11-26 22:31:38 +09:00
|
|
|
|
|
|
|
require 'mspec/runner/formatters/dotted'
|
|
|
|
|
|
|
|
class DottedFormatter
|
|
|
|
prepend Module.new {
|
2024-02-15 14:32:08 +09:00
|
|
|
BASE = __dir__ + "/ruby/" unless defined?(BASE)
|
2024-09-10 16:06:23 +09:00
|
|
|
COUNT_WIDTH = 6 unless defined?(COUNT_WIDTH)
|
2021-11-26 22:31:38 +09:00
|
|
|
|
|
|
|
def initialize(out = nil)
|
|
|
|
super
|
|
|
|
if out
|
|
|
|
@columns = nil
|
|
|
|
else
|
2023-08-11 20:17:33 +09:00
|
|
|
columns = ENV["COLUMNS"]&.to_i
|
2024-05-29 21:37:40 +09:00
|
|
|
columns = 80 unless columns&.nonzero?
|
2024-05-29 19:49:57 +09:00
|
|
|
w = COUNT_WIDTH + 1
|
|
|
|
round = 20
|
|
|
|
@columns = (columns - w) / round * round + w
|
2021-11-26 22:31:38 +09:00
|
|
|
end
|
|
|
|
@dotted = 0
|
|
|
|
@loaded = false
|
2023-08-11 20:17:33 +09:00
|
|
|
@count = 0
|
2021-11-26 22:31:38 +09:00
|
|
|
end
|
|
|
|
|
|
|
|
def register
|
|
|
|
super
|
|
|
|
MSpec.register :load, self
|
|
|
|
MSpec.register :unload, self
|
|
|
|
end
|
|
|
|
|
|
|
|
def after(*)
|
2023-08-11 20:17:33 +09:00
|
|
|
if @columns
|
|
|
|
if @dotted == 0
|
2024-05-29 19:49:57 +09:00
|
|
|
s = sprintf("%*d ", COUNT_WIDTH, @count)
|
2023-08-11 20:17:33 +09:00
|
|
|
print(s)
|
|
|
|
@dotted += s.size
|
|
|
|
end
|
|
|
|
@count +=1
|
|
|
|
end
|
2021-11-26 22:31:38 +09:00
|
|
|
super
|
2023-08-11 20:17:33 +09:00
|
|
|
if @columns and (@dotted += 1) >= @columns
|
2021-11-26 22:31:38 +09:00
|
|
|
print "\n"
|
|
|
|
@dotted = 0
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def load(*)
|
2021-11-27 18:57:29 +09:00
|
|
|
file = MSpec.file || MSpec.files_array.first
|
2021-11-26 22:31:38 +09:00
|
|
|
@loaded = true
|
2023-08-11 20:17:33 +09:00
|
|
|
s = "#{file.delete_prefix(BASE)}:"
|
|
|
|
print s
|
|
|
|
if @columns
|
|
|
|
if (@dotted += s.size) >= @columns
|
|
|
|
print "\n"
|
|
|
|
@dotted = 0
|
|
|
|
else
|
|
|
|
print " "
|
|
|
|
@dotted += 1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
@count = 0
|
2021-11-26 22:31:38 +09:00
|
|
|
end
|
|
|
|
|
|
|
|
def unload
|
|
|
|
super
|
|
|
|
if @loaded
|
2023-08-11 20:17:33 +09:00
|
|
|
print "\n" if @dotted > 0
|
2021-11-26 22:31:38 +09:00
|
|
|
@dotted = 0
|
2023-08-11 20:17:33 +09:00
|
|
|
@loaded = nil
|
2021-11-26 22:31:38 +09:00
|
|
|
end
|
|
|
|
end
|
|
|
|
}
|
|
|
|
end
|