minitest-heat 0.0.8 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -35,6 +35,8 @@ module Minitest
35
35
  :results
36
36
 
37
37
  def initialize(io = $stdout, options = {})
38
+ super()
39
+
38
40
  @options = options
39
41
 
40
42
  @timer = Heat::Timer.new
@@ -62,31 +64,37 @@ module Minitest
62
64
  def record(result)
63
65
  # Convert a Minitest Result into an "issue" to more consistently expose the data needed to
64
66
  # adjust the failure output to the type of failure
65
- issue = Heat::Issue.new(result)
67
+ issue = Heat::Issue.from_result(result)
68
+
69
+ # Note the number of assertions for the performance summary
70
+ timer.increment_counts(issue.assertions)
66
71
 
67
- timer.increment_counts(issue.result.assertions)
72
+ # Record the issue to show details later
68
73
  results.record(issue)
69
74
 
75
+ # Show the marker
70
76
  output.marker(issue.type)
77
+ rescue StandardError => e
78
+ display_exception_guidance(e)
71
79
  end
72
80
 
73
- # Outputs the summary of the run.
74
- def report
75
- timer.stop!
76
-
77
- # A couple of blank lines to create some breathing room
81
+ def display_exception_guidance(exception)
78
82
  output.newline
83
+ puts 'Sorry, but Minitest Heat encountered an exception recording an issue. Disabling Minitest Heat will get you back on track.'
84
+ puts 'Please use the following exception details to submit an issue at https://github.com/garrettdimon/minitest-heat/issues'
85
+ puts "#{exception.message}:"
86
+ exception.backtrace.each do |line|
87
+ puts " #{line}"
88
+ end
79
89
  output.newline
90
+ end
80
91
 
81
- # Issues start with the least critical and go up to the most critical so that the most
82
- # pressing issues are displayed at the bottom of the report in order to reduce scrolling.
83
- # This way, as you fix issues, the list gets shorter, and eventually the least critical
84
- # issues will be displayed without scrolling once more problematic issues are resolved.
85
- %i[slows painfuls skips failures brokens errors].each do |issue_category|
86
- next unless show?(issue_category)
92
+ # Outputs the summary of the run.
93
+ def report
94
+ timer.stop!
87
95
 
88
- results.send(issue_category).each { |issue| output.issue_details(issue) }
89
- end
96
+ # The list of individual issues and their associated details
97
+ output.issues_list(results)
90
98
 
91
99
  # Display a short summary of the total issue counts fore ach category as well as performance
92
100
  # details for the test suite as a whole
@@ -96,7 +104,7 @@ module Minitest
96
104
  # common sources of issues
97
105
  output.heat_map(results)
98
106
 
99
- # A blank line to create some breathing room
107
+ output.newline
100
108
  output.newline
101
109
  end
102
110
 
@@ -104,23 +112,5 @@ module Minitest
104
112
  def passed?
105
113
  results.errors.empty? && results.failures.empty?
106
114
  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
125
115
  end
126
116
  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.8
4
+ version: 0.0.12
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-10-15 00:00:00.000000000 Z
11
+ date: 2021-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -143,10 +143,11 @@ files:
143
143
  - bin/setup
144
144
  - lib/minitest/heat.rb
145
145
  - lib/minitest/heat/backtrace.rb
146
+ - lib/minitest/heat/backtrace/line_parser.rb
146
147
  - lib/minitest/heat/hit.rb
147
148
  - lib/minitest/heat/issue.rb
148
- - lib/minitest/heat/line.rb
149
149
  - lib/minitest/heat/location.rb
150
+ - lib/minitest/heat/locations.rb
150
151
  - lib/minitest/heat/map.rb
151
152
  - lib/minitest/heat/output.rb
152
153
  - lib/minitest/heat/output/backtrace.rb
@@ -188,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
189
  - !ruby/object:Gem::Version
189
190
  version: '0'
190
191
  requirements: []
191
- rubygems_version: 3.1.6
192
+ rubygems_version: 3.2.22
192
193
  signing_key:
193
194
  specification_version: 4
194
195
  summary: Presents test results in a visual manner to guide you to where to look first.
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'forwardable'
4
-
5
- module Minitest
6
- module Heat
7
- # Represents a line of code from the project and provides convenient access to information about
8
- # the line for displaying in test results
9
- class Line
10
- attr_accessor :pathname, :number, :container
11
- alias line_number number
12
-
13
- def initialize(pathname:, number:, container: nil)
14
- @pathname = Pathname(pathname)
15
- @number = number.to_i
16
- @container = container.to_s
17
- end
18
-
19
- # Convenient interface to read a line from a backtrace convert it to usable components
20
- def self.parse_backtrace(raw_text)
21
- raw_pathname, raw_line_number, raw_container = raw_text.split(':')
22
- raw_container = raw_container.delete_prefix('in `').delete_suffix("'")
23
-
24
- new(pathname: raw_pathname, number: raw_line_number, container: raw_container)
25
- end
26
-
27
- def to_s
28
- "#{location} in `#{container}`"
29
- end
30
-
31
- def path
32
- pathname.exist? ? pathname.dirname : UNRECOGNIZED
33
- end
34
-
35
- def file
36
- pathname.exist? ? pathname.basename : UNRECOGNIZED
37
- end
38
-
39
- def mtime
40
- pathname.exist? ? pathname.mtime : UNKNOWN_MODIFICATION_TIME
41
- end
42
-
43
- def age_in_seconds
44
- pathname.exist? ? seconds_ago : UNKNOWN_MODIFICATION_SECONDS
45
- end
46
-
47
- def location
48
- "#{pathname}:#{number}"
49
- end
50
-
51
- def short_location
52
- "#{file}:#{number}"
53
- end
54
-
55
- def source_code(max_line_count: 1)
56
- Minitest::Heat::Source.new(
57
- pathname.to_s,
58
- line_number: line_number,
59
- max_line_count: max_line_count
60
- )
61
- end
62
-
63
- private
64
-
65
- UNRECOGNIZED = '(Unrecognized File)'
66
- UNKNOWN_MODIFICATION_TIME = Time.at(0)
67
- UNKNOWN_MODIFICATION_SECONDS = -1
68
-
69
- def seconds_ago
70
- (Time.now - mtime).to_i
71
- end
72
- end
73
- end
74
- end