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,111 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Result::Subject do
4
- let(:object) do
5
- described_class.new(
6
- subject: mutation_subject,
7
- mutation_results: mutation_results,
8
- tests: []
9
- )
10
- end
11
-
12
- let(:mutation_subject) do
13
- instance_double(
14
- Mutant::Subject,
15
- mutations: mutation_results.map { instance_double(Mutant::Mutation) }
16
- )
17
- end
18
-
19
- shared_context 'full coverage' do
20
- let(:mutation_results) do
21
- [
22
- instance_double(Mutant::Result::Mutation, success?: true)
23
- ]
24
- end
25
- end
26
-
27
- shared_context 'partial coverage' do
28
- let(:mutation_results) do
29
- [
30
- instance_double(Mutant::Result::Mutation, success?: false),
31
- instance_double(Mutant::Result::Mutation, success?: true)
32
- ]
33
- end
34
- end
35
-
36
- shared_context 'no coverage' do
37
- let(:mutation_results) do
38
- [
39
- instance_double(Mutant::Result::Mutation, success?: false)
40
- ]
41
- end
42
- end
43
-
44
- shared_context 'no results' do
45
- let(:mutation_results) { [] }
46
- end
47
-
48
- describe '#coverage' do
49
- subject { object.coverage }
50
-
51
- {
52
- 'full coverage' => 1r,
53
- 'partial coverage' => 0.5r,
54
- 'no coverage' => 0r,
55
- 'no results' => 1r
56
- }.each do |name, expected|
57
- context(name) do
58
- include_context(name)
59
- it { should eql(expected) }
60
- end
61
- end
62
- end
63
-
64
- describe '#amount_mutations' do
65
- subject { object.amount_mutations }
66
-
67
- {
68
- 'full coverage' => 1,
69
- 'partial coverage' => 2,
70
- 'no coverage' => 1,
71
- 'no results' => 0
72
- }.each do |name, expected|
73
- context(name) do
74
- include_context(name)
75
- it { should be(expected) }
76
- end
77
- end
78
- end
79
-
80
- describe '#amount_mutations_alive' do
81
- subject { object.amount_mutations_alive }
82
-
83
- {
84
- 'full coverage' => 0,
85
- 'partial coverage' => 1,
86
- 'no coverage' => 1,
87
- 'no results' => 0
88
- }.each do |name, expected|
89
- context(name) do
90
- include_context(name)
91
- it { should be(expected) }
92
- end
93
- end
94
- end
95
-
96
- describe '#success?' do
97
- subject { object.success? }
98
-
99
- {
100
- 'full coverage' => true,
101
- 'partial coverage' => false,
102
- 'no coverage' => false,
103
- 'no results' => true
104
- }.each do |name, expected|
105
- context(name) do
106
- include_context(name)
107
- it { should be(expected) }
108
- end
109
- end
110
- end
111
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Result::Test::VoidValue do
4
- describe '.new' do
5
- it 'returns expected attributes' do
6
- expect(described_class.instance.to_h).to eql(
7
- output: '',
8
- passed: false,
9
- runtime: 0.0,
10
- tests: []
11
- )
12
- end
13
- end
14
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Result do
4
- let(:object) do
5
- Class.new do
6
- include Mutant::Result, Concord.new(:runtime, :killtime)
7
-
8
- def collection
9
- [[1]]
10
- end
11
-
12
- sum :length, :collection
13
- end.new(3.0, 1.0)
14
- end
15
-
16
- describe '.included' do
17
- it 'includes mixin to freeze instances' do
18
- expect(object.frozen?).to be(true)
19
- end
20
-
21
- it 'it makes DSL methods from Mutant::Result available' do
22
- expect(object.length).to be(1)
23
- end
24
- end
25
-
26
- describe '#overhead' do
27
- subject { object.overhead }
28
-
29
- it 'returns difference between runtime and killtime' do
30
- should eql(2.0)
31
- end
32
- end
33
- end
@@ -1,174 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe Mutant::Runner::Sink do
4
- setup_shared_context
5
-
6
- shared_context 'one result' do
7
- before do
8
- object.result(mutation_a_result)
9
- end
10
- end
11
-
12
- shared_context 'two results' do
13
- before do
14
- object.result(mutation_a_result)
15
- object.result(mutation_b_result)
16
- end
17
- end
18
-
19
- let(:object) { described_class.new(env) }
20
-
21
- before do
22
- allow(Mutant::Timer).to receive_messages(now: Mutant::Timer.now)
23
- end
24
-
25
- describe '#result' do
26
- subject { object.result(mutation_a_result) }
27
-
28
- it 'aggregates results in #status' do
29
- subject
30
- object.result(mutation_b_result)
31
- expect(object.status).to eql(
32
- Mutant::Result::Env.new(
33
- env: env,
34
- runtime: 0.0,
35
- subject_results: [subject_a_result]
36
- )
37
- )
38
- end
39
-
40
- it_should_behave_like 'a command method'
41
- end
42
-
43
- describe '#status' do
44
- subject { object.status }
45
-
46
- context 'no results' do
47
- let(:expected_status) do
48
- Mutant::Result::Env.new(
49
- env: env,
50
- runtime: 0.0,
51
- subject_results: []
52
- )
53
- end
54
-
55
- it { should eql(expected_status) }
56
- end
57
-
58
- context 'one result' do
59
- include_context 'one result'
60
-
61
- with(:subject_a_result) { { mutation_results: [mutation_a_result] } }
62
-
63
- let(:expected_status) do
64
- Mutant::Result::Env.new(
65
- env: env,
66
- runtime: 0.0,
67
- subject_results: [subject_a_result]
68
- )
69
- end
70
-
71
- it { should eql(expected_status) }
72
- end
73
-
74
- context 'two results' do
75
- include_context 'two results'
76
-
77
- let(:expected_status) do
78
- Mutant::Result::Env.new(
79
- env: env,
80
- runtime: 0.0,
81
- subject_results: [subject_a_result]
82
- )
83
- end
84
-
85
- it { should eql(expected_status) }
86
- end
87
- end
88
-
89
- describe '#stop?' do
90
- subject { object.stop? }
91
-
92
- context 'without fail fast' do
93
- context 'no results' do
94
- it { should be(false) }
95
- end
96
-
97
- context 'one result' do
98
- include_context 'one result'
99
-
100
- context 'when result is successful' do
101
- it { should be(false) }
102
- end
103
-
104
- context 'when result failed' do
105
- with(:mutation_a_test_result) { { passed: true } }
106
-
107
- it { should be(false) }
108
- end
109
- end
110
-
111
- context 'two results' do
112
- include_context 'two results'
113
-
114
- context 'when results are successful' do
115
- it { should be(false) }
116
- end
117
-
118
- context 'when first result is unsuccessful' do
119
- with(:mutation_a_test_result) { { passed: true } }
120
-
121
- it { should be(false) }
122
- end
123
-
124
- context 'when second result is unsuccessful' do
125
- with(:mutation_b_test_result) { { passed: true } }
126
-
127
- it { should be(false) }
128
- end
129
- end
130
- end
131
-
132
- context 'with fail fast' do
133
- with(:config) { { fail_fast: true } }
134
-
135
- context 'no results' do
136
- it { should be(false) }
137
- end
138
-
139
- context 'one result' do
140
- include_context 'one result'
141
-
142
- context 'when result is successful' do
143
- it { should be(false) }
144
- end
145
-
146
- context 'when result failed' do
147
- with(:mutation_a_test_result) { { passed: true } }
148
-
149
- it { should be(true) }
150
- end
151
- end
152
-
153
- context 'two results' do
154
- include_context 'two results'
155
-
156
- context 'when results are successful' do
157
- it { should be(false) }
158
- end
159
-
160
- context 'when first result is unsuccessful' do
161
- with(:mutation_a_test_result) { { passed: true } }
162
-
163
- it { should be(true) }
164
- end
165
-
166
- context 'when second result is unsuccessful' do
167
- with(:mutation_b_test_result) { { passed: true } }
168
-
169
- it { should be(true) }
170
- end
171
- end
172
- end
173
- end
174
- end
@@ -1,121 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Runner do
4
- describe '.call' do
5
- let(:condition_variable) { class_double(ConditionVariable) }
6
- let(:delay) { instance_double(Float) }
7
- let(:driver) { instance_double(Mutant::Parallel::Driver) }
8
- let(:env_result) { instance_double(Mutant::Result::Env) }
9
- let(:kernel) { class_double(Kernel) }
10
- let(:mutex) { class_double(Mutex) }
11
- let(:processor) { instance_double(Method) }
12
- let(:reporter) { instance_double(Mutant::Reporter, delay: delay) }
13
- let(:thread) { class_double(Thread) }
14
-
15
- let(:env) do
16
- instance_double(
17
- Mutant::Env,
18
- config: config,
19
- mutations: [],
20
- world: world
21
- )
22
- end
23
-
24
- let(:config) do
25
- instance_double(
26
- Mutant::Config,
27
- jobs: 1,
28
- reporter: reporter
29
- )
30
- end
31
-
32
- let(:world) do
33
- instance_double(
34
- Mutant::World,
35
- condition_variable: condition_variable,
36
- kernel: kernel,
37
- mutex: mutex,
38
- thread: thread
39
- )
40
- end
41
-
42
- let(:status_a) do
43
- instance_double(
44
- Mutant::Parallel::Status,
45
- done?: false
46
- )
47
- end
48
-
49
- let(:status_b) do
50
- instance_double(
51
- Mutant::Parallel::Status,
52
- done?: true,
53
- payload: env_result
54
- )
55
- end
56
-
57
- let(:parallel_config) do
58
- Mutant::Parallel::Config.new(
59
- condition_variable: condition_variable,
60
- jobs: 1,
61
- mutex: mutex,
62
- processor: processor,
63
- sink: Mutant::Runner::Sink.new(env),
64
- source: Mutant::Parallel::Source::Array.new(env.mutations),
65
- thread: thread
66
- )
67
- end
68
-
69
- def apply
70
- described_class.apply(env)
71
- end
72
-
73
- let(:raw_expectations) do
74
- [
75
- {
76
- receiver: reporter,
77
- selector: :start,
78
- arguments: [env]
79
- },
80
- {
81
- receiver: env,
82
- selector: :method,
83
- arguments: [:kill],
84
- reaction: { return: processor }
85
- },
86
- {
87
- receiver: Mutant::Parallel,
88
- selector: :async,
89
- arguments: [parallel_config],
90
- reaction: { return: driver }
91
- },
92
- {
93
- receiver: driver,
94
- selector: :wait_timeout,
95
- arguments: [delay],
96
- reaction: { return: status_a }
97
- },
98
- {
99
- receiver: reporter,
100
- selector: :progress,
101
- arguments: [status_a]
102
- },
103
- {
104
- receiver: driver,
105
- selector: :wait_timeout,
106
- arguments: [delay],
107
- reaction: { return: status_b }
108
- },
109
- {
110
- receiver: reporter,
111
- selector: :report,
112
- arguments: [env_result]
113
- }
114
- ]
115
- end
116
-
117
- it 'returns env result' do
118
- verify_events { expect(apply).to eql(Mutant::Either::Right.new(env_result)) }
119
- end
120
- end
121
- end