From fa52a924aa418e363b191179b2ad3eba2506d559 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Tue, 5 Nov 2019 16:14:03 +0900 Subject: Enable "-f" option in multi_exec mode Make `MultiFormatter` a module and extend the formatter specified by "-f" option. --- spec/mspec/lib/mspec/commands/mspec.rb | 3 +-- spec/mspec/lib/mspec/runner/formatters/dotted.rb | 10 ++++++++++ spec/mspec/lib/mspec/runner/formatters/multi.rb | 18 ++++++++++++++---- spec/mspec/lib/mspec/utils/script.rb | 15 +++++++++------ 4 files changed, 34 insertions(+), 12 deletions(-) (limited to 'spec') 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. -- cgit v1.2.3