minitest-heat 1.1.0 → 1.2.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.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +1 -1
- data/CHANGELOG.md +11 -0
- data/Gemfile.lock +30 -24
- data/README.md +3 -3
- data/lib/minitest/heat/backtrace/line_count.rb +35 -0
- data/lib/minitest/heat/backtrace/line_parser.rb +1 -1
- data/lib/minitest/heat/backtrace.rb +1 -0
- data/lib/minitest/heat/configuration.rb +7 -2
- data/lib/minitest/heat/issue.rb +15 -9
- data/lib/minitest/heat/location.rb +11 -2
- data/lib/minitest/heat/output/backtrace.rb +3 -4
- data/lib/minitest/heat/version.rb +1 -1
- data/minitest-heat.gemspec +2 -2
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e19adf67c01638e6cf3c53f5840c1d0a1fa82b3d41b3a8f1965d9ae24735e606
|
4
|
+
data.tar.gz: 3b8ced671f3aafaa3beaea45a0222ace34a8d37f3a0ea50b5085231d24e916cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 81c762ce455b684275d490f57839c4b1090ad7d0c723b4df479094a5aba5a722ffe74ef16e9b16ca549795c6cba95e863f7b2ff4b71476def525857c7c4dbffc
|
7
|
+
data.tar.gz: 889ebfb98b36a7d7c2877f89b89aabf39c610ae220badb85587c1a29bf99f5651a60107dec3c892364099974cbce7c8fc7eb2bccbbb9180ecae1578307f7e76c
|
data/.github/workflows/main.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,17 @@
|
|
2
2
|
|
3
3
|
Nothing at the moment.
|
4
4
|
|
5
|
+
## [1.2.0] - 2022-10-31
|
6
|
+
|
7
|
+
Mainly some improvements to make test failures more resilient and improve the formatting when there are issues.
|
8
|
+
|
9
|
+
- Don't consider binstubs project files when colorizing the stacktrace.
|
10
|
+
- Switch debugging from Pry to debug
|
11
|
+
- Ensure overly-long exception messages are truncated to reduce excessive scrolling
|
12
|
+
- Make backtrace display smarter about how many lines to display
|
13
|
+
- Fix bug that was incorrectly deleting the bin directory
|
14
|
+
- Prepare for better handling of "stack level too deep" traces
|
15
|
+
|
5
16
|
## [1.1.0] - 2021-12-09
|
6
17
|
|
7
18
|
The biggest update is that the slow thresholds are now configurable.
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
minitest-heat (1.
|
4
|
+
minitest-heat (1.2.0)
|
5
5
|
minitest
|
6
6
|
|
7
7
|
GEM
|
@@ -9,33 +9,38 @@ GEM
|
|
9
9
|
specs:
|
10
10
|
ast (2.4.2)
|
11
11
|
awesome_print (1.9.2)
|
12
|
-
|
13
|
-
|
12
|
+
dead_end (4.0.0)
|
13
|
+
debug (1.6.2)
|
14
|
+
irb (>= 1.3.6)
|
15
|
+
reline (>= 0.3.1)
|
14
16
|
docile (1.4.0)
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
17
|
+
io-console (0.5.11)
|
18
|
+
irb (1.4.1)
|
19
|
+
reline (>= 0.3.0)
|
20
|
+
json (2.6.2)
|
21
|
+
minitest (5.16.3)
|
22
|
+
parallel (1.22.1)
|
23
|
+
parser (3.1.2.1)
|
19
24
|
ast (~> 2.4.1)
|
20
|
-
|
21
|
-
coderay (~> 1.1)
|
22
|
-
method_source (~> 1.0)
|
23
|
-
rainbow (3.0.0)
|
25
|
+
rainbow (3.1.1)
|
24
26
|
rake (12.3.3)
|
25
|
-
regexp_parser (2.
|
27
|
+
regexp_parser (2.5.0)
|
28
|
+
reline (0.3.1)
|
29
|
+
io-console (~> 0.5)
|
26
30
|
rexml (3.2.5)
|
27
|
-
rubocop (1.
|
31
|
+
rubocop (1.36.0)
|
32
|
+
json (~> 2.3)
|
28
33
|
parallel (~> 1.10)
|
29
|
-
parser (>= 3.
|
34
|
+
parser (>= 3.1.2.1)
|
30
35
|
rainbow (>= 2.2.2, < 4.0)
|
31
36
|
regexp_parser (>= 1.8, < 3.0)
|
32
|
-
rexml
|
33
|
-
rubocop-ast (>= 1.
|
37
|
+
rexml (>= 3.2.5, < 4.0)
|
38
|
+
rubocop-ast (>= 1.20.1, < 2.0)
|
34
39
|
ruby-progressbar (~> 1.7)
|
35
40
|
unicode-display_width (>= 1.4.0, < 3.0)
|
36
|
-
rubocop-ast (1.
|
37
|
-
parser (>= 3.
|
38
|
-
rubocop-minitest (0.
|
41
|
+
rubocop-ast (1.21.0)
|
42
|
+
parser (>= 3.1.1.0)
|
43
|
+
rubocop-minitest (0.22.1)
|
39
44
|
rubocop (>= 0.90, < 2.0)
|
40
45
|
rubocop-rake (0.6.0)
|
41
46
|
rubocop (~> 1.0)
|
@@ -45,18 +50,19 @@ GEM
|
|
45
50
|
simplecov-html (~> 0.11)
|
46
51
|
simplecov_json_formatter (~> 0.1)
|
47
52
|
simplecov-html (0.12.3)
|
48
|
-
simplecov_json_formatter (0.1.
|
49
|
-
unicode-display_width (2.
|
53
|
+
simplecov_json_formatter (0.1.4)
|
54
|
+
unicode-display_width (2.3.0)
|
50
55
|
|
51
56
|
PLATFORMS
|
52
|
-
|
57
|
+
arm64-darwin-21
|
58
|
+
x86_64-linux
|
53
59
|
|
54
60
|
DEPENDENCIES
|
55
61
|
awesome_print
|
56
62
|
dead_end
|
63
|
+
debug
|
57
64
|
minitest (~> 5.0)
|
58
65
|
minitest-heat!
|
59
|
-
pry
|
60
66
|
rake (~> 12.0)
|
61
67
|
rubocop
|
62
68
|
rubocop-minitest
|
@@ -64,4 +70,4 @@ DEPENDENCIES
|
|
64
70
|
simplecov
|
65
71
|
|
66
72
|
BUNDLED WITH
|
67
|
-
2.
|
73
|
+
2.3.22
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
# 🔥 Minitest
|
2
|
-
Minitest
|
1
|
+
# 🔥 Minitest Heat 🔥
|
2
|
+
Minitest Heat helps you identify problems faster so you can more efficiently resolve test failures by generating a heat map that shows where failures are concentrated.
|
3
3
|
|
4
|
-
For a more detailed explanation of Minitest Heat with screenshots, [head over the wiki for the full story](https://github.com/garrettdimon/minitest-heat/wiki).
|
4
|
+
For a more detailed explanation of Minitest Heat with screenshots, [head over to the wiki for the full story](https://github.com/garrettdimon/minitest-heat/wiki).
|
5
5
|
|
6
6
|
Or for some additional insight about priorities and how it works, this [Twitter thread](https://twitter.com/garrettdimon/status/1432703746526560266) is a good read.
|
7
7
|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Minitest
|
4
|
+
module Heat
|
5
|
+
class Backtrace
|
6
|
+
# Determines an optimal line count for backtrace locations in order to have relevant
|
7
|
+
# information but keep the backtrace as compact as possible
|
8
|
+
class LineCount
|
9
|
+
DEFAULT_LINE_COUNT = 20
|
10
|
+
|
11
|
+
attr_accessor :locations
|
12
|
+
|
13
|
+
def initialize(locations)
|
14
|
+
@locations = locations
|
15
|
+
end
|
16
|
+
|
17
|
+
def earliest_project_location
|
18
|
+
locations.rindex { |element| element.project_file? }
|
19
|
+
end
|
20
|
+
|
21
|
+
def max_location
|
22
|
+
locations.size - 1
|
23
|
+
end
|
24
|
+
|
25
|
+
def limit
|
26
|
+
[
|
27
|
+
DEFAULT_LINE_COUNT,
|
28
|
+
earliest_project_location,
|
29
|
+
max_location
|
30
|
+
].compact.min
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -11,7 +11,7 @@ module Minitest
|
|
11
11
|
# Parses a line from a backtrace in order to convert it to usable components
|
12
12
|
def self.read(raw_text)
|
13
13
|
raw_pathname, raw_line_number, raw_container = raw_text.split(':')
|
14
|
-
raw_container = raw_container
|
14
|
+
raw_container = raw_container&.delete_prefix('in `')&.delete_suffix("'")
|
15
15
|
|
16
16
|
::Minitest::Heat::Location.new(
|
17
17
|
pathname: raw_pathname,
|
@@ -6,12 +6,17 @@ module Minitest
|
|
6
6
|
module Heat
|
7
7
|
# For managing configuration options on how Minitest Heat should handle results
|
8
8
|
class Configuration
|
9
|
+
DEFAULTS = {
|
10
|
+
slow_threshold: 1.0,
|
11
|
+
painfully_slow_threshold: 3.0
|
12
|
+
}.freeze
|
13
|
+
|
9
14
|
attr_accessor :slow_threshold,
|
10
15
|
:painfully_slow_threshold
|
11
16
|
|
12
17
|
def initialize
|
13
|
-
@slow_threshold
|
14
|
-
@painfully_slow_threshold =
|
18
|
+
@slow_threshold = DEFAULTS[:slow_threshold]
|
19
|
+
@painfully_slow_threshold = DEFAULTS[:painfully_slow_threshold]
|
15
20
|
end
|
16
21
|
end
|
17
22
|
end
|
data/lib/minitest/heat/issue.rb
CHANGED
@@ -10,12 +10,12 @@ module Minitest
|
|
10
10
|
|
11
11
|
TYPES = %i[error broken failure skipped painful slow].freeze
|
12
12
|
|
13
|
-
# Long-term, these could be configurable so that people can determine their own thresholds of
|
14
|
-
# pain for slow tests
|
15
|
-
SLOW_THRESHOLDS = {
|
16
|
-
|
17
|
-
|
18
|
-
}.freeze
|
13
|
+
# # Long-term, these could be configurable so that people can determine their own thresholds of
|
14
|
+
# # pain for slow tests
|
15
|
+
# SLOW_THRESHOLDS = {
|
16
|
+
# slow: 1.0,
|
17
|
+
# painful: 3.0
|
18
|
+
# }.freeze
|
19
19
|
|
20
20
|
attr_reader :assertions,
|
21
21
|
:locations,
|
@@ -120,14 +120,14 @@ module Minitest
|
|
120
120
|
#
|
121
121
|
# @return [Float] number of seconds after which a test is considered slow
|
122
122
|
def slow_threshold
|
123
|
-
Minitest::Heat.configuration.slow_threshold
|
123
|
+
Minitest::Heat.configuration.slow_threshold
|
124
124
|
end
|
125
125
|
|
126
126
|
# The number, in seconds, for a test to be considered "painfully slow"
|
127
127
|
#
|
128
128
|
# @return [Float] number of seconds after which a test is considered painfully slow
|
129
129
|
def painfully_slow_threshold
|
130
|
-
Minitest::Heat.configuration.painfully_slow_threshold
|
130
|
+
Minitest::Heat.configuration.painfully_slow_threshold
|
131
131
|
end
|
132
132
|
|
133
133
|
# Determines if a test should be considered slow by comparing it to the low end definition of
|
@@ -200,7 +200,13 @@ module Minitest
|
|
200
200
|
#
|
201
201
|
# @return [String] the first line of the exception message
|
202
202
|
def first_line_of_exception_message
|
203
|
-
message.split("\n")[0]
|
203
|
+
text = message.split("\n")[0]
|
204
|
+
|
205
|
+
text.size > exception_message_limit ? "#{text[0..exception_message_limit]}..." : text
|
206
|
+
end
|
207
|
+
|
208
|
+
def exception_message_limit
|
209
|
+
200
|
204
210
|
end
|
205
211
|
end
|
206
212
|
end
|
@@ -133,7 +133,7 @@ module Minitest
|
|
133
133
|
#
|
134
134
|
# @return [Boolean] true if the file is in the project (source code or test) but not vendored
|
135
135
|
def project_file?
|
136
|
-
path.include?(project_root_dir) && !bundled_file?
|
136
|
+
path.include?(project_root_dir) && !bundled_file? && !binstub_file?
|
137
137
|
end
|
138
138
|
|
139
139
|
# Determines if the file is in the project `vendor/bundle` directory.
|
@@ -143,6 +143,15 @@ module Minitest
|
|
143
143
|
path.include?("#{project_root_dir}/vendor/bundle")
|
144
144
|
end
|
145
145
|
|
146
|
+
# Determines if the file is in the project `bin` directory. With binstub'd gems, they'll
|
147
|
+
# appear to be source code because the code is located in the project directory. This helps
|
148
|
+
# make sure the backtraces don't think that's the case
|
149
|
+
#
|
150
|
+
# @return [Boolean] true if the file is in `<project_root>/bin
|
151
|
+
def binstub_file?
|
152
|
+
path.include?("#{project_root_dir}/bin")
|
153
|
+
end
|
154
|
+
|
146
155
|
# Determines if a given file follows the standard approaching to naming test files.
|
147
156
|
#
|
148
157
|
# @return [Boolean] true if the file name starts with `test_` or ends with `_test.rb`
|
@@ -154,7 +163,7 @@ module Minitest
|
|
154
163
|
#
|
155
164
|
# @return [Boolean] true if the file is in the project but not a test file or vendored file
|
156
165
|
def source_code_file?
|
157
|
-
project_file? && !test_file?
|
166
|
+
project_file? && !test_file?
|
158
167
|
end
|
159
168
|
|
160
169
|
# A safe interface to getting the last modified time for the file in question
|
@@ -5,7 +5,6 @@ module Minitest
|
|
5
5
|
class Output
|
6
6
|
# Builds the collection of tokens for displaying a backtrace when an exception occurs
|
7
7
|
class Backtrace
|
8
|
-
DEFAULT_LINE_COUNT = 10
|
9
8
|
DEFAULT_INDENTATION_SPACES = 2
|
10
9
|
|
11
10
|
attr_accessor :locations, :backtrace
|
@@ -25,14 +24,14 @@ module Minitest
|
|
25
24
|
#
|
26
25
|
# @return [Integer] the number of lines to limit the backtrace to
|
27
26
|
def line_count
|
28
|
-
# Defined as a method instead of using the constant
|
27
|
+
# Defined as a method instead of using the constant directly in order to easily support
|
29
28
|
# adding options for controlling how many lines are displayed from a backtrace.
|
30
29
|
#
|
31
30
|
# For example, instead of a fixed number, the backtrace could dynamically calculate how
|
32
31
|
# many lines it should displaye in order to get to the origination point. Or it could have
|
33
32
|
# a default, but inteligently go back further if the backtrace meets some criteria for
|
34
33
|
# displaying more lines.
|
35
|
-
|
34
|
+
::Minitest::Heat::Backtrace::LineCount.new(backtrace.locations).limit
|
36
35
|
end
|
37
36
|
|
38
37
|
# A subset of parsed lines from the backtrace.
|
@@ -49,7 +48,7 @@ module Minitest
|
|
49
48
|
# it could display the entire backtrace without filtering anything.
|
50
49
|
# - It could scan the backtrace to the first appearance of project files and then display
|
51
50
|
# all of the lines that occurred after that instance
|
52
|
-
# - It
|
51
|
+
# - It could filter the lines differently whether the issue originated from a test or from
|
53
52
|
# the source code.
|
54
53
|
# - It could allow supporting a "compact" or "robust" reporter style so that someone on
|
55
54
|
# a smaller screen could easily reduce the information shown so that the results could
|
data/minitest-heat.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.description = 'Presents test results in a visual manner to guide you to where to look first.'
|
13
13
|
spec.homepage = 'https://github.com/garrettdimon/minitest-heat'
|
14
14
|
spec.license = 'MIT'
|
15
|
-
spec.required_ruby_version = Gem::Requirement.new('>= 2.
|
15
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 2.7.6')
|
16
16
|
|
17
17
|
spec.metadata['homepage_uri'] = spec.homepage
|
18
18
|
spec.metadata['bug_tracker_uri'] = 'https://github.com/garrettdimon/minitest-heat/issues'
|
@@ -34,7 +34,7 @@ Gem::Specification.new do |spec|
|
|
34
34
|
|
35
35
|
spec.add_development_dependency 'awesome_print'
|
36
36
|
spec.add_development_dependency 'dead_end'
|
37
|
-
spec.add_development_dependency '
|
37
|
+
spec.add_development_dependency 'debug'
|
38
38
|
spec.add_development_dependency 'rubocop'
|
39
39
|
spec.add_development_dependency 'rubocop-minitest'
|
40
40
|
spec.add_development_dependency 'rubocop-rake'
|
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: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Garrett Dimon
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-10-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: debug
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -146,6 +146,7 @@ files:
|
|
146
146
|
- bin/setup
|
147
147
|
- lib/minitest/heat.rb
|
148
148
|
- lib/minitest/heat/backtrace.rb
|
149
|
+
- lib/minitest/heat/backtrace/line_count.rb
|
149
150
|
- lib/minitest/heat/backtrace/line_parser.rb
|
150
151
|
- lib/minitest/heat/configuration.rb
|
151
152
|
- lib/minitest/heat/hit.rb
|
@@ -186,14 +187,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
186
187
|
requirements:
|
187
188
|
- - ">="
|
188
189
|
- !ruby/object:Gem::Version
|
189
|
-
version: 2.
|
190
|
+
version: 2.7.6
|
190
191
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
192
|
requirements:
|
192
193
|
- - ">="
|
193
194
|
- !ruby/object:Gem::Version
|
194
195
|
version: '0'
|
195
196
|
requirements: []
|
196
|
-
rubygems_version: 3.
|
197
|
+
rubygems_version: 3.3.22
|
197
198
|
signing_key:
|
198
199
|
specification_version: 4
|
199
200
|
summary: Presents test results in a visual manner to guide you to where to look first.
|