From f616e816372d14e605879d2e43c7fbdda29ef837 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Sun, 26 Jun 2022 14:50:13 +0200 Subject: Update to ruby/mspec@78b5d86 --- spec/mspec/lib/mspec/guards/version.rb | 28 ++++++++++++++++++++++++++ spec/mspec/lib/mspec/helpers/ruby_exe.rb | 13 ++++++++++-- spec/mspec/lib/mspec/runner/context.rb | 1 + spec/mspec/lib/mspec/runner/formatters/base.rb | 8 ++++++++ spec/mspec/lib/mspec/runner/mspec.rb | 6 +++++- spec/mspec/lib/mspec/runner/shared.rb | 8 ++++++-- spec/mspec/lib/mspec/utils/options.rb | 4 ++++ 7 files changed, 63 insertions(+), 5 deletions(-) (limited to 'spec/mspec/lib') diff --git a/spec/mspec/lib/mspec/guards/version.rb b/spec/mspec/lib/mspec/guards/version.rb index 20f8c06d38..f5ea1988ae 100644 --- a/spec/mspec/lib/mspec/guards/version.rb +++ b/spec/mspec/lib/mspec/guards/version.rb @@ -33,6 +33,30 @@ class VersionGuard < SpecGuard @version >= @requirement end end + + @kernel_version = nil + def self.kernel_version + if @kernel_version + @kernel_version + else + if v = RUBY_PLATFORM[/darwin(\d+)/, 1] # build time version + uname = v + else + begin + require 'etc' + etc = true + rescue LoadError + etc = false + end + if etc and Etc.respond_to?(:uname) + uname = Etc.uname.fetch(:release) + else + uname = `uname -r`.chomp + end + end + @kernel_version = uname + end + end end def version_is(base_version, requirement, &block) @@ -42,3 +66,7 @@ end def ruby_version_is(requirement, &block) VersionGuard.new(VersionGuard::FULL_RUBY_VERSION, requirement).run_if(:ruby_version_is, &block) end + +def kernel_version_is(requirement, &block) + VersionGuard.new(VersionGuard.kernel_version, requirement).run_if(:kernel_version_is, &block) +end diff --git a/spec/mspec/lib/mspec/helpers/ruby_exe.rb b/spec/mspec/lib/mspec/helpers/ruby_exe.rb index 922178dab0..7fde001cda 100644 --- a/spec/mspec/lib/mspec/helpers/ruby_exe.rb +++ b/spec/mspec/lib/mspec/helpers/ruby_exe.rb @@ -143,8 +143,17 @@ def ruby_exe(code = :not_given, opts = {}) platform_is_not :opal do command = ruby_cmd(code, opts) output = `#{command}` - - exit_status = Process.last_status.exitstatus + status = Process.last_status + + exit_status = if status.exited? + status.exitstatus + elsif status.signaled? + signame = Signal.signame status.termsig + raise "No signal name?" unless signame + :"SIG#{signame}" + else + raise SpecExpectationNotMetError, "#{exit_status.inspect} is neither exited? nor signaled?" + end if exit_status != expected_status formatted_output = output.lines.map { |line| " #{line}" }.join raise SpecExpectationNotMetError, diff --git a/spec/mspec/lib/mspec/runner/context.rb b/spec/mspec/lib/mspec/runner/context.rb index 62483590bb..bcd83b2465 100644 --- a/spec/mspec/lib/mspec/runner/context.rb +++ b/spec/mspec/lib/mspec/runner/context.rb @@ -210,6 +210,7 @@ class ContextState MSpec.clear_expectations if example passed = protect nil, example + passed = protect nil, -> { MSpec.actions :passed, state, example } if passed MSpec.actions :example, state, example protect nil, EXPECTATION_MISSING if !MSpec.expectation? and passed end diff --git a/spec/mspec/lib/mspec/runner/formatters/base.rb b/spec/mspec/lib/mspec/runner/formatters/base.rb index c7c50c40d8..54a83c9c32 100644 --- a/spec/mspec/lib/mspec/runner/formatters/base.rb +++ b/spec/mspec/lib/mspec/runner/formatters/base.rb @@ -113,6 +113,14 @@ class BaseFormatter # evaluating the examples. def finish print "\n" + + if MSpecOptions.latest && MSpecOptions.latest.config[:print_skips] + print "\nSkips:\n" unless MSpec.skips.empty? + MSpec.skips.each do |skip, block| + print "#{skip.message} in #{(block.source_location || ['?']).join(':')}\n" + end + end + count = 0 @exceptions.each do |exc| count += 1 diff --git a/spec/mspec/lib/mspec/runner/mspec.rb b/spec/mspec/lib/mspec/runner/mspec.rb index 19cf59b7d2..889e085175 100644 --- a/spec/mspec/lib/mspec/runner/mspec.rb +++ b/spec/mspec/lib/mspec/runner/mspec.rb @@ -26,6 +26,7 @@ module MSpec @unload = nil @tagged = nil @current = nil + @passed = nil @example = nil @modes = [] @shared = {} @@ -36,9 +37,10 @@ module MSpec @repeat = 1 @expectation = nil @expectations = false + @skips = [] class << self - attr_reader :file, :include, :exclude + attr_reader :file, :include, :exclude, :skips attr_writer :repeat, :randomize attr_accessor :formatter end @@ -116,6 +118,7 @@ module MSpec rescue SystemExit => e raise e rescue SkippedSpecError => e + @skips << [e, block] return false rescue Object => exc register_exit 1 @@ -241,6 +244,7 @@ module MSpec # :before before a single spec is run # :add while a describe block is adding examples to run later # :expectation before a 'should', 'should_receive', etc. + # :passed after an example block is run and passes, passed the block, run before :example action # :example after an example block is run, passed the block # :exception after an exception is rescued # :after after a single spec is run diff --git a/spec/mspec/lib/mspec/runner/shared.rb b/spec/mspec/lib/mspec/runner/shared.rb index 1d68365474..283711c1d7 100644 --- a/spec/mspec/lib/mspec/runner/shared.rb +++ b/spec/mspec/lib/mspec/runner/shared.rb @@ -1,10 +1,14 @@ require 'mspec/runner/mspec' def it_behaves_like(desc, meth, obj = nil) - send :before, :all do + before :all do @method = meth @object = obj end + after :all do + @method = nil + @object = nil + end - send :it_should_behave_like, desc.to_s + it_should_behave_like desc.to_s end diff --git a/spec/mspec/lib/mspec/utils/options.rb b/spec/mspec/lib/mspec/utils/options.rb index 23a4c9a2a0..612caf6771 100644 --- a/spec/mspec/lib/mspec/utils/options.rb +++ b/spec/mspec/lib/mspec/utils/options.rb @@ -423,6 +423,10 @@ class MSpecOptions end MSpec.register :load, obj end + + on("--print-skips", "Print skips") do + config[:print_skips] = true + end end def interrupt -- cgit v1.2.3