mutant 0.9.7 → 0.9.12

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 (336) 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 +0 -36
  7. data/lib/mutant/cli.rb +5 -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 +0 -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 -74
  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/registry.rb +2 -7
  97. data/lib/mutant/reporter/cli.rb +0 -5
  98. data/lib/mutant/reporter/cli/format.rb +0 -9
  99. data/lib/mutant/reporter/cli/printer.rb +2 -42
  100. data/lib/mutant/reporter/cli/printer/env_progress.rb +0 -15
  101. data/lib/mutant/reporter/cli/printer/isolation_result.rb +0 -18
  102. data/lib/mutant/reporter/cli/printer/mutation_progress_result.rb +0 -5
  103. data/lib/mutant/reporter/cli/printer/mutation_result.rb +1 -22
  104. data/lib/mutant/reporter/cli/printer/status_progressive.rb +0 -8
  105. data/lib/mutant/reporter/cli/printer/subject_progress.rb +0 -9
  106. data/lib/mutant/repository/diff.rb +1 -13
  107. data/lib/mutant/repository/diff/ranges.rb +0 -11
  108. data/lib/mutant/result.rb +0 -3
  109. data/lib/mutant/runner.rb +0 -18
  110. data/lib/mutant/runner/sink.rb +0 -5
  111. data/lib/mutant/subject.rb +0 -8
  112. data/lib/mutant/subject/method.rb +0 -3
  113. data/lib/mutant/subject/method/instance.rb +40 -6
  114. data/lib/mutant/subject/method/metaclass.rb +30 -0
  115. data/lib/mutant/transform.rb +0 -92
  116. data/lib/mutant/version.rb +1 -1
  117. data/lib/mutant/warnings.rb +0 -6
  118. data/lib/mutant/zombifier.rb +2 -34
  119. metadata +61 -333
  120. data/.circleci/config.yml +0 -53
  121. data/.gitignore +0 -38
  122. data/.rspec +0 -5
  123. data/.rubocop.yml +0 -7
  124. data/Changelog.md +0 -71
  125. data/Gemfile +0 -14
  126. data/Gemfile.lock +0 -167
  127. data/Gemfile.shared +0 -3
  128. data/README.md +0 -138
  129. data/Rakefile +0 -5
  130. data/config/devtools.yml +0 -2
  131. data/config/reek.yml +0 -138
  132. data/config/rubocop.yml +0 -205
  133. data/config/yardstick.yml +0 -2
  134. data/docs/commercial-support.md +0 -14
  135. data/docs/concurrency.md +0 -39
  136. data/docs/incremental.md +0 -76
  137. data/docs/known-problems.md +0 -30
  138. data/docs/limitations.md +0 -50
  139. data/docs/mutant-minitest.md +0 -149
  140. data/docs/mutant-rspec.md +0 -130
  141. data/docs/nomenclature.md +0 -82
  142. data/docs/reading-reports.md +0 -74
  143. data/lib/mutant/color.rb +0 -43
  144. data/lib/mutant/diff.rb +0 -114
  145. data/meta/and.rb +0 -15
  146. data/meta/and_asgn.rb +0 -14
  147. data/meta/array.rb +0 -30
  148. data/meta/begin.rb +0 -23
  149. data/meta/block.rb +0 -202
  150. data/meta/block_pass.rb +0 -8
  151. data/meta/blockarg.rb +0 -10
  152. data/meta/break.rb +0 -10
  153. data/meta/case.rb +0 -223
  154. data/meta/casgn.rb +0 -28
  155. data/meta/cbase.rb +0 -8
  156. data/meta/class.rb +0 -12
  157. data/meta/const.rb +0 -17
  158. data/meta/csend.rb +0 -10
  159. data/meta/cvar.rb +0 -7
  160. data/meta/cvasgn.rb +0 -10
  161. data/meta/date.rb +0 -59
  162. data/meta/def.rb +0 -203
  163. data/meta/defined.rb +0 -9
  164. data/meta/dstr.rb +0 -13
  165. data/meta/dsym.rb +0 -14
  166. data/meta/ensure.rb +0 -9
  167. data/meta/false.rb +0 -8
  168. data/meta/file.rb +0 -5
  169. data/meta/float.rb +0 -37
  170. data/meta/gvar.rb +0 -7
  171. data/meta/gvasgn.rb +0 -10
  172. data/meta/hash.rb +0 -24
  173. data/meta/if.rb +0 -77
  174. data/meta/index.rb +0 -133
  175. data/meta/indexasgn.rb +0 -31
  176. data/meta/int.rb +0 -18
  177. data/meta/ivar.rb +0 -8
  178. data/meta/ivasgn.rb +0 -23
  179. data/meta/kwarg.rb +0 -10
  180. data/meta/kwbegin.rb +0 -9
  181. data/meta/kwoptarg.rb +0 -13
  182. data/meta/lambda.rb +0 -23
  183. data/meta/line.rb +0 -5
  184. data/meta/lvar.rb +0 -16
  185. data/meta/lvasgn.rb +0 -25
  186. data/meta/masgn.rb +0 -7
  187. data/meta/match_current_line.rb +0 -15
  188. data/meta/next.rb +0 -11
  189. data/meta/nil.rb +0 -5
  190. data/meta/nthref.rb +0 -14
  191. data/meta/op_assgn.rb +0 -17
  192. data/meta/or.rb +0 -15
  193. data/meta/or_asgn.rb +0 -50
  194. data/meta/range.rb +0 -39
  195. data/meta/redo.rb +0 -5
  196. data/meta/regexp.rb +0 -81
  197. data/meta/regopt.rb +0 -10
  198. data/meta/rescue.rb +0 -90
  199. data/meta/return.rb +0 -16
  200. data/meta/self.rb +0 -7
  201. data/meta/send.rb +0 -604
  202. data/meta/str.rb +0 -7
  203. data/meta/super.rb +0 -27
  204. data/meta/sym.rb +0 -8
  205. data/meta/true.rb +0 -8
  206. data/meta/until.rb +0 -17
  207. data/meta/while.rb +0 -26
  208. data/meta/yield.rb +0 -10
  209. data/mutant-minitest.gemspec +0 -22
  210. data/mutant-rspec.gemspec +0 -22
  211. data/mutant.gemspec +0 -41
  212. data/mutant.yml +0 -6
  213. data/spec/integration/mutant/corpus_spec.rb +0 -15
  214. data/spec/integration/mutant/isolation/fork_spec.rb +0 -28
  215. data/spec/integration/mutant/minitest_spec.rb +0 -11
  216. data/spec/integration/mutant/null_spec.rb +0 -16
  217. data/spec/integration/mutant/rspec_spec.rb +0 -15
  218. data/spec/integration/mutant/test_mutator_handles_types_spec.rb +0 -9
  219. data/spec/integrations.yml +0 -63
  220. data/spec/shared/base_behavior.rb +0 -45
  221. data/spec/shared/framework_integration_behavior.rb +0 -70
  222. data/spec/shared/method_matcher_behavior.rb +0 -47
  223. data/spec/spec_helper.rb +0 -75
  224. data/spec/support/corpus.rb +0 -318
  225. data/spec/support/file_system.rb +0 -62
  226. data/spec/support/ice_nine_config.rb +0 -10
  227. data/spec/support/ruby_vm.rb +0 -84
  228. data/spec/support/shared_context.rb +0 -169
  229. data/spec/support/test_app.rb +0 -7
  230. data/spec/support/warnings.yml +0 -6
  231. data/spec/support/xspec.rb +0 -183
  232. data/spec/unit/mutant/ast/meta/optarg_spec.rb +0 -24
  233. data/spec/unit/mutant/ast/meta/send/proc_predicate_spec.rb +0 -30
  234. data/spec/unit/mutant/ast/meta/send/receiver_possible_top_level_const_predicate_spec.rb +0 -39
  235. data/spec/unit/mutant/ast/meta/send_spec.rb +0 -42
  236. data/spec/unit/mutant/ast/named_children_spec.rb +0 -89
  237. data/spec/unit/mutant/ast/sexp_spec.rb +0 -38
  238. data/spec/unit/mutant/ast_spec.rb +0 -57
  239. data/spec/unit/mutant/bootstrap_spec.rb +0 -216
  240. data/spec/unit/mutant/cli_spec.rb +0 -305
  241. data/spec/unit/mutant/clock_monotonic_spec.rb +0 -52
  242. data/spec/unit/mutant/config_spec.rb +0 -126
  243. data/spec/unit/mutant/context_spec.rb +0 -111
  244. data/spec/unit/mutant/diff_spec.rb +0 -189
  245. data/spec/unit/mutant/env_spec.rb +0 -229
  246. data/spec/unit/mutant/expression/method_spec.rb +0 -62
  247. data/spec/unit/mutant/expression/methods_spec.rb +0 -61
  248. data/spec/unit/mutant/expression/namespace/exact_spec.rb +0 -28
  249. data/spec/unit/mutant/expression/namespace/recursive_spec.rb +0 -66
  250. data/spec/unit/mutant/expression/parser_spec.rb +0 -65
  251. data/spec/unit/mutant/expression_spec.rb +0 -45
  252. data/spec/unit/mutant/integration/rspec_spec.rb +0 -201
  253. data/spec/unit/mutant/integration_spec.rb +0 -150
  254. data/spec/unit/mutant/isolation/fork_spec.rb +0 -309
  255. data/spec/unit/mutant/isolation/none_spec.rb +0 -23
  256. data/spec/unit/mutant/isolation/result_spec.rb +0 -73
  257. data/spec/unit/mutant/license_spec.rb +0 -293
  258. data/spec/unit/mutant/loader_spec.rb +0 -79
  259. data/spec/unit/mutant/matcher/chain_spec.rb +0 -26
  260. data/spec/unit/mutant/matcher/compiler_spec.rb +0 -0
  261. data/spec/unit/mutant/matcher/config_spec.rb +0 -47
  262. data/spec/unit/mutant/matcher/filter_spec.rb +0 -22
  263. data/spec/unit/mutant/matcher/method/instance_spec.rb +0 -164
  264. data/spec/unit/mutant/matcher/method/singleton_spec.rb +0 -90
  265. data/spec/unit/mutant/matcher/methods/instance_spec.rb +0 -54
  266. data/spec/unit/mutant/matcher/methods/singleton_spec.rb +0 -51
  267. data/spec/unit/mutant/matcher/namespace_spec.rb +0 -37
  268. data/spec/unit/mutant/matcher/null_spec.rb +0 -12
  269. data/spec/unit/mutant/matcher/scope_spec.rb +0 -35
  270. data/spec/unit/mutant/matcher/static_spec.rb +0 -13
  271. data/spec/unit/mutant/matcher_spec.rb +0 -102
  272. data/spec/unit/mutant/meta/example/dsl_spec.rb +0 -108
  273. data/spec/unit/mutant/meta/example/verification_spec.rb +0 -154
  274. data/spec/unit/mutant/meta/example_spec.rb +0 -34
  275. data/spec/unit/mutant/mutation_spec.rb +0 -140
  276. data/spec/unit/mutant/mutator/node_spec.rb +0 -52
  277. data/spec/unit/mutant/mutator_spec.rb +0 -21
  278. data/spec/unit/mutant/parallel/driver_spec.rb +0 -126
  279. data/spec/unit/mutant/parallel/source/array_spec.rb +0 -57
  280. data/spec/unit/mutant/parallel/worker_spec.rb +0 -206
  281. data/spec/unit/mutant/parallel_spec.rb +0 -115
  282. data/spec/unit/mutant/parser_spec.rb +0 -26
  283. data/spec/unit/mutant/range_spec.rb +0 -141
  284. data/spec/unit/mutant/registry_spec.rb +0 -47
  285. data/spec/unit/mutant/reporter/cli/printer/config_spec.rb +0 -17
  286. data/spec/unit/mutant/reporter/cli/printer/env_progress_spec.rb +0 -85
  287. data/spec/unit/mutant/reporter/cli/printer/env_result_spec.rb +0 -45
  288. data/spec/unit/mutant/reporter/cli/printer/isolation_result_spec.rb +0 -132
  289. data/spec/unit/mutant/reporter/cli/printer/mutation_progress_result_spec.rb +0 -25
  290. data/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb +0 -153
  291. data/spec/unit/mutant/reporter/cli/printer/status_progressive_spec.rb +0 -45
  292. data/spec/unit/mutant/reporter/cli/printer/subject_progress_spec.rb +0 -36
  293. data/spec/unit/mutant/reporter/cli/printer/subject_result_spec.rb +0 -44
  294. data/spec/unit/mutant/reporter/cli/printer/test_result_spec.rb +0 -16
  295. data/spec/unit/mutant/reporter/cli/printer_spec.rb +0 -163
  296. data/spec/unit/mutant/reporter/cli_spec.rb +0 -137
  297. data/spec/unit/mutant/reporter/null_spec.rb +0 -14
  298. data/spec/unit/mutant/reporter/sequence_spec.rb +0 -31
  299. data/spec/unit/mutant/repository/diff/ranges_spec.rb +0 -180
  300. data/spec/unit/mutant/repository/diff_spec.rb +0 -122
  301. data/spec/unit/mutant/repository/subject_filter_spec.rb +0 -30
  302. data/spec/unit/mutant/require_highjack_spec.rb +0 -73
  303. data/spec/unit/mutant/result/class_methods_spec.rb +0 -51
  304. data/spec/unit/mutant/result/env_spec.rb +0 -161
  305. data/spec/unit/mutant/result/mutation_spec.rb +0 -70
  306. data/spec/unit/mutant/result/subject_spec.rb +0 -111
  307. data/spec/unit/mutant/result/test_spec.rb +0 -14
  308. data/spec/unit/mutant/result_spec.rb +0 -33
  309. data/spec/unit/mutant/runner/sink_spec.rb +0 -174
  310. data/spec/unit/mutant/runner_spec.rb +0 -121
  311. data/spec/unit/mutant/selector/expression_spec.rb +0 -62
  312. data/spec/unit/mutant/selector/null_spec.rb +0 -17
  313. data/spec/unit/mutant/subject/method/instance_spec.rb +0 -181
  314. data/spec/unit/mutant/subject/method/singleton_spec.rb +0 -61
  315. data/spec/unit/mutant/subject_spec.rb +0 -93
  316. data/spec/unit/mutant/transform/array_spec.rb +0 -92
  317. data/spec/unit/mutant/transform/bool_spec.rb +0 -63
  318. data/spec/unit/mutant/transform/error_spec.rb +0 -132
  319. data/spec/unit/mutant/transform/exception_spec.rb +0 -44
  320. data/spec/unit/mutant/transform/hash_spec.rb +0 -236
  321. data/spec/unit/mutant/transform/index_spec.rb +0 -92
  322. data/spec/unit/mutant/transform/named_spec.rb +0 -49
  323. data/spec/unit/mutant/transform/primitive_spec.rb +0 -56
  324. data/spec/unit/mutant/transform/sequence_spec.rb +0 -98
  325. data/spec/unit/mutant/util/one_spec.rb +0 -22
  326. data/spec/unit/mutant/warnings_spec.rb +0 -89
  327. data/spec/unit/mutant/world_spec.rb +0 -63
  328. data/spec/unit/mutant/zombifier_spec.rb +0 -122
  329. data/test_app/.rspec +0 -1
  330. data/test_app/Gemfile.minitest +0 -4
  331. data/test_app/Gemfile.rspec3.8 +0 -7
  332. data/test_app/lib/test_app.rb +0 -109
  333. data/test_app/lib/test_app/literal.rb +0 -35
  334. data/test_app/spec/spec_helper.rb +0 -9
  335. data/test_app/spec/unit/test_app/literal_spec.rb +0 -20
  336. data/test_app/test/unit/test_app/literal_test.rb +0 -16
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Selector::Expression do
4
- describe '#call' do
5
- let(:object) { described_class.new(integration) }
6
-
7
- let(:mutation_subject) { subject_class.new(context: context, node: node, warnings: warnings) }
8
- let(:context) { instance_double(Mutant::Context) }
9
- let(:node) { instance_double(Parser::AST::Node) }
10
- let(:integration) { instance_double(Mutant::Integration, all_tests: all_tests) }
11
- let(:test_a) { instance_double(Mutant::Test, expression: parse_expression('SubjectA')) }
12
- let(:test_b) { instance_double(Mutant::Test, expression: parse_expression('SubjectB')) }
13
- let(:test_c) { instance_double(Mutant::Test, expression: parse_expression('SubjectC')) }
14
- let(:warnings) { instance_double(Mutant::Warnings) }
15
-
16
- let(:subject_class) do
17
- parse = method(:parse_expression)
18
-
19
- Class.new(Mutant::Subject) do
20
- define_method(:expression) do
21
- parse.call('SubjectA')
22
- end
23
-
24
- define_method(:match_expressions) do
25
- [expression] << parse.call('SubjectB')
26
- end
27
- end
28
- end
29
-
30
- subject { object.call(mutation_subject) }
31
-
32
- context 'without available tests' do
33
- let(:all_tests) { [] }
34
-
35
- it { should eql([]) }
36
- end
37
-
38
- context 'without qualifying tests' do
39
- let(:all_tests) { [test_c] }
40
-
41
- it { should eql([]) }
42
- end
43
-
44
- context 'with qualifying tests for first match expression' do
45
- let(:all_tests) { [test_a] }
46
-
47
- it { should eql([test_a]) }
48
- end
49
-
50
- context 'with qualifying tests for second match expression' do
51
- let(:all_tests) { [test_b] }
52
-
53
- it { should eql([test_b]) }
54
- end
55
-
56
- context 'with qualifying tests for the first and second match expression' do
57
- let(:all_tests) { [test_a, test_b] }
58
-
59
- it { should eql([test_a]) }
60
- end
61
- end
62
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Selector::Null do
4
- describe '#call' do
5
- subject { described_class.new }
6
-
7
- let(:mutant_subject) { instance_double(Mutant::Subject) }
8
-
9
- def apply
10
- subject.call(mutant_subject)
11
- end
12
-
13
- it 'returns no tests' do
14
- expect(apply).to eql([])
15
- end
16
- end
17
- end
@@ -1,181 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Subject::Method::Instance do
4
- let(:object) do
5
- described_class.new(
6
- context: context,
7
- node: node,
8
- warnings: warnings
9
- )
10
- end
11
-
12
- let(:call_block?) { true }
13
- let(:warnings) { instance_double(Mutant::Warnings) }
14
-
15
- let(:context) do
16
- Mutant::Context.new(
17
- scope,
18
- instance_double(Pathname)
19
- )
20
- end
21
-
22
- let(:node) do
23
- s(:def, :foo, s(:args))
24
- end
25
-
26
- let(:scope) do
27
- Class.new do
28
- attr_reader :bar
29
-
30
- def initialize
31
- @bar = :boo
32
- end
33
-
34
- def foo; end
35
-
36
- def self.name
37
- 'Test'
38
- end
39
- end
40
- end
41
-
42
- before do
43
- allow(warnings).to receive(:call) do |&block|
44
- block.call if call_block?
45
- end
46
- end
47
-
48
- describe '#expression' do
49
- subject { object.expression }
50
-
51
- it { should eql(parse_expression('Test#foo')) }
52
-
53
- it_should_behave_like 'an idempotent method'
54
- end
55
-
56
- describe '#match_expression' do
57
- subject { object.match_expressions }
58
-
59
- it { should eql(%w[Test#foo Test*].map(&method(:parse_expression))) }
60
-
61
- it_should_behave_like 'an idempotent method'
62
- end
63
-
64
- describe '#prepare' do
65
- let(:context) do
66
- Mutant::Context.new(scope, instance_double(Pathname))
67
- end
68
-
69
- subject { object.prepare }
70
-
71
- it 'undefines method on scope' do
72
- expect { subject }
73
- .to change { scope.instance_methods.include?(:foo) }
74
- .from(true)
75
- .to(false)
76
- end
77
-
78
- context 'within warning capture' do
79
- let(:call_block?) { false }
80
-
81
- it 'undefines method on scope' do
82
- expect { subject }
83
- .to_not change { scope.instance_methods.include?(:foo) }
84
- .from(true)
85
- end
86
- end
87
-
88
- it_should_behave_like 'a command method'
89
- end
90
-
91
- describe '#source' do
92
- subject { object.source }
93
-
94
- it { should eql("def foo\nend") }
95
- end
96
- end
97
-
98
- RSpec.describe Mutant::Subject::Method::Instance::Memoized do
99
- let(:object) do
100
- described_class.new(
101
- context: context,
102
- node: node,
103
- warnings: warnings
104
- )
105
- end
106
-
107
- let(:context) { double('Context') }
108
- let(:warnings) { instance_double(Mutant::Warnings) }
109
-
110
- let(:node) do
111
- s(:def, :foo, s(:args))
112
- end
113
-
114
- before do
115
- allow(warnings).to receive(:call).and_yield
116
- end
117
-
118
- describe '#prepare' do
119
-
120
- let(:context) do
121
- Mutant::Context.new(scope, double('Source Path'))
122
- end
123
-
124
- let(:scope) do
125
- Class.new do
126
- include Memoizable
127
- def foo; end
128
- memoize :foo
129
- end
130
- end
131
-
132
- subject { object.prepare }
133
-
134
- it 'undefines memoizer' do
135
- expect { subject }.to change { scope.memoized?(:foo) }.from(true).to(false)
136
- end
137
-
138
- it 'undefines method on scope' do
139
- expect { subject }.to change { scope.instance_methods.include?(:foo) }.from(true).to(false)
140
- end
141
-
142
- it_should_behave_like 'a command method'
143
- end
144
-
145
- describe '#mutations', mutant_expression: 'Mutant::Subject#mutations' do
146
- subject { object.mutations }
147
-
148
- let(:expected) do
149
- [
150
- Mutant::Mutation::Neutral.new(
151
- object,
152
- s(:begin,
153
- s(:def, :foo, s(:args)), s(:send, nil, :memoize, s(:args, s(:sym, :foo))))
154
- ),
155
- Mutant::Mutation::Evil.new(
156
- object,
157
- s(:begin,
158
- s(:def, :foo, s(:args), s(:send, nil, :raise)), s(:send, nil, :memoize, s(:args, s(:sym, :foo))))
159
- ),
160
- Mutant::Mutation::Evil.new(
161
- object,
162
- s(:begin,
163
- s(:def, :foo, s(:args), s(:zsuper)), s(:send, nil, :memoize, s(:args, s(:sym, :foo))))
164
- ),
165
- Mutant::Mutation::Evil.new(
166
- object,
167
- s(:begin,
168
- s(:def, :foo, s(:args), nil), s(:send, nil, :memoize, s(:args, s(:sym, :foo))))
169
- )
170
- ]
171
- end
172
-
173
- it { should eql(expected) }
174
- end
175
-
176
- describe '#source' do
177
- subject { object.source }
178
-
179
- it { should eql("def foo\nend\nmemoize(:foo)") }
180
- end
181
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Subject::Method::Singleton do
4
- let(:object) do
5
- described_class.new(
6
- context: context,
7
- node: node,
8
- warnings: warnings
9
- )
10
- end
11
-
12
- let(:node) { s(:defs, s(:self), :foo, s(:args)) }
13
- let(:warnings) { instance_double(Mutant::Warnings) }
14
-
15
- let(:context) do
16
- Mutant::Context.new(scope, instance_double(Pathname))
17
- end
18
-
19
- let(:scope) do
20
- Class.new do
21
- def self.foo; end
22
-
23
- def self.name
24
- 'Test'
25
- end
26
- end
27
- end
28
-
29
- describe '#expression' do
30
- subject { object.expression }
31
-
32
- it { should eql(parse_expression('Test.foo')) }
33
-
34
- it_should_behave_like 'an idempotent method'
35
- end
36
-
37
- describe '#match_expression' do
38
- subject { object.match_expressions }
39
-
40
- it { should eql(%w[Test.foo Test*].map(&method(:parse_expression))) }
41
-
42
- it_should_behave_like 'an idempotent method'
43
- end
44
-
45
- describe '#prepare' do
46
-
47
- subject { object.prepare }
48
-
49
- it 'undefines method on scope' do
50
- expect { subject }.to change { scope.methods.include?(:foo) }.from(true).to(false)
51
- end
52
-
53
- it_should_behave_like 'a command method'
54
- end
55
-
56
- describe '#source' do
57
- subject { object.source }
58
-
59
- it { should eql("def self.foo\nend") }
60
- end
61
- end
@@ -1,93 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Subject do
4
- let(:class_under_test) do
5
- Class.new(described_class) do
6
- def expression
7
- Mutant::Expression::Namespace::Exact.new(scope_name: 'SubjectA')
8
- end
9
-
10
- def match_expressions
11
- [
12
- expression,
13
- Mutant::Expression::Namespace::Exact.new(scope_name: 'SubjectB')
14
- ]
15
- end
16
- end
17
- end
18
-
19
- let(:object) do
20
- class_under_test.new(
21
- context: context,
22
- node: node,
23
- warnings: warnings
24
- )
25
- end
26
-
27
- let(:node) do
28
- Unparser.parse(<<-RUBY)
29
- def foo
30
- end
31
- RUBY
32
- end
33
-
34
- let(:context) do
35
- double(
36
- 'Context',
37
- source_path: 'source_path'
38
- )
39
- end
40
-
41
- let(:warnings) { instance_double(Mutant::Warnings) }
42
-
43
- describe '#identification' do
44
- subject { object.identification }
45
-
46
- it { should eql('SubjectA:source_path:1') }
47
- end
48
-
49
- describe '#source_line' do
50
- subject { object.source_line }
51
-
52
- it { should be(1) }
53
- end
54
-
55
- describe '#source_lines' do
56
- subject { object.source_lines }
57
-
58
- it { should eql(1..2) }
59
- end
60
-
61
- describe '#prepare' do
62
- subject { object.prepare }
63
-
64
- it_should_behave_like 'a command method'
65
- end
66
-
67
- describe '#node' do
68
- subject { object.node }
69
-
70
- it { should be(node) }
71
-
72
- it_should_behave_like 'an idempotent method'
73
- end
74
-
75
- describe '#mutations' do
76
- subject { object.mutations }
77
-
78
- before do
79
- expect(Mutant::Mutator).to receive(:mutate).with(node).and_return([mutation_a, mutation_b])
80
- end
81
-
82
- let(:mutation_a) { instance_double(Parser::AST::Node, :mutation_a) }
83
- let(:mutation_b) { instance_double(Parser::AST::Node, :mutation_b) }
84
-
85
- it 'generates neutral and evil mutations' do
86
- should eql([
87
- Mutant::Mutation::Neutral.new(object, node),
88
- Mutant::Mutation::Evil.new(object, mutation_a),
89
- Mutant::Mutation::Evil.new(object, mutation_b)
90
- ])
91
- end
92
- end
93
- end
@@ -1,92 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Transform::Array do
4
- subject { described_class.new(transform) }
5
-
6
- let(:transform) { Mutant::Transform::Boolean.new }
7
-
8
- describe '#apply' do
9
- def apply
10
- subject.apply(input)
11
- end
12
-
13
- context 'on array input' do
14
- context 'empty' do
15
- let(:input) { [] }
16
-
17
- it 'returns sucess' do
18
- expect(apply).to eql(Mutant::Either::Right.new(input))
19
- end
20
- end
21
-
22
- context 'valid elements' do
23
- let(:input) { [true, true] }
24
-
25
- it 'returns sucess' do
26
- expect(apply).to eql(Mutant::Either::Right.new(input))
27
- end
28
- end
29
-
30
- context 'invalid elements' do
31
- let(:input) { [true, 1] }
32
-
33
- let(:boolean_error) do
34
- Mutant::Transform::Error.new(
35
- cause: nil,
36
- input: 1,
37
- message: 'Expected: boolean but got: 1',
38
- transform: transform
39
- )
40
- end
41
-
42
- let(:index_error) do
43
- Mutant::Transform::Error.new(
44
- cause: boolean_error,
45
- input: 1,
46
- message: nil,
47
- transform: Mutant::Transform::Index.new(index: 1, transform: transform)
48
- )
49
- end
50
-
51
- let(:error) do
52
- Mutant::Transform::Error.new(
53
- cause: index_error,
54
- input: input,
55
- message: 'Failed to coerce array at index: 1',
56
- transform: subject
57
- )
58
- end
59
-
60
- it 'returns failure' do
61
- expect(apply).to eql(Mutant::Either::Left.new(error))
62
- end
63
- end
64
-
65
- context 'transformed elements' do
66
- let(:input) { [{ 'foo' => 'bar' }] }
67
- let(:transform) { Mutant::Transform::Hash::Symbolize.new }
68
-
69
- it 'returns transformed elements' do
70
- expect(apply).to eql(Mutant::Either::Right.new([foo: 'bar']))
71
- end
72
- end
73
- end
74
-
75
- context 'on other input' do
76
- let(:input) { false }
77
-
78
- let(:error) do
79
- Mutant::Transform::Error.new(
80
- cause: nil,
81
- input: input,
82
- message: 'Expected: Array but got: FalseClass',
83
- transform: subject
84
- )
85
- end
86
-
87
- it 'returns failure' do
88
- expect(apply).to eql(Mutant::Either::Left.new(error))
89
- end
90
- end
91
- end
92
- end