minitest-heat 0.0.5 → 0.0.9

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.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "heat"
3
+ require_relative 'heat'
4
4
 
5
5
  module Minitest
6
6
  # Custom minitest reporter to proactively identify likely culprits in test failures by focusing on
@@ -29,48 +29,52 @@ module Minitest
29
29
  # Pulls from minitest-color as well:
30
30
  # https://github.com/teoljungberg/minitest-color/blob/master/lib/minitest/color_plugin.rb
31
31
  class HeatReporter < AbstractReporter
32
-
33
32
  attr_reader :output,
34
33
  :options,
35
- :results,
36
- :map
34
+ :timer,
35
+ :results
37
36
 
38
37
  def initialize(io = $stdout, options = {})
39
- @output = Heat::Output.new(io)
40
38
  @options = options
41
39
 
42
- @results = Heat::Results.new
43
- @map = Heat::Map.new
40
+ @timer = Heat::Timer.new
41
+ @results = Heat::Results.new
42
+ @output = Heat::Output.new(io)
44
43
  end
45
44
 
46
45
  # Starts reporting on the run.
47
46
  def start
48
- output.puts
49
- output.puts
50
- @results.start_timer!
47
+ timer.start!
48
+
49
+ # A couple of blank lines to create some breathing room
50
+ output.newline
51
+ output.newline
51
52
  end
52
53
 
53
54
  # About to start running a test. This allows a reporter to show that it is starting or that we
54
55
  # are in the middle of a test run.
55
- def prerecord(klass, name)
56
- end
56
+ def prerecord(klass, name); end
57
57
 
58
58
  # Records the data from a result.
59
+ #
59
60
  # Minitest::Result source:
60
61
  # https://github.com/seattlerb/minitest/blob/f4f57afaeb3a11bd0b86ab0757704cb78db96cf4/lib/minitest.rb#L504
61
62
  def record(result)
63
+ # Convert a Minitest Result into an "issue" to more consistently expose the data needed to
64
+ # adjust the failure output to the type of failure
62
65
  issue = Heat::Issue.new(result)
63
66
 
64
- @results.record(issue)
65
- @map.add(*issue.to_hit) if issue.hit?
67
+ timer.increment_counts(issue.result.assertions)
68
+ results.record(issue)
66
69
 
67
- output.marker(issue.marker)
70
+ output.marker(issue.type)
68
71
  end
69
72
 
70
73
  # Outputs the summary of the run.
71
74
  def report
72
- @results.stop_timer!
75
+ timer.stop!
73
76
 
77
+ # A couple of blank lines to create some breathing room
74
78
  output.newline
75
79
  output.newline
76
80
 
@@ -78,25 +82,45 @@ module Minitest
78
82
  # pressing issues are displayed at the bottom of the report in order to reduce scrolling.
79
83
  # This way, as you fix issues, the list gets shorter, and eventually the least critical
80
84
  # issues will be displayed without scrolling once more problematic issues are resolved.
81
- if results.failures.empty? && results.brokens.empty? && results.errors.empty? && results.skips.empty?
82
- results.slows.each { |issue| output.issue_details(issue) }
83
- end
85
+ %i[slows painfuls skips failures brokens errors].each do |issue_category|
86
+ next unless show?(issue_category)
84
87
 
85
- if results.failures.empty? && results.brokens.empty? && results.errors.empty?
86
- results.skips.each { |issue| output.issue_details(issue) }
88
+ results.send(issue_category).each { |issue| output.issue_details(issue) }
87
89
  end
88
90
 
89
- results.failures.each { |issue| output.issue_details(issue) }
90
- results.brokens.each { |issue| output.issue_details(issue) }
91
- results.errors.each { |issue| output.issue_details(issue) }
91
+ # Display a short summary of the total issue counts fore ach category as well as performance
92
+ # details for the test suite as a whole
93
+ output.compact_summary(results, timer)
92
94
 
93
- output.compact_summary(results)
94
- output.heat_map(map)
95
+ # If there were issues, shows a short heat map summary of which files and lines were the most
96
+ # common sources of issues
97
+ output.heat_map(results)
98
+
99
+ # A blank line to create some breathing room
100
+ output.newline
95
101
  end
96
102
 
97
103
  # Did this run pass?
98
104
  def passed?
99
105
  results.errors.empty? && results.failures.empty?
100
106
  end
107
+
108
+ private
109
+
110
+ def no_problems?
111
+ !results.problems?
112
+ end
113
+
114
+ def no_problems_or_skips?
115
+ !results.problems? && !results.skips.any?
116
+ end
117
+
118
+ def show?(issue_category)
119
+ case issue_category
120
+ when :skips then no_problems?
121
+ when :painfuls, :slows then no_problems_or_skips?
122
+ else true
123
+ end
124
+ end
101
125
  end
102
126
  end
@@ -21,8 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.metadata['source_code_uri'] = 'https://github.com/garrettdimon/minitest-heat'
22
22
  spec.metadata['wiki_uri'] = 'https://github.com/garrettdimon/minitest-heat/wiki'
23
23
 
24
-
25
-
26
24
  # Specify which files should be added to the gem when it is released.
27
25
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
28
26
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
@@ -34,7 +32,11 @@ Gem::Specification.new do |spec|
34
32
 
35
33
  spec.add_runtime_dependency 'minitest'
36
34
 
35
+ spec.add_development_dependency 'awesome_print'
37
36
  spec.add_development_dependency 'dead_end'
38
37
  spec.add_development_dependency 'pry'
38
+ spec.add_development_dependency 'rubocop'
39
+ spec.add_development_dependency 'rubocop-minitest'
40
+ spec.add_development_dependency 'rubocop-rake'
39
41
  spec.add_development_dependency 'simplecov'
40
42
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitest-heat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Garrett Dimon
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-13 00:00:00.000000000 Z
11
+ date: 2021-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: awesome_print
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: dead_end
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,48 @@ dependencies:
52
66
  - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
55
111
  - !ruby/object:Gem::Dependency
56
112
  name: simplecov
57
113
  requirement: !ruby/object:Gem::Requirement
@@ -75,6 +131,7 @@ extensions: []
75
131
  extra_rdoc_files: []
76
132
  files:
77
133
  - ".gitignore"
134
+ - ".rubocop.yml"
78
135
  - ".travis.yml"
79
136
  - CODE_OF_CONDUCT.md
80
137
  - Gemfile
@@ -86,19 +143,22 @@ files:
86
143
  - bin/setup
87
144
  - lib/minitest/heat.rb
88
145
  - lib/minitest/heat/backtrace.rb
146
+ - lib/minitest/heat/hit.rb
89
147
  - lib/minitest/heat/issue.rb
148
+ - lib/minitest/heat/line.rb
90
149
  - lib/minitest/heat/location.rb
91
150
  - lib/minitest/heat/map.rb
92
151
  - lib/minitest/heat/output.rb
93
152
  - lib/minitest/heat/output/backtrace.rb
94
153
  - lib/minitest/heat/output/issue.rb
95
- - lib/minitest/heat/output/location.rb
96
154
  - lib/minitest/heat/output/map.rb
155
+ - lib/minitest/heat/output/marker.rb
97
156
  - lib/minitest/heat/output/results.rb
98
157
  - lib/minitest/heat/output/source_code.rb
99
158
  - lib/minitest/heat/output/token.rb
100
159
  - lib/minitest/heat/results.rb
101
160
  - lib/minitest/heat/source.rb
161
+ - lib/minitest/heat/timer.rb
102
162
  - lib/minitest/heat/version.rb
103
163
  - lib/minitest/heat_plugin.rb
104
164
  - lib/minitest/heat_reporter.rb
@@ -128,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
188
  - !ruby/object:Gem::Version
129
189
  version: '0'
130
190
  requirements: []
131
- rubygems_version: 3.1.4
191
+ rubygems_version: 3.1.6
132
192
  signing_key:
133
193
  specification_version: 4
134
194
  summary: Presents test results in a visual manner to guide you to where to look first.
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Minitest
4
- module Heat
5
- class Output
6
- class Location
7
- attr_accessor :location
8
-
9
- def initialize(location)
10
- @location = location
11
- end
12
-
13
- def tokens
14
- end
15
-
16
- private
17
- end
18
- end
19
- end
20
- end