mutant 0.9.9 → 0.9.14

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 (252) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mutant.rb +2 -4
  3. data/lib/mutant/bootstrap.rb +14 -1
  4. data/lib/mutant/cli.rb +6 -0
  5. data/lib/mutant/isolation.rb +1 -1
  6. data/lib/mutant/isolation/fork.rb +2 -2
  7. data/lib/mutant/isolation/none.rb +1 -1
  8. data/lib/mutant/matcher/config.rb +2 -0
  9. data/lib/mutant/meta/example.rb +16 -4
  10. data/lib/mutant/meta/example/dsl.rb +33 -16
  11. data/lib/mutant/meta/example/verification.rb +70 -28
  12. data/lib/mutant/minitest/coverage.rb +53 -0
  13. data/lib/mutant/mutator/node.rb +2 -2
  14. data/lib/mutant/mutator/node/block_pass.rb +29 -0
  15. data/lib/mutant/mutator/node/{dstr.rb → dynamic_literal.rb} +7 -5
  16. data/lib/mutant/mutator/node/index.rb +4 -4
  17. data/lib/mutant/mutator/node/literal/range.rb +4 -1
  18. data/lib/mutant/mutator/node/noop.rb +1 -1
  19. data/lib/mutant/mutator/node/op_asgn.rb +15 -1
  20. data/lib/mutant/mutator/node/send.rb +25 -1
  21. data/lib/mutant/mutator/node/send/attribute_assignment.rb +1 -0
  22. data/lib/mutant/reporter/cli/printer.rb +2 -2
  23. data/lib/mutant/reporter/cli/printer/isolation_result.rb +9 -3
  24. data/lib/mutant/reporter/cli/printer/mutation_result.rb +1 -1
  25. data/lib/mutant/subject/method/instance.rb +41 -2
  26. data/lib/mutant/version.rb +1 -1
  27. metadata +59 -347
  28. data/.github/workflows/ci.yml +0 -121
  29. data/.gitignore +0 -38
  30. data/.rspec +0 -5
  31. data/.rubocop.yml +0 -7
  32. data/Changelog.md +0 -81
  33. data/Gemfile +0 -7
  34. data/Gemfile.lock +0 -167
  35. data/Gemfile.shared +0 -10
  36. data/README.md +0 -178
  37. data/Rakefile +0 -5
  38. data/config/devtools.yml +0 -2
  39. data/config/reek.yml +0 -139
  40. data/config/rubocop.yml +0 -205
  41. data/config/yardstick.yml +0 -2
  42. data/docs/commercial-support.md +0 -14
  43. data/docs/concurrency.md +0 -39
  44. data/docs/incremental.md +0 -76
  45. data/docs/known-problems.md +0 -30
  46. data/docs/limitations.md +0 -50
  47. data/docs/mutant-minitest.md +0 -149
  48. data/docs/mutant-rspec.md +0 -130
  49. data/docs/nomenclature.md +0 -82
  50. data/docs/reading-reports.md +0 -74
  51. data/lib/mutant/color.rb +0 -40
  52. data/lib/mutant/diff.rb +0 -97
  53. data/lib/mutant/mutator/node/dsym.rb +0 -22
  54. data/meta/and.rb +0 -13
  55. data/meta/and_asgn.rb +0 -14
  56. data/meta/array.rb +0 -27
  57. data/meta/begin.rb +0 -20
  58. data/meta/block.rb +0 -199
  59. data/meta/block_pass.rb +0 -8
  60. data/meta/blockarg.rb +0 -10
  61. data/meta/break.rb +0 -9
  62. data/meta/case.rb +0 -217
  63. data/meta/casgn.rb +0 -25
  64. data/meta/cbase.rb +0 -8
  65. data/meta/class.rb +0 -12
  66. data/meta/const.rb +0 -17
  67. data/meta/csend.rb +0 -10
  68. data/meta/cvar.rb +0 -7
  69. data/meta/cvasgn.rb +0 -9
  70. data/meta/date.rb +0 -59
  71. data/meta/def.rb +0 -196
  72. data/meta/defined.rb +0 -9
  73. data/meta/dstr.rb +0 -13
  74. data/meta/dsym.rb +0 -14
  75. data/meta/ensure.rb +0 -8
  76. data/meta/false.rb +0 -7
  77. data/meta/file.rb +0 -5
  78. data/meta/float.rb +0 -37
  79. data/meta/gvar.rb +0 -7
  80. data/meta/gvasgn.rb +0 -9
  81. data/meta/hash.rb +0 -20
  82. data/meta/if.rb +0 -72
  83. data/meta/index.rb +0 -133
  84. data/meta/indexasgn.rb +0 -31
  85. data/meta/int.rb +0 -18
  86. data/meta/ivar.rb +0 -8
  87. data/meta/ivasgn.rb +0 -22
  88. data/meta/kwarg.rb +0 -10
  89. data/meta/kwbegin.rb +0 -8
  90. data/meta/kwoptarg.rb +0 -13
  91. data/meta/lambda.rb +0 -23
  92. data/meta/line.rb +0 -5
  93. data/meta/lvar.rb +0 -16
  94. data/meta/lvasgn.rb +0 -24
  95. data/meta/masgn.rb +0 -7
  96. data/meta/match_current_line.rb +0 -14
  97. data/meta/next.rb +0 -10
  98. data/meta/nil.rb +0 -5
  99. data/meta/nthref.rb +0 -14
  100. data/meta/op_assgn.rb +0 -17
  101. data/meta/or.rb +0 -13
  102. data/meta/or_asgn.rb +0 -50
  103. data/meta/range.rb +0 -39
  104. data/meta/redo.rb +0 -5
  105. data/meta/regexp.rb +0 -80
  106. data/meta/regopt.rb +0 -10
  107. data/meta/rescue.rb +0 -84
  108. data/meta/return.rb +0 -16
  109. data/meta/sclass.rb +0 -12
  110. data/meta/self.rb +0 -7
  111. data/meta/send.rb +0 -600
  112. data/meta/str.rb +0 -7
  113. data/meta/super.rb +0 -27
  114. data/meta/sym.rb +0 -8
  115. data/meta/true.rb +0 -7
  116. data/meta/until.rb +0 -16
  117. data/meta/while.rb +0 -24
  118. data/meta/yield.rb +0 -9
  119. data/mutant-minitest.gemspec +0 -22
  120. data/mutant-rspec.gemspec +0 -22
  121. data/mutant.gemspec +0 -41
  122. data/mutant.sh +0 -12
  123. data/mutant.yml +0 -6
  124. data/spec/integration/mutant/corpus_spec.rb +0 -15
  125. data/spec/integration/mutant/isolation/fork_spec.rb +0 -28
  126. data/spec/integration/mutant/minitest_spec.rb +0 -11
  127. data/spec/integration/mutant/null_spec.rb +0 -16
  128. data/spec/integration/mutant/rspec_spec.rb +0 -15
  129. data/spec/integration/mutant/test_mutator_handles_types_spec.rb +0 -9
  130. data/spec/integrations.yml +0 -63
  131. data/spec/shared/base_behavior.rb +0 -45
  132. data/spec/shared/framework_integration_behavior.rb +0 -70
  133. data/spec/shared/method_matcher_behavior.rb +0 -47
  134. data/spec/spec_helper.rb +0 -75
  135. data/spec/support/corpus.rb +0 -318
  136. data/spec/support/file_system.rb +0 -62
  137. data/spec/support/ice_nine_config.rb +0 -10
  138. data/spec/support/ruby_vm.rb +0 -84
  139. data/spec/support/shared_context.rb +0 -169
  140. data/spec/support/test_app.rb +0 -7
  141. data/spec/support/warnings.yml +0 -6
  142. data/spec/support/xspec.rb +0 -183
  143. data/spec/unit/mutant/ast/find_metaclass_containing_spec.rb +0 -64
  144. data/spec/unit/mutant/ast/meta/optarg_spec.rb +0 -24
  145. data/spec/unit/mutant/ast/meta/send/proc_predicate_spec.rb +0 -30
  146. data/spec/unit/mutant/ast/meta/send/receiver_possible_top_level_const_predicate_spec.rb +0 -39
  147. data/spec/unit/mutant/ast/meta/send_spec.rb +0 -42
  148. data/spec/unit/mutant/ast/named_children_spec.rb +0 -89
  149. data/spec/unit/mutant/ast/sexp_spec.rb +0 -38
  150. data/spec/unit/mutant/ast_spec.rb +0 -57
  151. data/spec/unit/mutant/bootstrap_spec.rb +0 -216
  152. data/spec/unit/mutant/cli_spec.rb +0 -305
  153. data/spec/unit/mutant/clock_monotonic_spec.rb +0 -52
  154. data/spec/unit/mutant/config_spec.rb +0 -126
  155. data/spec/unit/mutant/context_spec.rb +0 -111
  156. data/spec/unit/mutant/diff_spec.rb +0 -189
  157. data/spec/unit/mutant/env_spec.rb +0 -229
  158. data/spec/unit/mutant/expression/method_spec.rb +0 -62
  159. data/spec/unit/mutant/expression/methods_spec.rb +0 -66
  160. data/spec/unit/mutant/expression/namespace/exact_spec.rb +0 -28
  161. data/spec/unit/mutant/expression/namespace/recursive_spec.rb +0 -66
  162. data/spec/unit/mutant/expression/parser_spec.rb +0 -65
  163. data/spec/unit/mutant/expression_spec.rb +0 -45
  164. data/spec/unit/mutant/integration/rspec_spec.rb +0 -201
  165. data/spec/unit/mutant/integration_spec.rb +0 -150
  166. data/spec/unit/mutant/isolation/fork_spec.rb +0 -309
  167. data/spec/unit/mutant/isolation/none_spec.rb +0 -23
  168. data/spec/unit/mutant/isolation/result_spec.rb +0 -73
  169. data/spec/unit/mutant/license_spec.rb +0 -305
  170. data/spec/unit/mutant/loader_spec.rb +0 -79
  171. data/spec/unit/mutant/matcher/chain_spec.rb +0 -26
  172. data/spec/unit/mutant/matcher/compiler_spec.rb +0 -0
  173. data/spec/unit/mutant/matcher/config_spec.rb +0 -47
  174. data/spec/unit/mutant/matcher/filter_spec.rb +0 -22
  175. data/spec/unit/mutant/matcher/method/instance_spec.rb +0 -164
  176. data/spec/unit/mutant/matcher/method/metaclass_spec.rb +0 -108
  177. data/spec/unit/mutant/matcher/method/singleton_spec.rb +0 -90
  178. data/spec/unit/mutant/matcher/methods/instance_spec.rb +0 -54
  179. data/spec/unit/mutant/matcher/methods/metaclass_spec.rb +0 -62
  180. data/spec/unit/mutant/matcher/methods/singleton_spec.rb +0 -51
  181. data/spec/unit/mutant/matcher/namespace_spec.rb +0 -39
  182. data/spec/unit/mutant/matcher/null_spec.rb +0 -12
  183. data/spec/unit/mutant/matcher/scope_spec.rb +0 -45
  184. data/spec/unit/mutant/matcher/static_spec.rb +0 -13
  185. data/spec/unit/mutant/matcher_spec.rb +0 -102
  186. data/spec/unit/mutant/meta/example/dsl_spec.rb +0 -108
  187. data/spec/unit/mutant/meta/example/verification_spec.rb +0 -154
  188. data/spec/unit/mutant/meta/example_spec.rb +0 -34
  189. data/spec/unit/mutant/mutation_spec.rb +0 -140
  190. data/spec/unit/mutant/mutator/node_spec.rb +0 -47
  191. data/spec/unit/mutant/mutator_spec.rb +0 -21
  192. data/spec/unit/mutant/parallel/driver_spec.rb +0 -126
  193. data/spec/unit/mutant/parallel/source/array_spec.rb +0 -57
  194. data/spec/unit/mutant/parallel/worker_spec.rb +0 -206
  195. data/spec/unit/mutant/parallel_spec.rb +0 -115
  196. data/spec/unit/mutant/parser_spec.rb +0 -26
  197. data/spec/unit/mutant/range_spec.rb +0 -141
  198. data/spec/unit/mutant/registry_spec.rb +0 -74
  199. data/spec/unit/mutant/reporter/cli/printer/config_spec.rb +0 -17
  200. data/spec/unit/mutant/reporter/cli/printer/env_progress_spec.rb +0 -85
  201. data/spec/unit/mutant/reporter/cli/printer/env_result_spec.rb +0 -45
  202. data/spec/unit/mutant/reporter/cli/printer/isolation_result_spec.rb +0 -132
  203. data/spec/unit/mutant/reporter/cli/printer/mutation_progress_result_spec.rb +0 -25
  204. data/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb +0 -153
  205. data/spec/unit/mutant/reporter/cli/printer/status_progressive_spec.rb +0 -45
  206. data/spec/unit/mutant/reporter/cli/printer/subject_progress_spec.rb +0 -36
  207. data/spec/unit/mutant/reporter/cli/printer/subject_result_spec.rb +0 -44
  208. data/spec/unit/mutant/reporter/cli/printer/test_result_spec.rb +0 -16
  209. data/spec/unit/mutant/reporter/cli/printer_spec.rb +0 -163
  210. data/spec/unit/mutant/reporter/cli_spec.rb +0 -137
  211. data/spec/unit/mutant/reporter/null_spec.rb +0 -14
  212. data/spec/unit/mutant/reporter/sequence_spec.rb +0 -31
  213. data/spec/unit/mutant/repository/diff/ranges_spec.rb +0 -180
  214. data/spec/unit/mutant/repository/diff_spec.rb +0 -122
  215. data/spec/unit/mutant/repository/subject_filter_spec.rb +0 -30
  216. data/spec/unit/mutant/require_highjack_spec.rb +0 -73
  217. data/spec/unit/mutant/result/class_methods_spec.rb +0 -51
  218. data/spec/unit/mutant/result/env_spec.rb +0 -161
  219. data/spec/unit/mutant/result/mutation_spec.rb +0 -70
  220. data/spec/unit/mutant/result/subject_spec.rb +0 -111
  221. data/spec/unit/mutant/result/test_spec.rb +0 -14
  222. data/spec/unit/mutant/result_spec.rb +0 -33
  223. data/spec/unit/mutant/runner/sink_spec.rb +0 -174
  224. data/spec/unit/mutant/runner_spec.rb +0 -121
  225. data/spec/unit/mutant/selector/expression_spec.rb +0 -62
  226. data/spec/unit/mutant/selector/null_spec.rb +0 -17
  227. data/spec/unit/mutant/subject/method/instance_spec.rb +0 -181
  228. data/spec/unit/mutant/subject/method/metaclass_spec.rb +0 -63
  229. data/spec/unit/mutant/subject/method/singleton_spec.rb +0 -61
  230. data/spec/unit/mutant/subject_spec.rb +0 -93
  231. data/spec/unit/mutant/transform/array_spec.rb +0 -92
  232. data/spec/unit/mutant/transform/bool_spec.rb +0 -63
  233. data/spec/unit/mutant/transform/error_spec.rb +0 -132
  234. data/spec/unit/mutant/transform/exception_spec.rb +0 -44
  235. data/spec/unit/mutant/transform/hash_spec.rb +0 -236
  236. data/spec/unit/mutant/transform/index_spec.rb +0 -92
  237. data/spec/unit/mutant/transform/named_spec.rb +0 -49
  238. data/spec/unit/mutant/transform/primitive_spec.rb +0 -56
  239. data/spec/unit/mutant/transform/sequence_spec.rb +0 -98
  240. data/spec/unit/mutant/util/one_spec.rb +0 -22
  241. data/spec/unit/mutant/warnings_spec.rb +0 -89
  242. data/spec/unit/mutant/world_spec.rb +0 -63
  243. data/spec/unit/mutant/zombifier_spec.rb +0 -122
  244. data/test_app/.rspec +0 -1
  245. data/test_app/Gemfile.minitest +0 -4
  246. data/test_app/Gemfile.rspec3.8 +0 -7
  247. data/test_app/lib/test_app.rb +0 -110
  248. data/test_app/lib/test_app/literal.rb +0 -35
  249. data/test_app/lib/test_app/metaclasses.rb +0 -108
  250. data/test_app/spec/spec_helper.rb +0 -9
  251. data/test_app/spec/unit/test_app/literal_spec.rb +0 -20
  252. 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,108 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Matcher::Method::Metaclass, '#call' do
4
- SOURCE_PATH = 'test_app/lib/test_app/metaclasses.rb'
5
- subject { object.call(env) }
6
-
7
- let(:object) { described_class.new(scope, method) }
8
- let(:method) { scope.method(method_name) }
9
- let(:type) { :def }
10
- let(:method_name) { :foo }
11
- let(:method_arity) { 0 }
12
- let(:base) { TestApp::MetaclassMethodTests }
13
- let(:source_path) { MutantSpec::ROOT.join(SOURCE_PATH) }
14
- let(:warnings) { instance_double(Mutant::Warnings) }
15
-
16
- let(:world) do
17
- instance_double(
18
- Mutant::World,
19
- pathname: Pathname,
20
- warnings: warnings
21
- )
22
- end
23
-
24
- let(:env) do
25
- instance_double(
26
- Mutant::Env,
27
- config: Mutant::Config::DEFAULT,
28
- parser: Fixtures::TEST_ENV.parser,
29
- world: world
30
- )
31
- end
32
-
33
- def name
34
- node.children.fetch(0)
35
- end
36
-
37
- def arguments
38
- node.children.fetch(1)
39
- end
40
-
41
- context 'when also defined on lvar' do
42
- let(:scope) { base::DefinedOnLvar }
43
- let(:expected_warnings) do
44
- [
45
- 'Can only match :def inside :sclass on :self or :const, got :sclass on :lvar unable to match'
46
- ]
47
- end
48
-
49
- include_examples 'skipped candidate'
50
- end
51
-
52
- context 'when defined on self' do
53
- let(:scope) { base::DefinedOnSelf }
54
- let(:method_line) { 7 }
55
-
56
- it_should_behave_like 'a method matcher'
57
-
58
- context 'when scope is a metaclass' do
59
- let(:scope) { base::DefinedOnSelf::InsideMetaclass.metaclass }
60
- let(:method_line) { 28 }
61
-
62
- it_should_behave_like 'a method matcher'
63
- end
64
- end
65
-
66
- context 'when defined on constant' do
67
- context 'inside namespace' do
68
- let(:scope) { base::DefinedOnConstant::InsideNamespace }
69
- let(:method_line) { 44 }
70
-
71
- it_should_behave_like 'a method matcher'
72
- end
73
-
74
- context 'outside namespace' do
75
- let(:scope) { base::DefinedOnConstant::OutsideNamespace }
76
- let(:method_line) { 52 }
77
-
78
- it_should_behave_like 'a method matcher'
79
- end
80
- end
81
-
82
- context 'when defined multiple times in the same line' do
83
- context 'with method on different scope' do
84
- let(:scope) { base::DefinedMultipleTimes::SameLine::DifferentScope }
85
- let(:method_line) { 76 }
86
- let(:method_arity) { 1 }
87
-
88
- it_should_behave_like 'a method matcher'
89
- end
90
-
91
- context 'with different name' do
92
- let(:scope) { base::DefinedMultipleTimes::SameLine::DifferentName }
93
- let(:method_line) { 80 }
94
-
95
- it_should_behave_like 'a method matcher'
96
- end
97
- end
98
-
99
- # tests that the evaluator correctly returns nil when the metaclass doesn't
100
- # directly contain the method
101
- context 'when defined inside a class in a metaclass' do
102
- let(:scope) { base::NotActuallyInAMetaclass }
103
- let(:method) { scope.metaclass::SomeClass.new.method(:foo) }
104
- let(:method_line) { 93 }
105
-
106
- it { is_expected.to be_empty }
107
- end
108
- 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