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,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