minitest-reporters 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
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