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,115 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Parallel do
4
- describe '.async' do
5
- def apply
6
- described_class.async(config)
7
- end
8
-
9
- let(:condition_variable) { class_double(ConditionVariable) }
10
- let(:jobs) { 2 }
11
- let(:mutex) { class_double(Mutex) }
12
- let(:processor) { instance_double(Proc) }
13
- let(:sink) { instance_double(described_class::Sink) }
14
- let(:source) { instance_double(described_class::Source) }
15
- let(:thread) { class_double(Thread) }
16
- let(:thread_a) { instance_double(Thread) }
17
- let(:thread_b) { instance_double(Thread) }
18
- let(:worker) { -> {} }
19
-
20
- let(:config) do
21
- Mutant::Parallel::Config.new(
22
- condition_variable: condition_variable,
23
- jobs: jobs,
24
- mutex: mutex,
25
- processor: processor,
26
- sink: sink,
27
- source: source,
28
- thread: thread
29
- )
30
- end
31
-
32
- let(:var_active_jobs) do
33
- instance_double(Variable::IVar, 'active jobs')
34
- end
35
-
36
- let(:var_final) do
37
- instance_double(Variable::IVar, 'final')
38
- end
39
-
40
- let(:var_running) do
41
- instance_double(Variable::MVar, 'running')
42
- end
43
-
44
- let(:var_sink) do
45
- instance_double(Variable::IVar, 'sink')
46
- end
47
-
48
- let(:var_source) do
49
- instance_double(Variable::IVar, 'source')
50
- end
51
-
52
- def ivar(value, **attributes)
53
- {
54
- receiver: Variable::IVar,
55
- selector: :new,
56
- arguments: [
57
- condition_variable: condition_variable,
58
- mutex: mutex,
59
- **attributes
60
- ],
61
- reaction: { return: value }
62
- }
63
- end
64
-
65
- def mvar(*arguments)
66
- ivar(*arguments).merge(receiver: Variable::MVar)
67
- end
68
-
69
- let(:raw_expectations) do
70
- [
71
- ivar(var_active_jobs, value: Set.new),
72
- ivar(var_final),
73
- ivar(var_sink, value: sink),
74
- mvar(var_running, value: 2),
75
- ivar(var_source, value: source),
76
- {
77
- receiver: Mutant::Parallel::Worker,
78
- selector: :new,
79
- arguments: [
80
- processor: processor,
81
- var_active_jobs: var_active_jobs,
82
- var_final: var_final,
83
- var_running: var_running,
84
- var_sink: var_sink,
85
- var_source: var_source
86
- ],
87
- reaction: { return: worker }
88
- },
89
- {
90
- receiver: thread,
91
- selector: :new,
92
- reaction: { yields: [], return: thread_a }
93
- },
94
- {
95
- receiver: thread,
96
- selector: :new,
97
- reaction: { yields: [], return: thread_b }
98
- }
99
- ]
100
- end
101
-
102
- it 'returns driver' do
103
- verify_events do
104
- expect(apply).to eql(
105
- described_class::Driver.new(
106
- threads: [thread_a, thread_b],
107
- var_active_jobs: var_active_jobs,
108
- var_final: var_final,
109
- var_sink: var_sink
110
- )
111
- )
112
- end
113
- end
114
- end
115
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Parser do
4
- let(:object) { described_class.new }
5
-
6
- describe '#call' do
7
- let(:path) { instance_double(Pathname) }
8
-
9
- subject { object.call(path) }
10
-
11
- before do
12
- expect(path).to receive(:read)
13
- .with(no_args)
14
- .and_return(':source')
15
- end
16
-
17
- it 'returns parsed source' do
18
- expect(subject).to eql(s(:sym, :source))
19
- end
20
-
21
- it 'is idempotent' do
22
- source = object.call(path)
23
- expect(subject).to be(source)
24
- end
25
- end
26
- end
@@ -1,141 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Mutant::Range do
4
- describe '.overlap?' do
5
- def apply
6
- described_class.overlap?(left, right)
7
- end
8
-
9
- context 'no overlap left before right' do
10
- # |---|
11
- # |---|
12
- let(:left) { 1..2 }
13
- let(:right) { 3..4 }
14
-
15
- it 'returns false' do
16
- expect(apply).to be(false)
17
- end
18
- end
19
-
20
- context 'no overlap right before left' do
21
- # |---|
22
- # |---|
23
- let(:left) { 3..4 }
24
- let(:right) { 1..2 }
25
-
26
- it 'returns false' do
27
- expect(apply).to be(false)
28
- end
29
- end
30
-
31
- context 'left includes right' do
32
- # |----------------|
33
- # |---|
34
- let(:left) { 1..4 }
35
- let(:right) { 2..3 }
36
-
37
- it 'returns true' do
38
- expect(apply).to be(true)
39
- end
40
- end
41
-
42
- context 'right includes left' do
43
- # |---|
44
- # |----------------|
45
- let(:left) { 2..3 }
46
- let(:right) { 1..4 }
47
-
48
- it 'returns true' do
49
- expect(apply).to be(true)
50
- end
51
- end
52
-
53
- context 'right starts with left end' do
54
- # |----|
55
- # |----|
56
- let(:left) { 1..2 }
57
- let(:right) { 2..3 }
58
-
59
- it 'returns true' do
60
- expect(apply).to be(true)
61
- end
62
- end
63
-
64
- context 'left starts with right end' do
65
- # |----|
66
- # |----|
67
- let(:left) { 2..3 }
68
- let(:right) { 1..2 }
69
-
70
- it 'returns true' do
71
- expect(apply).to be(true)
72
- end
73
- end
74
-
75
- context 'left starts with right start' do
76
- # |----|
77
- # |---------|
78
- let(:left) { 1..2 }
79
- let(:right) { 1..3 }
80
-
81
- it 'returns true' do
82
- expect(apply).to be(true)
83
- end
84
- end
85
-
86
- context 'left starts with right start' do
87
- # |---------|
88
- # |----|
89
- let(:left) { 1..3 }
90
- let(:right) { 1..2 }
91
-
92
- it 'returns true' do
93
- expect(apply).to be(true)
94
- end
95
- end
96
-
97
- context 'left ends with right end' do
98
- # |----|
99
- # |---------|
100
- let(:left) { 2..3 }
101
- let(:right) { 1..3 }
102
-
103
- it 'returns true' do
104
- expect(apply).to be(true)
105
- end
106
- end
107
-
108
- context 'right ends with left end' do
109
- # |---------|
110
- # |----|
111
- let(:left) { 1..3 }
112
- let(:right) { 2..3 }
113
-
114
- it 'returns true' do
115
- expect(apply).to be(true)
116
- end
117
- end
118
-
119
- context 'left end intersects with right' do
120
- # |---------|
121
- # |----------|
122
- let(:left) { 1..3 }
123
- let(:right) { 2..4 }
124
-
125
- it 'returns true' do
126
- expect(apply).to be(true)
127
- end
128
- end
129
-
130
- context 'right end intersects with left' do
131
- # |----------|
132
- # |---------|
133
- let(:left) { 2..4 }
134
- let(:right) { 1..2 }
135
-
136
- it 'returns true' do
137
- expect(apply).to be(true)
138
- end
139
- end
140
- end
141
- end
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Registry do
4
- let(:mutator) { class_double(Mutant::Mutator) }
5
- let(:object) { described_class.new }
6
-
7
- describe '#lookup' do
8
- subject { object.lookup(type) }
9
-
10
- def register
11
- object.register(type, mutator)
12
- end
13
-
14
- context 'on known type' do
15
- let(:type) { :true }
16
-
17
- it 'returns registered' do
18
- register
19
- expect(subject).to be(mutator)
20
- end
21
- end
22
-
23
- context 'on unknown type' do
24
- let(:type) { :unknown }
25
-
26
- it 'returns genericm mutator' do
27
- expect(subject).to be(Mutant::Mutator::Node::Generic)
28
- end
29
- end
30
- end
31
-
32
- describe '#register' do
33
- subject { object.register(type, mutator) }
34
-
35
- def lookup
36
- subject.lookup(type)
37
- end
38
-
39
- context 'on registered type' do
40
- let(:type) { :true }
41
-
42
- it_behaves_like 'a command method'
43
-
44
- it 'allows to lookup the mutator' do
45
- subject
46
- expect(lookup).to be(mutator)
47
- end
48
-
49
- context 'when registering twice' do
50
- it 'fails upon registration' do
51
- object.register(type, mutator)
52
-
53
- expect { subject }
54
- .to raise_error(
55
- described_class::RegistryError,
56
- 'Duplicate type registration: :true'
57
- )
58
- end
59
- end
60
- end
61
-
62
- context 'when registering an invalid node type' do
63
- let(:type) { :invalid }
64
-
65
- it 'raises error' do
66
- expect { subject }
67
- .to raise_error(
68
- described_class::RegistryError,
69
- 'Invalid type registration: :invalid'
70
- )
71
- end
72
- end
73
- end
74
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI::Printer::Config do
4
- setup_shared_context
5
-
6
- let(:reportable) { config }
7
-
8
- describe '.call' do
9
- it_reports(<<~'REPORT')
10
- Matcher: #<Mutant::Matcher::Config empty>
11
- Integration: null
12
- Jobs: 1
13
- Includes: []
14
- Requires: []
15
- REPORT
16
- end
17
- end
@@ -1,85 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Reporter::CLI::Printer::EnvProgress do
4
- setup_shared_context
5
-
6
- let(:reportable) { env_result }
7
-
8
- describe '.call' do
9
- context 'without progress' do
10
- with(:subject_a_result) { { mutation_results: [] } }
11
-
12
- it_reports <<~'STR'
13
- Mutant environment:
14
- Matcher: #<Mutant::Matcher::Config empty>
15
- Integration: null
16
- Jobs: 1
17
- Includes: []
18
- Requires: []
19
- Subjects: 1
20
- Total-Tests: 1
21
- Selected-Tests: 1
22
- Tests/Subject: 1.00 avg
23
- Mutations: 2
24
- Results: 0
25
- Kills: 0
26
- Alive: 0
27
- Runtime: 4.00s
28
- Killtime: 0.00s
29
- Overhead: Inf%
30
- Mutations/s: 0.00
31
- Coverage: 100.00%
32
- STR
33
- end
34
-
35
- context 'on full coverage' do
36
- it_reports <<~'STR'
37
- Mutant environment:
38
- Matcher: #<Mutant::Matcher::Config empty>
39
- Integration: null
40
- Jobs: 1
41
- Includes: []
42
- Requires: []
43
- Subjects: 1
44
- Total-Tests: 1
45
- Selected-Tests: 1
46
- Tests/Subject: 1.00 avg
47
- Mutations: 2
48
- Results: 2
49
- Kills: 2
50
- Alive: 0
51
- Runtime: 4.00s
52
- Killtime: 2.00s
53
- Overhead: 100.00%
54
- Mutations/s: 0.50
55
- Coverage: 100.00%
56
- STR
57
- end
58
-
59
- context 'on partial coverage' do
60
- with(:mutation_a_test_result) { { passed: true } }
61
-
62
- it_reports <<~'STR'
63
- Mutant environment:
64
- Matcher: #<Mutant::Matcher::Config empty>
65
- Integration: null
66
- Jobs: 1
67
- Includes: []
68
- Requires: []
69
- Subjects: 1
70
- Total-Tests: 1
71
- Selected-Tests: 1
72
- Tests/Subject: 1.00 avg
73
- Mutations: 2
74
- Results: 2
75
- Kills: 1
76
- Alive: 1
77
- Runtime: 4.00s
78
- Killtime: 2.00s
79
- Overhead: 100.00%
80
- Mutations/s: 0.50
81
- Coverage: 50.00%
82
- STR
83
- end
84
- end
85
- end