summaryrefslogtreecommitdiff
path: root/spec/mspec/lib
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2019-11-05 16:14:03 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-11-05 17:42:35 +0900
commitfa52a924aa418e363b191179b2ad3eba2506d559 (patch)
tree49a4e1fee1025cc1558b0202412d7fae4f4b2e1f /spec/mspec/lib
parent19f91f788016ef98e30ead047e53edeb7a5f2566 (diff)
Enable "-f" option in multi_exec mode
Make `MultiFormatter` a module and extend the formatter specified by "-f" option.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/2649
Diffstat (limited to 'spec/mspec/lib')
-rwxr-xr-xspec/mspec/lib/mspec/commands/mspec.rb3
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/dotted.rb10
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/multi.rb18
-rw-r--r--spec/mspec/lib/mspec/utils/script.rb15
4 files changed, 34 insertions, 12 deletions
diff --git a/spec/mspec/lib/mspec/commands/mspec.rb b/spec/mspec/lib/mspec/commands/mspec.rb
index 0ccea82a5c..f6caf93978 100755
--- a/spec/mspec/lib/mspec/commands/mspec.rb
+++ b/spec/mspec/lib/mspec/commands/mspec.rb
@@ -90,8 +90,7 @@ class MSpecMain < MSpecScript
def multi_exec(argv)
require 'mspec/runner/formatters/multi'
- formatter = MultiFormatter.new
- warn "formatter options is ignored due to multi option" if config[:formatter]
+ formatter = config_formatter.extend(MultiFormatter)
require 'mspec/runner/parallel'
processes = cores(@files.size)
diff --git a/spec/mspec/lib/mspec/runner/formatters/dotted.rb b/spec/mspec/lib/mspec/runner/formatters/dotted.rb
index 32b96f63ae..7e30a22e8d 100644
--- a/spec/mspec/lib/mspec/runner/formatters/dotted.rb
+++ b/spec/mspec/lib/mspec/runner/formatters/dotted.rb
@@ -97,6 +97,16 @@ class DottedFormatter
end
end
+ # Callback for the MSpec :start event. Calls :after event.
+ def start
+ after
+ end
+
+ # Callback for the MSpec :unload event. Calls :after event.
+ def unload
+ after
+ end
+
# Callback for the MSpec :finish event. Prints a description
# and backtrace for every exception that occurred while
# evaluating the examples.
diff --git a/spec/mspec/lib/mspec/runner/formatters/multi.rb b/spec/mspec/lib/mspec/runner/formatters/multi.rb
index 085f961be8..d0a82fe682 100644
--- a/spec/mspec/lib/mspec/runner/formatters/multi.rb
+++ b/spec/mspec/lib/mspec/runner/formatters/multi.rb
@@ -1,13 +1,23 @@
-require 'mspec/runner/formatters/spinner'
+module MultiFormatter
+ def self.extend_object(obj)
+ super
+ obj.multi_initialize
+ end
-class MultiFormatter < SpinnerFormatter
- def initialize(out=nil)
- super(out)
+ def multi_initialize
@counter = @tally = Tally.new
@timer = TimerAction.new
@timer.start
end
+ def register
+ super
+
+ MSpec.register :start, self
+ MSpec.register :unload, self
+ MSpec.unregister :before, self
+ end
+
def aggregate_results(files)
require 'yaml'
diff --git a/spec/mspec/lib/mspec/utils/script.rb b/spec/mspec/lib/mspec/utils/script.rb
index 132a6ab42c..9bffa924bc 100644
--- a/spec/mspec/lib/mspec/utils/script.rb
+++ b/spec/mspec/lib/mspec/utils/script.rb
@@ -125,12 +125,7 @@ class MSpecScript
require 'mspec/runner/formatters/file'
require 'mspec/runner/filters'
- if config[:formatter].nil?
- config[:formatter] = STDOUT.tty? ? SpinnerFormatter : @files.size < 50 ? DottedFormatter : FileFormatter
- end
-
- if config[:formatter]
- formatter = config[:formatter].new(config[:output])
+ if formatter = config_formatter
formatter.register
MSpec.store :formatter, formatter
end
@@ -149,6 +144,14 @@ class MSpecScript
custom_register
end
+ # Makes a formatter specified by :formatter option.
+ def config_formatter
+ if config[:formatter].nil?
+ config[:formatter] = STDOUT.tty? ? SpinnerFormatter : @files.size < 50 ? DottedFormatter : FileFormatter
+ end
+ config[:formatter].new(config[:output])
+ end
+
# Callback for enabling custom actions, etc. This version is a
# no-op. Provide an implementation specific version in a config
# file. Called by #register.