mutant 0.10.21 → 0.10.26

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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mutant.rb +32 -13
  3. data/lib/mutant/ast/find_metaclass_containing.rb +1 -1
  4. data/lib/mutant/ast/regexp.rb +54 -0
  5. data/lib/mutant/ast/regexp/transformer.rb +150 -0
  6. data/lib/mutant/ast/regexp/transformer/direct.rb +121 -0
  7. data/lib/mutant/ast/regexp/transformer/named_group.rb +50 -0
  8. data/lib/mutant/ast/regexp/transformer/options_group.rb +68 -0
  9. data/lib/mutant/ast/regexp/transformer/quantifier.rb +92 -0
  10. data/lib/mutant/ast/regexp/transformer/recursive.rb +56 -0
  11. data/lib/mutant/ast/regexp/transformer/root.rb +28 -0
  12. data/lib/mutant/ast/regexp/transformer/text.rb +58 -0
  13. data/lib/mutant/ast/types.rb +115 -2
  14. data/lib/mutant/bootstrap.rb +1 -1
  15. data/lib/mutant/cli/command.rb +4 -0
  16. data/lib/mutant/cli/command/environment.rb +9 -3
  17. data/lib/mutant/cli/command/environment/subject.rb +0 -4
  18. data/lib/mutant/cli/command/environment/test.rb +36 -0
  19. data/lib/mutant/cli/command/root.rb +1 -1
  20. data/lib/mutant/config.rb +9 -55
  21. data/lib/mutant/config/coverage_criteria.rb +61 -0
  22. data/lib/mutant/context.rb +1 -1
  23. data/lib/mutant/env.rb +2 -2
  24. data/lib/mutant/expression.rb +0 -12
  25. data/lib/mutant/expression/method.rb +4 -4
  26. data/lib/mutant/expression/methods.rb +5 -4
  27. data/lib/mutant/expression/namespace.rb +1 -1
  28. data/lib/mutant/integration.rb +8 -2
  29. data/lib/mutant/isolation/fork.rb +4 -11
  30. data/lib/mutant/loader.rb +1 -1
  31. data/lib/mutant/matcher.rb +3 -3
  32. data/lib/mutant/matcher/config.rb +30 -8
  33. data/lib/mutant/matcher/method.rb +10 -9
  34. data/lib/mutant/matcher/method/instance.rb +6 -2
  35. data/lib/mutant/matcher/method/metaclass.rb +1 -1
  36. data/lib/mutant/matcher/methods.rb +2 -4
  37. data/lib/mutant/meta/example.rb +1 -1
  38. data/lib/mutant/meta/example/dsl.rb +6 -1
  39. data/lib/mutant/meta/example/verification.rb +1 -1
  40. data/lib/mutant/mutation.rb +1 -1
  41. data/lib/mutant/mutator.rb +8 -1
  42. data/lib/mutant/mutator/node/argument.rb +2 -2
  43. data/lib/mutant/mutator/node/block.rb +5 -1
  44. data/lib/mutant/mutator/node/dynamic_literal.rb +1 -1
  45. data/lib/mutant/mutator/node/kwargs.rb +44 -0
  46. data/lib/mutant/mutator/node/literal/regex.rb +12 -0
  47. data/lib/mutant/mutator/node/named_value/variable_assignment.rb +3 -3
  48. data/lib/mutant/mutator/node/regexp.rb +20 -0
  49. data/lib/mutant/mutator/node/regexp/alternation_meta.rb +20 -0
  50. data/lib/mutant/mutator/node/regexp/beginning_of_line_anchor.rb +20 -0
  51. data/lib/mutant/mutator/node/regexp/capture_group.rb +25 -0
  52. data/lib/mutant/mutator/node/regexp/character_type.rb +31 -0
  53. data/lib/mutant/mutator/node/regexp/end_of_line_anchor.rb +20 -0
  54. data/lib/mutant/mutator/node/regexp/end_of_string_or_before_end_of_line_anchor.rb +20 -0
  55. data/lib/mutant/mutator/node/regexp/named_group.rb +39 -0
  56. data/lib/mutant/mutator/node/regexp/zero_or_more.rb +34 -0
  57. data/lib/mutant/mutator/node/regopt.rb +1 -1
  58. data/lib/mutant/mutator/node/sclass.rb +1 -1
  59. data/lib/mutant/mutator/node/send.rb +55 -6
  60. data/lib/mutant/parallel.rb +2 -2
  61. data/lib/mutant/parallel/driver.rb +1 -1
  62. data/lib/mutant/parallel/worker.rb +1 -1
  63. data/lib/mutant/parser.rb +1 -1
  64. data/lib/mutant/pipe.rb +1 -1
  65. data/lib/mutant/procto.rb +23 -0
  66. data/lib/mutant/reporter/cli/printer.rb +10 -4
  67. data/lib/mutant/reporter/cli/printer/env.rb +3 -3
  68. data/lib/mutant/reporter/cli/printer/env_progress.rb +2 -2
  69. data/lib/mutant/selector.rb +1 -1
  70. data/lib/mutant/subject.rb +2 -4
  71. data/lib/mutant/subject/method/instance.rb +6 -45
  72. data/lib/mutant/timer.rb +2 -2
  73. data/lib/mutant/transform.rb +25 -0
  74. data/lib/mutant/variable.rb +322 -0
  75. data/lib/mutant/version.rb +1 -1
  76. data/lib/mutant/world.rb +2 -3
  77. metadata +39 -151
  78. data/lib/mutant/warnings.rb +0 -106
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Mutant
4
4
  # Current mutant version
5
- VERSION = '0.10.21'
5
+ VERSION = '0.10.26'
6
6
  end # Mutant
@@ -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::Flat, Anima.new(
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.21
4
+ version: 0.10.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Schirp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-23 00:00:00.000000000 Z
11
+ date: 2021-01-16 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
@@ -95,117 +25,53 @@ dependencies:
95
25
  - !ruby/object:Gem::Version
96
26
  version: '1.3'
97
27
  - !ruby/object:Gem::Dependency
98
- name: equalizer
28
+ name: parser
99
29
  requirement: !ruby/object:Gem::Requirement
100
30
  requirements:
101
31
  - - "~>"
102
32
  - !ruby/object:Gem::Version
103
- version: 0.0.9
33
+ version: 3.0.0
104
34
  type: :runtime
105
35
  prerelease: false
106
36
  version_requirements: !ruby/object:Gem::Requirement
107
37
  requirements:
108
38
  - - "~>"
109
39
  - !ruby/object:Gem::Version
110
- version: 0.0.9
40
+ version: 3.0.0
111
41
  - !ruby/object:Gem::Dependency
112
- name: ice_nine
42
+ name: regexp_parser
113
43
  requirement: !ruby/object:Gem::Requirement
114
44
  requirements:
115
45
  - - "~>"
116
46
  - !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
- - - "~>"
47
+ version: '2.0'
48
+ - - ">="
130
49
  - !ruby/object:Gem::Version
131
- version: 0.4.2
50
+ version: 2.0.3
132
51
  type: :runtime
133
52
  prerelease: false
134
53
  version_requirements: !ruby/object:Gem::Requirement
135
54
  requirements:
136
55
  - - "~>"
137
56
  - !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
- - - "~>"
57
+ version: '2.0'
58
+ - - ">="
151
59
  - !ruby/object:Gem::Version
152
- version: 0.1.0
153
- - !ruby/object:Gem::Dependency
154
- name: parser
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - "~>"
158
- - !ruby/object:Gem::Version
159
- version: 2.7.1
160
- type: :runtime
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - "~>"
165
- - !ruby/object:Gem::Version
166
- version: 2.7.1
167
- - !ruby/object:Gem::Dependency
168
- name: procto
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: 0.0.2
174
- type: :runtime
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: 0.0.2
60
+ version: 2.0.3
181
61
  - !ruby/object:Gem::Dependency
182
62
  name: unparser
183
63
  requirement: !ruby/object:Gem::Requirement
184
64
  requirements:
185
65
  - - "~>"
186
66
  - !ruby/object:Gem::Version
187
- version: 0.5.4
188
- type: :runtime
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - "~>"
193
- - !ruby/object:Gem::Version
194
- version: 0.5.4
195
- - !ruby/object:Gem::Dependency
196
- name: variable
197
- requirement: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - "~>"
200
- - !ruby/object:Gem::Version
201
- version: 0.0.1
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.1
74
+ version: 0.6.0
209
75
  - !ruby/object:Gem::Dependency
210
76
  name: parallel
211
77
  requirement: !ruby/object:Gem::Requirement
@@ -268,14 +134,14 @@ dependencies:
268
134
  requirements:
269
135
  - - "~>"
270
136
  - !ruby/object:Gem::Version
271
- version: '1.2'
137
+ version: '1.7'
272
138
  type: :development
273
139
  prerelease: false
274
140
  version_requirements: !ruby/object:Gem::Requirement
275
141
  requirements:
276
142
  - - "~>"
277
143
  - !ruby/object:Gem::Version
278
- version: '1.2'
144
+ version: '1.7'
279
145
  description: Mutation Testing for Ruby.
280
146
  email:
281
147
  - mbj@schirp-dso.com
@@ -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
@@ -366,6 +243,7 @@ files:
366
243
  - lib/mutant/mutator/node/generic.rb
367
244
  - lib/mutant/mutator/node/if.rb
368
245
  - lib/mutant/mutator/node/index.rb
246
+ - lib/mutant/mutator/node/kwargs.rb
369
247
  - lib/mutant/mutator/node/kwbegin.rb
370
248
  - lib/mutant/mutator/node/literal.rb
371
249
  - lib/mutant/mutator/node/literal/array.rb
@@ -390,6 +268,15 @@ files:
390
268
  - lib/mutant/mutator/node/op_asgn.rb
391
269
  - lib/mutant/mutator/node/or_asgn.rb
392
270
  - lib/mutant/mutator/node/procarg_zero.rb
271
+ - lib/mutant/mutator/node/regexp.rb
272
+ - lib/mutant/mutator/node/regexp/alternation_meta.rb
273
+ - lib/mutant/mutator/node/regexp/beginning_of_line_anchor.rb
274
+ - lib/mutant/mutator/node/regexp/capture_group.rb
275
+ - lib/mutant/mutator/node/regexp/character_type.rb
276
+ - lib/mutant/mutator/node/regexp/end_of_line_anchor.rb
277
+ - lib/mutant/mutator/node/regexp/end_of_string_or_before_end_of_line_anchor.rb
278
+ - lib/mutant/mutator/node/regexp/named_group.rb
279
+ - lib/mutant/mutator/node/regexp/zero_or_more.rb
393
280
  - lib/mutant/mutator/node/regopt.rb
394
281
  - lib/mutant/mutator/node/resbody.rb
395
282
  - lib/mutant/mutator/node/rescue.rb
@@ -413,6 +300,7 @@ files:
413
300
  - lib/mutant/parallel/worker.rb
414
301
  - lib/mutant/parser.rb
415
302
  - lib/mutant/pipe.rb
303
+ - lib/mutant/procto.rb
416
304
  - lib/mutant/range.rb
417
305
  - lib/mutant/registry.rb
418
306
  - lib/mutant/reporter.rb
@@ -450,8 +338,8 @@ files:
450
338
  - lib/mutant/timer.rb
451
339
  - lib/mutant/transform.rb
452
340
  - lib/mutant/util.rb
341
+ - lib/mutant/variable.rb
453
342
  - lib/mutant/version.rb
454
- - lib/mutant/warnings.rb
455
343
  - lib/mutant/world.rb
456
344
  - lib/mutant/zombifier.rb
457
345
  homepage: https://github.com/mbj/mutant
@@ -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