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,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Matcher::Chain, '#call' do
4
- subject { object.call(env) }
5
-
6
- let(:object) { described_class.new([matcher_a, matcher_b]) }
7
- let(:env) { instance_double(Mutant::Env) }
8
- let(:matcher_a) { instance_double(Mutant::Matcher) }
9
- let(:matcher_b) { instance_double(Mutant::Matcher) }
10
- let(:subject_a) { instance_double(Mutant::Subject) }
11
- let(:subject_b) { instance_double(Mutant::Subject) }
12
-
13
- before do
14
- expect(matcher_a).to receive(:call)
15
- .with(env)
16
- .and_return([subject_a])
17
-
18
- expect(matcher_b).to receive(:call)
19
- .with(env)
20
- .and_return([subject_b])
21
- end
22
-
23
- it 'returns concatenated matches' do
24
- should eql([subject_a, subject_b])
25
- end
26
- end
File without changes
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Matcher::Config do
4
- describe '#inspect' do
5
- subject { object.inspect }
6
-
7
- context 'on default config' do
8
- let(:object) { described_class::DEFAULT }
9
-
10
- it { should eql('#<Mutant::Matcher::Config empty>') }
11
- end
12
-
13
- context 'with one expression' do
14
- let(:object) { described_class::DEFAULT.add(:match_expressions, parse_expression('Foo')) }
15
- it { should eql('#<Mutant::Matcher::Config match_expressions: [Foo]>') }
16
- end
17
-
18
- context 'with many expressions' do
19
- let(:object) do
20
- described_class::DEFAULT
21
- .add(:match_expressions, parse_expression('Foo'))
22
- .add(:match_expressions, parse_expression('Bar'))
23
- end
24
-
25
- it { should eql('#<Mutant::Matcher::Config match_expressions: [Foo,Bar]>') }
26
- end
27
-
28
- context 'with match and ignore expression' do
29
- let(:object) do
30
- described_class::DEFAULT
31
- .add(:match_expressions, parse_expression('Foo'))
32
- .add(:ignore_expressions, parse_expression('Bar'))
33
- end
34
-
35
- it { should eql('#<Mutant::Matcher::Config ignore_expressions: [Bar] match_expressions: [Foo]>') }
36
- end
37
-
38
- context 'with subject filter' do
39
- let(:object) do
40
- described_class::DEFAULT
41
- .add(:subject_filters, 'foo')
42
- end
43
-
44
- it { should eql('#<Mutant::Matcher::Config subject_filters: ["foo"]>') }
45
- end
46
- end
47
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Matcher::Filter, '#call' do
4
- subject { object.call(env) }
5
-
6
- let(:object) { described_class.new(matcher, predicate) }
7
- let(:matcher) { instance_double(Mutant::Matcher) }
8
- let(:subject_a) { instance_double(Mutant::Subject) }
9
- let(:subject_b) { instance_double(Mutant::Subject) }
10
- let(:env) { instance_double(Mutant::Env) }
11
- let(:predicate) { ->(node) { node.eql?(subject_a) } }
12
-
13
- before do
14
- expect(matcher).to receive(:call)
15
- .with(env)
16
- .and_return([subject_a, subject_b])
17
- end
18
-
19
- it 'returns subjects after filtering' do
20
- should eql([subject_a])
21
- end
22
- end
@@ -1,164 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Matcher::Method::Instance, '#call' do
4
- subject { object.call(env) }
5
-
6
- let(:base) { TestApp::InstanceMethodTests }
7
- let(:method) { scope.instance_method(method_name) }
8
- let(:method_arity) { 0 }
9
- let(:method_name) { :foo }
10
- let(:object) { described_class.new(scope, method) }
11
- let(:source_path) { MutantSpec::ROOT.join('test_app/lib/test_app.rb') }
12
- let(:type) { :def }
13
- let(:warnings) { instance_double(Mutant::Warnings) }
14
-
15
- let(:world) do
16
- instance_double(
17
- Mutant::World,
18
- pathname: Pathname,
19
- warnings: warnings
20
- )
21
- end
22
-
23
- let(:env) do
24
- instance_double(
25
- Mutant::Env,
26
- config: Mutant::Config::DEFAULT,
27
- parser: Fixtures::TEST_ENV.parser,
28
- world: world
29
- )
30
- end
31
-
32
- def name
33
- node.children.fetch(0)
34
- end
35
-
36
- def arguments
37
- node.children.fetch(1)
38
- end
39
-
40
- context 'when method is defined inside eval' do
41
- let(:subject_class) { Mutant::Subject::Method::Instance::Memoized }
42
- let(:scope) { base::WithMemoizer }
43
- let(:method) { scope.instance_method(:boz) }
44
-
45
- let(:expected_warnings) do
46
- [
47
- "#{method} does not have a valid source location, unable to emit subject"
48
- ]
49
- end
50
-
51
- include_examples 'skipped candidate'
52
-
53
- it 'returns expected subjects' do
54
- expect(subject).to eql([])
55
- end
56
- end
57
-
58
- context 'when method is defined without source location' do
59
- let(:scope) { Module }
60
- let(:method) { scope.instance_method(:object_id) }
61
-
62
- let(:expected_warnings) do
63
- [
64
- "#{method} does not have a valid source location, unable to emit subject"
65
- ]
66
- end
67
-
68
- include_examples 'skipped candidate'
69
-
70
- it 'returns expected subjects' do
71
- expect(subject).to eql([])
72
- end
73
- end
74
-
75
- context 'in module eval' do
76
- let(:scope) { base::InModuleEval }
77
-
78
- let(:expected_warnings) do
79
- [
80
- "#{method} is dynamically defined in a closure, unable to emit subject"
81
- ]
82
- end
83
-
84
- include_examples 'skipped candidate'
85
-
86
- it 'returns expected subjects' do
87
- expect(subject).to eql([])
88
- end
89
- end
90
-
91
- context 'in class eval' do
92
- let(:scope) { base::InClassEval }
93
-
94
- let(:expected_warnings) do
95
- [
96
- "#{method} is dynamically defined in a closure, unable to emit subject"
97
- ]
98
- end
99
-
100
- include_examples 'skipped candidate'
101
-
102
- it 'returns expected subjects' do
103
- expect(subject).to eql([])
104
- end
105
- end
106
-
107
- context 'when method is defined once' do
108
- let(:method_name) { :bar }
109
- let(:scope) { base::WithMemoizer }
110
- let(:method_line) { 13 }
111
-
112
- it_should_behave_like 'a method matcher'
113
-
114
- it 'returns expected subjects' do
115
- context = Mutant::Context.new(
116
- TestApp::InstanceMethodTests::WithMemoizer,
117
- MutantSpec::ROOT.join('test_app', 'lib', 'test_app.rb')
118
- )
119
-
120
- expect(subject).to eql(
121
- [
122
- Mutant::Subject::Method::Instance.new(
123
- context: context,
124
- node: s(:def, :bar, s(:args), nil),
125
- warnings: warnings
126
- )
127
- ]
128
- )
129
- end
130
- end
131
-
132
- context 'when method is defined once with a memoizer' do
133
- let(:scope) { base::WithMemoizer }
134
- let(:method_line) { 15 }
135
-
136
- it_should_behave_like 'a method matcher'
137
- end
138
-
139
- context 'when method is defined multiple times' do
140
- context 'on different lines' do
141
- let(:scope) { base::DefinedMultipleTimes::DifferentLines }
142
- let(:method_line) { 24 }
143
- let(:method_arity) { 1 }
144
-
145
- it_should_behave_like 'a method matcher'
146
- end
147
-
148
- context 'on the same line' do
149
- let(:scope) { base::DefinedMultipleTimes::SameLineSameScope }
150
- let(:method_line) { 29 }
151
- let(:method_arity) { 1 }
152
-
153
- it_should_behave_like 'a method matcher'
154
- end
155
-
156
- context 'on the same line with different scope' do
157
- let(:scope) { base::DefinedMultipleTimes::SameLineDifferentScope }
158
- let(:method_line) { 33 }
159
- let(:method_arity) { 1 }
160
-
161
- it_should_behave_like 'a method matcher'
162
- end
163
- end
164
- end
@@ -1,90 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Matcher::Method::Singleton, '#call' do
4
- subject { object.call(env) }
5
-
6
- let(:object) { described_class.new(scope, method) }
7
- let(:method) { scope.method(method_name) }
8
- let(:type) { :defs }
9
- let(:method_name) { :foo }
10
- let(:method_arity) { 0 }
11
- let(:base) { TestApp::SingletonMethodTests }
12
- let(:source_path) { MutantSpec::ROOT.join('test_app/lib/test_app.rb') }
13
- let(:warnings) { instance_double(Mutant::Warnings) }
14
-
15
- let(:world) do
16
- instance_double(
17
- Mutant::World,
18
- pathname: Pathname,
19
- warnings: warnings
20
- )
21
- end
22
-
23
- let(:env) do
24
- instance_double(
25
- Mutant::Env,
26
- config: Mutant::Config::DEFAULT,
27
- parser: Fixtures::TEST_ENV.parser,
28
- world: world
29
- )
30
- end
31
-
32
- def name
33
- node.children.fetch(1)
34
- end
35
-
36
- def arguments
37
- node.children.fetch(2)
38
- end
39
-
40
- context 'when also defined on lvar' do
41
- let(:scope) { base::DefinedOnLvar }
42
- let(:expected_warnings) do
43
- [
44
- 'Can only match :defs on :self or :const got :lvar unable to match'
45
- ]
46
- end
47
-
48
- include_examples 'skipped candidate'
49
- end
50
-
51
- context 'when defined on self' do
52
- let(:scope) { base::DefinedOnSelf }
53
- let(:method_line) { 61 }
54
-
55
- it_should_behave_like 'a method matcher'
56
- end
57
-
58
- context 'when defined on constant' do
59
- context 'inside namespace' do
60
- let(:scope) { base::DefinedOnConstant::InsideNamespace }
61
- let(:method_line) { 71 }
62
-
63
- it_should_behave_like 'a method matcher'
64
- end
65
-
66
- context 'outside namespace' do
67
- let(:scope) { base::DefinedOnConstant::OutsideNamespace }
68
- let(:method_line) { 78 }
69
-
70
- it_should_behave_like 'a method matcher'
71
- end
72
- end
73
-
74
- context 'when defined multiple times in the same line' do
75
- context 'with method on different scope' do
76
- let(:scope) { base::DefinedMultipleTimes::SameLine::DifferentScope }
77
- let(:method_line) { 97 }
78
- let(:method_arity) { 1 }
79
-
80
- it_should_behave_like 'a method matcher'
81
- end
82
-
83
- context 'with different name' do
84
- let(:scope) { base::DefinedMultipleTimes::SameLine::DifferentName }
85
- let(:method_line) { 101 }
86
-
87
- it_should_behave_like 'a method matcher'
88
- end
89
- end
90
- end
@@ -1,54 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Matcher::Methods::Instance, '#call' do
4
- let(:object) { described_class.new(class_under_test) }
5
- let(:env) { Fixtures::TEST_ENV }
6
-
7
- let(:class_under_test) do
8
- parent = Module.new do
9
- def method_d; end
10
-
11
- def method_e; end
12
- end
13
-
14
- Class.new do
15
- include parent
16
-
17
- private :method_d
18
-
19
- def method_a; end
20
-
21
- protected
22
-
23
- def method_b; end
24
-
25
- private
26
-
27
- def method_c; end
28
- end
29
- end
30
-
31
- let(:subject_a) { instance_double(Mutant::Subject) }
32
- let(:subject_b) { instance_double(Mutant::Subject) }
33
- let(:subject_c) { instance_double(Mutant::Subject) }
34
- let(:subjects) { [subject_a, subject_b, subject_c] }
35
-
36
- before do
37
- {
38
- method_a: subject_a,
39
- method_b: subject_b,
40
- method_c: subject_c
41
- }.each do |method, subject|
42
- matcher = instance_double(Mutant::Matcher)
43
- expect(matcher).to receive(:call).with(env).and_return([subject])
44
-
45
- expect(Mutant::Matcher::Method::Instance).to receive(:new)
46
- .with(class_under_test, class_under_test.instance_method(method))
47
- .and_return(matcher)
48
- end
49
- end
50
-
51
- it 'returns expected subjects' do
52
- expect(object.call(env)).to eql(subjects)
53
- end
54
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Matcher::Methods::Singleton, '#call' do
4
- let(:object) { described_class.new(class_under_test) }
5
- let(:env) { Fixtures::TEST_ENV }
6
-
7
- let(:class_under_test) do
8
- parent = Module.new do
9
- def method_d; end
10
-
11
- def method_e; end
12
- end
13
-
14
- Class.new do
15
- extend parent
16
-
17
- def self.method_a; end
18
-
19
- def self.method_b; end
20
- class << self; protected :method_b; end
21
-
22
- def self.method_c; end
23
- private_class_method :method_c
24
-
25
- end
26
- end
27
-
28
- let(:subject_a) { instance_double(Mutant::Subject, 'A') }
29
- let(:subject_b) { instance_double(Mutant::Subject, 'B') }
30
- let(:subject_c) { instance_double(Mutant::Subject, 'C') }
31
-
32
- let(:subjects) { [subject_a, subject_b, subject_c] }
33
-
34
- before do
35
- matcher = Mutant::Matcher::Method::Singleton
36
-
37
- {
38
- method_a: subject_a,
39
- method_b: subject_b,
40
- method_c: subject_c
41
- }.each do |method, subject|
42
- allow(matcher).to receive(:new)
43
- .with(class_under_test, class_under_test.method(method))
44
- .and_return(Mutant::Matcher::Static.new([subject]))
45
- end
46
- end
47
-
48
- it 'returns expected subjects' do
49
- expect(object.call(env)).to eql(subjects)
50
- end
51
- end