mutant 0.9.8 → 0.9.13

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 (335) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mutant.rb +5 -2
  3. data/lib/mutant/ast.rb +0 -9
  4. data/lib/mutant/ast/find_metaclass_containing.rb +48 -0
  5. data/lib/mutant/ast/meta/send.rb +0 -6
  6. data/lib/mutant/bootstrap.rb +14 -37
  7. data/lib/mutant/cli.rb +11 -49
  8. data/lib/mutant/config.rb +0 -8
  9. data/lib/mutant/context.rb +0 -3
  10. data/lib/mutant/env.rb +0 -6
  11. data/lib/mutant/expression/method.rb +6 -6
  12. data/lib/mutant/expression/methods.rb +6 -6
  13. data/lib/mutant/expression/parser.rb +0 -6
  14. data/lib/mutant/integration.rb +0 -18
  15. data/lib/mutant/isolation.rb +1 -1
  16. data/lib/mutant/isolation/fork.rb +2 -24
  17. data/lib/mutant/isolation/none.rb +1 -1
  18. data/lib/mutant/license.rb +11 -0
  19. data/lib/mutant/matcher.rb +0 -14
  20. data/lib/mutant/matcher/config.rb +2 -11
  21. data/lib/mutant/matcher/method.rb +0 -31
  22. data/lib/mutant/matcher/method/instance.rb +0 -8
  23. data/lib/mutant/matcher/method/metaclass.rb +86 -0
  24. data/lib/mutant/matcher/method/singleton.rb +0 -25
  25. data/lib/mutant/matcher/methods.rb +17 -28
  26. data/lib/mutant/matcher/namespace.rb +0 -10
  27. data/lib/mutant/matcher/scope.rb +2 -4
  28. data/lib/mutant/meta/example/dsl.rb +0 -21
  29. data/lib/mutant/meta/example/verification.rb +0 -20
  30. data/lib/mutant/minitest/coverage.rb +53 -0
  31. data/lib/mutant/mutation.rb +0 -3
  32. data/lib/mutant/mutator.rb +1 -29
  33. data/lib/mutant/mutator/node.rb +1 -66
  34. data/lib/mutant/mutator/node/and_asgn.rb +0 -3
  35. data/lib/mutant/mutator/node/argument.rb +0 -15
  36. data/lib/mutant/mutator/node/arguments.rb +0 -20
  37. data/lib/mutant/mutator/node/begin.rb +0 -3
  38. data/lib/mutant/mutator/node/binary.rb +0 -23
  39. data/lib/mutant/mutator/node/block.rb +0 -15
  40. data/lib/mutant/mutator/node/block_pass.rb +29 -0
  41. data/lib/mutant/mutator/node/break.rb +0 -3
  42. data/lib/mutant/mutator/node/case.rb +0 -9
  43. data/lib/mutant/mutator/node/class.rb +0 -3
  44. data/lib/mutant/mutator/node/conditional_loop.rb +0 -3
  45. data/lib/mutant/mutator/node/const.rb +0 -3
  46. data/lib/mutant/mutator/node/define.rb +0 -11
  47. data/lib/mutant/mutator/node/defined.rb +0 -3
  48. data/lib/mutant/mutator/node/dstr.rb +0 -3
  49. data/lib/mutant/mutator/node/dsym.rb +0 -3
  50. data/lib/mutant/mutator/node/generic.rb +0 -3
  51. data/lib/mutant/mutator/node/if.rb +0 -12
  52. data/lib/mutant/mutator/node/index.rb +0 -27
  53. data/lib/mutant/mutator/node/kwbegin.rb +0 -3
  54. data/lib/mutant/mutator/node/literal.rb +0 -3
  55. data/lib/mutant/mutator/node/literal/array.rb +0 -6
  56. data/lib/mutant/mutator/node/literal/boolean.rb +0 -4
  57. data/lib/mutant/mutator/node/literal/float.rb +0 -9
  58. data/lib/mutant/mutator/node/literal/hash.rb +0 -9
  59. data/lib/mutant/mutator/node/literal/integer.rb +0 -9
  60. data/lib/mutant/mutator/node/literal/nil.rb +0 -3
  61. data/lib/mutant/mutator/node/literal/range.rb +4 -7
  62. data/lib/mutant/mutator/node/literal/regex.rb +0 -6
  63. data/lib/mutant/mutator/node/literal/string.rb +0 -3
  64. data/lib/mutant/mutator/node/literal/symbol.rb +0 -3
  65. data/lib/mutant/mutator/node/masgn.rb +0 -3
  66. data/lib/mutant/mutator/node/match_current_line.rb +0 -3
  67. data/lib/mutant/mutator/node/mlhs.rb +0 -3
  68. data/lib/mutant/mutator/node/named_value/access.rb +2 -14
  69. data/lib/mutant/mutator/node/named_value/constant_assignment.rb +0 -9
  70. data/lib/mutant/mutator/node/named_value/variable_assignment.rb +0 -6
  71. data/lib/mutant/mutator/node/next.rb +0 -3
  72. data/lib/mutant/mutator/node/noop.rb +1 -4
  73. data/lib/mutant/mutator/node/nthref.rb +0 -3
  74. data/lib/mutant/mutator/node/op_asgn.rb +0 -3
  75. data/lib/mutant/mutator/node/or_asgn.rb +0 -3
  76. data/lib/mutant/mutator/node/procarg_zero.rb +0 -3
  77. data/lib/mutant/mutator/node/regopt.rb +0 -6
  78. data/lib/mutant/mutator/node/resbody.rb +0 -6
  79. data/lib/mutant/mutator/node/rescue.rb +2 -19
  80. data/lib/mutant/mutator/node/return.rb +0 -3
  81. data/lib/mutant/mutator/node/sclass.rb +20 -0
  82. data/lib/mutant/mutator/node/send.rb +26 -61
  83. data/lib/mutant/mutator/node/send/attribute_assignment.rb +0 -9
  84. data/lib/mutant/mutator/node/send/binary.rb +0 -11
  85. data/lib/mutant/mutator/node/send/conditional.rb +0 -3
  86. data/lib/mutant/mutator/node/splat.rb +0 -3
  87. data/lib/mutant/mutator/node/super.rb +0 -3
  88. data/lib/mutant/mutator/node/when.rb +0 -19
  89. data/lib/mutant/mutator/node/yield.rb +0 -3
  90. data/lib/mutant/mutator/node/zsuper.rb +0 -3
  91. data/lib/mutant/mutator/util/array.rb +0 -6
  92. data/lib/mutant/mutator/util/symbol.rb +0 -3
  93. data/lib/mutant/parallel.rb +0 -13
  94. data/lib/mutant/parallel/driver.rb +0 -10
  95. data/lib/mutant/parallel/worker.rb +0 -22
  96. data/lib/mutant/reporter/cli.rb +0 -5
  97. data/lib/mutant/reporter/cli/format.rb +0 -9
  98. data/lib/mutant/reporter/cli/printer.rb +2 -42
  99. data/lib/mutant/reporter/cli/printer/env_progress.rb +0 -15
  100. data/lib/mutant/reporter/cli/printer/isolation_result.rb +9 -21
  101. data/lib/mutant/reporter/cli/printer/mutation_progress_result.rb +0 -5
  102. data/lib/mutant/reporter/cli/printer/mutation_result.rb +1 -22
  103. data/lib/mutant/reporter/cli/printer/status_progressive.rb +0 -8
  104. data/lib/mutant/reporter/cli/printer/subject_progress.rb +0 -9
  105. data/lib/mutant/repository/diff.rb +1 -13
  106. data/lib/mutant/repository/diff/ranges.rb +0 -11
  107. data/lib/mutant/result.rb +0 -3
  108. data/lib/mutant/runner.rb +0 -18
  109. data/lib/mutant/runner/sink.rb +0 -5
  110. data/lib/mutant/subject.rb +0 -8
  111. data/lib/mutant/subject/method.rb +0 -3
  112. data/lib/mutant/subject/method/instance.rb +40 -6
  113. data/lib/mutant/subject/method/metaclass.rb +30 -0
  114. data/lib/mutant/transform.rb +0 -92
  115. data/lib/mutant/version.rb +1 -1
  116. data/lib/mutant/warnings.rb +0 -6
  117. data/lib/mutant/zombifier.rb +2 -34
  118. metadata +61 -333
  119. data/.github/workflows/ci.yml +0 -121
  120. data/.gitignore +0 -38
  121. data/.rspec +0 -5
  122. data/.rubocop.yml +0 -7
  123. data/Changelog.md +0 -75
  124. data/Gemfile +0 -7
  125. data/Gemfile.lock +0 -167
  126. data/Gemfile.shared +0 -10
  127. data/README.md +0 -138
  128. data/Rakefile +0 -5
  129. data/config/devtools.yml +0 -2
  130. data/config/reek.yml +0 -138
  131. data/config/rubocop.yml +0 -205
  132. data/config/yardstick.yml +0 -2
  133. data/docs/commercial-support.md +0 -14
  134. data/docs/concurrency.md +0 -39
  135. data/docs/incremental.md +0 -76
  136. data/docs/known-problems.md +0 -30
  137. data/docs/limitations.md +0 -50
  138. data/docs/mutant-minitest.md +0 -149
  139. data/docs/mutant-rspec.md +0 -130
  140. data/docs/nomenclature.md +0 -82
  141. data/docs/reading-reports.md +0 -74
  142. data/lib/mutant/color.rb +0 -43
  143. data/lib/mutant/diff.rb +0 -114
  144. data/meta/and.rb +0 -15
  145. data/meta/and_asgn.rb +0 -14
  146. data/meta/array.rb +0 -30
  147. data/meta/begin.rb +0 -23
  148. data/meta/block.rb +0 -202
  149. data/meta/block_pass.rb +0 -8
  150. data/meta/blockarg.rb +0 -10
  151. data/meta/break.rb +0 -10
  152. data/meta/case.rb +0 -223
  153. data/meta/casgn.rb +0 -28
  154. data/meta/cbase.rb +0 -8
  155. data/meta/class.rb +0 -12
  156. data/meta/const.rb +0 -17
  157. data/meta/csend.rb +0 -10
  158. data/meta/cvar.rb +0 -7
  159. data/meta/cvasgn.rb +0 -10
  160. data/meta/date.rb +0 -59
  161. data/meta/def.rb +0 -203
  162. data/meta/defined.rb +0 -9
  163. data/meta/dstr.rb +0 -13
  164. data/meta/dsym.rb +0 -14
  165. data/meta/ensure.rb +0 -9
  166. data/meta/false.rb +0 -8
  167. data/meta/file.rb +0 -5
  168. data/meta/float.rb +0 -37
  169. data/meta/gvar.rb +0 -7
  170. data/meta/gvasgn.rb +0 -10
  171. data/meta/hash.rb +0 -24
  172. data/meta/if.rb +0 -77
  173. data/meta/index.rb +0 -133
  174. data/meta/indexasgn.rb +0 -31
  175. data/meta/int.rb +0 -18
  176. data/meta/ivar.rb +0 -8
  177. data/meta/ivasgn.rb +0 -23
  178. data/meta/kwarg.rb +0 -10
  179. data/meta/kwbegin.rb +0 -9
  180. data/meta/kwoptarg.rb +0 -13
  181. data/meta/lambda.rb +0 -23
  182. data/meta/line.rb +0 -5
  183. data/meta/lvar.rb +0 -16
  184. data/meta/lvasgn.rb +0 -25
  185. data/meta/masgn.rb +0 -7
  186. data/meta/match_current_line.rb +0 -15
  187. data/meta/next.rb +0 -11
  188. data/meta/nil.rb +0 -5
  189. data/meta/nthref.rb +0 -14
  190. data/meta/op_assgn.rb +0 -17
  191. data/meta/or.rb +0 -15
  192. data/meta/or_asgn.rb +0 -50
  193. data/meta/range.rb +0 -39
  194. data/meta/redo.rb +0 -5
  195. data/meta/regexp.rb +0 -81
  196. data/meta/regopt.rb +0 -10
  197. data/meta/rescue.rb +0 -90
  198. data/meta/return.rb +0 -16
  199. data/meta/self.rb +0 -7
  200. data/meta/send.rb +0 -604
  201. data/meta/str.rb +0 -7
  202. data/meta/super.rb +0 -27
  203. data/meta/sym.rb +0 -8
  204. data/meta/true.rb +0 -8
  205. data/meta/until.rb +0 -17
  206. data/meta/while.rb +0 -26
  207. data/meta/yield.rb +0 -10
  208. data/mutant-minitest.gemspec +0 -22
  209. data/mutant-rspec.gemspec +0 -22
  210. data/mutant.gemspec +0 -41
  211. data/mutant.yml +0 -6
  212. data/spec/integration/mutant/corpus_spec.rb +0 -15
  213. data/spec/integration/mutant/isolation/fork_spec.rb +0 -28
  214. data/spec/integration/mutant/minitest_spec.rb +0 -11
  215. data/spec/integration/mutant/null_spec.rb +0 -16
  216. data/spec/integration/mutant/rspec_spec.rb +0 -15
  217. data/spec/integration/mutant/test_mutator_handles_types_spec.rb +0 -9
  218. data/spec/integrations.yml +0 -63
  219. data/spec/shared/base_behavior.rb +0 -45
  220. data/spec/shared/framework_integration_behavior.rb +0 -70
  221. data/spec/shared/method_matcher_behavior.rb +0 -47
  222. data/spec/spec_helper.rb +0 -75
  223. data/spec/support/corpus.rb +0 -318
  224. data/spec/support/file_system.rb +0 -62
  225. data/spec/support/ice_nine_config.rb +0 -10
  226. data/spec/support/ruby_vm.rb +0 -84
  227. data/spec/support/shared_context.rb +0 -169
  228. data/spec/support/test_app.rb +0 -7
  229. data/spec/support/warnings.yml +0 -6
  230. data/spec/support/xspec.rb +0 -183
  231. data/spec/unit/mutant/ast/meta/optarg_spec.rb +0 -24
  232. data/spec/unit/mutant/ast/meta/send/proc_predicate_spec.rb +0 -30
  233. data/spec/unit/mutant/ast/meta/send/receiver_possible_top_level_const_predicate_spec.rb +0 -39
  234. data/spec/unit/mutant/ast/meta/send_spec.rb +0 -42
  235. data/spec/unit/mutant/ast/named_children_spec.rb +0 -89
  236. data/spec/unit/mutant/ast/sexp_spec.rb +0 -38
  237. data/spec/unit/mutant/ast_spec.rb +0 -57
  238. data/spec/unit/mutant/bootstrap_spec.rb +0 -216
  239. data/spec/unit/mutant/cli_spec.rb +0 -305
  240. data/spec/unit/mutant/clock_monotonic_spec.rb +0 -52
  241. data/spec/unit/mutant/config_spec.rb +0 -126
  242. data/spec/unit/mutant/context_spec.rb +0 -111
  243. data/spec/unit/mutant/diff_spec.rb +0 -189
  244. data/spec/unit/mutant/env_spec.rb +0 -229
  245. data/spec/unit/mutant/expression/method_spec.rb +0 -62
  246. data/spec/unit/mutant/expression/methods_spec.rb +0 -61
  247. data/spec/unit/mutant/expression/namespace/exact_spec.rb +0 -28
  248. data/spec/unit/mutant/expression/namespace/recursive_spec.rb +0 -66
  249. data/spec/unit/mutant/expression/parser_spec.rb +0 -65
  250. data/spec/unit/mutant/expression_spec.rb +0 -45
  251. data/spec/unit/mutant/integration/rspec_spec.rb +0 -201
  252. data/spec/unit/mutant/integration_spec.rb +0 -150
  253. data/spec/unit/mutant/isolation/fork_spec.rb +0 -309
  254. data/spec/unit/mutant/isolation/none_spec.rb +0 -23
  255. data/spec/unit/mutant/isolation/result_spec.rb +0 -73
  256. data/spec/unit/mutant/license_spec.rb +0 -293
  257. data/spec/unit/mutant/loader_spec.rb +0 -79
  258. data/spec/unit/mutant/matcher/chain_spec.rb +0 -26
  259. data/spec/unit/mutant/matcher/compiler_spec.rb +0 -0
  260. data/spec/unit/mutant/matcher/config_spec.rb +0 -47
  261. data/spec/unit/mutant/matcher/filter_spec.rb +0 -22
  262. data/spec/unit/mutant/matcher/method/instance_spec.rb +0 -164
  263. data/spec/unit/mutant/matcher/method/singleton_spec.rb +0 -90
  264. data/spec/unit/mutant/matcher/methods/instance_spec.rb +0 -54
  265. data/spec/unit/mutant/matcher/methods/singleton_spec.rb +0 -51
  266. data/spec/unit/mutant/matcher/namespace_spec.rb +0 -37
  267. data/spec/unit/mutant/matcher/null_spec.rb +0 -12
  268. data/spec/unit/mutant/matcher/scope_spec.rb +0 -35
  269. data/spec/unit/mutant/matcher/static_spec.rb +0 -13
  270. data/spec/unit/mutant/matcher_spec.rb +0 -102
  271. data/spec/unit/mutant/meta/example/dsl_spec.rb +0 -108
  272. data/spec/unit/mutant/meta/example/verification_spec.rb +0 -154
  273. data/spec/unit/mutant/meta/example_spec.rb +0 -34
  274. data/spec/unit/mutant/mutation_spec.rb +0 -140
  275. data/spec/unit/mutant/mutator/node_spec.rb +0 -52
  276. data/spec/unit/mutant/mutator_spec.rb +0 -21
  277. data/spec/unit/mutant/parallel/driver_spec.rb +0 -126
  278. data/spec/unit/mutant/parallel/source/array_spec.rb +0 -57
  279. data/spec/unit/mutant/parallel/worker_spec.rb +0 -206
  280. data/spec/unit/mutant/parallel_spec.rb +0 -115
  281. data/spec/unit/mutant/parser_spec.rb +0 -26
  282. data/spec/unit/mutant/range_spec.rb +0 -141
  283. data/spec/unit/mutant/registry_spec.rb +0 -74
  284. data/spec/unit/mutant/reporter/cli/printer/config_spec.rb +0 -17
  285. data/spec/unit/mutant/reporter/cli/printer/env_progress_spec.rb +0 -85
  286. data/spec/unit/mutant/reporter/cli/printer/env_result_spec.rb +0 -45
  287. data/spec/unit/mutant/reporter/cli/printer/isolation_result_spec.rb +0 -132
  288. data/spec/unit/mutant/reporter/cli/printer/mutation_progress_result_spec.rb +0 -25
  289. data/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb +0 -153
  290. data/spec/unit/mutant/reporter/cli/printer/status_progressive_spec.rb +0 -45
  291. data/spec/unit/mutant/reporter/cli/printer/subject_progress_spec.rb +0 -36
  292. data/spec/unit/mutant/reporter/cli/printer/subject_result_spec.rb +0 -44
  293. data/spec/unit/mutant/reporter/cli/printer/test_result_spec.rb +0 -16
  294. data/spec/unit/mutant/reporter/cli/printer_spec.rb +0 -163
  295. data/spec/unit/mutant/reporter/cli_spec.rb +0 -137
  296. data/spec/unit/mutant/reporter/null_spec.rb +0 -14
  297. data/spec/unit/mutant/reporter/sequence_spec.rb +0 -31
  298. data/spec/unit/mutant/repository/diff/ranges_spec.rb +0 -180
  299. data/spec/unit/mutant/repository/diff_spec.rb +0 -122
  300. data/spec/unit/mutant/repository/subject_filter_spec.rb +0 -30
  301. data/spec/unit/mutant/require_highjack_spec.rb +0 -73
  302. data/spec/unit/mutant/result/class_methods_spec.rb +0 -51
  303. data/spec/unit/mutant/result/env_spec.rb +0 -161
  304. data/spec/unit/mutant/result/mutation_spec.rb +0 -70
  305. data/spec/unit/mutant/result/subject_spec.rb +0 -111
  306. data/spec/unit/mutant/result/test_spec.rb +0 -14
  307. data/spec/unit/mutant/result_spec.rb +0 -33
  308. data/spec/unit/mutant/runner/sink_spec.rb +0 -174
  309. data/spec/unit/mutant/runner_spec.rb +0 -121
  310. data/spec/unit/mutant/selector/expression_spec.rb +0 -62
  311. data/spec/unit/mutant/selector/null_spec.rb +0 -17
  312. data/spec/unit/mutant/subject/method/instance_spec.rb +0 -181
  313. data/spec/unit/mutant/subject/method/singleton_spec.rb +0 -61
  314. data/spec/unit/mutant/subject_spec.rb +0 -93
  315. data/spec/unit/mutant/transform/array_spec.rb +0 -92
  316. data/spec/unit/mutant/transform/bool_spec.rb +0 -63
  317. data/spec/unit/mutant/transform/error_spec.rb +0 -132
  318. data/spec/unit/mutant/transform/exception_spec.rb +0 -44
  319. data/spec/unit/mutant/transform/hash_spec.rb +0 -236
  320. data/spec/unit/mutant/transform/index_spec.rb +0 -92
  321. data/spec/unit/mutant/transform/named_spec.rb +0 -49
  322. data/spec/unit/mutant/transform/primitive_spec.rb +0 -56
  323. data/spec/unit/mutant/transform/sequence_spec.rb +0 -98
  324. data/spec/unit/mutant/util/one_spec.rb +0 -22
  325. data/spec/unit/mutant/warnings_spec.rb +0 -89
  326. data/spec/unit/mutant/world_spec.rb +0 -63
  327. data/spec/unit/mutant/zombifier_spec.rb +0 -122
  328. data/test_app/.rspec +0 -1
  329. data/test_app/Gemfile.minitest +0 -4
  330. data/test_app/Gemfile.rspec3.8 +0 -7
  331. data/test_app/lib/test_app.rb +0 -109
  332. data/test_app/lib/test_app/literal.rb +0 -35
  333. data/test_app/spec/spec_helper.rb +0 -9
  334. data/test_app/spec/unit/test_app/literal_spec.rb +0 -20
  335. data/test_app/test/unit/test_app/literal_test.rb +0 -16
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Mutant::Meta::Example.add :str do
4
- source '"foo"'
5
-
6
- singleton_mutations
7
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Mutant::Meta::Example.add :super do
4
- source 'super'
5
-
6
- singleton_mutations
7
- mutation 'super()'
8
- end
9
-
10
- Mutant::Meta::Example.add :super do
11
- source 'super()'
12
-
13
- singleton_mutations
14
- end
15
-
16
- Mutant::Meta::Example.add :super do
17
- source 'super(foo, bar)'
18
-
19
- singleton_mutations
20
- mutation 'super()'
21
- mutation 'super(foo)'
22
- mutation 'super(bar)'
23
- mutation 'super(foo, nil)'
24
- mutation 'super(foo, self)'
25
- mutation 'super(nil, bar)'
26
- mutation 'super(self, bar)'
27
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Mutant::Meta::Example.add :sym do
4
- source ':foo'
5
-
6
- singleton_mutations
7
- mutation ':foo__mutant__'
8
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Mutant::Meta::Example.add :true do
4
- source 'true'
5
-
6
- mutation 'nil'
7
- mutation 'false'
8
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Mutant::Meta::Example.add :until do
4
- source 'until true; foo; bar; end'
5
-
6
- singleton_mutations
7
- mutation 'until true; bar; end'
8
- mutation 'until true; foo; end'
9
- mutation 'until true; end'
10
- mutation 'until false; foo; bar; end'
11
- mutation 'until nil; foo; bar; end'
12
- mutation 'until true; foo; nil; end'
13
- mutation 'until true; foo; self; end'
14
- mutation 'until true; nil; bar; end'
15
- mutation 'until true; self; bar; end'
16
- mutation 'until true; raise; end'
17
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Mutant::Meta::Example.add :while do
4
- source 'while true; foo; bar; end'
5
-
6
- singleton_mutations
7
- mutation 'while true; self; bar; end'
8
- mutation 'while true; foo; self; end'
9
- mutation 'while true; bar; end'
10
- mutation 'while true; foo; end'
11
- mutation 'while true; end'
12
- mutation 'while false; foo; bar; end'
13
- mutation 'while nil; foo; bar; end'
14
- mutation 'while true; foo; nil; end'
15
- mutation 'while true; nil; bar; end'
16
- mutation 'while true; raise; end'
17
- end
18
-
19
- Mutant::Meta::Example.add :while do
20
- source 'while true; end'
21
-
22
- singleton_mutations
23
- mutation 'while true; raise; end'
24
- mutation 'while false; end'
25
- mutation 'while nil; end'
26
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- Mutant::Meta::Example.add :yield do
4
- source 'yield true'
5
-
6
- singleton_mutations
7
- mutation 'yield false'
8
- mutation 'yield nil'
9
- mutation 'yield'
10
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require File.expand_path('lib/mutant/version', __dir__)
4
-
5
- Gem::Specification.new do |gem|
6
- gem.name = 'mutant-minitest'
7
- gem.version = Mutant::VERSION.dup
8
- gem.authors = ['Markus Schirp']
9
- gem.email = %w[mbj@schirp-dso.com]
10
- gem.description = 'Minitest integration for mutant'
11
- gem.summary = gem.description
12
- gem.homepage = 'https://github.com/mbj/mutant'
13
- gem.license = 'Nonstandard'
14
-
15
- gem.require_paths = %w[lib]
16
- gem.files = `git ls-files -- lib/mutant/{minitest,/integration/minitest.rb}`.split("\n")
17
- gem.test_files = `git ls-files -- spec/integration/mutant/minitest.rb`.split("\n")
18
- gem.extra_rdoc_files = %w[LICENSE]
19
-
20
- gem.add_runtime_dependency('minitest', '~> 5.11')
21
- gem.add_runtime_dependency('mutant', "~> #{gem.version}")
22
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require File.expand_path('lib/mutant/version', __dir__)
4
-
5
- Gem::Specification.new do |gem|
6
- gem.name = 'mutant-rspec'
7
- gem.version = Mutant::VERSION.dup
8
- gem.authors = ['Markus Schirp']
9
- gem.email = ['mbj@schirp-dso.com']
10
- gem.description = 'Rspec integration for mutant'
11
- gem.summary = gem.description
12
- gem.homepage = 'https://github.com/mbj/mutant'
13
- gem.license = 'Nonstandard'
14
-
15
- gem.require_paths = %w[lib]
16
- gem.files = `git ls-files -- lib/mutant/integration/rspec.rb`.split("\n")
17
- gem.test_files = `git ls-files -- spec/{integration,unit}/mutant/rspec_spec.rb}`.split("\n")
18
- gem.extra_rdoc_files = %w[LICENSE]
19
-
20
- gem.add_runtime_dependency('mutant', "~> #{gem.version}")
21
- gem.add_runtime_dependency('rspec-core', '>= 3.8.0', '< 4.0.0')
22
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require File.expand_path('lib/mutant/version', __dir__)
4
-
5
- Gem::Specification.new do |gem|
6
- gem.name = 'mutant'
7
- gem.version = Mutant::VERSION.dup
8
- gem.authors = ['Markus Schirp']
9
- gem.email = ['mbj@schirp-dso.com']
10
- gem.description = 'Mutation Testing for Ruby.'
11
- gem.summary = ''
12
- gem.homepage = 'https://github.com/mbj/mutant'
13
- gem.license = 'Nonstandard'
14
-
15
- gem.require_paths = %w[lib]
16
-
17
- exclusion = `git ls-files -- lib/mutant/{integration/{minitest,rspec}.rb,minitest}`.split("\n")
18
-
19
- gem.files = `git ls-files`.split("\n") - exclusion
20
- gem.test_files = `git ls-files -- spec/{unit,integration}`.split("\n")
21
- gem.extra_rdoc_files = %w[LICENSE]
22
- gem.executables = %w[mutant]
23
-
24
- gem.add_runtime_dependency('abstract_type', '~> 0.0.7')
25
- gem.add_runtime_dependency('adamantium', '~> 0.2.0')
26
- gem.add_runtime_dependency('anima', '~> 0.3.1')
27
- gem.add_runtime_dependency('ast', '~> 2.2')
28
- gem.add_runtime_dependency('concord', '~> 0.1.5')
29
- gem.add_runtime_dependency('diff-lcs', '= 1.3')
30
- gem.add_runtime_dependency('equalizer', '~> 0.0.9')
31
- gem.add_runtime_dependency('ice_nine', '~> 0.11.1')
32
- gem.add_runtime_dependency('memoizable', '~> 0.4.2')
33
- gem.add_runtime_dependency('mprelude', '~> 0.1.0')
34
- gem.add_runtime_dependency('parser', '~> 2.7.1')
35
- gem.add_runtime_dependency('procto', '~> 0.0.2')
36
- gem.add_runtime_dependency('unparser', '~> 0.4.6')
37
- gem.add_runtime_dependency('variable', '~> 0.0.1')
38
-
39
- gem.add_development_dependency('devtools', '~> 0.1.25')
40
- gem.add_development_dependency('parallel', '~> 1.3')
41
- end
data/mutant.yml DELETED
@@ -1,6 +0,0 @@
1
- ---
2
- includes:
3
- - lib
4
- integration: rspec
5
- requires:
6
- - mutant
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe 'Mutant on ruby corpus', mutant: false do
4
- MutantSpec::Corpus::Project::ALL.select(&:mutation_generation).each do |project|
5
- specify "#{project.name} does not fail on mutation generation" do
6
- project.verify_mutation_generation
7
- end
8
- end
9
-
10
- MutantSpec::Corpus::Project::ALL.select(&:mutation_coverage).each do |project|
11
- specify "#{project.name} (#{project.integration}) does have expected mutation coverage" do
12
- project.verify_mutation_coverage
13
- end
14
- end
15
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Isolation::Fork, mutant: false do
4
- def apply(&block)
5
- Mutant::Config::DEFAULT.isolation.call(&block)
6
- end
7
-
8
- it 'isolates local writes' do
9
- a = 1
10
-
11
- expect { apply { a = 2 } }.to_not(change { a }.from(1))
12
- end
13
-
14
- it 'captures console output' do
15
- result = apply do
16
- $stdout.puts('foo')
17
- $stderr.puts('bar')
18
- end
19
-
20
- expect(result.log).to eql("foo\nbar\n")
21
- end
22
-
23
- it 'allows to read result' do
24
- result = apply { :foo }
25
-
26
- expect(result.value).to eql(:foo)
27
- end
28
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe 'minitest integration', mutant: false do
4
- let(:base_cmd) do
5
- %w[bundle exec mutant -I test -I lib --require test_app --use minitest]
6
- end
7
-
8
- let(:gemfile) { 'Gemfile.minitest' }
9
-
10
- it_behaves_like 'framework integration'
11
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe 'null integration', mutant: false do
4
-
5
- let(:base_cmd) { 'bundle exec mutant -I lib --require test_app "TestApp*"' }
6
-
7
- around do |example|
8
- Dir.chdir(TestApp.root) do
9
- example.run
10
- end
11
- end
12
-
13
- specify 'it allows to kill mutations' do
14
- expect(Kernel.system(base_cmd)).to be(false)
15
- end
16
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe 'rspec integration', mutant: false do
4
- let(:base_cmd) do
5
- %w[bundle exec mutant -I lib --require test_app --use rspec]
6
- end
7
-
8
- %w[3.8].each do |version|
9
- context "RSpec #{version}" do
10
- let(:gemfile) { "Gemfile.rspec#{version}" }
11
-
12
- it_behaves_like 'framework integration'
13
- end
14
- end
15
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe 'AST type coverage', mutant: false do
4
- specify 'mutant should not crash for any node parser can generate' do
5
- Mutant::AST::Types::ALL.each do |type|
6
- Mutant::Mutator::REGISTRY.lookup(type)
7
- end
8
- end
9
- end
@@ -1,63 +0,0 @@
1
- ---
2
- - name: rubyspec
3
- namespace: Rubyspec
4
- repo_uri: 'https://github.com/ruby/rubyspec.git'
5
- repo_ref: 249a36c2e9fcddbb208a0d618d05f6bd9a64fd17
6
- integration: mspec
7
- mutation_coverage: false
8
- mutation_generation: true
9
- exclude:
10
- - command_line/fixtures/bad_syntax.rb
11
- - command_line/fixtures/freeze_flag_required_diff_enc.rb
12
- - core/file/stat_spec.rb
13
- - core/kernel/shared/sprintf_encoding.rb
14
- - core/module/fixtures/autoload_empty.rb
15
- - core/module/fixtures/autoload_never_set.rb
16
- - core/module/fixtures/path2/load_path.rb
17
- - core/regexp/shared/new.rb
18
- - core/string/casecmp_spec.rb
19
- - core/string/encode_spec.rb
20
- - core/string/inspect_spec.rb
21
- - core/string/shared/to_sym.rb
22
- - core/symbol/casecmp_spec.rb
23
- - language/fixtures/freeze_magic_comment_required_diff_enc.rb
24
- - language/fixtures/utf16-be-nobom.rb
25
- - language/fixtures/utf16-le-nobom.rb
26
- - language/predefined/fixtures/data4.rb
27
- - language/predefined/fixtures/data_only.rb
28
- - language/source_encoding_spec.rb
29
- - library/base64/decode64_spec.rb
30
- - library/cgi/escapeHTML_spec.rb
31
- - security/cve_2010_1330_spec.rb
32
- - name: regexp_parser
33
- namespace: Regexp
34
- repo_uri: 'https://github.com/ammar/regexp_parser.git'
35
- repo_ref: 'v1.2.0'
36
- integration: rspec
37
- mutation_coverage: false
38
- mutation_generation: true
39
- exclude: []
40
- - name: auom
41
- namespace: AUOM
42
- repo_uri: 'https://github.com/mbj/auom.git'
43
- repo_ref: 'origin/master'
44
- integration: rspec
45
- mutation_coverage: true
46
- mutation_generation: true
47
- exclude: []
48
- - name: auom
49
- namespace: AUOM
50
- repo_uri: 'https://github.com/mbj/auom.git'
51
- repo_ref: 'origin/master'
52
- integration: minitest
53
- mutation_coverage: true
54
- mutation_generation: true
55
- exclude: []
56
- - name: axiom
57
- namespace: Axiom
58
- repo_uri: 'https://github.com/dkubb/axiom.git'
59
- repo_ref: 'origin/master'
60
- integration: rspec
61
- mutation_coverage: false
62
- mutation_generation: true
63
- exclude: []
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.shared_examples 'no block evaluation' do
4
- context 'with block' do
5
- let(:block) { -> { fail } }
6
-
7
- it 'does not evaluate block' do
8
- apply
9
- end
10
- end
11
- end
12
-
13
- RSpec.shared_examples 'requires block' do
14
- context 'without block' do
15
- let(:block) { nil }
16
-
17
- specify do
18
- expect { apply }.to raise_error(LocalJumpError)
19
- end
20
- end
21
- end
22
-
23
- RSpec.shared_examples 'returns self' do
24
- it 'returns self' do
25
- expect(apply).to be(subject)
26
- end
27
- end
28
-
29
- RSpec.shared_examples '#apply block evaluation' do
30
- it 'evaluates block and returns its wrapped result' do
31
- expect { expect(apply).to eql(block_result) }
32
- .to change(yields, :to_a)
33
- .from([])
34
- .to([value])
35
- end
36
- end
37
-
38
- RSpec.shared_examples 'Functor#fmap block evaluation' do
39
- it 'evaluates block and returns its wrapped result' do
40
- expect { expect(apply).to eql(described_class.new(block_result)) }
41
- .to change(yields, :to_a)
42
- .from([])
43
- .to([value])
44
- end
45
- end
@@ -1,70 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.shared_examples_for 'framework integration' do
4
- def system_with_gemfile(*command)
5
- Kernel.system(
6
- {
7
- 'CI' => '1',
8
- 'BUNDLE_GEMFILE' => gemfile
9
- },
10
- *command
11
- )
12
- end
13
-
14
- around do |example|
15
- Bundler.with_clean_env do
16
- Dir.chdir(TestApp.root) do
17
- Kernel.system('bundle', 'install', '--gemfile', gemfile) || fail('Bundle install failed!')
18
- example.run
19
- end
20
- end
21
- end
22
-
23
- let(:effective_base_cmd) do
24
- if ENV.key?('MUTANT_JOBS')
25
- [*base_cmd, '--jobs', ENV.fetch('MUTANT_JOBS')]
26
- else
27
- base_cmd
28
- end
29
- end
30
-
31
- specify 'it allows to kill mutations' do
32
- expect(
33
- system_with_gemfile(
34
- *effective_base_cmd,
35
- 'TestApp::Literal#string'
36
- )
37
- ).to be(true)
38
- end
39
-
40
- specify 'it allows to exclude mutations' do
41
- expect(
42
- system_with_gemfile(
43
- *effective_base_cmd,
44
- '--ignore-subject',
45
- 'TestApp::Literal#uncovered_string',
46
- '--',
47
- 'TestApp::Literal#string',
48
- 'TestApp::Literal#uncovered_string'
49
- )
50
- ).to be(true)
51
- end
52
-
53
- specify 'fails to kill mutations when they are not covered' do
54
- expect(
55
- system_with_gemfile(
56
- *effective_base_cmd,
57
- 'TestApp::Literal#uncovered_string'
58
- )
59
- ).to be(false)
60
- end
61
-
62
- specify 'fails when some mutations are not covered' do
63
- expect(
64
- system_with_gemfile(
65
- *effective_base_cmd,
66
- 'TestApp::Literal'
67
- )
68
- ).to be(false)
69
- end
70
- end