mutant 0.8.10 → 0.8.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (247) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -4
  3. data/Changelog.md +8 -0
  4. data/README.md +112 -43
  5. data/Rakefile +2 -16
  6. data/circle.yml +1 -1
  7. data/config/flay.yml +2 -2
  8. data/config/flog.yml +1 -1
  9. data/config/reek.yml +3 -4
  10. data/config/rubocop.yml +53 -16
  11. data/lib/mutant.rb +27 -6
  12. data/lib/mutant/ast/meta/const.rb +2 -0
  13. data/lib/mutant/ast/meta/optarg.rb +2 -0
  14. data/lib/mutant/ast/meta/resbody.rb +2 -0
  15. data/lib/mutant/ast/meta/restarg.rb +2 -0
  16. data/lib/mutant/ast/meta/send.rb +4 -0
  17. data/lib/mutant/ast/meta/symbol.rb +2 -0
  18. data/lib/mutant/ast/named_children.rb +14 -4
  19. data/lib/mutant/ast/nodes.rb +3 -1
  20. data/lib/mutant/ast/regexp.rb +53 -0
  21. data/lib/mutant/ast/regexp/transformer.rb +185 -0
  22. data/lib/mutant/ast/regexp/transformer/alternative.rb +39 -0
  23. data/lib/mutant/ast/regexp/transformer/character_set.rb +46 -0
  24. data/lib/mutant/ast/regexp/transformer/direct.rb +99 -0
  25. data/lib/mutant/ast/regexp/transformer/options_group.rb +66 -0
  26. data/lib/mutant/ast/regexp/transformer/quantifier.rb +112 -0
  27. data/lib/mutant/ast/regexp/transformer/recursive.rb +50 -0
  28. data/lib/mutant/ast/regexp/transformer/root.rb +29 -0
  29. data/lib/mutant/ast/regexp/transformer/text.rb +55 -0
  30. data/lib/mutant/ast/types.rb +92 -5
  31. data/lib/mutant/cli.rb +2 -14
  32. data/lib/mutant/color.rb +1 -1
  33. data/lib/mutant/config.rb +1 -3
  34. data/lib/mutant/expression/methods.rb +1 -1
  35. data/lib/mutant/expression/namespace.rb +2 -2
  36. data/lib/mutant/expression/parser.rb +1 -1
  37. data/lib/mutant/integration.rb +10 -28
  38. data/lib/mutant/isolation.rb +9 -60
  39. data/lib/mutant/isolation/fork.rb +72 -0
  40. data/lib/mutant/isolation/none.rb +25 -0
  41. data/lib/mutant/matcher/config.rb +2 -0
  42. data/lib/mutant/matcher/method/singleton.rb +5 -4
  43. data/lib/mutant/meta.rb +11 -4
  44. data/lib/mutant/meta/example.rb +2 -116
  45. data/lib/mutant/meta/example/dsl.rb +22 -19
  46. data/lib/mutant/meta/example/verification.rb +86 -0
  47. data/lib/mutant/mutator.rb +22 -49
  48. data/lib/mutant/mutator/node.rb +15 -19
  49. data/lib/mutant/mutator/node/and_asgn.rb +1 -1
  50. data/lib/mutant/mutator/node/argument.rb +10 -5
  51. data/lib/mutant/mutator/node/arguments.rb +5 -9
  52. data/lib/mutant/mutator/node/begin.rb +4 -17
  53. data/lib/mutant/mutator/node/block.rb +1 -1
  54. data/lib/mutant/mutator/node/break.rb +1 -1
  55. data/lib/mutant/mutator/node/class.rb +21 -0
  56. data/lib/mutant/mutator/node/conditional_loop.rb +1 -1
  57. data/lib/mutant/mutator/node/define.rb +1 -1
  58. data/lib/mutant/mutator/node/defined.rb +1 -1
  59. data/lib/mutant/mutator/node/dstr.rb +1 -1
  60. data/lib/mutant/mutator/node/dsym.rb +1 -1
  61. data/lib/mutant/mutator/node/generic.rb +3 -3
  62. data/lib/mutant/mutator/node/kwbegin.rb +1 -1
  63. data/lib/mutant/mutator/node/literal.rb +9 -0
  64. data/lib/mutant/mutator/node/literal/boolean.rb +1 -1
  65. data/lib/mutant/mutator/node/literal/fixnum.rb +2 -2
  66. data/lib/mutant/mutator/node/literal/float.rb +4 -6
  67. data/lib/mutant/mutator/node/literal/hash.rb +1 -1
  68. data/lib/mutant/mutator/node/literal/nil.rb +1 -1
  69. data/lib/mutant/mutator/node/literal/range.rb +2 -19
  70. data/lib/mutant/mutator/node/literal/regex.rb +43 -3
  71. data/lib/mutant/mutator/node/literal/string.rb +1 -1
  72. data/lib/mutant/mutator/node/literal/symbol.rb +2 -4
  73. data/lib/mutant/mutator/node/masgn.rb +1 -1
  74. data/lib/mutant/mutator/node/match_current_line.rb +1 -1
  75. data/lib/mutant/mutator/node/mlhs.rb +2 -3
  76. data/lib/mutant/mutator/node/named_value/access.rb +2 -2
  77. data/lib/mutant/mutator/node/named_value/constant_assignment.rb +4 -3
  78. data/lib/mutant/mutator/node/named_value/variable_assignment.rb +4 -4
  79. data/lib/mutant/mutator/node/next.rb +1 -1
  80. data/lib/mutant/mutator/node/nthref.rb +1 -1
  81. data/lib/mutant/mutator/node/or_asgn.rb +1 -1
  82. data/lib/mutant/mutator/node/regexp.rb +44 -0
  83. data/lib/mutant/mutator/node/regopt.rb +31 -0
  84. data/lib/mutant/mutator/node/resbody.rb +1 -1
  85. data/lib/mutant/mutator/node/rescue.rb +1 -3
  86. data/lib/mutant/mutator/node/return.rb +1 -1
  87. data/lib/mutant/mutator/node/send.rb +43 -3
  88. data/lib/mutant/mutator/node/send/attribute_assignment.rb +4 -1
  89. data/lib/mutant/mutator/node/send/conditional.rb +23 -0
  90. data/lib/mutant/mutator/node/send/index.rb +1 -1
  91. data/lib/mutant/mutator/node/splat.rb +1 -1
  92. data/lib/mutant/mutator/node/when.rb +1 -1
  93. data/lib/mutant/mutator/node/yield.rb +1 -1
  94. data/lib/mutant/mutator/util.rb +0 -30
  95. data/lib/mutant/mutator/util/array.rb +4 -16
  96. data/lib/mutant/parallel.rb +1 -1
  97. data/lib/mutant/parallel/worker.rb +1 -1
  98. data/lib/mutant/registry.rb +44 -0
  99. data/lib/mutant/reporter/cli/format.rb +2 -0
  100. data/lib/mutant/reporter/cli/printer.rb +2 -2
  101. data/lib/mutant/reporter/cli/printer/config.rb +0 -1
  102. data/lib/mutant/reporter/cli/printer/env_progress.rb +1 -11
  103. data/lib/mutant/reporter/cli/printer/mutation_progress_result.rb +1 -1
  104. data/lib/mutant/reporter/cli/printer/mutation_result.rb +2 -0
  105. data/lib/mutant/reporter/cli/tput.rb +1 -1
  106. data/lib/mutant/reporter/sequence.rb +3 -0
  107. data/lib/mutant/require_highjack.rb +6 -2
  108. data/lib/mutant/result.rb +1 -1
  109. data/lib/mutant/subject.rb +5 -5
  110. data/lib/mutant/subject/method/instance.rb +1 -2
  111. data/lib/mutant/util.rb +18 -0
  112. data/lib/mutant/version.rb +1 -1
  113. data/lib/mutant/zombifier.rb +5 -3
  114. data/meta/and.rb +1 -1
  115. data/meta/and_asgn.rb +1 -1
  116. data/meta/array.rb +2 -2
  117. data/meta/begin.rb +2 -2
  118. data/meta/block.rb +7 -7
  119. data/meta/block_pass.rb +1 -1
  120. data/meta/blockarg.rb +1 -1
  121. data/meta/break.rb +1 -1
  122. data/meta/case.rb +2 -2
  123. data/meta/casgn.rb +11 -2
  124. data/meta/cbase.rb +1 -1
  125. data/meta/class.rb +10 -0
  126. data/meta/const.rb +9 -1
  127. data/meta/csend.rb +8 -0
  128. data/meta/cvar.rb +1 -1
  129. data/meta/cvasgn.rb +1 -1
  130. data/meta/date.rb +4 -4
  131. data/meta/def.rb +14 -14
  132. data/meta/defined.rb +1 -1
  133. data/meta/dstr.rb +1 -1
  134. data/meta/dsym.rb +1 -1
  135. data/meta/ensure.rb +1 -1
  136. data/meta/false.rb +1 -1
  137. data/meta/float.rb +3 -3
  138. data/meta/gvar.rb +1 -1
  139. data/meta/gvasgn.rb +1 -1
  140. data/meta/hash.rb +1 -1
  141. data/meta/if.rb +17 -3
  142. data/meta/int.rb +1 -1
  143. data/meta/ivar.rb +1 -1
  144. data/meta/ivasgn.rb +14 -1
  145. data/meta/kwarg.rb +8 -0
  146. data/meta/kwbegin.rb +1 -1
  147. data/meta/kwoptarg.rb +11 -0
  148. data/meta/lvar.rb +1 -1
  149. data/meta/lvasgn.rb +1 -1
  150. data/meta/masgn.rb +1 -1
  151. data/meta/match_current_line.rb +2 -2
  152. data/meta/next.rb +1 -1
  153. data/meta/nil.rb +1 -1
  154. data/meta/nthref.rb +5 -5
  155. data/meta/op_assgn.rb +1 -1
  156. data/meta/or.rb +1 -1
  157. data/meta/or_asgn.rb +5 -5
  158. data/meta/range.rb +2 -8
  159. data/meta/redo.rb +1 -1
  160. data/meta/regexp.rb +106 -0
  161. data/meta/regexp/regexp_bol_anchor.rb +13 -0
  162. data/meta/regexp/regexp_bos_anchor.rb +26 -0
  163. data/meta/regexp/regexp_root_expression.rb +13 -0
  164. data/meta/regopt.rb +8 -0
  165. data/meta/rescue.rb +49 -4
  166. data/meta/restarg.rb +6 -9
  167. data/meta/return.rb +2 -2
  168. data/meta/self.rb +1 -1
  169. data/meta/send.rb +228 -55
  170. data/meta/str.rb +1 -1
  171. data/meta/super.rb +3 -3
  172. data/meta/{symbol.rb → sym.rb} +1 -1
  173. data/meta/true.rb +1 -1
  174. data/meta/until.rb +1 -1
  175. data/meta/while.rb +2 -2
  176. data/meta/yield.rb +1 -1
  177. data/mutant-rspec.gemspec +2 -2
  178. data/mutant.gemspec +6 -5
  179. data/spec/integration/mutant/isolation/fork_spec.rb +8 -0
  180. data/spec/integration/mutant/rspec_spec.rb +1 -1
  181. data/spec/integration/mutant/test_mutator_handles_types_spec.rb +1 -2
  182. data/spec/integrations.yml +93 -24
  183. data/spec/spec_helper.rb +12 -7
  184. data/spec/support/compress_helper.rb +1 -1
  185. data/spec/support/corpus.rb +115 -50
  186. data/spec/support/fake_actor.rb +5 -5
  187. data/spec/support/file_system.rb +1 -1
  188. data/spec/support/ice_nine_config.rb +3 -3
  189. data/spec/support/ruby_vm.rb +11 -12
  190. data/spec/support/shared_context.rb +22 -13
  191. data/spec/support/test_app.rb +1 -1
  192. data/spec/support/warning.rb +64 -0
  193. data/spec/support/warnings.yml +4 -0
  194. data/spec/support/xspec.rb +177 -0
  195. data/spec/unit/mutant/actor/env_spec.rb +2 -2
  196. data/spec/unit/mutant/actor/sender_spec.rb +1 -1
  197. data/spec/unit/mutant/ast/meta/send_spec.rb +1 -1
  198. data/spec/unit/mutant/ast/named_children_spec.rb +26 -0
  199. data/spec/unit/mutant/ast/regexp/parse_spec.rb +7 -0
  200. data/spec/unit/mutant/ast/regexp/supported_predicate_spec.rb +14 -0
  201. data/spec/unit/mutant/ast/regexp/transformer/lookup_table/table_spec.rb +19 -0
  202. data/spec/unit/mutant/ast/regexp/transformer/lookup_table_spec.rb +33 -0
  203. data/spec/unit/mutant/ast/regexp/transformer_spec.rb +19 -0
  204. data/spec/unit/mutant/ast/regexp_spec.rb +617 -0
  205. data/spec/unit/mutant/cli_spec.rb +7 -45
  206. data/spec/unit/mutant/context_spec.rb +4 -7
  207. data/spec/unit/mutant/env/{boostrap_spec.rb → bootstrap_spec.rb} +2 -2
  208. data/spec/unit/mutant/env_spec.rb +13 -16
  209. data/spec/unit/mutant/expression/namespace/{flat_spec.rb → exact_spec.rb} +0 -0
  210. data/spec/unit/mutant/integration/rspec_spec.rb +2 -2
  211. data/spec/unit/mutant/integration_spec.rb +14 -0
  212. data/spec/unit/mutant/isolation/fork_spec.rb +155 -0
  213. data/spec/unit/mutant/isolation/none_spec.rb +16 -0
  214. data/spec/unit/mutant/loader_spec.rb +1 -1
  215. data/spec/unit/mutant/matcher/methods/instance_spec.rb +2 -4
  216. data/spec/unit/mutant/meta/example/dsl_spec.rb +106 -0
  217. data/spec/unit/mutant/meta/example/verification_spec.rb +120 -0
  218. data/spec/unit/mutant/meta/example_spec.rb +32 -0
  219. data/spec/unit/mutant/mutator/node_spec.rb +37 -4
  220. data/spec/unit/mutant/mutator_spec.rb +21 -0
  221. data/spec/unit/mutant/{runner → parallel}/driver_spec.rb +0 -0
  222. data/spec/unit/mutant/parallel/master_spec.rb +13 -13
  223. data/spec/unit/mutant/registry_spec.rb +47 -0
  224. data/spec/unit/mutant/reporter/cli/printer/config_spec.rb +0 -4
  225. data/spec/unit/mutant/reporter/cli/printer/env_progress_spec.rb +0 -8
  226. data/spec/unit/mutant/reporter/cli/printer/env_result_spec.rb +0 -2
  227. data/spec/unit/mutant/reporter/cli/printer/status_progressive_spec.rb +0 -8
  228. data/spec/unit/mutant/reporter/cli/printer/status_spec.rb +0 -34
  229. data/spec/unit/mutant/reporter/cli_spec.rb +0 -22
  230. data/spec/unit/mutant/repository/diff_spec.rb +6 -6
  231. data/spec/unit/mutant/require_highjack_spec.rb +38 -14
  232. data/spec/unit/mutant/result/env_spec.rb +1 -4
  233. data/spec/unit/mutant/runner_spec.rb +1 -1
  234. data/spec/unit/mutant/subject/method/instance_spec.rb +1 -1
  235. data/spec/unit/mutant/subject_spec.rb +3 -3
  236. data/spec/unit/mutant/util/one_spec.rb +20 -0
  237. data/spec/unit/mutant/zombifier_spec.rb +18 -18
  238. data/test_app/{Gemfile.rspec3.3 → Gemfile.rspec3.5} +2 -2
  239. metadata +94 -24
  240. data/TODO +0 -21
  241. data/lib/mutant/mutator/node/blockarg.rb +0 -13
  242. data/lib/mutant/mutator/node/restarg.rb +0 -13
  243. data/lib/mutant/mutator/registry.rb +0 -49
  244. data/meta/boolean.rb +0 -13
  245. data/meta/regex.rb +0 -19
  246. data/spec/unit/mutant/isolation_spec.rb +0 -104
  247. data/spec/unit/mutant/mutator/registry_spec.rb +0 -57
@@ -1,11 +1,8 @@
1
- Mutant::Meta::Example.add do
2
- source 'foo(*bar)'
1
+ Mutant::Meta::Example.add :restarg do
2
+ source 'def foo(*bar); end'
3
3
 
4
- singleton_mutations
5
- mutation 'foo'
6
- mutation 'foo(nil)'
7
- mutation 'foo(self)'
8
- mutation 'foo(*self)'
9
- mutation 'foo(bar)'
10
- mutation 'foo(*nil)'
4
+ mutation 'def foo; end'
5
+ mutation 'def foo(*bar); bar = []; end'
6
+ mutation 'def foo(*bar); raise; end'
7
+ mutation 'remove_method(:foo)'
11
8
  end
@@ -1,10 +1,10 @@
1
- Mutant::Meta::Example.add do
1
+ Mutant::Meta::Example.add :return do
2
2
  source 'return'
3
3
 
4
4
  singleton_mutations
5
5
  end
6
6
 
7
- Mutant::Meta::Example.add do
7
+ Mutant::Meta::Example.add :return do
8
8
  source 'return foo'
9
9
 
10
10
  singleton_mutations
@@ -1,4 +1,4 @@
1
- Mutant::Meta::Example.add do
1
+ Mutant::Meta::Example.add :self do
2
2
  source 'self'
3
3
 
4
4
  mutation 'nil'
@@ -1,4 +1,4 @@
1
- Mutant::Meta::Example.add do
1
+ Mutant::Meta::Example.add :send do
2
2
  source 'a > b'
3
3
 
4
4
  singleton_mutations
@@ -14,7 +14,7 @@ Mutant::Meta::Example.add do
14
14
  mutation 'b'
15
15
  end
16
16
 
17
- Mutant::Meta::Example.add do
17
+ Mutant::Meta::Example.add :send do
18
18
  source 'A.const_get(:B)'
19
19
 
20
20
  singleton_mutations
@@ -28,7 +28,7 @@ Mutant::Meta::Example.add do
28
28
  mutation 'self.const_get(:B)'
29
29
  end
30
30
 
31
- Mutant::Meta::Example.add do
31
+ Mutant::Meta::Example.add :send do
32
32
  source 'A.const_get(bar)'
33
33
 
34
34
  singleton_mutations
@@ -40,7 +40,18 @@ Mutant::Meta::Example.add do
40
40
  mutation 'self.const_get(bar)'
41
41
  end
42
42
 
43
- Mutant::Meta::Example.add do
43
+ Mutant::Meta::Example.add :send do
44
+ source 'method(bar)'
45
+
46
+ singleton_mutations
47
+ mutation 'public_method(bar)'
48
+ mutation 'method'
49
+ mutation 'bar'
50
+ mutation 'method(nil)'
51
+ mutation 'method(self)'
52
+ end
53
+
54
+ Mutant::Meta::Example.add :send do
44
55
  source 'a >= b'
45
56
 
46
57
  singleton_mutations
@@ -56,7 +67,7 @@ Mutant::Meta::Example.add do
56
67
  mutation 'b'
57
68
  end
58
69
 
59
- Mutant::Meta::Example.add do
70
+ Mutant::Meta::Example.add :send do
60
71
  source 'a <= b'
61
72
 
62
73
  singleton_mutations
@@ -72,7 +83,7 @@ Mutant::Meta::Example.add do
72
83
  mutation 'b'
73
84
  end
74
85
 
75
- Mutant::Meta::Example.add do
86
+ Mutant::Meta::Example.add :send do
76
87
  source 'a < b'
77
88
 
78
89
  singleton_mutations
@@ -88,21 +99,21 @@ Mutant::Meta::Example.add do
88
99
  mutation 'b'
89
100
  end
90
101
 
91
- Mutant::Meta::Example.add do
102
+ Mutant::Meta::Example.add :send do
92
103
  source 'reverse_each'
93
104
 
94
105
  singleton_mutations
95
106
  mutation 'each'
96
107
  end
97
108
 
98
- Mutant::Meta::Example.add do
109
+ Mutant::Meta::Example.add :send do
99
110
  source 'reverse_merge'
100
111
 
101
112
  singleton_mutations
102
113
  mutation 'merge'
103
114
  end
104
115
 
105
- Mutant::Meta::Example.add do
116
+ Mutant::Meta::Example.add :send do
106
117
  source 'reverse_map'
107
118
 
108
119
  singleton_mutations
@@ -110,14 +121,14 @@ Mutant::Meta::Example.add do
110
121
  mutation 'each'
111
122
  end
112
123
 
113
- Mutant::Meta::Example.add do
124
+ Mutant::Meta::Example.add :send do
114
125
  source 'map'
115
126
 
116
127
  singleton_mutations
117
128
  mutation 'each'
118
129
  end
119
130
 
120
- Mutant::Meta::Example.add do
131
+ Mutant::Meta::Example.add :send do
121
132
  source 'foo.to_s'
122
133
 
123
134
  singleton_mutations
@@ -126,16 +137,17 @@ Mutant::Meta::Example.add do
126
137
  mutation 'foo.to_str'
127
138
  end
128
139
 
129
- Mutant::Meta::Example.add do
140
+ Mutant::Meta::Example.add :send do
130
141
  source 'foo.to_a'
131
142
 
132
143
  singleton_mutations
133
144
  mutation 'foo'
134
145
  mutation 'self.to_a'
135
146
  mutation 'foo.to_ary'
147
+ mutation 'foo.to_set'
136
148
  end
137
149
 
138
- Mutant::Meta::Example.add do
150
+ Mutant::Meta::Example.add :send do
139
151
  source 'foo.to_i'
140
152
 
141
153
  singleton_mutations
@@ -145,7 +157,7 @@ Mutant::Meta::Example.add do
145
157
  mutation 'Integer(foo)'
146
158
  end
147
159
 
148
- Mutant::Meta::Example.add do
160
+ Mutant::Meta::Example.add :send do
149
161
  source 'foo.to_h'
150
162
 
151
163
  singleton_mutations
@@ -154,7 +166,7 @@ Mutant::Meta::Example.add do
154
166
  mutation 'foo.to_hash'
155
167
  end
156
168
 
157
- Mutant::Meta::Example.add do
169
+ Mutant::Meta::Example.add :send do
158
170
  source 'foo == bar'
159
171
 
160
172
  singleton_mutations
@@ -168,7 +180,7 @@ Mutant::Meta::Example.add do
168
180
  mutation 'foo.equal?(bar)'
169
181
  end
170
182
 
171
- Mutant::Meta::Example.add do
183
+ Mutant::Meta::Example.add :send do
172
184
  source 'foo.is_a?(bar)'
173
185
 
174
186
  singleton_mutations
@@ -181,7 +193,7 @@ Mutant::Meta::Example.add do
181
193
  mutation 'foo.instance_of?(bar)'
182
194
  end
183
195
 
184
- Mutant::Meta::Example.add do
196
+ Mutant::Meta::Example.add :send do
185
197
  source 'foo.is_a?(bar)'
186
198
 
187
199
  singleton_mutations
@@ -194,7 +206,7 @@ Mutant::Meta::Example.add do
194
206
  mutation 'foo.instance_of?(bar)'
195
207
  end
196
208
 
197
- Mutant::Meta::Example.add do
209
+ Mutant::Meta::Example.add :send do
198
210
  source 'foo.kind_of?(bar)'
199
211
 
200
212
  singleton_mutations
@@ -207,7 +219,7 @@ Mutant::Meta::Example.add do
207
219
  mutation 'foo.instance_of?(bar)'
208
220
  end
209
221
 
210
- Mutant::Meta::Example.add do
222
+ Mutant::Meta::Example.add :send do
211
223
  source 'foo.gsub(a, b)'
212
224
 
213
225
  singleton_mutations
@@ -223,7 +235,7 @@ Mutant::Meta::Example.add do
223
235
  mutation 'self.gsub(a, b)'
224
236
  end
225
237
 
226
- Mutant::Meta::Example.add do
238
+ Mutant::Meta::Example.add :send do
227
239
  source 'foo.values_at(a, b)'
228
240
 
229
241
  singleton_mutations
@@ -239,7 +251,44 @@ Mutant::Meta::Example.add do
239
251
  mutation 'foo.values_at'
240
252
  end
241
253
 
242
- Mutant::Meta::Example.add do
254
+ Mutant::Meta::Example.add :send do
255
+ source 'foo.dig(a, b)'
256
+
257
+ singleton_mutations
258
+ mutation 'foo.fetch(a).dig(b)'
259
+ mutation 'foo'
260
+ mutation 'self.dig(a, b)'
261
+ mutation 'foo.dig(a)'
262
+ mutation 'foo.dig(b)'
263
+ mutation 'foo.dig(nil, b)'
264
+ mutation 'foo.dig(self, b)'
265
+ mutation 'foo.dig(a, nil)'
266
+ mutation 'foo.dig(a, self)'
267
+ mutation 'foo.dig'
268
+ end
269
+
270
+ Mutant::Meta::Example.add :send do
271
+ source 'foo.dig(a)'
272
+
273
+ singleton_mutations
274
+ mutation 'foo.fetch(a)'
275
+ mutation 'foo'
276
+ mutation 'self.dig(a)'
277
+ mutation 'foo.dig(nil)'
278
+ mutation 'foo.dig(self)'
279
+ mutation 'foo.dig'
280
+ mutation 'a'
281
+ end
282
+
283
+ Mutant::Meta::Example.add :send do
284
+ source 'foo.dig'
285
+
286
+ singleton_mutations
287
+ mutation 'foo'
288
+ mutation 'self.dig'
289
+ end
290
+
291
+ Mutant::Meta::Example.add :send do
243
292
  source 'foo.__send__(bar)'
244
293
 
245
294
  singleton_mutations
@@ -252,7 +301,7 @@ Mutant::Meta::Example.add do
252
301
  mutation 'foo.__send__(self)'
253
302
  end
254
303
 
255
- Mutant::Meta::Example.add do
304
+ Mutant::Meta::Example.add :send do
256
305
  source 'foo.send(bar)'
257
306
 
258
307
  singleton_mutations
@@ -266,31 +315,29 @@ Mutant::Meta::Example.add do
266
315
  mutation 'foo.send(self)'
267
316
  end
268
317
 
269
- Mutant::Meta::Example.add do
270
- source 'self.bar = baz'
318
+ Mutant::Meta::Example.add :send do
319
+ source 'self.booz = baz'
271
320
 
272
321
  singleton_mutations
273
- mutation 'self.bar = nil'
274
- mutation 'self.bar = self'
275
- mutation 'self.bar'
322
+ mutation 'self.booz = nil'
323
+ mutation 'self.booz = self'
324
+ mutation 'self.booz'
276
325
  mutation 'baz'
277
- # This one could probably be removed
278
326
  end
279
327
 
280
- Mutant::Meta::Example.add do
281
- source 'foo.bar = baz'
328
+ Mutant::Meta::Example.add :send do
329
+ source 'foo.booz = baz'
282
330
 
283
331
  singleton_mutations
284
332
  mutation 'foo'
285
- mutation 'foo.bar = nil'
286
- mutation 'foo.bar = self'
287
- mutation 'self.bar = baz'
288
- mutation 'foo.bar'
333
+ mutation 'foo.booz = nil'
334
+ mutation 'foo.booz = self'
335
+ mutation 'self.booz = baz'
336
+ mutation 'foo.booz'
289
337
  mutation 'baz'
290
- # This one could probably be removed
291
338
  end
292
339
 
293
- Mutant::Meta::Example.add do
340
+ Mutant::Meta::Example.add :send do
294
341
  source 'foo[bar] = baz'
295
342
 
296
343
  singleton_mutations
@@ -304,7 +351,7 @@ Mutant::Meta::Example.add do
304
351
  mutation 'baz'
305
352
  end
306
353
 
307
- Mutant::Meta::Example.add do
354
+ Mutant::Meta::Example.add :send do
308
355
  source 'foo(*bar)'
309
356
 
310
357
  singleton_mutations
@@ -316,20 +363,20 @@ Mutant::Meta::Example.add do
316
363
  mutation 'foo(*self)'
317
364
  end
318
365
 
319
- Mutant::Meta::Example.add do
366
+ Mutant::Meta::Example.add :send do
320
367
  source 'foo(&bar)'
321
368
 
322
369
  singleton_mutations
323
370
  mutation 'foo'
324
371
  end
325
372
 
326
- Mutant::Meta::Example.add do
373
+ Mutant::Meta::Example.add :send do
327
374
  source 'foo'
328
375
 
329
376
  singleton_mutations
330
377
  end
331
378
 
332
- Mutant::Meta::Example.add do
379
+ Mutant::Meta::Example.add :send do
333
380
  source 'self.foo'
334
381
 
335
382
  singleton_mutations
@@ -337,14 +384,14 @@ Mutant::Meta::Example.add do
337
384
  end
338
385
 
339
386
  Unparser::Constants::KEYWORDS.each do |keyword|
340
- Mutant::Meta::Example.add do
387
+ Mutant::Meta::Example.add :send do
341
388
  source "self.#{keyword}"
342
389
 
343
390
  singleton_mutations
344
391
  end
345
392
  end
346
393
 
347
- Mutant::Meta::Example.add do
394
+ Mutant::Meta::Example.add :send do
348
395
  source 'foo.bar'
349
396
 
350
397
  singleton_mutations
@@ -352,7 +399,7 @@ Mutant::Meta::Example.add do
352
399
  mutation 'self.bar'
353
400
  end
354
401
 
355
- Mutant::Meta::Example.add do
402
+ Mutant::Meta::Example.add :send do
356
403
  source 'self.class.foo'
357
404
 
358
405
  singleton_mutations
@@ -360,14 +407,14 @@ Mutant::Meta::Example.add do
360
407
  mutation 'self.foo'
361
408
  end
362
409
 
363
- Mutant::Meta::Example.add do
410
+ Mutant::Meta::Example.add :send do
364
411
  source 'foo(nil)'
365
412
 
366
413
  singleton_mutations
367
414
  mutation 'foo'
368
415
  end
369
416
 
370
- Mutant::Meta::Example.add do
417
+ Mutant::Meta::Example.add :send do
371
418
  source 'self.foo(nil)'
372
419
 
373
420
  singleton_mutations
@@ -375,7 +422,7 @@ Mutant::Meta::Example.add do
375
422
  mutation 'foo(nil)'
376
423
  end
377
424
 
378
- Mutant::Meta::Example.add do
425
+ Mutant::Meta::Example.add :send do
379
426
  source 'self.fetch(nil)'
380
427
 
381
428
  singleton_mutations
@@ -385,7 +432,7 @@ Mutant::Meta::Example.add do
385
432
  end
386
433
 
387
434
  Unparser::Constants::KEYWORDS.each do |keyword|
388
- Mutant::Meta::Example.add do
435
+ Mutant::Meta::Example.add :send do
389
436
  source "foo.#{keyword}(nil)"
390
437
 
391
438
  singleton_mutations
@@ -395,7 +442,7 @@ Unparser::Constants::KEYWORDS.each do |keyword|
395
442
  end
396
443
  end
397
444
 
398
- Mutant::Meta::Example.add do
445
+ Mutant::Meta::Example.add :send do
399
446
  source 'foo(nil, nil)'
400
447
 
401
448
  singleton_mutations
@@ -403,7 +450,7 @@ Mutant::Meta::Example.add do
403
450
  mutation 'foo(nil)'
404
451
  end
405
452
 
406
- Mutant::Meta::Example.add do
453
+ Mutant::Meta::Example.add :send do
407
454
  source '(left - right) / foo'
408
455
 
409
456
  singleton_mutations
@@ -421,7 +468,7 @@ Mutant::Meta::Example.add do
421
468
  mutation 'self / foo'
422
469
  end
423
470
 
424
- Mutant::Meta::Example.add do
471
+ Mutant::Meta::Example.add :send do
425
472
  source 'foo[1]'
426
473
 
427
474
  singleton_mutations
@@ -439,7 +486,7 @@ Mutant::Meta::Example.add do
439
486
  mutation 'foo[self]'
440
487
  end
441
488
 
442
- Mutant::Meta::Example.add do
489
+ Mutant::Meta::Example.add :send do
443
490
  source 'self.foo[]'
444
491
 
445
492
  singleton_mutations
@@ -451,7 +498,97 @@ Mutant::Meta::Example.add do
451
498
  mutation 'foo[]'
452
499
  end
453
500
 
454
- Mutant::Meta::Example.add do
501
+ Mutant::Meta::Example.add :send do
502
+ source 'foo(n..-1)'
503
+
504
+ singleton_mutations
505
+ mutation 'foo'
506
+ mutation 'n..-1'
507
+ mutation 'foo(nil)'
508
+ mutation 'foo(self)'
509
+ mutation 'foo(n...-1)'
510
+ mutation 'foo(nil..-1)'
511
+ mutation 'foo(self..-1)'
512
+ mutation 'foo(n..nil)'
513
+ mutation 'foo(n..self)'
514
+ mutation 'foo(n..0)'
515
+ mutation 'foo(n..1)'
516
+ mutation 'foo(n..-2)'
517
+ end
518
+
519
+ Mutant::Meta::Example.add :send do
520
+ source 'foo[n..-2]'
521
+
522
+ singleton_mutations
523
+ mutation 'n..-2'
524
+ mutation 'foo'
525
+ mutation 'foo[]'
526
+ mutation 'foo.at(n..-2)'
527
+ mutation 'foo.fetch(n..-2)'
528
+ mutation 'foo.key?(n..-2)'
529
+ mutation 'self[n..-2]'
530
+ mutation 'foo[nil]'
531
+ mutation 'foo[self]'
532
+ mutation 'foo[n..nil]'
533
+ mutation 'foo[n..self]'
534
+ mutation 'foo[n..-1]'
535
+ mutation 'foo[n..2]'
536
+ mutation 'foo[n..0]'
537
+ mutation 'foo[n..1]'
538
+ mutation 'foo[n..-3]'
539
+ mutation 'foo[n...-2]'
540
+ mutation 'foo[nil..-2]'
541
+ mutation 'foo[self..-2]'
542
+ end
543
+
544
+ Mutant::Meta::Example.add :send do
545
+ source 'foo[n...-1]'
546
+
547
+ singleton_mutations
548
+ mutation 'n...-1'
549
+ mutation 'foo'
550
+ mutation 'foo[]'
551
+ mutation 'foo.at(n...-1)'
552
+ mutation 'foo.fetch(n...-1)'
553
+ mutation 'foo.key?(n...-1)'
554
+ mutation 'self[n...-1]'
555
+ mutation 'foo[nil]'
556
+ mutation 'foo[self]'
557
+ mutation 'foo[n...nil]'
558
+ mutation 'foo[n...self]'
559
+ mutation 'foo[n..-1]'
560
+ mutation 'foo[n...0]'
561
+ mutation 'foo[n...1]'
562
+ mutation 'foo[n...-2]'
563
+ mutation 'foo[nil...-1]'
564
+ mutation 'foo[self...-1]'
565
+ end
566
+
567
+ Mutant::Meta::Example.add :send do
568
+ source 'foo[n..-1]'
569
+
570
+ singleton_mutations
571
+ mutation 'n..-1'
572
+ mutation 'foo'
573
+ mutation 'foo[]'
574
+ mutation 'foo.at(n..-1)'
575
+ mutation 'foo.fetch(n..-1)'
576
+ mutation 'foo.key?(n..-1)'
577
+ mutation 'self[n..-1]'
578
+ mutation 'foo[nil]'
579
+ mutation 'foo[self]'
580
+ mutation 'foo[n..nil]'
581
+ mutation 'foo[n..self]'
582
+ mutation 'foo[n..0]'
583
+ mutation 'foo[n..1]'
584
+ mutation 'foo[n..-2]'
585
+ mutation 'foo[n...-1]'
586
+ mutation 'foo[nil..-1]'
587
+ mutation 'foo[self..-1]'
588
+ mutation 'foo.drop(n)'
589
+ end
590
+
591
+ Mutant::Meta::Example.add :send do
455
592
  source 'self[foo]'
456
593
 
457
594
  singleton_mutations
@@ -464,7 +601,7 @@ Mutant::Meta::Example.add do
464
601
  mutation 'foo'
465
602
  end
466
603
 
467
- Mutant::Meta::Example.add do
604
+ Mutant::Meta::Example.add :send do
468
605
  source 'foo[*bar]'
469
606
 
470
607
  singleton_mutations
@@ -482,7 +619,7 @@ Mutant::Meta::Example.add do
482
619
  end
483
620
 
484
621
  (Mutant::AST::Types::BINARY_METHOD_OPERATORS - %i[<= >= < > == != eql?]).each do |operator|
485
- Mutant::Meta::Example.add do
622
+ Mutant::Meta::Example.add :send do
486
623
  source "true #{operator} false"
487
624
 
488
625
  singleton_mutations
@@ -495,7 +632,7 @@ end
495
632
  end
496
633
  end
497
634
 
498
- Mutant::Meta::Example.add do
635
+ Mutant::Meta::Example.add :send do
499
636
  source 'a != b'
500
637
 
501
638
  singleton_mutations
@@ -508,3 +645,39 @@ Mutant::Meta::Example.add do
508
645
  mutation '!a.eql?(b)'
509
646
  mutation '!a.equal?(b)'
510
647
  end
648
+
649
+ Mutant::Meta::Example.add :send do
650
+ source 'sample'
651
+
652
+ singleton_mutations
653
+ mutation 'first'
654
+ mutation 'last'
655
+ end
656
+
657
+ Mutant::Meta::Example.add :send do
658
+ source 'pop'
659
+
660
+ singleton_mutations
661
+ mutation 'last'
662
+ end
663
+
664
+ Mutant::Meta::Example.add :send do
665
+ source 'shift'
666
+
667
+ singleton_mutations
668
+ mutation 'first'
669
+ end
670
+
671
+ Mutant::Meta::Example.add :send do
672
+ source 'first'
673
+
674
+ singleton_mutations
675
+ mutation 'last'
676
+ end
677
+
678
+ Mutant::Meta::Example.add :send do
679
+ source 'last'
680
+
681
+ singleton_mutations
682
+ mutation 'first'
683
+ end