1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
# -*- ruby -*-
$VERBOSE = false
if (opt = ENV["RUBYOPT"]) and (opt = opt.dup).sub!(/(?:\A|\s)-w(?=\z|\s)/, '')
ENV["RUBYOPT"] = opt
end
require "./rbconfig" unless defined?(RbConfig)
require_relative "../tool/test-coverage" if ENV.key?("COVERAGE")
load File.dirname(__FILE__) + '/ruby/default.mspec'
OBJDIR = File.expand_path("spec/ruby/optional/capi/ext")
class MSpecScript
@testing_ruby = true
builddir = Dir.pwd
srcdir = ENV['SRCDIR']
srcdir ||= File.read("Makefile", encoding: "US-ASCII")[/^\s*srcdir\s*=\s*(.+)/i, 1] rescue nil
config = RbConfig::CONFIG
# The default implementation to run the specs.
set :target, File.join(builddir, "miniruby#{config['exeext']}")
set :prefix, File.expand_path('ruby', File.dirname(__FILE__))
if srcdir
srcdir = File.expand_path(srcdir)
set :flags, %W[
-I#{srcdir}/lib
#{srcdir}/tool/runruby.rb --archdir=#{builddir} --extout=#{config['EXTOUT']}
--
]
end
if ENV.key?("COVERAGE")
set :excludes, ["Coverage"]
end
end
module MSpecScript::JobServer
def cores(max = 1)
if max > 1 and /(?:\A|\s)--jobserver-(?:auth|fds)=(\d+),(\d+)/ =~ ENV["MAKEFLAGS"]
cores = 1
begin
r = IO.for_fd($1.to_i(10), "rb", autoclose: false)
w = IO.for_fd($2.to_i(10), "wb", autoclose: false)
jobtokens = r.read_nonblock(max - 1)
cores = jobtokens.size
if cores > 0
cores += 1
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
rescue Errno::EBADF
ensure
r&.close
w&.close
end
end
super
end
end
class MSpecScript
prepend JobServer
end
require 'mspec/runner/formatters/dotted'
class DottedFormatter
prepend Module.new {
BASE = __dir__ + "/ruby/"
def initialize(out = nil)
super
if out
@columns = nil
else
columns = ENV["COLUMNS"]&.to_i
@columns = columns&.nonzero? || 80
end
@dotted = 0
@loaded = false
@count = 0
end
def register
super
MSpec.register :load, self
MSpec.register :unload, self
end
def after(*)
if @columns
if @dotted == 0
s = sprintf("%6d ", @count)
print(s)
@dotted += s.size
end
@count +=1
end
super
if @columns and (@dotted += 1) >= @columns
print "\n"
@dotted = 0
end
end
def load(*)
file = MSpec.file || MSpec.files_array.first
@loaded = true
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
end
def unload
super
if @loaded
print "\n" if @dotted > 0
@dotted = 0
@loaded = nil
end
end
}
end
|