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,92 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Transform::Index do
4
- subject { described_class.new(index: index, transform: transform) }
5
-
6
- let(:index) { 1 }
7
- let(:transform) { Mutant::Transform::Boolean.new }
8
-
9
- describe '#slug' do
10
- def apply
11
- subject.slug
12
- end
13
-
14
- it 'retursn expected value' do
15
- expect(apply).to eql('1')
16
- end
17
-
18
- it 'returns frozen value' do
19
- expect(apply.frozen?).to be(true)
20
- end
21
-
22
- it 'returns idempotent value' do
23
- expect(apply).to be(apply)
24
- end
25
- end
26
-
27
- describe '#apply' do
28
- def apply
29
- subject.apply(input)
30
- end
31
-
32
- context 'on valid input' do
33
- let(:input) { true }
34
-
35
- it 'returns sucess' do
36
- expect(apply).to eql(Mutant::Either::Right.new(input))
37
- end
38
- end
39
-
40
- context 'on nvalid input' do
41
- let(:input) { 1 }
42
-
43
- let(:boolean_error) do
44
- Mutant::Transform::Error.new(
45
- cause: nil,
46
- input: input,
47
- message: 'Expected: boolean but got: 1',
48
- transform: transform
49
- )
50
- end
51
-
52
- let(:error) do
53
- Mutant::Transform::Error.new(
54
- cause: boolean_error,
55
- input: input,
56
- message: nil,
57
- transform: subject
58
- )
59
- end
60
-
61
- it 'returns failure' do
62
- expect(apply).to eql(Mutant::Either::Left.new(error))
63
- end
64
- end
65
- end
66
-
67
- describe '.wrap' do
68
- def apply
69
- described_class.wrap(error, index)
70
- end
71
-
72
- let(:error) do
73
- Mutant::Transform::Error.new(
74
- cause: :nil,
75
- input: 1,
76
- message: nil,
77
- transform: transform
78
- )
79
- end
80
-
81
- it 'returns wrapped error' do
82
- expect(apply).to eql(
83
- Mutant::Transform::Error.new(
84
- cause: error,
85
- input: 1,
86
- message: nil,
87
- transform: described_class.new(index: index, transform: transform)
88
- )
89
- )
90
- end
91
- end
92
- end
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Transform::Named do
4
- subject { described_class.new(name, transform) }
5
-
6
- let(:name) { 'transform-name' }
7
- let(:transform) { Mutant::Transform::Boolean.new }
8
-
9
- describe '#slug' do
10
- def apply
11
- subject.slug
12
- end
13
-
14
- it 'returns name' do
15
- expect(apply).to be(name)
16
- end
17
- end
18
-
19
- describe '#apply' do
20
- def apply
21
- subject.apply(input)
22
- end
23
-
24
- context 'on valid input' do
25
- let(:input) { true }
26
-
27
- it 'returns sucess' do
28
- expect(apply).to eql(Mutant::Either::Right.new(input))
29
- end
30
- end
31
-
32
- context 'on invalid input' do
33
- let(:input) { 1 }
34
-
35
- let(:error) do
36
- Mutant::Transform::Error.new(
37
- cause: transform.apply(input).from_left,
38
- input: input,
39
- message: nil,
40
- transform: subject
41
- )
42
- end
43
-
44
- it 'returns failure' do
45
- expect(apply).to eql(Mutant::Either::Left.new(error))
46
- end
47
- end
48
- end
49
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Transform::Primitive do
4
- subject { described_class.new(primitive) }
5
-
6
- let(:primitive) { String }
7
-
8
- describe '#slug' do
9
- def apply
10
- subject.slug
11
- end
12
-
13
- it 'returns strigified primitive' do
14
- expect(apply).to eql('String')
15
- end
16
-
17
- it 'is idempotent' do
18
- expect(apply).to be(apply)
19
- end
20
-
21
- it 'is frozen' do
22
- expect(apply.frozen?).to be(true)
23
- end
24
- end
25
-
26
- describe '#apply' do
27
- def apply
28
- subject.apply(input)
29
- end
30
-
31
- context 'on string input' do
32
- let(:input) { 'some-string' }
33
-
34
- it 'returns sucess' do
35
- expect(apply).to eql(Mutant::Either::Right.new(input))
36
- end
37
- end
38
-
39
- context 'on other input' do
40
- let(:input) { 1 }
41
-
42
- let(:error) do
43
- Mutant::Transform::Error.new(
44
- cause: nil,
45
- input: input,
46
- message: 'Expected: String but got: Integer',
47
- transform: subject
48
- )
49
- end
50
-
51
- it 'returns failure' do
52
- expect(apply).to eql(Mutant::Either::Left.new(error))
53
- end
54
- end
55
- end
56
- end
@@ -1,98 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Transform::Sequence do
4
- subject { described_class.new(steps) }
5
-
6
- let(:steps) do
7
- [
8
- hash_transform,
9
- hash_symbolize
10
- ]
11
- end
12
-
13
- let(:hash_transform) do
14
- Mutant::Transform::Hash.new(optional: [], required: [key_transform])
15
- end
16
-
17
- let(:key_transform) do
18
- Mutant::Transform::Hash::Key.new('foo', Mutant::Transform::Boolean.new)
19
- end
20
-
21
- let(:boolean_transform) do
22
- Mutant::Transform::Boolean.new
23
- end
24
-
25
- let(:hash_symbolize) do
26
- Mutant::Transform::Hash::Symbolize.new
27
- end
28
-
29
- describe '#apply' do
30
- def apply
31
- subject.apply(input)
32
- end
33
-
34
- context 'on valid input' do
35
- let(:input) { { 'foo' => true } }
36
-
37
- it 'returns success' do
38
- expect(apply).to eql(Mutant::Either::Right.new(foo: true))
39
- end
40
- end
41
-
42
- context 'on invalid input' do
43
- let(:input) { { 'foo' => 1 } }
44
-
45
- let(:boolean_error) do
46
- Mutant::Transform::Error.new(
47
- cause: nil,
48
- input: 1,
49
- message: 'Expected: boolean but got: 1',
50
- transform: boolean_transform
51
- )
52
- end
53
-
54
- let(:key_error) do
55
- Mutant::Transform::Error.new(
56
- cause: boolean_error,
57
- input: 1,
58
- message: nil,
59
- transform: key_transform
60
- )
61
- end
62
-
63
- let(:hash_error) do
64
- Mutant::Transform::Error.new(
65
- cause: key_error,
66
- input: input,
67
- message: nil,
68
- transform: hash_transform
69
- )
70
- end
71
-
72
- let(:index_error) do
73
- Mutant::Transform::Error.new(
74
- cause: hash_error,
75
- input: input,
76
- message: nil,
77
- transform: Mutant::Transform::Index.new(
78
- index: 0,
79
- transform: hash_transform
80
- )
81
- )
82
- end
83
-
84
- let(:error) do
85
- Mutant::Transform::Error.new(
86
- cause: index_error,
87
- input: input,
88
- message: nil,
89
- transform: subject
90
- )
91
- end
92
-
93
- it 'returns failure' do
94
- expect(apply).to eql(Mutant::Either::Left.new(error))
95
- end
96
- end
97
- end
98
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Util, '.one' do
4
- let(:first) { instance_double(Object) }
5
- let(:array) { instance_double(Array, one?: true, first: first) }
6
-
7
- it 'returns first element' do
8
- expect(described_class.one(array)).to be(first)
9
- end
10
-
11
- it 'fails if the list is empty' do
12
- expect { described_class.one([]) }
13
- .to raise_error(described_class::SizeError)
14
- .with_message('expected size to be exactly 1 but size was 0')
15
- end
16
-
17
- it 'fails if the list has more than one element' do
18
- expect { described_class.one([1, 2]) }
19
- .to raise_error(described_class::SizeError)
20
- .with_message('expected size to be exactly 1 but size was 2')
21
- end
22
- end
@@ -1,89 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Warnings do
4
- subject { described_class.new(warning_module) }
5
-
6
- before do
7
- subject # make sure we infect the module in any case
8
- end
9
-
10
- let(:original_messages) do
11
- []
12
- end
13
-
14
- let(:warning_module) do
15
- original_messages = original_messages()
16
-
17
- # Simulation of corelib `Warning` module
18
- Module.new do
19
- module_function def warn(*arguments)
20
- messages << arguments
21
- end
22
-
23
- module_function define_method(:messages) { original_messages }
24
- end
25
- end
26
-
27
- def cause_warnings
28
- original_messages.clear
29
-
30
- warning_module = warning_module()
31
-
32
- warning_module.warn('warning-a')
33
-
34
- Class
35
- .new { include warning_module }
36
- .new
37
- .instance_eval { warn('warning-b') }
38
- end
39
-
40
- describe '#call' do
41
- def apply
42
- subject.call { cause_warnings }
43
- end
44
-
45
- def expect_captured_messages(captured_messages)
46
- expect(captured_messages).to eql([%w[warning-a], %w[warning-b]])
47
- expect(captured_messages.frozen?).to eql(true)
48
- expect(captured_messages.map(&:frozen?)).to eql([true, true])
49
- expect(captured_messages.flat_map(&:frozen?)).to eql([true, true])
50
- expect(original_messages).to eql([])
51
- end
52
-
53
- def expect_original_messages
54
- expect(original_messages).to eql([%w[warning-a], %w[warning-b]])
55
- end
56
-
57
- it 'captures expected warnings during block execution' do
58
- expect_captured_messages(apply)
59
- expect(original_messages).to eql([])
60
- end
61
-
62
- it 'captures expected warnings during repeated block execution' do
63
- expect_captured_messages(apply)
64
- expect_captured_messages(apply)
65
- end
66
-
67
- it 'does use original implementation without block execution' do
68
- cause_warnings
69
- expect_original_messages
70
- end
71
-
72
- it 'does use original implementation before block execution' do
73
- cause_warnings
74
- expect_original_messages
75
- expect_captured_messages(apply)
76
- end
77
-
78
- it 'does use original implementation after block execution' do
79
- expect_captured_messages(apply)
80
- cause_warnings
81
- expect_original_messages
82
- end
83
-
84
- it 'rejects re-entrant use' do
85
- expect { subject.call { subject.call } }
86
- .to raise_error(described_class::RecursiveUseError)
87
- end
88
- end
89
- end
@@ -1,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::World do
4
- subject do
5
- Mutant::WORLD
6
- end
7
-
8
- describe '#inspect' do
9
- def apply
10
- subject.inspect
11
- end
12
-
13
- it 'returns expected value' do
14
- expect(apply).to eql('#<Mutant::World>')
15
- end
16
-
17
- it 'is frozen' do
18
- expect(apply.frozen?).to be(true)
19
- end
20
-
21
- it 'is idempotent' do
22
- expect(apply).to be(apply)
23
- end
24
- end
25
-
26
- describe '#capture_stdout' do
27
- def apply
28
- subject.capture_stdout(command)
29
- end
30
-
31
- let(:open3) { class_double(Open3) }
32
- let(:stdout) { instance_double(String, :stdout) }
33
- let(:subject) { super().with(open3: open3) }
34
- let(:command) { %w[foo bar baz] }
35
-
36
- let(:process_status) do
37
- instance_double(
38
- Process::Status,
39
- success?: success?
40
- )
41
- end
42
-
43
- before do
44
- allow(open3).to receive_messages(capture2: [stdout, process_status])
45
- end
46
-
47
- context 'when process exists successful' do
48
- let(:success?) { true }
49
-
50
- it 'returns stdout' do
51
- expect(apply).to eql(Mutant::Either::Right.new(stdout))
52
- end
53
- end
54
-
55
- context 'when process exists unsuccessful' do
56
- let(:success?) { false }
57
-
58
- it 'returns stdout' do
59
- expect(apply).to eql(Mutant::Either::Left.new("Command #{command.inspect} failed!"))
60
- end
61
- end
62
- end
63
- end