mutant 0.10.23 → 0.10.28
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/lib/mutant.rb +34 -14
- data/lib/mutant/ast/find_metaclass_containing.rb +1 -1
- data/lib/mutant/ast/regexp.rb +54 -0
- data/lib/mutant/ast/regexp/transformer.rb +150 -0
- data/lib/mutant/ast/regexp/transformer/direct.rb +121 -0
- data/lib/mutant/ast/regexp/transformer/named_group.rb +50 -0
- data/lib/mutant/ast/regexp/transformer/options_group.rb +68 -0
- data/lib/mutant/ast/regexp/transformer/quantifier.rb +92 -0
- data/lib/mutant/ast/regexp/transformer/recursive.rb +56 -0
- data/lib/mutant/ast/regexp/transformer/root.rb +28 -0
- data/lib/mutant/ast/regexp/transformer/text.rb +58 -0
- data/lib/mutant/ast/types.rb +115 -2
- data/lib/mutant/bootstrap.rb +1 -1
- data/lib/mutant/cli/command.rb +4 -0
- data/lib/mutant/cli/command/environment.rb +9 -3
- data/lib/mutant/cli/command/environment/subject.rb +0 -4
- data/lib/mutant/cli/command/environment/test.rb +36 -0
- data/lib/mutant/cli/command/root.rb +1 -1
- data/lib/mutant/config.rb +9 -55
- data/lib/mutant/config/coverage_criteria.rb +61 -0
- data/lib/mutant/context.rb +1 -1
- data/lib/mutant/env.rb +2 -2
- data/lib/mutant/expression.rb +0 -12
- data/lib/mutant/expression/method.rb +4 -4
- data/lib/mutant/expression/methods.rb +5 -4
- data/lib/mutant/integration.rb +8 -2
- data/lib/mutant/isolation/exception.rb +22 -0
- data/lib/mutant/isolation/fork.rb +9 -12
- data/lib/mutant/loader.rb +1 -1
- data/lib/mutant/matcher.rb +3 -3
- data/lib/mutant/matcher/config.rb +30 -8
- data/lib/mutant/matcher/method.rb +14 -13
- data/lib/mutant/matcher/method/instance.rb +6 -2
- data/lib/mutant/matcher/method/metaclass.rb +1 -1
- data/lib/mutant/matcher/methods.rb +2 -4
- data/lib/mutant/meta/example.rb +1 -1
- data/lib/mutant/meta/example/dsl.rb +6 -2
- data/lib/mutant/meta/example/verification.rb +1 -1
- data/lib/mutant/mutation.rb +1 -1
- data/lib/mutant/mutator.rb +8 -1
- data/lib/mutant/mutator/node.rb +0 -5
- data/lib/mutant/mutator/node/argument.rb +2 -2
- data/lib/mutant/mutator/node/dynamic_literal.rb +1 -1
- data/lib/mutant/mutator/node/index.rb +1 -0
- data/lib/mutant/mutator/node/kwargs.rb +2 -2
- data/lib/mutant/mutator/node/literal/float.rb +1 -3
- data/lib/mutant/mutator/node/literal/integer.rb +3 -6
- data/lib/mutant/mutator/node/literal/regex.rb +12 -0
- data/lib/mutant/mutator/node/module.rb +19 -0
- data/lib/mutant/mutator/node/named_value/variable_assignment.rb +3 -3
- data/lib/mutant/mutator/node/regexp.rb +20 -0
- data/lib/mutant/mutator/node/regexp/alternation_meta.rb +20 -0
- data/lib/mutant/mutator/node/regexp/beginning_of_line_anchor.rb +20 -0
- data/lib/mutant/mutator/node/regexp/capture_group.rb +25 -0
- data/lib/mutant/mutator/node/regexp/character_type.rb +31 -0
- data/lib/mutant/mutator/node/regexp/end_of_line_anchor.rb +20 -0
- data/lib/mutant/mutator/node/regexp/end_of_string_or_before_end_of_line_anchor.rb +20 -0
- data/lib/mutant/mutator/node/regexp/named_group.rb +39 -0
- data/lib/mutant/mutator/node/regexp/zero_or_more.rb +34 -0
- data/lib/mutant/mutator/node/regopt.rb +1 -1
- data/lib/mutant/mutator/node/sclass.rb +1 -1
- data/lib/mutant/mutator/node/send.rb +73 -6
- data/lib/mutant/parallel.rb +2 -2
- data/lib/mutant/parallel/driver.rb +1 -1
- data/lib/mutant/parallel/worker.rb +1 -1
- data/lib/mutant/parser.rb +1 -1
- data/lib/mutant/pipe.rb +1 -1
- data/lib/mutant/procto.rb +23 -0
- data/lib/mutant/reporter/cli/printer.rb +10 -4
- data/lib/mutant/reporter/cli/printer/env.rb +3 -3
- data/lib/mutant/reporter/cli/printer/env_progress.rb +2 -2
- data/lib/mutant/reporter/cli/printer/isolation_result.rb +3 -1
- data/lib/mutant/selector.rb +1 -1
- data/lib/mutant/subject.rb +2 -4
- data/lib/mutant/subject/method/instance.rb +6 -45
- data/lib/mutant/transform.rb +25 -0
- data/lib/mutant/variable.rb +322 -0
- data/lib/mutant/version.rb +1 -1
- data/lib/mutant/world.rb +2 -3
- metadata +38 -149
- data/lib/mutant/warnings.rb +0 -106
data/lib/mutant/version.rb
CHANGED
data/lib/mutant/world.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module Mutant
|
4
4
|
# The outer world IO objects mutant does interact with
|
5
5
|
class World
|
6
|
-
include Adamantium
|
6
|
+
include Adamantium, Anima.new(
|
7
7
|
:condition_variable,
|
8
8
|
:gem,
|
9
9
|
:gem_method,
|
@@ -20,8 +20,7 @@ module Mutant
|
|
20
20
|
:stderr,
|
21
21
|
:stdout,
|
22
22
|
:thread,
|
23
|
-
:timer
|
24
|
-
:warnings
|
23
|
+
:timer
|
25
24
|
)
|
26
25
|
|
27
26
|
INSPECT = '#<Mutant::World>'
|
metadata
CHANGED
@@ -1,85 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mutant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.28
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Markus Schirp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: abstract_type
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.0.7
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.0.7
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: adamantium
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 0.2.0
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 0.2.0
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: anima
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 0.3.1
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 0.3.1
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: ast
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '2.2'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '2.2'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: concord
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 0.1.5
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 0.1.5
|
83
13
|
- !ruby/object:Gem::Dependency
|
84
14
|
name: diff-lcs
|
85
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,62 +24,6 @@ dependencies:
|
|
94
24
|
- - "~>"
|
95
25
|
- !ruby/object:Gem::Version
|
96
26
|
version: '1.3'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: equalizer
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: 0.0.9
|
104
|
-
type: :runtime
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: 0.0.9
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: ice_nine
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: 0.11.1
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: 0.11.1
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: memoizable
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: 0.4.2
|
132
|
-
type: :runtime
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: 0.4.2
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: mprelude
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: 0.1.0
|
146
|
-
type: :runtime
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: 0.1.0
|
153
27
|
- !ruby/object:Gem::Dependency
|
154
28
|
name: parser
|
155
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -165,47 +39,39 @@ dependencies:
|
|
165
39
|
- !ruby/object:Gem::Version
|
166
40
|
version: 3.0.0
|
167
41
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
42
|
+
name: regexp_parser
|
169
43
|
requirement: !ruby/object:Gem::Requirement
|
170
44
|
requirements:
|
171
45
|
- - "~>"
|
172
46
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
174
|
-
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - "~>"
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: 0.0.2
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: unparser
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - "~>"
|
47
|
+
version: '2.0'
|
48
|
+
- - ">="
|
186
49
|
- !ruby/object:Gem::Version
|
187
|
-
version: 0.
|
50
|
+
version: 2.0.3
|
188
51
|
type: :runtime
|
189
52
|
prerelease: false
|
190
53
|
version_requirements: !ruby/object:Gem::Requirement
|
191
54
|
requirements:
|
192
55
|
- - "~>"
|
193
56
|
- !ruby/object:Gem::Version
|
194
|
-
version: 0
|
57
|
+
version: '2.0'
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 2.0.3
|
195
61
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
62
|
+
name: unparser
|
197
63
|
requirement: !ruby/object:Gem::Requirement
|
198
64
|
requirements:
|
199
65
|
- - "~>"
|
200
66
|
- !ruby/object:Gem::Version
|
201
|
-
version: 0.0
|
67
|
+
version: 0.6.0
|
202
68
|
type: :runtime
|
203
69
|
prerelease: false
|
204
70
|
version_requirements: !ruby/object:Gem::Requirement
|
205
71
|
requirements:
|
206
72
|
- - "~>"
|
207
73
|
- !ruby/object:Gem::Version
|
208
|
-
version: 0.0
|
74
|
+
version: 0.6.0
|
209
75
|
- !ruby/object:Gem::Dependency
|
210
76
|
name: parallel
|
211
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -299,6 +165,15 @@ files:
|
|
299
165
|
- lib/mutant/ast/named_children.rb
|
300
166
|
- lib/mutant/ast/node_predicates.rb
|
301
167
|
- lib/mutant/ast/nodes.rb
|
168
|
+
- lib/mutant/ast/regexp.rb
|
169
|
+
- lib/mutant/ast/regexp/transformer.rb
|
170
|
+
- lib/mutant/ast/regexp/transformer/direct.rb
|
171
|
+
- lib/mutant/ast/regexp/transformer/named_group.rb
|
172
|
+
- lib/mutant/ast/regexp/transformer/options_group.rb
|
173
|
+
- lib/mutant/ast/regexp/transformer/quantifier.rb
|
174
|
+
- lib/mutant/ast/regexp/transformer/recursive.rb
|
175
|
+
- lib/mutant/ast/regexp/transformer/root.rb
|
176
|
+
- lib/mutant/ast/regexp/transformer/text.rb
|
302
177
|
- lib/mutant/ast/sexp.rb
|
303
178
|
- lib/mutant/ast/types.rb
|
304
179
|
- lib/mutant/bootstrap.rb
|
@@ -308,9 +183,11 @@ files:
|
|
308
183
|
- lib/mutant/cli/command/environment/run.rb
|
309
184
|
- lib/mutant/cli/command/environment/show.rb
|
310
185
|
- lib/mutant/cli/command/environment/subject.rb
|
186
|
+
- lib/mutant/cli/command/environment/test.rb
|
311
187
|
- lib/mutant/cli/command/root.rb
|
312
188
|
- lib/mutant/cli/command/subscription.rb
|
313
189
|
- lib/mutant/config.rb
|
190
|
+
- lib/mutant/config/coverage_criteria.rb
|
314
191
|
- lib/mutant/context.rb
|
315
192
|
- lib/mutant/env.rb
|
316
193
|
- lib/mutant/expression.rb
|
@@ -321,6 +198,7 @@ files:
|
|
321
198
|
- lib/mutant/integration.rb
|
322
199
|
- lib/mutant/integration/null.rb
|
323
200
|
- lib/mutant/isolation.rb
|
201
|
+
- lib/mutant/isolation/exception.rb
|
324
202
|
- lib/mutant/isolation/fork.rb
|
325
203
|
- lib/mutant/isolation/none.rb
|
326
204
|
- lib/mutant/license.rb
|
@@ -382,6 +260,7 @@ files:
|
|
382
260
|
- lib/mutant/mutator/node/masgn.rb
|
383
261
|
- lib/mutant/mutator/node/match_current_line.rb
|
384
262
|
- lib/mutant/mutator/node/mlhs.rb
|
263
|
+
- lib/mutant/mutator/node/module.rb
|
385
264
|
- lib/mutant/mutator/node/named_value/access.rb
|
386
265
|
- lib/mutant/mutator/node/named_value/constant_assignment.rb
|
387
266
|
- lib/mutant/mutator/node/named_value/variable_assignment.rb
|
@@ -391,6 +270,15 @@ files:
|
|
391
270
|
- lib/mutant/mutator/node/op_asgn.rb
|
392
271
|
- lib/mutant/mutator/node/or_asgn.rb
|
393
272
|
- lib/mutant/mutator/node/procarg_zero.rb
|
273
|
+
- lib/mutant/mutator/node/regexp.rb
|
274
|
+
- lib/mutant/mutator/node/regexp/alternation_meta.rb
|
275
|
+
- lib/mutant/mutator/node/regexp/beginning_of_line_anchor.rb
|
276
|
+
- lib/mutant/mutator/node/regexp/capture_group.rb
|
277
|
+
- lib/mutant/mutator/node/regexp/character_type.rb
|
278
|
+
- lib/mutant/mutator/node/regexp/end_of_line_anchor.rb
|
279
|
+
- lib/mutant/mutator/node/regexp/end_of_string_or_before_end_of_line_anchor.rb
|
280
|
+
- lib/mutant/mutator/node/regexp/named_group.rb
|
281
|
+
- lib/mutant/mutator/node/regexp/zero_or_more.rb
|
394
282
|
- lib/mutant/mutator/node/regopt.rb
|
395
283
|
- lib/mutant/mutator/node/resbody.rb
|
396
284
|
- lib/mutant/mutator/node/rescue.rb
|
@@ -414,6 +302,7 @@ files:
|
|
414
302
|
- lib/mutant/parallel/worker.rb
|
415
303
|
- lib/mutant/parser.rb
|
416
304
|
- lib/mutant/pipe.rb
|
305
|
+
- lib/mutant/procto.rb
|
417
306
|
- lib/mutant/range.rb
|
418
307
|
- lib/mutant/registry.rb
|
419
308
|
- lib/mutant/reporter.rb
|
@@ -451,8 +340,8 @@ files:
|
|
451
340
|
- lib/mutant/timer.rb
|
452
341
|
- lib/mutant/transform.rb
|
453
342
|
- lib/mutant/util.rb
|
343
|
+
- lib/mutant/variable.rb
|
454
344
|
- lib/mutant/version.rb
|
455
|
-
- lib/mutant/warnings.rb
|
456
345
|
- lib/mutant/world.rb
|
457
346
|
- lib/mutant/zombifier.rb
|
458
347
|
homepage: https://github.com/mbj/mutant
|
@@ -474,7 +363,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
474
363
|
- !ruby/object:Gem::Version
|
475
364
|
version: '0'
|
476
365
|
requirements: []
|
477
|
-
rubygems_version: 3.
|
366
|
+
rubygems_version: 3.1.4
|
478
367
|
signing_key:
|
479
368
|
specification_version: 4
|
480
369
|
summary: ''
|
data/lib/mutant/warnings.rb
DELETED
@@ -1,106 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Mutant
|
4
|
-
# Class to capture warnings generated by Kernel#warn and Ruby itself.
|
5
|
-
#
|
6
|
-
# @example
|
7
|
-
# capture = Mutant::Warnings.new(Warning)
|
8
|
-
#
|
9
|
-
# # Note that this test case shows we can capture warnings generated from C
|
10
|
-
# def ruby_warning
|
11
|
-
# Class.new do
|
12
|
-
# undef :initialize
|
13
|
-
# end
|
14
|
-
# end
|
15
|
-
#
|
16
|
-
# messages = capture.call do
|
17
|
-
# ruby_warning
|
18
|
-
# end
|
19
|
-
#
|
20
|
-
# messages # => ["some_file.rb:44: warning: undefining `initialize' may cause serious problems\n"]
|
21
|
-
#
|
22
|
-
# Note this API is fundamentally impure:
|
23
|
-
#
|
24
|
-
# * Unlike almost all of classes in the mutant code base it has internal
|
25
|
-
# mutable state
|
26
|
-
# * Its therefore NOT thread safe
|
27
|
-
# * And worst: Each instance, even after its not referenced anymore by user
|
28
|
-
# code: Leaks permanent global state as instances of this class hook
|
29
|
-
# itself into the `Warning` module.
|
30
|
-
#
|
31
|
-
# So ideally only make *one* instance, and re-use it.
|
32
|
-
#
|
33
|
-
# Also note, a more canonical implementation would prepend modules and simply
|
34
|
-
# call `super` in the event the capture is disabled. This sadly does not
|
35
|
-
# work as it would inference with various bad players in the ruby ecosystem
|
36
|
-
# that do not adhere to the semantics outlined in the documentation.
|
37
|
-
#
|
38
|
-
# See: https://ruby-doc.org/core-2.6.3/Warning.html
|
39
|
-
#
|
40
|
-
# For example in case rubygems is active it adds its own hook to warnings,
|
41
|
-
# that would in case of the super implementation cause infinite recursion.
|
42
|
-
#
|
43
|
-
# Reproduction for this case is as simple as:
|
44
|
-
#
|
45
|
-
# ```
|
46
|
-
# require 'rubygems'
|
47
|
-
#
|
48
|
-
# module Warning
|
49
|
-
# def warn(*)
|
50
|
-
# super
|
51
|
-
# end
|
52
|
-
# end
|
53
|
-
# ```
|
54
|
-
#
|
55
|
-
# For that reason we do have to use the original method capture to dispatch
|
56
|
-
# in disabled state.
|
57
|
-
#
|
58
|
-
class Warnings
|
59
|
-
# Error raised when warning capture is used recursively
|
60
|
-
class RecursiveUseError < RuntimeError; end
|
61
|
-
|
62
|
-
# Initialize object
|
63
|
-
#
|
64
|
-
# @param [Module] warning
|
65
|
-
# the module to integrate against
|
66
|
-
#
|
67
|
-
# @return [undefined]
|
68
|
-
def initialize(warning)
|
69
|
-
@disabled = true
|
70
|
-
@messages = []
|
71
|
-
@original = warning.public_method(:warn)
|
72
|
-
|
73
|
-
capture = method(:capture)
|
74
|
-
warning.module_eval do
|
75
|
-
module_function define_method(:warn, &capture)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# Run a block with warning collection enabled
|
80
|
-
#
|
81
|
-
# @return [Array<String>]
|
82
|
-
def call
|
83
|
-
assert_no_recursion
|
84
|
-
@disabled = nil
|
85
|
-
yield
|
86
|
-
IceNine.deep_freeze(@messages.dup)
|
87
|
-
ensure
|
88
|
-
@disabled = true
|
89
|
-
@messages.clear
|
90
|
-
end
|
91
|
-
|
92
|
-
private
|
93
|
-
|
94
|
-
def capture(*arguments)
|
95
|
-
if @disabled
|
96
|
-
@original.call(*arguments)
|
97
|
-
else
|
98
|
-
@messages << arguments
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
def assert_no_recursion
|
103
|
-
fail RecursiveUseError unless @disabled
|
104
|
-
end
|
105
|
-
end # Warnings
|
106
|
-
end # Mutant
|