minitest-heat 2.1.0 → 2.1.1
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.
- checksums.yaml +4 -4
- data/.flayignore +1 -0
- data/.reek.yml +87 -0
- data/.reviewer.yml +87 -0
- data/.reviewer_history.yml +42 -0
- data/.rubocop.yml +33 -2
- data/CHANGELOG.md +11 -0
- data/Gemfile +12 -2
- data/Gemfile.lock +61 -4
- data/lib/minitest/heat/backtrace/line_count.rb +1 -1
- data/lib/minitest/heat/backtrace.rb +5 -15
- data/lib/minitest/heat/hit.rb +5 -12
- data/lib/minitest/heat/issue.rb +15 -39
- data/lib/minitest/heat/location.rb +25 -63
- data/lib/minitest/heat/locations.rb +8 -24
- data/lib/minitest/heat/map.rb +3 -9
- data/lib/minitest/heat/output/backtrace.rb +16 -26
- data/lib/minitest/heat/output/issue.rb +1 -1
- data/lib/minitest/heat/output/map.rb +7 -7
- data/lib/minitest/heat/output/marker.rb +3 -9
- data/lib/minitest/heat/output/results.rb +15 -37
- data/lib/minitest/heat/output/source_code.rb +4 -12
- data/lib/minitest/heat/output/token.rb +23 -22
- data/lib/minitest/heat/output.rb +9 -11
- data/lib/minitest/heat/source.rb +14 -27
- data/lib/minitest/heat/timer.rb +6 -12
- data/lib/minitest/heat/version.rb +1 -1
- data/lib/minitest/heat_plugin.rb +2 -1
- data/lib/minitest/heat_reporter.rb +4 -8
- data/minitest-heat.gemspec +1 -9
- metadata +5 -99
data/lib/minitest/heat/source.rb
CHANGED
|
@@ -15,21 +15,18 @@ module Minitest
|
|
|
15
15
|
@line_number = Integer(line_number)
|
|
16
16
|
@max_line_count = max_line_count
|
|
17
17
|
@context = context
|
|
18
|
+
@raw_lines = nil
|
|
18
19
|
end
|
|
19
20
|
|
|
20
21
|
# Returns relevant lines as a hash with line numbers as the keys
|
|
21
22
|
#
|
|
22
23
|
# @return [Hash] hash of relevant lines with line numbers as keys
|
|
23
|
-
def to_h
|
|
24
|
-
line_numbers.map(&:to_s).zip(lines).to_h
|
|
25
|
-
end
|
|
24
|
+
def to_h = line_numbers.map(&:to_s).zip(lines).to_h
|
|
26
25
|
|
|
27
26
|
# Looks up the line of code referenced
|
|
28
27
|
#
|
|
29
28
|
# @return [String] the line of code at filename:line_number
|
|
30
|
-
def line
|
|
31
|
-
file_lines[line_number - 1]
|
|
32
|
-
end
|
|
29
|
+
def line = file_lines[line_number - 1]
|
|
33
30
|
|
|
34
31
|
# Looks up the available lines of code around the referenced line number
|
|
35
32
|
#
|
|
@@ -43,9 +40,7 @@ module Minitest
|
|
|
43
40
|
# Line numbers for the returned lines
|
|
44
41
|
#
|
|
45
42
|
# @return [Array<Integer>] the line numbers corresponding to the lines returned
|
|
46
|
-
def line_numbers
|
|
47
|
-
(first_line_number..last_line_number).to_a.uniq
|
|
48
|
-
end
|
|
43
|
+
def line_numbers = (first_line_number..last_line_number).to_a.uniq
|
|
49
44
|
|
|
50
45
|
# Reads (and chomps) the lines of the target file
|
|
51
46
|
#
|
|
@@ -68,9 +63,7 @@ module Minitest
|
|
|
68
63
|
# The largest possible value for line numbers
|
|
69
64
|
#
|
|
70
65
|
# @return [Integer] the last line number of the file
|
|
71
|
-
def max_line_number
|
|
72
|
-
file_lines.length
|
|
73
|
-
end
|
|
66
|
+
def max_line_number = file_lines.length
|
|
74
67
|
|
|
75
68
|
# The number of the first line of code to return
|
|
76
69
|
#
|
|
@@ -79,7 +72,7 @@ module Minitest
|
|
|
79
72
|
target = line_number - first_line_offset - leftover_trailing_lines_count
|
|
80
73
|
|
|
81
74
|
# Can't go earlier than the first line
|
|
82
|
-
target
|
|
75
|
+
[target, 1].max
|
|
83
76
|
end
|
|
84
77
|
|
|
85
78
|
# The number of the last line of code to return
|
|
@@ -89,7 +82,7 @@ module Minitest
|
|
|
89
82
|
target = line_number + last_line_offset + leftover_preceding_lines_count
|
|
90
83
|
|
|
91
84
|
# Can't go past the end of the file
|
|
92
|
-
target
|
|
85
|
+
[target, max_line_number].min
|
|
93
86
|
end
|
|
94
87
|
|
|
95
88
|
# The target number of preceding lines to include
|
|
@@ -135,21 +128,15 @@ module Minitest
|
|
|
135
128
|
end
|
|
136
129
|
|
|
137
130
|
# The total number of lines to include in addition to the primary line
|
|
138
|
-
def other_lines_count
|
|
139
|
-
max_line_count - 1
|
|
140
|
-
end
|
|
131
|
+
def other_lines_count = max_line_count - 1
|
|
141
132
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
(other_lines_count / 2).round(0, half: :up)
|
|
146
|
-
end
|
|
133
|
+
# Round up preceding lines if it's uneven because preceding lines are more likely to be
|
|
134
|
+
# helpful when debugging
|
|
135
|
+
def preceding_lines_split_count = (other_lines_count / 2).round(0, half: :up)
|
|
147
136
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
(other_lines_count / 2).round(0, half: :down)
|
|
152
|
-
end
|
|
137
|
+
# Round down preceding lines because they provide context in the file but don't contribute
|
|
138
|
+
# in terms of the code that led to the error
|
|
139
|
+
def trailing_lines_split_count = (other_lines_count / 2).round(0, half: :down)
|
|
153
140
|
end
|
|
154
141
|
end
|
|
155
142
|
end
|
data/lib/minitest/heat/timer.rb
CHANGED
|
@@ -36,12 +36,10 @@ module Minitest
|
|
|
36
36
|
# returns a zero that would be problematic as a denomitor in calculating average times
|
|
37
37
|
#
|
|
38
38
|
# @return [Float] the clocktime duration of the test suite run in seconds
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
delta.zero? ? 0.01 : delta
|
|
44
|
-
end
|
|
39
|
+
# Don't return 0. The time can end up being 0 for a new or realy fast test suite, and
|
|
40
|
+
# dividing by 0 doesn't go well when determining average time, so this ensures it uses a
|
|
41
|
+
# close-enough-but-not-zero value.
|
|
42
|
+
def total_time = delta.zero? ? 0.01 : delta
|
|
45
43
|
|
|
46
44
|
# Records the test and assertion counts for a given test outcome
|
|
47
45
|
# @param count [Integer] the number of assertions from the test
|
|
@@ -55,16 +53,12 @@ module Minitest
|
|
|
55
53
|
# Provides a nice rounded answer for about how many tests were completed per second
|
|
56
54
|
#
|
|
57
55
|
# @return [Float] the average number of tests completed per second
|
|
58
|
-
def tests_per_second
|
|
59
|
-
(test_count / total_time).round(2)
|
|
60
|
-
end
|
|
56
|
+
def tests_per_second = (test_count / total_time).round(2)
|
|
61
57
|
|
|
62
58
|
# Provides a nice rounded answer for about how many assertions were completed per second
|
|
63
59
|
#
|
|
64
60
|
# @return [Float] the average number of assertions completed per second
|
|
65
|
-
def assertions_per_second
|
|
66
|
-
(assertion_count / total_time).round(2)
|
|
67
|
-
end
|
|
61
|
+
def assertions_per_second = (assertion_count / total_time).round(2)
|
|
68
62
|
|
|
69
63
|
# Generates a hash representation for JSON serialization
|
|
70
64
|
#
|
data/lib/minitest/heat_plugin.rb
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
require_relative 'heat_reporter'
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
# :reek:IrresponsibleModule - reopening Minitest module for plugin registration
|
|
6
|
+
module Minitest
|
|
6
7
|
def self.plugin_heat_options(opts, options)
|
|
7
8
|
opts.on '--heat-json', 'Output results as JSON instead of human-readable format' do
|
|
8
9
|
options[:heat_json] = true
|
|
@@ -56,8 +56,8 @@ module Minitest
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
# About to start running a test. This allows a reporter to show that it is starting or that we
|
|
59
|
-
# are in the middle of a test run.
|
|
60
|
-
def prerecord(
|
|
59
|
+
# are in the middle of a test run. Parameters required by Minitest::AbstractReporter interface.
|
|
60
|
+
def prerecord(_klass, _name); end
|
|
61
61
|
|
|
62
62
|
# Records the data from a result.
|
|
63
63
|
#
|
|
@@ -105,14 +105,10 @@ module Minitest
|
|
|
105
105
|
# Whether to output JSON instead of human-readable text
|
|
106
106
|
#
|
|
107
107
|
# @return [Boolean] true if --heat-json flag was passed
|
|
108
|
-
def json_output?
|
|
109
|
-
options[:heat_json]
|
|
110
|
-
end
|
|
108
|
+
def json_output? = options[:heat_json]
|
|
111
109
|
|
|
112
110
|
# Did this run pass?
|
|
113
|
-
def passed?
|
|
114
|
-
results.errors.empty? && results.failures.empty?
|
|
115
|
-
end
|
|
111
|
+
def passed? = results.errors.empty? && results.failures.empty?
|
|
116
112
|
|
|
117
113
|
private
|
|
118
114
|
|
data/minitest-heat.gemspec
CHANGED
|
@@ -31,13 +31,5 @@ Gem::Specification.new do |spec|
|
|
|
31
31
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
32
32
|
spec.require_paths = ['lib']
|
|
33
33
|
|
|
34
|
-
spec.
|
|
35
|
-
|
|
36
|
-
spec.add_development_dependency 'awesome_print'
|
|
37
|
-
spec.add_development_dependency 'debug'
|
|
38
|
-
spec.add_development_dependency 'rubocop'
|
|
39
|
-
spec.add_development_dependency 'rubocop-minitest'
|
|
40
|
-
spec.add_development_dependency 'rubocop-rake'
|
|
41
|
-
spec.add_development_dependency 'simplecov'
|
|
42
|
-
spec.add_development_dependency 'simplecov_json_formatter'
|
|
34
|
+
spec.add_dependency 'minitest'
|
|
43
35
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: minitest-heat
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.1.
|
|
4
|
+
version: 2.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Garrett Dimon
|
|
@@ -23,104 +23,6 @@ dependencies:
|
|
|
23
23
|
- - ">="
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
25
|
version: '0'
|
|
26
|
-
- !ruby/object:Gem::Dependency
|
|
27
|
-
name: awesome_print
|
|
28
|
-
requirement: !ruby/object:Gem::Requirement
|
|
29
|
-
requirements:
|
|
30
|
-
- - ">="
|
|
31
|
-
- !ruby/object:Gem::Version
|
|
32
|
-
version: '0'
|
|
33
|
-
type: :development
|
|
34
|
-
prerelease: false
|
|
35
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
-
requirements:
|
|
37
|
-
- - ">="
|
|
38
|
-
- !ruby/object:Gem::Version
|
|
39
|
-
version: '0'
|
|
40
|
-
- !ruby/object:Gem::Dependency
|
|
41
|
-
name: debug
|
|
42
|
-
requirement: !ruby/object:Gem::Requirement
|
|
43
|
-
requirements:
|
|
44
|
-
- - ">="
|
|
45
|
-
- !ruby/object:Gem::Version
|
|
46
|
-
version: '0'
|
|
47
|
-
type: :development
|
|
48
|
-
prerelease: false
|
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
-
requirements:
|
|
51
|
-
- - ">="
|
|
52
|
-
- !ruby/object:Gem::Version
|
|
53
|
-
version: '0'
|
|
54
|
-
- !ruby/object:Gem::Dependency
|
|
55
|
-
name: rubocop
|
|
56
|
-
requirement: !ruby/object:Gem::Requirement
|
|
57
|
-
requirements:
|
|
58
|
-
- - ">="
|
|
59
|
-
- !ruby/object:Gem::Version
|
|
60
|
-
version: '0'
|
|
61
|
-
type: :development
|
|
62
|
-
prerelease: false
|
|
63
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
-
requirements:
|
|
65
|
-
- - ">="
|
|
66
|
-
- !ruby/object:Gem::Version
|
|
67
|
-
version: '0'
|
|
68
|
-
- !ruby/object:Gem::Dependency
|
|
69
|
-
name: rubocop-minitest
|
|
70
|
-
requirement: !ruby/object:Gem::Requirement
|
|
71
|
-
requirements:
|
|
72
|
-
- - ">="
|
|
73
|
-
- !ruby/object:Gem::Version
|
|
74
|
-
version: '0'
|
|
75
|
-
type: :development
|
|
76
|
-
prerelease: false
|
|
77
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
-
requirements:
|
|
79
|
-
- - ">="
|
|
80
|
-
- !ruby/object:Gem::Version
|
|
81
|
-
version: '0'
|
|
82
|
-
- !ruby/object:Gem::Dependency
|
|
83
|
-
name: rubocop-rake
|
|
84
|
-
requirement: !ruby/object:Gem::Requirement
|
|
85
|
-
requirements:
|
|
86
|
-
- - ">="
|
|
87
|
-
- !ruby/object:Gem::Version
|
|
88
|
-
version: '0'
|
|
89
|
-
type: :development
|
|
90
|
-
prerelease: false
|
|
91
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
-
requirements:
|
|
93
|
-
- - ">="
|
|
94
|
-
- !ruby/object:Gem::Version
|
|
95
|
-
version: '0'
|
|
96
|
-
- !ruby/object:Gem::Dependency
|
|
97
|
-
name: simplecov
|
|
98
|
-
requirement: !ruby/object:Gem::Requirement
|
|
99
|
-
requirements:
|
|
100
|
-
- - ">="
|
|
101
|
-
- !ruby/object:Gem::Version
|
|
102
|
-
version: '0'
|
|
103
|
-
type: :development
|
|
104
|
-
prerelease: false
|
|
105
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
-
requirements:
|
|
107
|
-
- - ">="
|
|
108
|
-
- !ruby/object:Gem::Version
|
|
109
|
-
version: '0'
|
|
110
|
-
- !ruby/object:Gem::Dependency
|
|
111
|
-
name: simplecov_json_formatter
|
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
|
113
|
-
requirements:
|
|
114
|
-
- - ">="
|
|
115
|
-
- !ruby/object:Gem::Version
|
|
116
|
-
version: '0'
|
|
117
|
-
type: :development
|
|
118
|
-
prerelease: false
|
|
119
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
-
requirements:
|
|
121
|
-
- - ">="
|
|
122
|
-
- !ruby/object:Gem::Version
|
|
123
|
-
version: '0'
|
|
124
26
|
description: Presents test results in a visual manner to guide you to where to look
|
|
125
27
|
first.
|
|
126
28
|
email:
|
|
@@ -129,10 +31,14 @@ executables: []
|
|
|
129
31
|
extensions: []
|
|
130
32
|
extra_rdoc_files: []
|
|
131
33
|
files:
|
|
34
|
+
- ".flayignore"
|
|
132
35
|
- ".github/FUNDING.yml"
|
|
133
36
|
- ".github/workflows/main.yml"
|
|
134
37
|
- ".github/workflows/release.yml"
|
|
135
38
|
- ".gitignore"
|
|
39
|
+
- ".reek.yml"
|
|
40
|
+
- ".reviewer.yml"
|
|
41
|
+
- ".reviewer_history.yml"
|
|
136
42
|
- ".rubocop.yml"
|
|
137
43
|
- CHANGELOG.md
|
|
138
44
|
- CODE_OF_CONDUCT.md
|