minitest-allow 1.0.0 → 1.2.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
- checksums.yaml.gz.sig +1 -1
- data/History.rdoc +26 -1
- data/Rakefile +12 -0
- data/allow.yml +1 -0
- data/lib/minitest/allow_plugin.rb +106 -15
- data/test/minitest/test_allow_plugin.rb +20 -1
- data.tar.gz.sig +0 -0
- metadata +13 -13
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 42269ba2ac0e790cf210d17c0a5f41d74678f17ce9044fee722e15b82ce1053d
|
4
|
+
data.tar.gz: 94c2be932cd4447b3e3ae70ff5b6c165e8aa653eef39c698e503e73337c4a698
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ddf765dcb88e7bccd9c18d4e049eb2c892a3fa6a17ab5e0f6e43bcad322de91b217a0afac0ba55c5c12837f67fc524b43148e9d044969fa8f1879b3b493f165
|
7
|
+
data.tar.gz: cf20a5b160feaddfa5cd1e0f45cbeb2d617f5e1393dc8a3c635069f43097e80ffeb0ba5cba45a7f9e0124783f153eb778af397466643a102d246234d1bcbddcd
|
checksums.yaml.gz.sig
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
�k/̊I�4^�����Q<>��(�������/�e\;"�@p��`�=�kn����/y��y�C�[�v�\[h�����M�TUv)Gˠ�$��%�Q
|
data/History.rdoc
CHANGED
@@ -1,6 +1,31 @@
|
|
1
|
+
=== 1.2.1 / 2022-07-01
|
2
|
+
|
3
|
+
* 1 bug fix:
|
4
|
+
|
5
|
+
* Filter skipped tests from failures.
|
6
|
+
|
7
|
+
=== 1.2.0 / 2022-05-12
|
8
|
+
|
9
|
+
* 1 major enhancement:
|
10
|
+
|
11
|
+
* The allow file allows for regexps to match errors and names by pattern.
|
12
|
+
|
13
|
+
* 5 minor enhancements:
|
14
|
+
|
15
|
+
* Don't print allow fixes unless allow_save
|
16
|
+
* Explicity use psych. Don't ask.
|
17
|
+
* Output of good/bad tests is now in YAML format with easily searchable headers.
|
18
|
+
* Use safe_load_file if it is available and allow Regexps.
|
19
|
+
|
20
|
+
=== 1.1.0 / 2021-04-19
|
21
|
+
|
22
|
+
* 2 minor enhancements:
|
23
|
+
|
24
|
+
* This works even when running subsets of tests (eg parallel in a CI)
|
25
|
+
* Tracks tests that are allowed yet pass and can thus be removed from allowed list.
|
26
|
+
|
1
27
|
=== 1.0.0 / 2021-04-02
|
2
28
|
|
3
29
|
* 1 major enhancement
|
4
30
|
|
5
31
|
* Birthday!
|
6
|
-
|
data/Rakefile
CHANGED
@@ -15,4 +15,16 @@ Hoe.spec "minitest-allow" do
|
|
15
15
|
dependency "minitest", "~> 5.0"
|
16
16
|
end
|
17
17
|
|
18
|
+
Rake.application["test"].clear # hack? is there a better way?
|
19
|
+
|
20
|
+
task :test => "test:filtered"
|
21
|
+
|
22
|
+
namespace "test" do
|
23
|
+
Minitest::TestTask.create "filtered" do |t|
|
24
|
+
t.extra_args << "--allow=allow.yml"
|
25
|
+
end
|
26
|
+
|
27
|
+
Minitest::TestTask.create "unfiltered"
|
28
|
+
end
|
29
|
+
|
18
30
|
# vim: syntax=ruby
|
data/allow.yml
CHANGED
@@ -1,12 +1,20 @@
|
|
1
1
|
module Minitest
|
2
2
|
def self.plugin_allow_options opts, _options # :nodoc:
|
3
|
+
@allow = @allow_save = false
|
4
|
+
|
3
5
|
opts.on "-a", "--allow=path", String, "Allow listed tests to fail." do |f|
|
4
|
-
|
5
|
-
|
6
|
+
# don't ask why I'm using this specifically:
|
7
|
+
require "psych"
|
8
|
+
|
9
|
+
@allow = if Psych.respond_to? :safe_load_file then
|
10
|
+
Psych.safe_load_file f, permitted_classes: [Regexp]
|
11
|
+
else
|
12
|
+
Psych.load_file f
|
13
|
+
end
|
6
14
|
end
|
7
15
|
|
8
16
|
opts.on "-A", "--save-allow=path", String, "Save failing tests." do |f|
|
9
|
-
require "
|
17
|
+
require "psych"
|
10
18
|
@allow_save = f
|
11
19
|
end
|
12
20
|
end
|
@@ -14,10 +22,10 @@ module Minitest
|
|
14
22
|
def self.plugin_allow_init options # :nodoc:
|
15
23
|
if @allow || @allow_save then
|
16
24
|
self.reporter.extend Allow
|
25
|
+
self.reporter.allow = @allow
|
26
|
+
self.reporter.allow_save = @allow_save
|
27
|
+
self.reporter.allow_seen = []
|
17
28
|
end
|
18
|
-
|
19
|
-
self.reporter.allow = @allow if @allow
|
20
|
-
self.reporter.allow_save = @allow_save if @allow_save
|
21
29
|
end
|
22
30
|
|
23
31
|
class Result # TODO: push up
|
@@ -26,10 +34,21 @@ module Minitest
|
|
26
34
|
end
|
27
35
|
end
|
28
36
|
|
37
|
+
class Minitest::Test # sigh... rails
|
38
|
+
def full_name
|
39
|
+
"%s#%s" % [self.class, name]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
29
43
|
module Allow
|
30
|
-
VERSION = "1.
|
44
|
+
VERSION = "1.2.1"
|
31
45
|
|
32
|
-
attr_accessor :allow, :allow_save
|
46
|
+
attr_accessor :allow, :allow_save, :allow_seen
|
47
|
+
|
48
|
+
def record result
|
49
|
+
allow_seen << result.full_name
|
50
|
+
super
|
51
|
+
end
|
33
52
|
|
34
53
|
def allow_results
|
35
54
|
self.reporters
|
@@ -39,27 +58,99 @@ module Minitest
|
|
39
58
|
|
40
59
|
def write_allow
|
41
60
|
data = allow_results
|
42
|
-
.
|
61
|
+
.flatten
|
62
|
+
.map(&:full_name)
|
43
63
|
.uniq
|
44
64
|
.sort
|
45
65
|
|
46
|
-
File.write allow_save, data
|
66
|
+
File.write allow_save, Psych.dump(data, line_width:-1)
|
47
67
|
end
|
48
68
|
|
69
|
+
# Test runs call record, we put everything ran in allow_seen.
|
70
|
+
# This means allow_seen has everything RAN, regardless of pass/fail
|
71
|
+
# We use this intersected with the allowed file to determine what to report
|
72
|
+
# on... if it wasn't seen, we don't say add/remove at all.
|
73
|
+
#
|
74
|
+
# `allow` is all the stuff from the allow file. Test names and
|
75
|
+
# regexps that excuse failures.
|
76
|
+
#
|
77
|
+
# `allow_results` is an array of arrays of results: [[result, ...], ...]
|
78
|
+
#
|
79
|
+
# When the run is done, we want to tell the user what tests to
|
80
|
+
# remove or add from the allowed list:
|
81
|
+
#
|
82
|
+
# * If a test passed that is in the allowed list, it should be removed.
|
83
|
+
# * If a test failed that is NOT in the allowed list, it should be added.
|
84
|
+
# * If a test failed that is matched by a regexp, it's NAME should be removed
|
85
|
+
# if it is listed.
|
86
|
+
|
49
87
|
def filter_allow
|
88
|
+
# 1. split allow into strings and regexps
|
89
|
+
allowed_REs, allowed_names = allow.partition { |a| Regexp === a }
|
90
|
+
|
91
|
+
allowed_names = allowed_names.map { |x| [x, x] }.to_h
|
92
|
+
|
93
|
+
# 2. remove items from allow_results whose full_name matches the strings
|
94
|
+
# 3. remove items from allow_results whose message matches the regexps
|
95
|
+
# 4. remove items from allow_results whose full_name matches the regexps?
|
96
|
+
|
97
|
+
hit = {}
|
98
|
+
allow_results = self.allow_results
|
50
99
|
allow_results.each do |results|
|
51
|
-
results.delete_if { |r|
|
100
|
+
results.delete_if { |r|
|
101
|
+
name = r.full_name
|
102
|
+
|
103
|
+
by_name = allowed_names[name]
|
104
|
+
by_regx = allowed_REs.find { |re| r.failure.message =~ re || name =~ re }
|
105
|
+
|
106
|
+
# this will add the name as bad unless hit by regexp as well
|
107
|
+
# if hit by regex, then we want to report it as "good" so
|
108
|
+
# the name gets removed from the allow list:
|
109
|
+
|
110
|
+
hit[name] = true if by_name && !by_regx
|
111
|
+
|
112
|
+
by_name || by_regx
|
113
|
+
}
|
114
|
+
end
|
115
|
+
|
116
|
+
# 5. remove string and regexps that matched any of the above from allow
|
117
|
+
self.allow -= hit.keys
|
118
|
+
|
119
|
+
errored, failed = allow_results
|
120
|
+
.flatten
|
121
|
+
.reject(&:skipped?)
|
122
|
+
.partition { |t| Minitest::UnexpectedError === t.failure }
|
123
|
+
|
124
|
+
failed = failed.map(&:full_name)
|
125
|
+
errors = Hash.new { |h,k| h[k] = [] }
|
126
|
+
|
127
|
+
errored.each do |t|
|
128
|
+
msg = t.failure.message.lines.first.chomp.gsub(/0x\h+/, "0xHHHH")
|
129
|
+
|
130
|
+
errors[Regexp.new(Regexp.escape(msg))] << t.full_name
|
131
|
+
end
|
132
|
+
|
133
|
+
extra_bad = failed.uniq
|
134
|
+
extra_bad << errors.transform_values(&:uniq) unless errors.empty?
|
135
|
+
|
136
|
+
# 6. report new failures including regular expressions for errors
|
137
|
+
|
138
|
+
unless extra_bad.empty? then
|
139
|
+
io.puts
|
140
|
+
io.puts "Bad tests that are NOT allowed:"
|
141
|
+
Psych.dump extra_bad, io, line_width:-1
|
142
|
+
io.puts
|
52
143
|
end
|
53
144
|
end
|
54
145
|
|
55
146
|
def report_extra_allow
|
56
|
-
|
147
|
+
good = allow & allow_seen
|
148
|
+
|
149
|
+
unless good.empty? then
|
57
150
|
io.puts
|
58
151
|
io.puts "Excluded tests that now pass:"
|
152
|
+
Psych.dump good, io, line_width:-1
|
59
153
|
io.puts
|
60
|
-
allow.each do |name|
|
61
|
-
io.puts " #{name}"
|
62
|
-
end
|
63
154
|
end
|
64
155
|
end
|
65
156
|
|
@@ -4,7 +4,26 @@ require "minitest/allow_plugin"
|
|
4
4
|
module TestMinitest; end
|
5
5
|
|
6
6
|
class TestMinitest::TestAllow < Minitest::Test
|
7
|
+
def test_good
|
8
|
+
assert true
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_skipped
|
12
|
+
skip "nah"
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_unknown_bad
|
16
|
+
flunk "bad!"
|
17
|
+
end if ENV["NEW_BAD"]
|
18
|
+
|
7
19
|
def test_sanity
|
8
|
-
flunk "
|
20
|
+
flunk "nah"
|
21
|
+
end
|
22
|
+
|
23
|
+
3.times do |n|
|
24
|
+
name = "test_regexp_%02d" % [n]
|
25
|
+
define_method name do
|
26
|
+
raise "This is bad %02d" % [n]
|
27
|
+
end
|
9
28
|
end
|
10
29
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minitest-allow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Davis
|
@@ -10,9 +10,9 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
13
|
+
MIIDPjCCAiagAwIBAgIBBjANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu
|
14
14
|
ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
|
15
|
-
|
15
|
+
GRYDY29tMB4XDTIxMTIyMzIzMTkwNFoXDTIyMTIyMzIzMTkwNFowRTETMBEGA1UE
|
16
16
|
AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
|
17
17
|
JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
|
18
18
|
b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
|
@@ -22,14 +22,14 @@ cert_chain:
|
|
22
22
|
qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
|
23
23
|
gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
|
24
24
|
HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBCwUAA4IB
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
25
|
+
AQCKB5jfsuSnKb+t/Wrh3UpdkmX7TrEsjVmERC0pPqzQ5GQJgmEXDD7oMgaKXaAq
|
26
|
+
x2m+KSZDrqk7c8uho5OX6YMqg4KdxehfSLqqTZGoeV78qwf/jpPQZKTf+W9gUSJh
|
27
|
+
zsWpo4K50MP+QtdSbKXZwjAafpQ8hK0MnnZ/aeCsW9ov5vdXpYbf3dpg6ADXRGE7
|
28
|
+
lQY2y1tJ5/chqu6h7dQmnm2ABUqx9O+JcN9hbCYoA5i/EeubUEtFIh2w3SpO6YfB
|
29
|
+
JFmxn4h9YO/pVdB962BdBNNDia0kgIjI3ENnkLq0dKpYU3+F3KhEuTksLO0L6X/V
|
30
|
+
YsuyUzsMz6GQA4khyaMgKNSD
|
31
31
|
-----END CERTIFICATE-----
|
32
|
-
date:
|
32
|
+
date: 2022-07-02 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: minitest
|
@@ -71,14 +71,14 @@ dependencies:
|
|
71
71
|
requirements:
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '3.
|
74
|
+
version: '3.24'
|
75
75
|
type: :development
|
76
76
|
prerelease: false
|
77
77
|
version_requirements: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
79
|
- - "~>"
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: '3.
|
81
|
+
version: '3.24'
|
82
82
|
description: |-
|
83
83
|
Allows you to provide an exclusion list of allowed failures/errors.
|
84
84
|
Failures and errors on this list still get run and reported as usual,
|
@@ -123,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
requirements: []
|
126
|
-
rubygems_version: 3.
|
126
|
+
rubygems_version: 3.3.12
|
127
127
|
signing_key:
|
128
128
|
specification_version: 4
|
129
129
|
summary: Allows you to provide an exclusion list of allowed failures/errors
|
metadata.gz.sig
CHANGED
Binary file
|