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::Expression::Method do
4
- let(:object) { parse_expression(input) }
5
- let(:env) { Fixtures::TEST_ENV }
6
- let(:instance_method) { 'TestApp::Literal#string' }
7
- let(:singleton_method) { 'TestApp::Literal.string' }
8
-
9
- describe '#match_length' do
10
- let(:input) { instance_method }
11
-
12
- subject { object.match_length(other) }
13
-
14
- context 'when other is an equivalent expression' do
15
- let(:other) { parse_expression(object.syntax) }
16
-
17
- it { should be(object.syntax.length) }
18
- end
19
-
20
- context 'when other is an unequivalent expression' do
21
- let(:other) { parse_expression('Foo*') }
22
-
23
- it { should be(0) }
24
- end
25
- end
26
-
27
- describe '#matcher' do
28
- subject { object.matcher }
29
-
30
- context 'with an instance method' do
31
- let(:input) { instance_method }
32
-
33
- it 'returns correct matcher' do
34
- expect(subject.call(env).map(&:expression)).to eql([object])
35
- end
36
- end
37
-
38
- context 'with a singleton method' do
39
- let(:input) { singleton_method }
40
-
41
- it 'returns correct matcher' do
42
- expect(subject.call(env).map(&:expression)).to eql([object])
43
- end
44
- end
45
- end
46
-
47
- describe '#syntax' do
48
- subject { object.syntax }
49
-
50
- context 'on instance method' do
51
- let(:input) { instance_method }
52
-
53
- it { should eql(instance_method) }
54
- end
55
-
56
- context 'on singleton method' do
57
- let(:input) { singleton_method }
58
-
59
- it { should eql(singleton_method) }
60
- end
61
- end
62
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Expression::Methods do
4
- let(:object) { described_class.new(attributes) }
5
-
6
- describe '#match_length' do
7
- let(:attributes) { { scope_name: 'TestApp::Literal', scope_symbol: '#' } }
8
-
9
- subject { object.match_length(other) }
10
-
11
- context 'when other is an equivalent expression' do
12
- let(:other) { parse_expression(object.syntax) }
13
-
14
- it { should be(object.syntax.length) }
15
- end
16
-
17
- context 'when other is matched' do
18
- let(:other) { parse_expression('TestApp::Literal#foo') }
19
-
20
- it { should be(object.syntax.length) }
21
- end
22
-
23
- context 'when other is an not matched expression' do
24
- let(:other) { parse_expression('Foo*') }
25
-
26
- it { should be(0) }
27
- end
28
- end
29
-
30
- describe '#syntax' do
31
- subject { object.syntax }
32
-
33
- context 'with an instance method' do
34
- let(:attributes) { { scope_name: 'TestApp::Literal', scope_symbol: '#' } }
35
-
36
- it { should eql('TestApp::Literal#') }
37
- end
38
-
39
- context 'with a singleton method' do
40
- let(:attributes) { { scope_name: 'TestApp::Literal', scope_symbol: '.' } }
41
-
42
- it { should eql('TestApp::Literal.') }
43
- end
44
- end
45
-
46
- describe '#matcher' do
47
- subject { object.matcher }
48
-
49
- context 'with an instance method' do
50
- let(:attributes) { { scope_name: 'TestApp::Literal', scope_symbol: '#' } }
51
-
52
- it { should eql(Mutant::Matcher::Methods::Instance.new(TestApp::Literal)) }
53
- end
54
-
55
- context 'with a singleton method' do
56
- let(:attributes) { { scope_name: 'TestApp::Literal', scope_symbol: '.' } }
57
-
58
- it { should eql(Mutant::Matcher::Methods::Singleton.new(TestApp::Literal)) }
59
- end
60
- end
61
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Expression::Namespace::Exact do
4
- let(:object) { parse_expression(input) }
5
- let(:input) { 'TestApp::Literal' }
6
-
7
- describe '#matcher' do
8
- subject { object.matcher }
9
-
10
- it { should eql(Mutant::Matcher::Scope.new(TestApp::Literal)) }
11
- end
12
-
13
- describe '#match_length' do
14
- subject { object.match_length(other) }
15
-
16
- context 'when other is an equivalent expression' do
17
- let(:other) { parse_expression(object.syntax) }
18
-
19
- it { should be(object.syntax.length) }
20
- end
21
-
22
- context 'when other is an unequivalent expression' do
23
- let(:other) { parse_expression('Foo*') }
24
-
25
- it { should be(0) }
26
- end
27
- end
28
- end
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Expression::Namespace::Recursive do
4
- let(:object) { parse_expression(input) }
5
- let(:input) { 'TestApp::Literal*' }
6
-
7
- describe '#matcher' do
8
- subject { object.matcher }
9
-
10
- it { should eql(Mutant::Matcher::Namespace.new(object)) }
11
- end
12
-
13
- describe '#syntax' do
14
- subject { object.syntax }
15
-
16
- it { should eql(input) }
17
- end
18
-
19
- describe '#match_length' do
20
- subject { object.match_length(other) }
21
-
22
- context 'when other is an equivalent expression' do
23
- let(:other) { parse_expression(object.syntax) }
24
-
25
- it { should be(object.syntax.length) }
26
- end
27
-
28
- context 'when other expression describes a shorter prefix' do
29
- let(:other) { parse_expression('TestApp') }
30
-
31
- it { should be(0) }
32
- end
33
-
34
- context 'when other expression describes adjacent namespace' do
35
- let(:other) { parse_expression('TestApp::LiteralFoo') }
36
-
37
- it { should be(0) }
38
- end
39
-
40
- context 'when other expression describes root namespace' do
41
- let(:other) { parse_expression('TestApp::Literal') }
42
-
43
- it { should be(16) }
44
- end
45
-
46
- context 'when other expression describes a longer prefix' do
47
- context 'on constants' do
48
- let(:other) { parse_expression('TestApp::Literal::Deep') }
49
-
50
- it { should be(input[0..-2].length) }
51
- end
52
-
53
- context 'on singleton method' do
54
- let(:other) { parse_expression('TestApp::Literal.foo') }
55
-
56
- it { should be(input[0..-2].length) }
57
- end
58
-
59
- context 'on instance method' do
60
- let(:other) { parse_expression('TestApp::Literal#foo') }
61
-
62
- it { should be(input[0..-2].length) }
63
- end
64
- end
65
- end
66
- end
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Expression::Parser do
4
- subject do
5
- Mutant::Config::DEFAULT.expression_parser
6
- end
7
-
8
- def apply
9
- subject.apply(input)
10
- end
11
-
12
- describe '#apply' do
13
- context 'on a valid expression' do
14
- let(:input) { 'Foo' }
15
-
16
- it 'returns sucess' do
17
- expect(apply).to eql(
18
- Mutant::Either::Right.new(
19
- Mutant::Expression::Namespace::Exact.new(scope_name: 'Foo')
20
- )
21
- )
22
- end
23
- end
24
-
25
- context 'on invalid input' do
26
- let(:input) { 'foo bar' }
27
-
28
- it 'returns returns error' do
29
- expect(apply).to eql(
30
- Mutant::Either::Left.new('Expression: "foo bar" is invalid')
31
- )
32
- end
33
- end
34
-
35
- context 'on ambiguous input' do
36
- subject do
37
- described_class.new([test_a, test_b])
38
- end
39
-
40
- let(:test_a) do
41
- Class.new(Mutant::Expression) do
42
- include Anima.new
43
- const_set(:REGEXP, /\Atest-syntax\z/.freeze)
44
- end
45
- end
46
-
47
- let(:test_b) do
48
- Class.new(Mutant::Expression) do
49
- include Anima.new
50
- const_set(:REGEXP, /^test-syntax$/.freeze)
51
- end
52
- end
53
-
54
- let(:input) { 'test-syntax' }
55
-
56
- it 'returns error' do
57
- expect(apply).to eql(
58
- Mutant::Either::Left.new(
59
- 'Expression: "test-syntax" is ambiguous'
60
- )
61
- )
62
- end
63
- end
64
- end
65
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Expression do
4
- describe '#prefix?' do
5
- let(:object) { parse_expression('Foo*') }
6
-
7
- subject { object.prefix?(other) }
8
-
9
- context 'when object is a prefix of other' do
10
- let(:other) { parse_expression('Foo::Bar') }
11
-
12
- it { should be(true) }
13
- end
14
-
15
- context 'when other is not a prefix of other' do
16
- let(:other) { parse_expression('Bar') }
17
-
18
- it { should be(false) }
19
- end
20
- end
21
-
22
- describe '.try_parse' do
23
- let(:object) do
24
- Class.new(described_class) do
25
- include Anima.new(:foo)
26
-
27
- const_set(:REGEXP, /(?<foo>foo)/)
28
- end
29
- end
30
-
31
- subject { object.try_parse(input) }
32
-
33
- context 'good input' do
34
- let(:input) { 'foo' }
35
-
36
- it { should eql(object.new(foo: 'foo')) }
37
- end
38
-
39
- context 'bad input' do
40
- let(:input) { 'bar' }
41
-
42
- it { should be(nil) }
43
- end
44
- end
45
- end
@@ -1,201 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'mutant/integration/rspec'
4
-
5
- RSpec.describe Mutant::Integration::Rspec do
6
- let(:object) { described_class.new(Mutant::Config::DEFAULT) }
7
-
8
- let(:rspec_options) { instance_double(RSpec::Core::ConfigurationOptions) }
9
- let(:rspec_runner) { instance_double(RSpec::Core::Runner) }
10
-
11
- let(:example_a) do
12
- double(
13
- 'Example A',
14
- metadata: {
15
- location: 'example-a-location',
16
- full_description: 'example-a-full-description'
17
- }
18
- )
19
- end
20
-
21
- let(:example_b) do
22
- double(
23
- 'Example B',
24
- metadata: {
25
- location: 'example-b-location',
26
- full_description: 'example-b-full-description',
27
- mutant: false
28
- }
29
- )
30
- end
31
-
32
- let(:example_c) do
33
- double(
34
- 'Example C',
35
- metadata: {
36
- location: 'example-c-location',
37
- full_description: 'Example::C blah'
38
- }
39
- )
40
- end
41
-
42
- let(:example_d) do
43
- double(
44
- 'Example D',
45
- metadata: {
46
- location: 'example-d-location',
47
- full_description: "Example::D\nblah"
48
- }
49
- )
50
- end
51
-
52
- let(:example_e) do
53
- double(
54
- 'Example E',
55
- metadata: {
56
- location: 'example-e-location',
57
- full_description: 'Example::E',
58
- mutant_expression: 'Foo'
59
- }
60
- )
61
- end
62
-
63
- let(:examples) do
64
- [
65
- example_a,
66
- example_b,
67
- example_c,
68
- example_d,
69
- example_e
70
- ]
71
- end
72
-
73
- let(:example_groups) do
74
- [
75
- double(
76
- 'root example group',
77
- descendants: [
78
- double('example group', examples: examples)
79
- ]
80
- )
81
- ]
82
- end
83
-
84
- let(:filtered_examples) do
85
- {
86
- double('Key') => examples.dup
87
- }
88
- end
89
-
90
- let(:world) do
91
- double(
92
- 'world',
93
- example_groups: example_groups,
94
- filtered_examples: filtered_examples
95
- )
96
- end
97
-
98
- let(:all_tests) do
99
- [
100
- Mutant::Test.new(
101
- id: 'rspec:0:example-a-location/example-a-full-description',
102
- expression: parse_expression('*')
103
- ),
104
- Mutant::Test.new(
105
- id: 'rspec:1:example-c-location/Example::C blah',
106
- expression: parse_expression('Example::C')
107
- ),
108
- Mutant::Test.new(
109
- id: "rspec:2:example-d-location/Example::D\nblah",
110
- expression: parse_expression('*')
111
- ),
112
- Mutant::Test.new(
113
- id: 'rspec:3:example-e-location/Example::E',
114
- expression: parse_expression('Foo')
115
- )
116
- ]
117
- end
118
-
119
- before do
120
- expect(RSpec::Core::ConfigurationOptions).to receive(:new)
121
- .with(%w[spec --fail-fast])
122
- .and_return(rspec_options)
123
-
124
- expect(RSpec::Core::Runner).to receive(:new)
125
- .with(rspec_options)
126
- .and_return(rspec_runner)
127
-
128
- expect(RSpec).to receive_messages(world: world)
129
- allow(Mutant::Timer).to receive_messages(now: Mutant::Timer.now)
130
- end
131
-
132
- describe '#all_tests' do
133
- subject { object.all_tests }
134
-
135
- it { should eql(all_tests) }
136
- end
137
-
138
- describe '#setup' do
139
- subject { object.setup }
140
-
141
- before do
142
- expect(rspec_runner).to receive(:setup) do |error, output|
143
- expect(error).to be($stderr)
144
- output.write('foo')
145
- end
146
- end
147
-
148
- it { should be(object) }
149
- end
150
-
151
- describe '#call' do
152
- subject { object.call(tests) }
153
-
154
- before do
155
- expect(rspec_runner).to receive(:setup) do |_errors, output|
156
- output.write('the-test-output')
157
- end
158
-
159
- object.setup
160
- end
161
-
162
- let(:tests) { [all_tests.fetch(0)] }
163
-
164
- before do
165
- expect(world).to receive(:ordered_example_groups) do
166
- filtered_examples.values.flatten
167
- end
168
- expect(rspec_runner).to receive(:run_specs).with([example_a]).and_return(exit_status)
169
- end
170
-
171
- context 'on unsuccessful exit' do
172
- let(:exit_status) { 1 }
173
-
174
- it 'should return failed result' do
175
- expect(subject).to eql(
176
- Mutant::Result::Test.new(
177
- output: 'the-test-output',
178
- passed: false,
179
- runtime: 0.0,
180
- tests: tests
181
- )
182
- )
183
- end
184
- end
185
-
186
- context 'on successful exit' do
187
- let(:exit_status) { 0 }
188
-
189
- it 'should return passed result' do
190
- expect(subject).to eql(
191
- Mutant::Result::Test.new(
192
- output: 'the-test-output',
193
- passed: true,
194
- runtime: 0.0,
195
- tests: tests
196
- )
197
- )
198
- end
199
- end
200
- end
201
- end