warning 1.2.1 → 1.3.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/CHANGELOG +6 -0
- data/MIT-LICENSE +1 -1
- data/lib/warning.rb +46 -7
- metadata +3 -7
- data/Rakefile +0 -47
- data/test/fixtures/mismatched_indentations.rb +0 -4
- data/test/test_freeze_warning.rb +0 -69
- data/test/test_warning.rb +0 -553
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0ea693f6c3250c25b7ba2859e7c8ea5d945e8c0560aa3c564fda63da2d52e567
|
4
|
+
data.tar.gz: 3417d55cd4807d454d37afc6360864d9d87b29874b8e87d8082b413d209a4b4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 379377da9ef4d3ac871eb4bdbf08dcc245ccb94d7f987ef04f3f60944f4e1d0784aeee60bb560cbd4d744b92e675803fcd6955c354553649bd72e8d0e3dda1a2
|
7
|
+
data.tar.gz: 691e2c43099ddad0631752b66d7c401025a59a1b81de0fc1eca92627e5efd9b6d561b571b434526a325cab2f30bc9f4c7d2f625d62ec303905b19115ecf85148
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
=== 1.3.0 (2022-07-14)
|
2
|
+
|
3
|
+
* Allow Warning.clear to take a block, and restore current state after block (splattael) (#18, #20)
|
4
|
+
|
5
|
+
* Raise ArgumentError if Warning.process is passed non-String as first argument (splattael) (#17, #19)
|
6
|
+
|
1
7
|
=== 1.2.1 (2021-10-04)
|
2
8
|
|
3
9
|
* Recognize additional void context warnings (kachick) (#13)
|
data/MIT-LICENSE
CHANGED
data/lib/warning.rb
CHANGED
@@ -24,19 +24,52 @@ module Warning
|
|
24
24
|
|
25
25
|
# Map of action symbols to procs that return the symbol
|
26
26
|
ACTION_PROC_MAP = {
|
27
|
+
raise: proc{|_| :raise},
|
27
28
|
default: proc{|_| :default},
|
28
29
|
backtrace: proc{|_| :backtrace},
|
29
|
-
raise: proc{|_| :raise},
|
30
30
|
}
|
31
31
|
private_constant :ACTION_PROC_MAP
|
32
32
|
|
33
33
|
# Clear all current ignored warnings, warning processors, and duplicate check cache.
|
34
34
|
# Also disables deduplicating warnings if that is currently enabled.
|
35
|
+
#
|
36
|
+
# If a block is passed, the previous values are restored after the block exits.
|
37
|
+
#
|
38
|
+
# Examples:
|
39
|
+
#
|
40
|
+
# # Clear warning state
|
41
|
+
# Warning.clear
|
42
|
+
#
|
43
|
+
# Warning.clear do
|
44
|
+
# # Clear warning state inside the block
|
45
|
+
# ...
|
46
|
+
# end
|
47
|
+
# # Previous warning state restored when block exists
|
35
48
|
def clear
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
49
|
+
if block_given?
|
50
|
+
ignore = process = dedup = nil
|
51
|
+
synchronize do
|
52
|
+
ignore = @ignore.dup
|
53
|
+
process = @process.dup
|
54
|
+
dedup = @dedup.dup
|
55
|
+
end
|
56
|
+
|
57
|
+
begin
|
58
|
+
clear
|
59
|
+
yield
|
60
|
+
ensure
|
61
|
+
synchronize do
|
62
|
+
@ignore = ignore
|
63
|
+
@process = process
|
64
|
+
@dedup = dedup
|
65
|
+
end
|
66
|
+
end
|
67
|
+
else
|
68
|
+
synchronize do
|
69
|
+
@ignore.clear
|
70
|
+
@process.clear
|
71
|
+
@dedup = false
|
72
|
+
end
|
40
73
|
end
|
41
74
|
end
|
42
75
|
|
@@ -144,6 +177,10 @@ module Warning
|
|
144
177
|
#
|
145
178
|
# Warning.process(__FILE__, :missing_ivar=>:backtrace, :keyword_separation=>:raise)
|
146
179
|
def process(path='', actions=nil, &block)
|
180
|
+
unless path.is_a?(String)
|
181
|
+
raise ArgumentError, "path must be a String (given an instance of #{path.class})"
|
182
|
+
end
|
183
|
+
|
147
184
|
if block
|
148
185
|
if actions
|
149
186
|
raise ArgumentError, "cannot pass both actions and block to Warning.process"
|
@@ -173,14 +210,16 @@ module Warning
|
|
173
210
|
if RUBY_VERSION >= '3.0'
|
174
211
|
method_args = ', category: nil'
|
175
212
|
super_ = "category ? super : super(str)"
|
213
|
+
# :nocov:
|
176
214
|
else
|
177
215
|
super_ = "super"
|
216
|
+
# :nocov:
|
178
217
|
end
|
179
218
|
|
180
219
|
class_eval(<<-END, __FILE__, __LINE__+1)
|
181
220
|
def warn(str#{method_args})
|
182
221
|
synchronize{@ignore.dup}.each do |path, regexp|
|
183
|
-
if str.start_with?(path) && str
|
222
|
+
if str.start_with?(path) && regexp.match?(str)
|
184
223
|
return
|
185
224
|
end
|
186
225
|
end
|
@@ -198,7 +237,7 @@ module Warning
|
|
198
237
|
if str.start_with?(path)
|
199
238
|
if block.is_a?(Hash)
|
200
239
|
block.each do |regexp, blk|
|
201
|
-
if str
|
240
|
+
if regexp.match?(str)
|
202
241
|
throw :action, blk.call(str)
|
203
242
|
end
|
204
243
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: warning
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Evans
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest-global_expectations
|
@@ -41,11 +41,7 @@ files:
|
|
41
41
|
- CHANGELOG
|
42
42
|
- MIT-LICENSE
|
43
43
|
- README.rdoc
|
44
|
-
- Rakefile
|
45
44
|
- lib/warning.rb
|
46
|
-
- test/fixtures/mismatched_indentations.rb
|
47
|
-
- test/test_freeze_warning.rb
|
48
|
-
- test/test_warning.rb
|
49
45
|
homepage: https://github.com/jeremyevans/ruby-warning
|
50
46
|
licenses:
|
51
47
|
- MIT
|
@@ -76,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
72
|
- !ruby/object:Gem::Version
|
77
73
|
version: '0'
|
78
74
|
requirements: []
|
79
|
-
rubygems_version: 3.
|
75
|
+
rubygems_version: 3.3.7
|
80
76
|
signing_key:
|
81
77
|
specification_version: 4
|
82
78
|
summary: Add custom processing for warnings
|
data/Rakefile
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
require "rake"
|
2
|
-
require "rake/clean"
|
3
|
-
require 'rake/testtask'
|
4
|
-
require "rdoc/task"
|
5
|
-
|
6
|
-
CLEAN.include ["warning-*.gem", "rdoc"]
|
7
|
-
|
8
|
-
desc "Build warning gem"
|
9
|
-
task :package=>[:clean] do |p|
|
10
|
-
sh %{#{FileUtils::RUBY} -S gem build warning.gemspec}
|
11
|
-
end
|
12
|
-
|
13
|
-
### Specs
|
14
|
-
|
15
|
-
desc "Run test"
|
16
|
-
Rake::TestTask.new do |t|
|
17
|
-
t.libs.push "lib"
|
18
|
-
t.test_files = FileList['test/test_warning.rb']
|
19
|
-
t.verbose = true
|
20
|
-
end
|
21
|
-
|
22
|
-
desc "Run test"
|
23
|
-
Rake::TestTask.new(:test_freeze) do |t|
|
24
|
-
t.libs.push "lib"
|
25
|
-
t.test_files = FileList['test/test_freeze_warning.rb']
|
26
|
-
t.verbose = true
|
27
|
-
end
|
28
|
-
|
29
|
-
desc "Run all tests"
|
30
|
-
task :default=>[:test, :test_freeze]
|
31
|
-
|
32
|
-
### RDoc
|
33
|
-
|
34
|
-
RDOC_OPTS = ['--main', 'README.rdoc', "--quiet", "--line-numbers", "--inline-source", '--title', 'ruby-warning: Add custom processing for warnings']
|
35
|
-
|
36
|
-
begin
|
37
|
-
gem 'hanna-nouveau'
|
38
|
-
RDOC_OPTS.concat(['-f', 'hanna'])
|
39
|
-
rescue Gem::LoadError
|
40
|
-
end
|
41
|
-
|
42
|
-
|
43
|
-
RDoc::Task.new do |rdoc|
|
44
|
-
rdoc.rdoc_dir = "rdoc"
|
45
|
-
rdoc.options += RDOC_OPTS
|
46
|
-
rdoc.rdoc_files.add %w"README.rdoc CHANGELOG MIT-LICENSE lib/**/*.rb"
|
47
|
-
end
|
data/test/test_freeze_warning.rb
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
ENV['MT_NO_PLUGINS'] = '1' # Work around stupid autoloading of plugins
|
2
|
-
require 'minitest/global_expectations/autorun'
|
3
|
-
require 'warning'
|
4
|
-
|
5
|
-
class WarningFreezeTest < Minitest::Test
|
6
|
-
module EnvUtil
|
7
|
-
def verbose_warning
|
8
|
-
class << (stderr = "")
|
9
|
-
alias write <<
|
10
|
-
end
|
11
|
-
stderr, $stderr, verbose, $VERBOSE = $stderr, stderr, $VERBOSE, true
|
12
|
-
yield stderr
|
13
|
-
return $stderr
|
14
|
-
ensure
|
15
|
-
stderr, $stderr, $VERBOSE = $stderr, stderr, verbose
|
16
|
-
end
|
17
|
-
module_function :verbose_warning
|
18
|
-
|
19
|
-
def with_default_internal(enc)
|
20
|
-
verbose, $VERBOSE = $VERBOSE, nil
|
21
|
-
origenc, Encoding.default_internal = Encoding.default_internal, enc
|
22
|
-
$VERBOSE = verbose
|
23
|
-
yield
|
24
|
-
ensure
|
25
|
-
verbose, $VERBOSE = $VERBOSE, nil
|
26
|
-
Encoding.default_internal = origenc
|
27
|
-
$VERBOSE = verbose
|
28
|
-
end
|
29
|
-
module_function :with_default_internal
|
30
|
-
end
|
31
|
-
|
32
|
-
def assert_warning(pat, msg = nil)
|
33
|
-
stderr = EnvUtil.verbose_warning {
|
34
|
-
EnvUtil.with_default_internal(pat.encoding) {
|
35
|
-
yield
|
36
|
-
}
|
37
|
-
}
|
38
|
-
msg = message(msg) {diff pat, stderr}
|
39
|
-
assert(pat === stderr, msg)
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_warning_ignore
|
43
|
-
w = nil
|
44
|
-
|
45
|
-
Warning.ignore(/global variable `\$test_warning_ignore' not initialized/)
|
46
|
-
Warning.process do |warning|
|
47
|
-
w = [4, warning]
|
48
|
-
end
|
49
|
-
Warning.freeze
|
50
|
-
|
51
|
-
assert_raises RuntimeError do
|
52
|
-
Warning.ignore(/global variable `\$test_warning_ignore' not initialized/)
|
53
|
-
end
|
54
|
-
assert_raises RuntimeError do
|
55
|
-
Warning.process{|warning| w = [4, warning]}
|
56
|
-
end
|
57
|
-
|
58
|
-
assert_warning '' do
|
59
|
-
$test_warning_ignore
|
60
|
-
end
|
61
|
-
assert_nil w
|
62
|
-
|
63
|
-
assert_warning '' do
|
64
|
-
$test_warning_ignore2
|
65
|
-
end
|
66
|
-
assert_equal(4, w.first)
|
67
|
-
assert_match(/global variable `\$test_warning_ignore2' not initialized/, w.last)
|
68
|
-
end
|
69
|
-
end
|
data/test/test_warning.rb
DELETED
@@ -1,553 +0,0 @@
|
|
1
|
-
ENV['MT_NO_PLUGINS'] = '1' # Work around stupid autoloading of plugins
|
2
|
-
require 'minitest/global_expectations/autorun'
|
3
|
-
require 'warning'
|
4
|
-
require 'pathname'
|
5
|
-
|
6
|
-
class WarningTest < Minitest::Test
|
7
|
-
module EnvUtil
|
8
|
-
def verbose_warning
|
9
|
-
stderr = ""
|
10
|
-
class << (stderr = "")
|
11
|
-
alias write <<
|
12
|
-
def puts(*a)
|
13
|
-
self << a.join("\n")
|
14
|
-
end
|
15
|
-
end
|
16
|
-
stderr, $stderr, verbose, $VERBOSE = $stderr, stderr, $VERBOSE, true
|
17
|
-
yield stderr
|
18
|
-
return $stderr
|
19
|
-
ensure
|
20
|
-
stderr, $stderr, $VERBOSE = $stderr, stderr, verbose
|
21
|
-
end
|
22
|
-
module_function :verbose_warning
|
23
|
-
|
24
|
-
def with_default_internal(enc)
|
25
|
-
verbose, $VERBOSE = $VERBOSE, nil
|
26
|
-
origenc, Encoding.default_internal = Encoding.default_internal, enc
|
27
|
-
$VERBOSE = verbose
|
28
|
-
yield
|
29
|
-
ensure
|
30
|
-
verbose, $VERBOSE = $VERBOSE, nil
|
31
|
-
Encoding.default_internal = origenc
|
32
|
-
$VERBOSE = verbose
|
33
|
-
end
|
34
|
-
module_function :with_default_internal
|
35
|
-
end
|
36
|
-
|
37
|
-
def assert_warning(pat, msg = nil)
|
38
|
-
stderr = EnvUtil.verbose_warning {
|
39
|
-
EnvUtil.with_default_internal(pat.encoding) {
|
40
|
-
yield
|
41
|
-
}
|
42
|
-
}
|
43
|
-
msg = message(msg) {diff pat, stderr}
|
44
|
-
assert(pat === stderr, msg)
|
45
|
-
end
|
46
|
-
|
47
|
-
def teardown
|
48
|
-
Warning.clear
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_warning_dedup
|
52
|
-
gvar = ->{$test_warning_dedup}
|
53
|
-
|
54
|
-
assert_warning(/global variable `\$test_warning_dedup' not initialized/) do
|
55
|
-
gvar.call
|
56
|
-
end
|
57
|
-
assert_warning(/global variable `\$test_warning_dedup' not initialized/) do
|
58
|
-
gvar.call
|
59
|
-
end
|
60
|
-
|
61
|
-
Warning.dedup
|
62
|
-
|
63
|
-
assert_warning(/global variable `\$test_warning_dedup' not initialized/) do
|
64
|
-
gvar.call
|
65
|
-
end
|
66
|
-
assert_warning('') do
|
67
|
-
gvar.call
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_warning_ignore
|
72
|
-
assert_warning(/global variable `\$test_warning_ignore' not initialized/) do
|
73
|
-
assert_nil($test_warning_ignore)
|
74
|
-
end
|
75
|
-
|
76
|
-
Warning.ignore(/global variable `\$test_warning_ignore' not initialized/)
|
77
|
-
|
78
|
-
assert_warning '' do
|
79
|
-
assert_nil($test_warning_ignore)
|
80
|
-
end
|
81
|
-
|
82
|
-
assert_warning(/global variable `\$test_warning_ignore2' not initialized/) do
|
83
|
-
assert_nil($test_warning_ignore2)
|
84
|
-
end
|
85
|
-
|
86
|
-
Warning.ignore(/global variable `\$test_warning_ignore2' not initialized/, __FILE__)
|
87
|
-
|
88
|
-
assert_warning '' do
|
89
|
-
assert_nil($test_warning_ignore2)
|
90
|
-
end
|
91
|
-
|
92
|
-
assert_warning(/global variable `\$test_warning_ignore3' not initialized/) do
|
93
|
-
assert_nil($test_warning_ignore3)
|
94
|
-
end
|
95
|
-
|
96
|
-
Warning.ignore(/global variable `\$test_warning_ignore3' not initialized/, __FILE__ + 'a')
|
97
|
-
|
98
|
-
assert_warning(/global variable `\$test_warning_ignore3' not initialized/) do
|
99
|
-
assert_nil($test_warning_ignore3)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
def test_warning_ignore_missing_ivar
|
104
|
-
Warning.clear
|
105
|
-
|
106
|
-
unless RUBY_VERSION >= '3.0'
|
107
|
-
assert_warning(/instance variable @ivar not initialized/) do
|
108
|
-
assert_nil(instance_variable_get(:@ivar))
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
Warning.ignore(:missing_ivar, __FILE__)
|
113
|
-
|
114
|
-
assert_warning '' do
|
115
|
-
assert_nil(instance_variable_get(:@ivar))
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def test_warning_ignore_missing_gvar
|
120
|
-
assert_warning(/global variable `\$gvar' not initialized/) do
|
121
|
-
$gvar
|
122
|
-
end
|
123
|
-
|
124
|
-
Warning.ignore(:missing_gvar, __FILE__)
|
125
|
-
|
126
|
-
assert_warning '' do
|
127
|
-
$gvar
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def test_warning_ignore_method_redefined
|
132
|
-
def self.a; end
|
133
|
-
|
134
|
-
assert_warning(/method redefined; discarding old a.+previous definition of a was here/m) do
|
135
|
-
def self.a; end
|
136
|
-
end
|
137
|
-
|
138
|
-
Warning.ignore(:method_redefined, __FILE__)
|
139
|
-
|
140
|
-
assert_warning '' do
|
141
|
-
def self.a; end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
def test_warning_ignore_not_reached
|
146
|
-
assert_warning(/: warning: statement not reached/) do
|
147
|
-
instance_eval('def self.b; return; 1 end', __FILE__)
|
148
|
-
end
|
149
|
-
|
150
|
-
Warning.ignore(:not_reached, __FILE__)
|
151
|
-
|
152
|
-
assert_warning '' do
|
153
|
-
instance_eval('def self.c; return; 1 end', __FILE__)
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
def test_warning_ignore_fixnum
|
158
|
-
assert_warning(/warning: constant ::Fixnum is deprecated/) do
|
159
|
-
::Fixnum
|
160
|
-
end
|
161
|
-
|
162
|
-
Warning.ignore(:fixnum, __FILE__)
|
163
|
-
|
164
|
-
assert_warning '' do
|
165
|
-
::Fixnum
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
def test_warning_ignore_bignum
|
170
|
-
assert_warning(/warning: constant ::Bignum is deprecated/) do
|
171
|
-
::Bignum
|
172
|
-
end
|
173
|
-
|
174
|
-
Warning.ignore(:bignum, __FILE__)
|
175
|
-
|
176
|
-
assert_warning '' do
|
177
|
-
::Bignum
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
def test_warning_ignore_void_context
|
182
|
-
assert_warning(/warning: possibly useless use of :: in void context/) do
|
183
|
-
instance_eval('::Object; nil', __FILE__, __LINE__)
|
184
|
-
end
|
185
|
-
|
186
|
-
Warning.ignore(:void_context, __FILE__)
|
187
|
-
|
188
|
-
assert_warning '' do
|
189
|
-
instance_eval('::Object; nil', __FILE__, __LINE__)
|
190
|
-
end
|
191
|
-
|
192
|
-
assert_warning '' do
|
193
|
-
instance_eval('Object; nil', __FILE__, __LINE__)
|
194
|
-
end
|
195
|
-
|
196
|
-
assert_warning '' do
|
197
|
-
instance_eval('v = 0; v; nil', __FILE__, __LINE__)
|
198
|
-
end
|
199
|
-
|
200
|
-
assert_warning '' do
|
201
|
-
instance_eval('1 > 1; nil', __FILE__, __LINE__)
|
202
|
-
end
|
203
|
-
|
204
|
-
assert_warning '' do
|
205
|
-
instance_eval('defined? C; nil', __FILE__, __LINE__)
|
206
|
-
end
|
207
|
-
|
208
|
-
if RUBY_VERSION >= '2.6'
|
209
|
-
assert_warning '' do
|
210
|
-
instance_eval('1..; nil', __FILE__, __LINE__)
|
211
|
-
end
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
def test_warning_ignore_ambiguous_slash
|
216
|
-
def self.d(re); end
|
217
|
-
assert_warning(/warning: ambi/) do
|
218
|
-
instance_eval('d /a/', __FILE__)
|
219
|
-
end
|
220
|
-
|
221
|
-
Warning.ignore(:ambiguous_slash, __FILE__)
|
222
|
-
|
223
|
-
assert_warning '' do
|
224
|
-
instance_eval('d /a/', __FILE__)
|
225
|
-
end
|
226
|
-
end
|
227
|
-
|
228
|
-
def test_warning_ignore_unused_var
|
229
|
-
assert_warning(/warning: assigned but unused variable - \w+/) do
|
230
|
-
instance_eval('def self.e; b = 1; 2 end', __FILE__)
|
231
|
-
end
|
232
|
-
|
233
|
-
Warning.ignore(:unused_var, __FILE__)
|
234
|
-
|
235
|
-
assert_warning '' do
|
236
|
-
instance_eval('def self.f; b = 1; 2 end', __FILE__)
|
237
|
-
end
|
238
|
-
end
|
239
|
-
|
240
|
-
def test_warning_ignore_useless_operator
|
241
|
-
assert_warning(/warning: possibly useless use of == in void context/) do
|
242
|
-
instance_eval('1 == 2; true', __FILE__)
|
243
|
-
end
|
244
|
-
|
245
|
-
Warning.ignore(:useless_operator, __FILE__)
|
246
|
-
|
247
|
-
assert_warning '' do
|
248
|
-
instance_eval('1 == 2; true', __FILE__)
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
def test_warning_ignore_arg_prefix
|
253
|
-
assert_warning(/: warning: `\*' interpreted as argument prefix/) do
|
254
|
-
instance_eval('Array *[nil]', __FILE__)
|
255
|
-
end
|
256
|
-
|
257
|
-
assert_warning(/: warning: `&' interpreted as argument prefix/) do
|
258
|
-
instance_eval('tap &proc{}', __FILE__)
|
259
|
-
end
|
260
|
-
Warning.ignore(:arg_prefix, __FILE__)
|
261
|
-
|
262
|
-
assert_warning '' do
|
263
|
-
instance_eval('Array *[nil]', __FILE__)
|
264
|
-
instance_eval('tap &proc{}', __FILE__)
|
265
|
-
end
|
266
|
-
end
|
267
|
-
|
268
|
-
def test_warning_ignore_shadow
|
269
|
-
assert_warning(/warning: shadowing outer local variable - a/) do
|
270
|
-
instance_eval('lambda{|a| lambda{|a|}}', __FILE__)
|
271
|
-
end
|
272
|
-
|
273
|
-
Warning.ignore(:shadow, __FILE__)
|
274
|
-
|
275
|
-
assert_warning '' do
|
276
|
-
instance_eval('lambda{|a| lambda{|a|}}', __FILE__)
|
277
|
-
end
|
278
|
-
end if RUBY_VERSION < '2.6'
|
279
|
-
|
280
|
-
if RUBY_VERSION > '2.7' && RUBY_VERSION < '2.8'
|
281
|
-
def h2kw(**kw)
|
282
|
-
end
|
283
|
-
def kw2h(h, **kw)
|
284
|
-
end
|
285
|
-
def skw(h=1, a: 1)
|
286
|
-
end
|
287
|
-
|
288
|
-
def test_warning_ignore_keyword
|
289
|
-
assert_warning(/warning: Using the last argument as keyword parameters is deprecated; maybe \*\* should be added to the call.*The called method `h2kw' is defined here/m) do
|
290
|
-
h2kw({})
|
291
|
-
end
|
292
|
-
assert_warning(/warning: Passing the keyword argument as the last hash parameter is deprecated.*The called method `kw2h' is defined here/m) do
|
293
|
-
kw2h(a: 1)
|
294
|
-
end
|
295
|
-
assert_warning(/warning: Splitting the last argument into positional and keyword parameters is deprecated.*The called method `skw' is defined here/m) do
|
296
|
-
skw("b" => 1, a: 2)
|
297
|
-
end
|
298
|
-
assert_warning(/warning: Splitting the last argument into positional and keyword parameters is deprecated.*The called method `skw' is defined here/m) do
|
299
|
-
skw({"b" => 1, a: 2})
|
300
|
-
end
|
301
|
-
|
302
|
-
Warning.ignore(:keyword_separation, __FILE__)
|
303
|
-
|
304
|
-
assert_warning '' do
|
305
|
-
h2kw({})
|
306
|
-
kw2h(a: 1)
|
307
|
-
skw("b" => 1, a: 2)
|
308
|
-
skw({"b" => 1, a: 2})
|
309
|
-
end
|
310
|
-
end
|
311
|
-
|
312
|
-
def test_warning_ignore_safe
|
313
|
-
assert_warning(/\$SAFE will become a normal global variable in Ruby 3\.0/) do
|
314
|
-
$SAFE = 0
|
315
|
-
end
|
316
|
-
|
317
|
-
Warning.ignore(:safe, __FILE__)
|
318
|
-
|
319
|
-
assert_warning("") do
|
320
|
-
$SAFE = 0
|
321
|
-
end
|
322
|
-
end
|
323
|
-
end
|
324
|
-
|
325
|
-
if RUBY_VERSION > '2.7' && RUBY_VERSION < '3.2'
|
326
|
-
|
327
|
-
def test_warning_ignore_taint
|
328
|
-
o = Object.new
|
329
|
-
|
330
|
-
assert_warning(/Object#taint is deprecated and will be removed in Ruby 3\.2/) do
|
331
|
-
o.taint
|
332
|
-
end
|
333
|
-
assert_warning(/Object#untaint is deprecated and will be removed in Ruby 3\.2/) do
|
334
|
-
o.untaint
|
335
|
-
end
|
336
|
-
assert_warning(/Object#tainted\? is deprecated and will be removed in Ruby 3\.2/) do
|
337
|
-
o.tainted?
|
338
|
-
end
|
339
|
-
assert_warning(/Object#trust is deprecated and will be removed in Ruby 3\.2/) do
|
340
|
-
o.trust
|
341
|
-
end
|
342
|
-
assert_warning(/Object#untrust is deprecated and will be removed in Ruby 3\.2/) do
|
343
|
-
o.untrust
|
344
|
-
end
|
345
|
-
assert_warning(/Object#untrusted\? is deprecated and will be removed in Ruby 3\.2/) do
|
346
|
-
o.untrusted?
|
347
|
-
end
|
348
|
-
|
349
|
-
path = Pathname.new(__FILE__)
|
350
|
-
assert_warning(/Pathname#taint is deprecated and will be removed in Ruby 3\.2/) do
|
351
|
-
path.taint
|
352
|
-
end
|
353
|
-
assert_warning(/Pathname#untaint is deprecated and will be removed in Ruby 3\.2/) do
|
354
|
-
path.untaint
|
355
|
-
end
|
356
|
-
|
357
|
-
Warning.ignore(:taint, __FILE__)
|
358
|
-
|
359
|
-
assert_warning("") do
|
360
|
-
o.taint
|
361
|
-
o.untaint
|
362
|
-
o.tainted?
|
363
|
-
o.trust
|
364
|
-
o.untrust
|
365
|
-
o.untrusted?
|
366
|
-
p.taint
|
367
|
-
p.untaint
|
368
|
-
end
|
369
|
-
end
|
370
|
-
end
|
371
|
-
|
372
|
-
def test_warning_ignore_symbol_array
|
373
|
-
def self.c; end
|
374
|
-
|
375
|
-
assert_warning(/statement not reached.+method redefined; discarding old c.+previous definition of c was here/m) do
|
376
|
-
instance_eval('def self.c; return; 1 end', __FILE__)
|
377
|
-
end
|
378
|
-
|
379
|
-
Warning.ignore([:method_redefined, :not_reached], __FILE__)
|
380
|
-
|
381
|
-
assert_warning '' do
|
382
|
-
instance_eval('def self.c; return; 1 end', __FILE__)
|
383
|
-
end
|
384
|
-
end
|
385
|
-
|
386
|
-
def test_warning_ignore_mismatched_indentation
|
387
|
-
assert_warning(/warning: mismatched indentations/) do
|
388
|
-
load 'test/fixtures/mismatched_indentations.rb'
|
389
|
-
end
|
390
|
-
|
391
|
-
Warning.ignore(:mismatched_indentations, 'test/fixtures/mismatched_indentations.rb')
|
392
|
-
|
393
|
-
assert_warning '' do
|
394
|
-
load 'test/fixtures/mismatched_indentations.rb'
|
395
|
-
end
|
396
|
-
end
|
397
|
-
|
398
|
-
def test_warning_process
|
399
|
-
warn = nil
|
400
|
-
|
401
|
-
Warning.process(__FILE__+'a') do |warning|
|
402
|
-
warn = [0, warning]
|
403
|
-
end
|
404
|
-
|
405
|
-
assert_warning(/global variable `\$test_warning_process' not initialized/) do
|
406
|
-
$test_warning_process
|
407
|
-
end
|
408
|
-
assert_nil(warn)
|
409
|
-
|
410
|
-
Warning.process(__FILE__) do |warning|
|
411
|
-
warn = [1, warning]
|
412
|
-
end
|
413
|
-
|
414
|
-
assert_warning '' do
|
415
|
-
$test_warning_process2
|
416
|
-
end
|
417
|
-
assert_equal(1, warn.first)
|
418
|
-
assert_match(/global variable `\$test_warning_process2' not initialized/, warn.last)
|
419
|
-
warn = nil
|
420
|
-
|
421
|
-
Warning.process(File.dirname(__FILE__)) do |warning|
|
422
|
-
warn = [2, warning]
|
423
|
-
end
|
424
|
-
|
425
|
-
assert_warning '' do
|
426
|
-
$test_warning_process3
|
427
|
-
end
|
428
|
-
assert_equal(1, warn.first)
|
429
|
-
assert_match(/global variable `\$test_warning_process3' not initialized/, warn.last)
|
430
|
-
warn = nil
|
431
|
-
|
432
|
-
Warning.process(__FILE__+':') do |warning|
|
433
|
-
warn = [3, warning]
|
434
|
-
end
|
435
|
-
|
436
|
-
assert_warning '' do
|
437
|
-
$test_warning_process4
|
438
|
-
end
|
439
|
-
assert_equal(3, warn.first)
|
440
|
-
assert_match(/global variable `\$test_warning_process4' not initialized/, warn.last)
|
441
|
-
warn = nil
|
442
|
-
|
443
|
-
Warning.clear
|
444
|
-
|
445
|
-
assert_warning(/global variable `\$test_warning_process5' not initialized/) do
|
446
|
-
$test_warning_process5
|
447
|
-
end
|
448
|
-
assert_nil(warn)
|
449
|
-
|
450
|
-
Warning.process do |warning|
|
451
|
-
warn = [4, warning]
|
452
|
-
end
|
453
|
-
|
454
|
-
assert_warning '' do
|
455
|
-
$test_warning_process6
|
456
|
-
end
|
457
|
-
assert_equal(4, warn.first)
|
458
|
-
assert_match(/global variable `\$test_warning_process6' not initialized/, warn.last)
|
459
|
-
end
|
460
|
-
|
461
|
-
def test_warning_process_block_return_default
|
462
|
-
w = nil
|
463
|
-
Warning.process(__FILE__) do |warning|
|
464
|
-
w = warning
|
465
|
-
:default
|
466
|
-
end
|
467
|
-
|
468
|
-
assert_warning(/global variable `\$test_warning_process_block_return_default' not initialized/) do
|
469
|
-
$test_warning_process_block_return_default
|
470
|
-
end
|
471
|
-
assert_match(/global variable `\$test_warning_process_block_return_default' not initialized/, w)
|
472
|
-
end
|
473
|
-
|
474
|
-
def test_warning_process_block_return_backtrace
|
475
|
-
w = nil
|
476
|
-
Warning.process(__FILE__) do |warning|
|
477
|
-
w = warning
|
478
|
-
:backtrace
|
479
|
-
end
|
480
|
-
|
481
|
-
assert_warning(/global variable `\$test_warning_process_block_return_backtrace' not initialized.*#{__FILE__}/m) do
|
482
|
-
$test_warning_process_block_return_backtrace
|
483
|
-
end
|
484
|
-
assert_match(/global variable `\$test_warning_process_block_return_backtrace' not initialized/, w)
|
485
|
-
end
|
486
|
-
|
487
|
-
def test_warning_process_block_return_raise
|
488
|
-
w = nil
|
489
|
-
Warning.process(__FILE__) do |warning|
|
490
|
-
w = warning
|
491
|
-
:raise
|
492
|
-
end
|
493
|
-
|
494
|
-
assert_raises(RuntimeError) do
|
495
|
-
$test_warning_process_block_return_raise
|
496
|
-
end
|
497
|
-
assert_match(/global variable `\$test_warning_process_block_return_raise' not initialized/, w)
|
498
|
-
end
|
499
|
-
|
500
|
-
def test_warning_process_action
|
501
|
-
w = nil
|
502
|
-
Warning.process(__FILE__, :method_redefined=>:default, :missing_gvar=>:backtrace, :ambiguous_slash=>:raise)
|
503
|
-
Warning.process(__FILE__, :not_reached=>proc do |warning|
|
504
|
-
w = warning
|
505
|
-
:raise
|
506
|
-
end)
|
507
|
-
|
508
|
-
assert_warning(/warning: method redefined/) do
|
509
|
-
Class.new do
|
510
|
-
def a; end
|
511
|
-
def a; end
|
512
|
-
end
|
513
|
-
end
|
514
|
-
|
515
|
-
assert_warning(/global variable `\$test_warning_process_action' not initialized.*#{__FILE__}/m) do
|
516
|
-
$test_warning_process_action
|
517
|
-
end
|
518
|
-
|
519
|
-
Warning.process(__FILE__) do |warning|
|
520
|
-
w = warning
|
521
|
-
:raise
|
522
|
-
end
|
523
|
-
|
524
|
-
assert_raises(RuntimeError, /warning: ambi/) do
|
525
|
-
EnvUtil.verbose_warning{instance_eval('d /a/', __FILE__)}
|
526
|
-
end
|
527
|
-
|
528
|
-
assert_raises(RuntimeError, /warning: statement not reached/) do
|
529
|
-
EnvUtil.verbose_warning{instance_eval('def self.b; return; 1 end', __FILE__)}
|
530
|
-
end
|
531
|
-
assert_match(/warning: statement not reached/, w)
|
532
|
-
end
|
533
|
-
|
534
|
-
def test_warning_process_action_and_block
|
535
|
-
assert_raises(ArgumentError) do
|
536
|
-
Warning.process(__FILE__)
|
537
|
-
end
|
538
|
-
end
|
539
|
-
|
540
|
-
def test_warning_process_no_action_and_no_block
|
541
|
-
assert_raises(ArgumentError) do
|
542
|
-
Warning.process(__FILE__, :missing_ivar=>:default){}
|
543
|
-
end
|
544
|
-
end
|
545
|
-
|
546
|
-
if RUBY_VERSION >= '3.0'
|
547
|
-
def test_warning_warn_category_keyword
|
548
|
-
assert_warning('foo') do
|
549
|
-
Warning.warn("foo", category: :deprecated)
|
550
|
-
end
|
551
|
-
end
|
552
|
-
end
|
553
|
-
end
|