minitest-reporters 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -32,10 +32,6 @@ The following reporters are provided:
32
32
  MiniTest::Reporters::RubyMineReporter # => Reporter designed for RubyMine IDE and TeamCity CI server; see below
33
33
  MiniTest::Reporters::GuardReporter # => Integrates with guard-minitest to provide on-screen notifications
34
34
 
35
- ## TODO ##
36
-
37
- * Add some example images of the reporters.
38
-
39
35
  ## Note on Patches/Pull Requests ##
40
36
 
41
37
  * Fork the project.
@@ -0,0 +1,16 @@
1
+ module MiniTest
2
+ module BeforeTestHook
3
+ def self.before_test(instance)
4
+ runner = MiniTest::Unit.runner
5
+
6
+ if runner.respond_to?(:before_test)
7
+ runner.before_test(instance.class, instance.__name__)
8
+ end
9
+ end
10
+
11
+ def before_setup
12
+ BeforeTestHook.before_test(self)
13
+ super
14
+ end
15
+ end
16
+ end
@@ -3,23 +3,23 @@ module MiniTest
3
3
  def runner
4
4
  Unit.runner
5
5
  end
6
-
6
+
7
7
  def output
8
8
  runner.output
9
9
  end
10
-
10
+
11
11
  def verbose?
12
12
  runner.verbose
13
13
  end
14
-
14
+
15
15
  def print(*args)
16
16
  runner.output.print(*args)
17
17
  end
18
-
18
+
19
19
  def puts(*args)
20
20
  runner.output.puts(*args)
21
21
  end
22
-
22
+
23
23
  def before_suites(suites, type); end
24
24
  def after_suites(suites, type); end
25
25
  def before_suite(suite); end
@@ -0,0 +1,86 @@
1
+ module MiniTest
2
+ # Runner for MiniTest that supports reporters.
3
+ #
4
+ # Based upon Ryan Davis of Seattle.rb's MiniTest (MIT License).
5
+ #
6
+ # @see https://github.com/seattlerb/minitest MiniTest
7
+ class ReporterRunner < Unit
8
+ attr_accessor :suites_start_time, :test_start_time, :reporters, :test_results
9
+
10
+ alias_method :suite_start_time, :start_time
11
+
12
+ def initialize
13
+ super
14
+ self.reporters = []
15
+ self.test_results = {}
16
+ end
17
+
18
+ def _run_suites(suites, type)
19
+ self.suites_start_time = Time.now
20
+ count_tests!(suites, type)
21
+ trigger_callback(:before_suites, suites, type)
22
+ super(suites, type)
23
+ ensure
24
+ trigger_callback(:after_suites, suites, type)
25
+ end
26
+
27
+ def _run_suite(suite, type)
28
+ trigger_callback(:before_suite, suite)
29
+ super(suite, type)
30
+ ensure
31
+ trigger_callback(:after_suite, suite)
32
+ end
33
+
34
+ def before_test(suite, test)
35
+ self.test_start_time = Time.now
36
+ trigger_callback(:before_test, suite, test)
37
+ end
38
+
39
+ def record(suite, test, assertions, time, exception)
40
+ result = case exception
41
+ when nil then :pass
42
+ when Skip then :skip
43
+ when Assertion then :failure
44
+ else :error
45
+ end
46
+
47
+ test_runner = TestRunner.new(
48
+ suite,
49
+ test.to_sym,
50
+ assertions,
51
+ time,
52
+ result,
53
+ exception
54
+ )
55
+
56
+ test_results[suite] ||= {}
57
+ test_results[suite][test.to_sym] = test_runner
58
+ trigger_callback(result, suite, test, test_runner)
59
+ end
60
+
61
+ def puts(*args)
62
+ end
63
+
64
+ def print(*args)
65
+ end
66
+
67
+ def status(io = output)
68
+ end
69
+
70
+ private
71
+
72
+ def trigger_callback(callback, *args)
73
+ reporters.each do |reporter|
74
+ reporter.public_send(callback, *args)
75
+ end
76
+ end
77
+
78
+ def count_tests!(suites, type)
79
+ filter = options[:filter] || '/./'
80
+ filter = Regexp.new $1 if filter =~ /\/(.*)\//
81
+ self.test_count = suites.inject(0) do |acc, suite|
82
+ acc + suite.send("#{type}_methods").grep(filter).length
83
+ end
84
+ end
85
+ end
86
+ end
@@ -1,10 +1,11 @@
1
1
  require "minitest/unit"
2
2
 
3
3
  module MiniTest
4
- autoload :Reporter, "minitest/reporter"
5
- autoload :SuiteRunner, "minitest/suite_runner"
6
- autoload :TestRunner, "minitest/test_runner"
7
- autoload :BacktraceFilter, "minitest/backtrace_filter"
4
+ require "minitest/reporter"
5
+ require "minitest/reporter_runner"
6
+ require "minitest/before_test_hook"
7
+ require "minitest/test_runner"
8
+ require "minitest/backtrace_filter"
8
9
 
9
10
  module Reporters
10
11
  require "minitest/reporters/version"
@@ -18,11 +19,22 @@ module MiniTest
18
19
  autoload :JUnitReporter, "minitest/reporters/junit_reporter"
19
20
 
20
21
  def self.use!(console_reporters = ProgressReporter.new, env = ENV)
21
- runner = SuiteRunner.new
22
+ include_hook!
23
+ runner = ReporterRunner.new
22
24
  runner.reporters = choose_reporters(console_reporters, env)
23
25
  Unit.runner = runner
24
26
  end
25
27
 
28
+ def self.include_hook!
29
+ if Unit::VERSION >= "3.3.0"
30
+ Unit::TestCase.send(:include, BeforeTestHook)
31
+ else
32
+ Unit::TestCase.send(:define_method, :before_setup) do
33
+ BeforeTestHook.before_test(self)
34
+ end
35
+ end
36
+ end
37
+
26
38
  def self.choose_reporters(console_reporters, env)
27
39
  if env["TM_PID"]
28
40
  [RubyMateReporter.new]
@@ -41,7 +41,7 @@ module MiniTest
41
41
  end
42
42
 
43
43
  def after_suites(suites, type)
44
- time = Time.now - runner.start_time
44
+ time = Time.now - runner.suites_start_time
45
45
 
46
46
  puts
47
47
  puts
@@ -49,7 +49,7 @@ module MiniTest
49
49
  [time, runner.test_count / time, runner.assertion_count / time]
50
50
 
51
51
  i = 0
52
- runner.report.each do |suite, tests|
52
+ runner.test_results.each do |suite, tests|
53
53
  tests.each do |test, test_runner|
54
54
  message = message_for(test_runner)
55
55
  if message
@@ -60,7 +60,6 @@ module MiniTest
60
60
  end
61
61
 
62
62
  puts
63
-
64
63
  puts status
65
64
  end
66
65
 
@@ -11,7 +11,7 @@ module MiniTest
11
11
  include Reporter
12
12
 
13
13
  def after_suites(*args)
14
- duration = Time.now - runner.start_time
14
+ duration = Time.now - runner.suites_start_time
15
15
  ::Guard::MinitestNotifier.notify(runner.test_count, runner.assertion_count,
16
16
  runner.failures, runner.errors,
17
17
  runner.skips, duration)
@@ -15,14 +15,14 @@ module MiniTest
15
15
  def initialize(reports_dir = "test/reports", backtrace_filter = BacktraceFilter.default_filter)
16
16
  @backtrace_filter = backtrace_filter
17
17
  @reports_path = File.join(Dir.getwd, reports_dir)
18
- p "Emptying #{@reports_path}"
18
+ puts "Emptying #{@reports_path}"
19
19
  FileUtils.remove_dir(@reports_path) if File.exists?(@reports_path)
20
20
  FileUtils.mkdir_p(@reports_path)
21
21
  end
22
22
 
23
23
  def after_suites(suites, type)
24
- p "Writing XML reports to #{@reports_path}"
25
- runner.report.each do |suite, tests|
24
+ puts "Writing XML reports to #{@reports_path}"
25
+ runner.test_results.each do |suite, tests|
26
26
  suite_result = analyze_suite(suite, tests)
27
27
 
28
28
  xml = Builder::XmlMarkup.new(:indent => 2)
@@ -51,7 +51,7 @@ module MiniTest
51
51
  e = test_runner.exception
52
52
 
53
53
  case test_runner.result
54
- when :skip
54
+ when :skip
55
55
  xml.skipped(:type => test)
56
56
  when :error
57
57
  xml.error(:type => test, :message => xml.trunc!(e.message)) do
@@ -79,7 +79,7 @@ module MiniTest
79
79
  end
80
80
  end
81
81
 
82
-
82
+
83
83
  def location(exception)
84
84
  last_before_assertion = ''
85
85
  exception.backtrace.reverse_each do |s|
@@ -105,7 +105,7 @@ module MiniTest
105
105
  while File.exists?(File.join(@reports_path, filename)) # restrict number of tries, to avoid infinite loops
106
106
  file_counter += 1
107
107
  filename = "TEST-#{suite}-#{file_counter}.xml"
108
- p "Too many duplicate files, overwriting earlier report #{filename}" and break if file_counter >= 99
108
+ puts "Too many duplicate files, overwriting earlier report #{filename}" and break if file_counter >= 99
109
109
  end
110
110
  File.join(@reports_path, filename)
111
111
  end
@@ -46,7 +46,7 @@ module MiniTest
46
46
  @progress.show({
47
47
  :msg => "#{@finished_count}/#{runner.test_count}",
48
48
  :done => @finished_count,
49
- :total => runner.test_count
49
+ :total => runner.test_count,
50
50
  }, true)
51
51
  end
52
52
 
@@ -94,7 +94,7 @@ module MiniTest
94
94
  def after_suites(suites, type)
95
95
  @progress.close
96
96
 
97
- total_time = Time.now - runner.start_time
97
+ total_time = Time.now - runner.suites_start_time
98
98
 
99
99
  wipe
100
100
  puts
@@ -41,7 +41,7 @@ module MiniTest
41
41
  end
42
42
 
43
43
  def after_suites(suites, type)
44
- total_time = Time.now - runner.start_time
44
+ total_time = Time.now - runner.suites_start_time
45
45
 
46
46
  puts
47
47
  puts('Finished in %.5fs' % total_time)
@@ -1,14 +1,5 @@
1
1
  # Test results reporter for RubyMine IDE (http://www.jetbrains.com/ruby/) and
2
2
  # TeamCity(http://www.jetbrains.com/teamcity/) Continuous Integration Server
3
- #
4
- # Usage:
5
- # # in test_helper.rb
6
- # ...
7
- # if ENV["RM_INFO"] || ENV["TEAMCITY_VERSION"]
8
- # MiniTest::Unit.runner.reporters << MiniTest::Reporters::RubyMineReporter.new
9
- # else
10
- # MiniTest::Unit.runner.reporters << MiniTest::Reporters::DefaultReporter.new
11
- # end
12
3
 
13
4
  require "ansi"
14
5
  begin
@@ -81,7 +72,7 @@ else
81
72
  end
82
73
 
83
74
  def after_suites(suites, type)
84
- total_time = Time.now - runner.start_time
75
+ total_time = Time.now - runner.suites_start_time
85
76
 
86
77
  puts('Finished in %.5fs' % total_time)
87
78
  print('%d tests, %d assertions, ' % [runner.test_count, runner.assertion_count])
@@ -13,8 +13,9 @@ module MiniTest
13
13
  include ANSI::Code
14
14
 
15
15
  TEST_PADDING = 2
16
+ TEST_SIZE = 63
17
+ MARK_SIZE = 5
16
18
  INFO_PADDING = 8
17
- MARK_SIZE = 5
18
19
 
19
20
  def initialize(backtrace_filter = BacktraceFilter.default_filter)
20
21
  @backtrace_filter = backtrace_filter
@@ -26,7 +27,7 @@ module MiniTest
26
27
  end
27
28
 
28
29
  def after_suites(suites, type)
29
- total_time = Time.now - runner.start_time
30
+ total_time = Time.now - runner.suites_start_time
30
31
 
31
32
  puts('Finished in %.5fs' % total_time)
32
33
  print('%d tests, %d assertions, ' % [runner.test_count, runner.assertion_count])
@@ -43,21 +44,25 @@ module MiniTest
43
44
  puts
44
45
  end
45
46
 
47
+ def before_test(suite, test)
48
+ print pad_test(test)
49
+ end
50
+
46
51
  def pass(suite, test, test_runner)
47
52
  print(green { pad_mark('PASS') })
48
- print_test_with_time(test)
53
+ print_time(test)
49
54
  puts
50
55
  end
51
56
 
52
57
  def skip(suite, test, test_runner)
53
58
  print(yellow { pad_mark('SKIP') })
54
- print_test_with_time(test)
59
+ print_time(test)
55
60
  puts
56
61
  end
57
62
 
58
63
  def failure(suite, test, test_runner)
59
64
  print(red { pad_mark('FAIL') })
60
- print_test_with_time(test)
65
+ print_time(test)
61
66
  puts
62
67
  print_info(test_runner.exception)
63
68
  puts
@@ -65,7 +70,7 @@ module MiniTest
65
70
 
66
71
  def error(suite, test, test_runner)
67
72
  print(red { pad_mark('ERROR') })
68
- print_test_with_time(test)
73
+ print_time(test)
69
74
  puts
70
75
  print_info(test_runner.exception)
71
76
  puts
@@ -73,9 +78,9 @@ module MiniTest
73
78
 
74
79
  private
75
80
 
76
- def print_test_with_time(test)
81
+ def print_time(test)
77
82
  total_time = Time.now - runner.test_start_time
78
- print(" %s (%.2fs)" % [test, total_time])
83
+ print(" (%.2fs)" % total_time)
79
84
  end
80
85
 
81
86
  def print_info(e)
@@ -90,7 +95,11 @@ module MiniTest
90
95
  end
91
96
 
92
97
  def pad_mark(str)
93
- pad("%#{MARK_SIZE}s" % str, TEST_PADDING)
98
+ "%#{MARK_SIZE}s" % str
99
+ end
100
+
101
+ def pad_test(str)
102
+ pad("%-#{TEST_SIZE}s" % str, TEST_PADDING)
94
103
  end
95
104
  end
96
105
  end
@@ -1,5 +1,5 @@
1
1
  module MiniTest
2
2
  module Reporters
3
- VERSION = "0.9.0"
3
+ VERSION = "0.10.0"
4
4
  end
5
5
  end
@@ -1,39 +1,3 @@
1
1
  module MiniTest
2
- # Runner for individual MiniTest tests.
3
- #
4
- # You *should not* create instances of this class directly. Instances of
5
- # {SuiteRunner} will create these and send them to the reporters.
6
- #
7
- # Based upon Ryan Davis of Seattle.rb's MiniTest (MIT License).
8
- #
9
- # @see https://github.com/seattlerb/minitest MiniTest
10
- class TestRunner
11
- attr_reader :suite, :test, :assertions, :result, :exception, :options
12
-
13
- def initialize(suite, test)
14
- @suite = suite
15
- @test = test
16
- @assertions = 0
17
- end
18
-
19
- def run
20
- suite_instance = suite.new(test)
21
- @result, @exception = fix_result(suite_instance.run(self))
22
- @assertions = suite_instance._assertions
23
- end
24
-
25
- def puke(suite, test, exception)
26
- case exception
27
- when Skip then [:skip, exception]
28
- when Assertion then [:failure, exception]
29
- else [:error, exception]
30
- end
31
- end
32
-
33
- private
34
-
35
- def fix_result(result)
36
- result == '.' ? [:pass, nil] : result
37
- end
38
- end
2
+ TestRunner = Struct.new(:suite, :test, :assertions, :time, :result, :exception)
39
3
  end
@@ -14,14 +14,13 @@ Gem::Specification.new do |s|
14
14
 
15
15
  s.rubyforge_project = 'minitest-reporters'
16
16
 
17
- s.add_dependency 'minitest', '>= 2.0', '< 4.0'
17
+ s.add_dependency 'minitest', '>= 2.12', '< 4.0'
18
18
  s.add_dependency 'ansi'
19
19
  s.add_dependency 'powerbar'
20
20
  s.add_dependency 'builder'
21
21
 
22
- s.add_development_dependency 'mocha'
22
+ s.add_development_dependency 'rr'
23
23
  s.add_development_dependency 'maruku'
24
- s.add_development_dependency 'test_declarative'
25
24
  s.add_development_dependency 'rake'
26
25
 
27
26
  s.files = `git ls-files`.split("\n")
@@ -8,28 +8,28 @@ module MiniTestReportersTest
8
8
  @backtrace = ["foo", "bar", "baz"]
9
9
  end
10
10
 
11
- test "adding filters" do
11
+ def test_adding_filters
12
12
  @filter.add_filter(/foo/)
13
13
  assert @filter.filters?("foo")
14
14
  refute @filter.filters?("baz")
15
15
  end
16
16
 
17
- test "filter backtrace when first line is filtered" do
17
+ def test_filter_backtrace_when_first_line_is_filtered
18
18
  @filter.add_filter(/foo/)
19
19
  assert_equal ["bar", "baz"], @filter.filter(@backtrace)
20
20
  end
21
21
 
22
- test "filter backtrace when middle line is filtered" do
22
+ def test_filter_backtrace_when_middle_line_is_filtered
23
23
  @filter.add_filter(/bar/)
24
24
  assert_equal ["foo"], @filter.filter(@backtrace)
25
25
  end
26
26
 
27
- test "filter backtrace when all lines are filtered" do
27
+ def test_filter_backtrace_when_all_lines_are_filtered
28
28
  @filter.add_filter(/./)
29
29
  assert_equal ["foo", "bar", "baz"], @filter.filter(@backtrace)
30
30
  end
31
31
 
32
- test "default filter" do
32
+ def test_default_filter
33
33
  assert @default_filter.filters?("lib/minitest")
34
34
  assert @default_filter.filters?("lib/minitest/reporters")
35
35
  refute @default_filter.filters?("lib/my_gem")
@@ -6,28 +6,28 @@ module MiniTestReportersTest
6
6
  klass = Class.new do
7
7
  include MiniTest::Reporter
8
8
  end
9
-
9
+
10
10
  @reporter = klass.new
11
11
  end
12
-
13
- test 'callbacks' do
12
+
13
+ def test_callbacks
14
14
  [
15
15
  :before_suites, :after_suite, :before_suite, :after_suite, :before_test,
16
16
  :pass, :skip, :failure, :error
17
17
  ].each { |method| assert_respond_to @reporter, method }
18
18
  end
19
-
20
- test '#runner' do
19
+
20
+ def test_runner
21
21
  assert_kind_of MiniTest::Unit, @reporter.runner
22
22
  end
23
-
24
- test '#output' do
23
+
24
+ def test_output
25
25
  assert_equal MiniTest::Unit.output, @reporter.output
26
26
  end
27
-
28
- test '#verbose?' do
27
+
28
+ def test_verbose
29
29
  refute @reporter.verbose?
30
-
30
+
31
31
  begin
32
32
  @reporter.runner.verbose = true
33
33
  assert @reporter.verbose?
@@ -35,14 +35,14 @@ module MiniTestReportersTest
35
35
  @reporter.runner.verbose = false
36
36
  end
37
37
  end
38
-
39
- test '#print' do
40
- @reporter.output.expects(:print).with('foo')
38
+
39
+ def test_print
40
+ mock(@reporter.output).print('foo')
41
41
  @reporter.print('foo')
42
42
  end
43
-
44
- test '#puts' do
45
- @reporter.output.expects(:puts).with('foo')
43
+
44
+ def test_puts
45
+ mock(@reporter.output).puts('foo')
46
46
  @reporter.puts('foo')
47
47
  end
48
48
  end
@@ -2,10 +2,10 @@ require 'test_helper'
2
2
 
3
3
  module MiniTestReportersTest
4
4
  class ReportersTest < TestCase
5
- test "chooses the Rubymine reporter when necessary" do
5
+ def test_chooses_the_rubymine_reporter_when_necessary
6
6
  # Rubymine reporter complains when RubyMine libs are not available, so
7
7
  # stub its #puts method out.
8
- MiniTest::Unit.runner.output.stubs(:puts)
8
+ stub(MiniTest::Unit.runner.output).puts
9
9
 
10
10
  reporters = Minitest::Reporters.choose_reporters [], { "RM_INFO" => "x" }
11
11
  assert_instance_of MiniTest::Reporters::RubyMineReporter, reporters[0]
@@ -14,12 +14,12 @@ module MiniTestReportersTest
14
14
  assert_instance_of MiniTest::Reporters::RubyMineReporter, reporters[0]
15
15
  end
16
16
 
17
- test "chooses the TextMate reporter when necessary" do
17
+ def test_chooses_the_textmate_reporter_when_necessary
18
18
  reporters = Minitest::Reporters.choose_reporters [], {"TM_PID" => "x"}
19
19
  assert_instance_of MiniTest::Reporters::RubyMateReporter, reporters[0]
20
20
  end
21
21
 
22
- test "chooses the console reporters when necessary" do
22
+ def test_chooses_the_console_reporters_when_necessary
23
23
  reporters = Minitest::Reporters.choose_reporters [MiniTest::Reporters::SpecReporter.new], {}
24
24
  assert_instance_of MiniTest::Reporters::SpecReporter, reporters[0]
25
25
  end
data/test/test_helper.rb CHANGED
@@ -1,20 +1,11 @@
1
1
  require 'bundler/setup'
2
2
  require 'minitest/autorun'
3
- require 'mocha'
4
- require 'test_declarative'
3
+ require 'rr'
5
4
  require 'minitest/reporters'
6
5
 
7
6
  module MiniTestReportersTest
8
- require File.expand_path('../support/test_case', __FILE__)
9
-
10
- module Fixtures
11
- require File.expand_path('../support/fixtures/test_case_fixture', __FILE__)
12
- require File.expand_path('../support/fixtures/empty_test_fixture', __FILE__)
13
- require File.expand_path('../support/fixtures/error_test_fixture', __FILE__)
14
- require File.expand_path('../support/fixtures/failure_test_fixture', __FILE__)
15
- require File.expand_path('../support/fixtures/pass_test_fixture', __FILE__)
16
- require File.expand_path('../support/fixtures/skip_test_fixture', __FILE__)
17
- require File.expand_path('../support/fixtures/suite_callback_test_fixture', __FILE__)
7
+ class TestCase < MiniTest::Unit::TestCase
8
+ include RR::Adapters::MiniTest
18
9
  end
19
10
  end
20
11
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitest-reporters
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-07 00:00:00.000000000 Z
12
+ date: 2012-07-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: minitest
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: '2.0'
21
+ version: '2.12'
22
22
  - - <
23
23
  - !ruby/object:Gem::Version
24
24
  version: '4.0'
@@ -29,7 +29,7 @@ dependencies:
29
29
  requirements:
30
30
  - - ! '>='
31
31
  - !ruby/object:Gem::Version
32
- version: '2.0'
32
+ version: '2.12'
33
33
  - - <
34
34
  - !ruby/object:Gem::Version
35
35
  version: '4.0'
@@ -82,7 +82,7 @@ dependencies:
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
84
  - !ruby/object:Gem::Dependency
85
- name: mocha
85
+ name: rr
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  none: false
88
88
  requirements:
@@ -113,22 +113,6 @@ dependencies:
113
113
  - - ! '>='
114
114
  - !ruby/object:Gem::Version
115
115
  version: '0'
116
- - !ruby/object:Gem::Dependency
117
- name: test_declarative
118
- requirement: !ruby/object:Gem::Requirement
119
- none: false
120
- requirements:
121
- - - ! '>='
122
- - !ruby/object:Gem::Version
123
- version: '0'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- none: false
128
- requirements:
129
- - - ! '>='
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
116
  - !ruby/object:Gem::Dependency
133
117
  name: rake
134
118
  requirement: !ruby/object:Gem::Requirement
@@ -160,7 +144,9 @@ files:
160
144
  - README.md
161
145
  - Rakefile
162
146
  - lib/minitest/backtrace_filter.rb
147
+ - lib/minitest/before_test_hook.rb
163
148
  - lib/minitest/reporter.rb
149
+ - lib/minitest/reporter_runner.rb
164
150
  - lib/minitest/reporters.rb
165
151
  - lib/minitest/reporters/default_reporter.rb
166
152
  - lib/minitest/reporters/guard_reporter.rb
@@ -170,22 +156,11 @@ files:
170
156
  - lib/minitest/reporters/rubymine_reporter.rb
171
157
  - lib/minitest/reporters/spec_reporter.rb
172
158
  - lib/minitest/reporters/version.rb
173
- - lib/minitest/suite_runner.rb
174
159
  - lib/minitest/test_runner.rb
175
160
  - minitest-reporters.gemspec
176
161
  - test/minitest/backtrace_filter_test.rb
177
162
  - test/minitest/reporter_test.rb
178
163
  - test/minitest/reporters_test.rb
179
- - test/minitest/suite_runner_test.rb
180
- - test/minitest/test_runner_test.rb
181
- - test/support/fixtures/empty_test_fixture.rb
182
- - test/support/fixtures/error_test_fixture.rb
183
- - test/support/fixtures/failure_test_fixture.rb
184
- - test/support/fixtures/pass_test_fixture.rb
185
- - test/support/fixtures/skip_test_fixture.rb
186
- - test/support/fixtures/suite_callback_test_fixture.rb
187
- - test/support/fixtures/test_case_fixture.rb
188
- - test/support/test_case.rb
189
164
  - test/test_helper.rb
190
165
  homepage: https://github.com/CapnKernul/minitest-reporters
191
166
  licenses: []
@@ -201,7 +176,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
201
176
  version: '0'
202
177
  segments:
203
178
  - 0
204
- hash: -2934247906506335852
179
+ hash: 3874457769361975598
205
180
  required_rubygems_version: !ruby/object:Gem::Requirement
206
181
  none: false
207
182
  requirements:
@@ -210,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
210
185
  version: '0'
211
186
  segments:
212
187
  - 0
213
- hash: -2934247906506335852
188
+ hash: 3874457769361975598
214
189
  requirements: []
215
190
  rubyforge_project: minitest-reporters
216
191
  rubygems_version: 1.8.24
@@ -221,14 +196,4 @@ test_files:
221
196
  - test/minitest/backtrace_filter_test.rb
222
197
  - test/minitest/reporter_test.rb
223
198
  - test/minitest/reporters_test.rb
224
- - test/minitest/suite_runner_test.rb
225
- - test/minitest/test_runner_test.rb
226
- - test/support/fixtures/empty_test_fixture.rb
227
- - test/support/fixtures/error_test_fixture.rb
228
- - test/support/fixtures/failure_test_fixture.rb
229
- - test/support/fixtures/pass_test_fixture.rb
230
- - test/support/fixtures/skip_test_fixture.rb
231
- - test/support/fixtures/suite_callback_test_fixture.rb
232
- - test/support/fixtures/test_case_fixture.rb
233
- - test/support/test_case.rb
234
199
  - test/test_helper.rb
@@ -1,110 +0,0 @@
1
- module MiniTest
2
- # Runner for MiniTest suites.
3
- #
4
- # This is a heavily refactored version of the built-in MiniTest runner. It's
5
- # about the same speed, from what I can tell, but is significantly easier to
6
- # extend.
7
- #
8
- # Based upon Ryan Davis of Seattle.rb's MiniTest (MIT License).
9
- #
10
- # @see https://github.com/seattlerb/minitest MiniTest
11
- class SuiteRunner < Unit
12
- attr_accessor :suite_start_time, :test_start_time, :reporters
13
-
14
- def initialize
15
- self.report = {}
16
- self.errors = 0
17
- self.failures = 0
18
- self.skips = 0
19
- self.test_count = 0
20
- self.assertion_count = 0
21
- self.verbose = false
22
- self.reporters = []
23
- end
24
-
25
- def _run_anything(type)
26
- self.start_time = Time.now
27
-
28
- suites = suites_of_type(type)
29
- tests = suites.inject({}) do |acc, suite|
30
- acc[suite] = filtered_tests(suite, type)
31
- acc
32
- end
33
-
34
- self.test_count = tests.inject(0) { |acc, suite| acc + suite[1].length }
35
-
36
- if test_count > 0
37
- trigger(:before_suites, suites, type)
38
-
39
- fix_sync do
40
- suites.each { |suite| _run_suite(suite, tests[suite]) }
41
- end
42
-
43
- trigger(:after_suites, suites, type)
44
- end
45
- end
46
-
47
- def _run_suite(suite, tests)
48
- unless tests.empty?
49
- begin
50
- self.suite_start_time = Time.now
51
-
52
- trigger(:before_suite, suite)
53
- suite.startup if suite.respond_to?(:startup)
54
-
55
- tests.each { |test| _run_test(suite, test) }
56
- ensure
57
- suite.shutdown if suite.respond_to?(:shutdown)
58
- trigger(:after_suite, suite)
59
- end
60
- end
61
- end
62
-
63
- def _run_test(suite, test)
64
- self.test_start_time = Time.now
65
- trigger(:before_test, suite, test)
66
-
67
- test_runner = TestRunner.new(suite, test)
68
- test_runner.run
69
- add_test_result(suite, test, test_runner)
70
-
71
- trigger(test_runner.result, suite, test, test_runner)
72
- end
73
-
74
- def trigger(callback, *args)
75
- reporters.each { |reporter| reporter.send(callback, *args) }
76
- end
77
-
78
- private
79
-
80
- def filtered_tests(suite, type)
81
- filter = options[:filter] || '/./'
82
- filter = Regexp.new($1) if filter =~ /\/(.*)\//
83
- suite.send("#{type}_methods").grep(filter)
84
- end
85
-
86
- def suites_of_type(type)
87
- TestCase.send("#{type}_suites")
88
- end
89
-
90
- def add_test_result(suite, test, test_runner)
91
- self.report[suite] ||= {}
92
- self.report[suite][test.to_sym] = test_runner
93
-
94
- self.assertion_count += test_runner.assertions
95
-
96
- case test_runner.result
97
- when :skip then self.skips += 1
98
- when :failure then self.failures += 1
99
- when :error then self.errors += 1
100
- end
101
- end
102
-
103
- def fix_sync
104
- sync = output.respond_to?(:'sync=') # stupid emacs
105
- old_sync, output.sync = output.sync, true if sync
106
- yield
107
- output.sync = old_sync if sync
108
- end
109
- end
110
- end
@@ -1,164 +0,0 @@
1
- require 'test_helper'
2
-
3
- module MiniTestReportersTest
4
- class SuiteRunnerTest < TestCase
5
- def setup
6
- @runner = MiniTest::SuiteRunner.new
7
- @reporter = add_reporter
8
- end
9
-
10
- test '#report' do
11
- assert_equal({}, @runner.report)
12
- end
13
-
14
- test '#reporters' do
15
- assert_equal [@reporter], @runner.reporters
16
-
17
- reporter2 = add_reporter
18
- assert_equal [@reporter, reporter2], @runner.reporters
19
- end
20
-
21
- test '#_run_anything with no suites' do
22
- stub_suites([])
23
-
24
- @reporter.expects(:before_suites).never
25
- @reporter.expects(:after_suites).never
26
-
27
- @runner._run_anything(:test)
28
-
29
- assert_equal 0, @runner.test_count
30
- assert_equal 0, @runner.assertion_count
31
- assert_instance_of Time, @runner.start_time
32
- assert_equal({}, @runner.report)
33
- end
34
-
35
- test '#_run_anything with suites' do
36
- suites = [Fixtures::PassTestFixture, Fixtures::SkipTestFixture]
37
- stub_suites(suites)
38
-
39
- @reporter.expects(:before_suites).with(suites, :test)
40
- @reporter.expects(:after_suites).with(suites, :test)
41
-
42
- @runner._run_anything(:test)
43
-
44
- assert_equal 3, @runner.test_count
45
- assert_equal 3, @runner.assertion_count
46
- assert_instance_of Time, @runner.start_time
47
- assert_equal :pass, @runner.report[Fixtures::PassTestFixture][:test_pass].result
48
- assert_equal :pass, @runner.report[Fixtures::PassTestFixture][:test_foo].result
49
- assert_equal :skip, @runner.report[Fixtures::SkipTestFixture][:test_skip].result
50
- end
51
-
52
- test '#_run_anything with a filter' do
53
- @runner.options[:filter] = '/foo/'
54
- stub_suites([Fixtures::PassTestFixture])
55
-
56
- @runner._run_anything(:test)
57
- assert_equal 2, @runner.assertion_count
58
- end
59
-
60
- test '#_run_suite without tests' do
61
- @reporter.expects(:before_suite).never
62
- @reporter.expects(:after_suite).never
63
-
64
- @runner._run_suite(Fixtures::EmptyTestFixture, [])
65
- end
66
-
67
- test '#_run_suite with tests' do
68
- @reporter.expects(:before_suite).with(Fixtures::PassTestFixture)
69
- @reporter.expects(:after_suite).with(Fixtures::PassTestFixture)
70
-
71
- @runner._run_suite(Fixtures::PassTestFixture, [:test_pass, :test_foo])
72
-
73
- assert_equal 3, @runner.assertion_count
74
- assert_instance_of Time, @runner.suite_start_time
75
- end
76
-
77
- test '#_run_suite with a suite .startup and .shutdown' do
78
- suite = Fixtures::SuiteCallbackTestFixture
79
- suite.expects(:startup)
80
- suite.expects(:shutdown)
81
- @runner._run_suite(suite, [:test_foo])
82
- end
83
-
84
- test '#_run_test with a passing test' do
85
- suite = Fixtures::PassTestFixture
86
- test = :test_pass
87
-
88
- @reporter.expects(:before_test).with(suite, test)
89
- @reporter.expects(:pass).with(suite, test, instance_of(MiniTest::TestRunner))
90
-
91
- @runner._run_test(suite, test)
92
-
93
- assert_equal 1, @runner.assertion_count
94
- assert_instance_of Time, @runner.test_start_time
95
- assert_equal :pass, @runner.report[suite][test].result
96
- end
97
-
98
- test '#_run_test with a skipped test' do
99
- suite = Fixtures::SkipTestFixture
100
- test = :test_skip
101
-
102
- @reporter.expects(:before_test).with(suite, test)
103
- @reporter.expects(:skip).with(suite, test, instance_of(MiniTest::TestRunner))
104
-
105
- @runner._run_test(suite, test)
106
-
107
- assert_equal 0, @runner.assertion_count
108
- assert_instance_of Time, @runner.test_start_time
109
- assert_equal :skip, @runner.report[suite][test].result
110
- end
111
-
112
- test '#_run_test with a failing test' do
113
- suite = Fixtures::FailureTestFixture
114
- test = :test_failure
115
-
116
- @reporter.expects(:before_test).with(suite, test)
117
- @reporter.expects(:failure).with(suite, test, instance_of(MiniTest::TestRunner))
118
-
119
- @runner._run_test(suite, test)
120
-
121
- assert_equal 0, @runner.assertion_count
122
- assert_instance_of Time, @runner.test_start_time
123
- assert_equal :failure, @runner.report[suite][test].result
124
- end
125
-
126
- test '#_run_test with an error test' do
127
- suite = Fixtures::ErrorTestFixture
128
- test = :test_error
129
-
130
- @reporter.expects(:before_test).with(suite, test)
131
- @reporter.expects(:error).with(suite, test, instance_of(MiniTest::TestRunner))
132
-
133
- @runner._run_test(suite, test)
134
-
135
- assert_equal 0, @runner.assertion_count
136
- assert_instance_of Time, @runner.test_start_time
137
- assert_equal :error, @runner.report[suite][test].result
138
- end
139
-
140
- test '#trigger' do
141
- reporter2 = add_reporter
142
- @reporter.expects(:before_suite).with(Fixtures::PassTestFixture)
143
- reporter2.expects(:before_suite).with(Fixtures::PassTestFixture)
144
-
145
- @runner.trigger(:before_suite, Fixtures::PassTestFixture)
146
- end
147
-
148
- private
149
-
150
- def add_reporter
151
- klass = Class.new do
152
- include MiniTest::Reporter
153
- end
154
-
155
- reporter = klass.new
156
- @runner.reporters << reporter
157
- reporter
158
- end
159
-
160
- def stub_suites(suites)
161
- MiniTest::Unit::TestCase.stubs(:test_suites).returns(suites)
162
- end
163
- end
164
- end
@@ -1,91 +0,0 @@
1
- require 'test_helper'
2
-
3
- module MiniTestReportersTest
4
- class TestRunnerTest < TestCase
5
- def setup
6
- @suite = stub
7
- @test = :test_foo
8
- @runner = MiniTest::TestRunner.new(@suite, @test)
9
- end
10
-
11
- test '#suite' do
12
- assert_equal @suite, @runner.suite
13
- end
14
-
15
- test '#test' do
16
- assert_equal @test, @runner.test
17
- end
18
-
19
- test '#run with a passing test' do
20
- suite_instance = stub(:_assertions => 3)
21
- suite_instance.expects(:run).with(@runner).returns('.')
22
- @suite.stubs(:new).with(@test).returns(suite_instance)
23
-
24
- @runner.run
25
-
26
- assert_equal :pass, @runner.result
27
- assert_nil @runner.exception
28
- assert_equal 3, @runner.assertions
29
- end
30
-
31
- test '#run with an skipped test' do
32
- error = stub
33
- suite_instance = stub(:_assertions => 3)
34
- suite_instance.expects(:run).with(@runner).returns([:skip, error])
35
- @suite.stubs(:new).with(@test).returns(suite_instance)
36
-
37
- @runner.run
38
-
39
- assert_equal :skip, @runner.result
40
- assert_equal error, @runner.exception
41
- assert_equal 3, @runner.assertions
42
- end
43
-
44
- test '#run with a failing test' do
45
- error = stub
46
- suite_instance = stub(:_assertions => 3)
47
- suite_instance.expects(:run).with(@runner).returns([:failure, error])
48
- @suite.stubs(:new).with(@test).returns(suite_instance)
49
-
50
- @runner.run
51
-
52
- assert_equal :failure, @runner.result
53
- assert_equal error, @runner.exception
54
- assert_equal 3, @runner.assertions
55
- end
56
-
57
- test '#run with an errored test' do
58
- error = stub
59
- suite_instance = stub(:_assertions => 3)
60
- suite_instance.expects(:run).with(@runner).returns([:error, error])
61
- @suite.stubs(:new).with(@test).returns(suite_instance)
62
-
63
- @runner.run
64
-
65
- assert_equal :error, @runner.result
66
- assert_equal error, @runner.exception
67
- assert_equal 3, @runner.assertions
68
- end
69
-
70
- test '#puke with a skip' do
71
- skip = MiniTest::Skip.new
72
- result = @runner.puke(@suite, @test, skip)
73
-
74
- assert_equal [:skip, skip], result
75
- end
76
-
77
- test '#puke with a failure' do
78
- failure = MiniTest::Assertion.new
79
- result = @runner.puke(@suite, @test, failure)
80
-
81
- assert_equal [:failure, failure], result
82
- end
83
-
84
- test '#puke with an error' do
85
- error = RuntimeError.new
86
- result = @runner.puke(@suite, @test, error)
87
-
88
- assert_equal [:error, error], result
89
- end
90
- end
91
- end
@@ -1,5 +0,0 @@
1
- module MiniTestReportersTest
2
- module Fixtures
3
- class EmptyTestFixture < TestCaseFixture; end
4
- end
5
- end
@@ -1,9 +0,0 @@
1
- module MiniTestReportersTest
2
- module Fixtures
3
- class ErrorTestFixture < TestCaseFixture
4
- def test_error
5
- raise RuntimeError.new
6
- end
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module MiniTestReportersTest
2
- module Fixtures
3
- class FailureTestFixture < TestCaseFixture
4
- def test_failure
5
- flunk
6
- end
7
- end
8
- end
9
- end
@@ -1,14 +0,0 @@
1
- module MiniTestReportersTest
2
- module Fixtures
3
- class PassTestFixture < TestCaseFixture
4
- def test_pass
5
- assert true
6
- end
7
-
8
- def test_foo
9
- assert true
10
- assert true
11
- end
12
- end
13
- end
14
- end
@@ -1,9 +0,0 @@
1
- module MiniTestReportersTest
2
- module Fixtures
3
- class SkipTestFixture < TestCaseFixture
4
- def test_skip
5
- skip
6
- end
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module MiniTestReportersTest
2
- module Fixtures
3
- class SuiteCallbackTestFixture < TestCaseFixture
4
- def self.startup; end
5
- def self.shutdown; end
6
- def test_foo; end
7
- end
8
- end
9
- end
@@ -1,38 +0,0 @@
1
- module MiniTestReportersTest
2
- module Fixtures
3
- class TestCaseFixture
4
- attr_writer :_assertions
5
-
6
- def self.test_methods
7
- public_instance_methods(true).grep(/^test/)
8
- end
9
-
10
- def initialize(test)
11
- @test = test
12
- end
13
-
14
- def run(runner)
15
- send(@test)
16
- '.'
17
- rescue MiniTest::Assertion, RuntimeError => e
18
- runner.puke(self, @test, e)
19
- end
20
-
21
- def skip
22
- raise MiniTest::Skip.new
23
- end
24
-
25
- def flunk
26
- raise MiniTest::Assertion.new
27
- end
28
-
29
- def assert(value)
30
- self._assertions += 1
31
- end
32
-
33
- def _assertions
34
- @_assertions ||= 0
35
- end
36
- end
37
- end
38
- end
@@ -1,4 +0,0 @@
1
- module MiniTestReportersTest
2
- class TestCase < MiniTest::Unit::TestCase
3
- end
4
- end