mutant 0.9.10 → 0.10.0

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 (254) hide show
  1. checksums.yaml +4 -4
  2. data/bin/mutant +16 -11
  3. data/lib/mutant.rb +8 -4
  4. data/lib/mutant/bootstrap.rb +14 -1
  5. data/lib/mutant/cli.rb +9 -162
  6. data/lib/mutant/cli/command.rb +196 -0
  7. data/lib/mutant/cli/command/root.rb +13 -0
  8. data/lib/mutant/cli/command/run.rb +151 -0
  9. data/lib/mutant/cli/command/subscription.rb +54 -0
  10. data/lib/mutant/expression.rb +0 -1
  11. data/lib/mutant/isolation.rb +1 -1
  12. data/lib/mutant/isolation/fork.rb +2 -2
  13. data/lib/mutant/isolation/none.rb +1 -1
  14. data/lib/mutant/license.rb +9 -35
  15. data/lib/mutant/license/subscription.rb +31 -9
  16. data/lib/mutant/license/subscription/commercial.rb +2 -4
  17. data/lib/mutant/license/subscription/opensource.rb +7 -7
  18. data/lib/mutant/matcher/config.rb +2 -0
  19. data/lib/mutant/meta/example.rb +16 -4
  20. data/lib/mutant/meta/example/dsl.rb +33 -16
  21. data/lib/mutant/meta/example/verification.rb +70 -28
  22. data/lib/mutant/minitest/coverage.rb +53 -0
  23. data/lib/mutant/mutator/node.rb +2 -2
  24. data/lib/mutant/mutator/node/block_pass.rb +29 -0
  25. data/lib/mutant/mutator/node/{dstr.rb → dynamic_literal.rb} +7 -5
  26. data/lib/mutant/mutator/node/index.rb +4 -4
  27. data/lib/mutant/mutator/node/literal/range.rb +5 -2
  28. data/lib/mutant/mutator/node/named_value/variable_assignment.rb +1 -1
  29. data/lib/mutant/mutator/node/noop.rb +1 -1
  30. data/lib/mutant/mutator/node/op_asgn.rb +15 -1
  31. data/lib/mutant/mutator/node/send.rb +25 -1
  32. data/lib/mutant/mutator/node/send/attribute_assignment.rb +1 -0
  33. data/lib/mutant/reporter/cli/printer/isolation_result.rb +9 -3
  34. data/lib/mutant/subject/method/instance.rb +1 -1
  35. data/lib/mutant/version.rb +1 -1
  36. metadata +18 -336
  37. data/.github/workflows/ci.yml +0 -121
  38. data/.gitignore +0 -38
  39. data/.rspec +0 -5
  40. data/.rubocop.yml +0 -210
  41. data/Changelog.md +0 -87
  42. data/Gemfile +0 -7
  43. data/Gemfile.lock +0 -107
  44. data/Gemfile.shared +0 -10
  45. data/README.md +0 -199
  46. data/Rakefile +0 -5
  47. data/config/devtools.yml +0 -2
  48. data/config/reek.yml +0 -139
  49. data/config/yardstick.yml +0 -2
  50. data/docs/commercial-support.md +0 -14
  51. data/docs/concurrency.md +0 -39
  52. data/docs/incremental.md +0 -76
  53. data/docs/known-problems.md +0 -30
  54. data/docs/limitations.md +0 -50
  55. data/docs/mutant-minitest.md +0 -149
  56. data/docs/mutant-rspec.md +0 -130
  57. data/docs/nomenclature.md +0 -82
  58. data/docs/reading-reports.md +0 -74
  59. data/lib/mutant/mutator/node/dsym.rb +0 -22
  60. data/meta/and.rb +0 -13
  61. data/meta/and_asgn.rb +0 -14
  62. data/meta/array.rb +0 -27
  63. data/meta/begin.rb +0 -20
  64. data/meta/block.rb +0 -199
  65. data/meta/block_pass.rb +0 -8
  66. data/meta/blockarg.rb +0 -10
  67. data/meta/break.rb +0 -9
  68. data/meta/case.rb +0 -217
  69. data/meta/casgn.rb +0 -25
  70. data/meta/cbase.rb +0 -8
  71. data/meta/class.rb +0 -12
  72. data/meta/const.rb +0 -17
  73. data/meta/csend.rb +0 -10
  74. data/meta/cvar.rb +0 -7
  75. data/meta/cvasgn.rb +0 -9
  76. data/meta/date.rb +0 -59
  77. data/meta/def.rb +0 -196
  78. data/meta/defined.rb +0 -9
  79. data/meta/dstr.rb +0 -13
  80. data/meta/dsym.rb +0 -14
  81. data/meta/ensure.rb +0 -8
  82. data/meta/false.rb +0 -7
  83. data/meta/file.rb +0 -5
  84. data/meta/float.rb +0 -37
  85. data/meta/gvar.rb +0 -7
  86. data/meta/gvasgn.rb +0 -9
  87. data/meta/hash.rb +0 -20
  88. data/meta/if.rb +0 -72
  89. data/meta/index.rb +0 -133
  90. data/meta/indexasgn.rb +0 -31
  91. data/meta/int.rb +0 -18
  92. data/meta/ivar.rb +0 -8
  93. data/meta/ivasgn.rb +0 -22
  94. data/meta/kwarg.rb +0 -10
  95. data/meta/kwbegin.rb +0 -8
  96. data/meta/kwoptarg.rb +0 -13
  97. data/meta/lambda.rb +0 -23
  98. data/meta/line.rb +0 -5
  99. data/meta/lvar.rb +0 -16
  100. data/meta/lvasgn.rb +0 -24
  101. data/meta/masgn.rb +0 -7
  102. data/meta/match_current_line.rb +0 -14
  103. data/meta/next.rb +0 -10
  104. data/meta/nil.rb +0 -5
  105. data/meta/nthref.rb +0 -14
  106. data/meta/op_assgn.rb +0 -17
  107. data/meta/or.rb +0 -13
  108. data/meta/or_asgn.rb +0 -50
  109. data/meta/range.rb +0 -65
  110. data/meta/redo.rb +0 -5
  111. data/meta/regexp.rb +0 -80
  112. data/meta/regopt.rb +0 -10
  113. data/meta/rescue.rb +0 -84
  114. data/meta/return.rb +0 -16
  115. data/meta/sclass.rb +0 -12
  116. data/meta/self.rb +0 -7
  117. data/meta/send.rb +0 -600
  118. data/meta/str.rb +0 -7
  119. data/meta/super.rb +0 -27
  120. data/meta/sym.rb +0 -8
  121. data/meta/true.rb +0 -7
  122. data/meta/until.rb +0 -16
  123. data/meta/while.rb +0 -24
  124. data/meta/yield.rb +0 -9
  125. data/mutant-minitest.gemspec +0 -22
  126. data/mutant-rspec.gemspec +0 -22
  127. data/mutant.gemspec +0 -44
  128. data/mutant.sh +0 -12
  129. data/mutant.yml +0 -6
  130. data/spec/integration/mutant/corpus_spec.rb +0 -15
  131. data/spec/integration/mutant/isolation/fork_spec.rb +0 -28
  132. data/spec/integration/mutant/minitest_spec.rb +0 -11
  133. data/spec/integration/mutant/null_spec.rb +0 -16
  134. data/spec/integration/mutant/rspec_spec.rb +0 -15
  135. data/spec/integration/mutant/test_mutator_handles_types_spec.rb +0 -9
  136. data/spec/integrations.yml +0 -63
  137. data/spec/shared/framework_integration_behavior.rb +0 -70
  138. data/spec/shared/method_matcher_behavior.rb +0 -47
  139. data/spec/spec_helper.rb +0 -90
  140. data/spec/support/corpus.rb +0 -318
  141. data/spec/support/file_system.rb +0 -62
  142. data/spec/support/ice_nine_config.rb +0 -10
  143. data/spec/support/ruby_vm.rb +0 -84
  144. data/spec/support/shared_context.rb +0 -169
  145. data/spec/support/xspec.rb +0 -183
  146. data/spec/unit/mutant/ast/find_metaclass_containing_spec.rb +0 -64
  147. data/spec/unit/mutant/ast/meta/optarg_spec.rb +0 -24
  148. data/spec/unit/mutant/ast/meta/send/proc_predicate_spec.rb +0 -30
  149. data/spec/unit/mutant/ast/meta/send/receiver_possible_top_level_const_predicate_spec.rb +0 -39
  150. data/spec/unit/mutant/ast/meta/send_spec.rb +0 -42
  151. data/spec/unit/mutant/ast/named_children_spec.rb +0 -89
  152. data/spec/unit/mutant/ast/sexp_spec.rb +0 -38
  153. data/spec/unit/mutant/ast_spec.rb +0 -57
  154. data/spec/unit/mutant/bootstrap_spec.rb +0 -216
  155. data/spec/unit/mutant/cli_spec.rb +0 -305
  156. data/spec/unit/mutant/clock_monotonic_spec.rb +0 -52
  157. data/spec/unit/mutant/config_spec.rb +0 -126
  158. data/spec/unit/mutant/context_spec.rb +0 -111
  159. data/spec/unit/mutant/env_spec.rb +0 -229
  160. data/spec/unit/mutant/expression/method_spec.rb +0 -62
  161. data/spec/unit/mutant/expression/methods_spec.rb +0 -66
  162. data/spec/unit/mutant/expression/namespace/exact_spec.rb +0 -28
  163. data/spec/unit/mutant/expression/namespace/recursive_spec.rb +0 -66
  164. data/spec/unit/mutant/expression/parser_spec.rb +0 -65
  165. data/spec/unit/mutant/expression_spec.rb +0 -45
  166. data/spec/unit/mutant/integration/rspec_spec.rb +0 -201
  167. data/spec/unit/mutant/integration_spec.rb +0 -150
  168. data/spec/unit/mutant/isolation/fork_spec.rb +0 -309
  169. data/spec/unit/mutant/isolation/none_spec.rb +0 -23
  170. data/spec/unit/mutant/isolation/result_spec.rb +0 -73
  171. data/spec/unit/mutant/license_spec.rb +0 -305
  172. data/spec/unit/mutant/loader_spec.rb +0 -79
  173. data/spec/unit/mutant/matcher/chain_spec.rb +0 -26
  174. data/spec/unit/mutant/matcher/compiler_spec.rb +0 -0
  175. data/spec/unit/mutant/matcher/config_spec.rb +0 -47
  176. data/spec/unit/mutant/matcher/filter_spec.rb +0 -22
  177. data/spec/unit/mutant/matcher/method/instance_spec.rb +0 -164
  178. data/spec/unit/mutant/matcher/method/metaclass_spec.rb +0 -108
  179. data/spec/unit/mutant/matcher/method/singleton_spec.rb +0 -90
  180. data/spec/unit/mutant/matcher/methods/instance_spec.rb +0 -54
  181. data/spec/unit/mutant/matcher/methods/metaclass_spec.rb +0 -62
  182. data/spec/unit/mutant/matcher/methods/singleton_spec.rb +0 -51
  183. data/spec/unit/mutant/matcher/namespace_spec.rb +0 -39
  184. data/spec/unit/mutant/matcher/null_spec.rb +0 -12
  185. data/spec/unit/mutant/matcher/scope_spec.rb +0 -45
  186. data/spec/unit/mutant/matcher/static_spec.rb +0 -13
  187. data/spec/unit/mutant/matcher_spec.rb +0 -102
  188. data/spec/unit/mutant/meta/example/dsl_spec.rb +0 -108
  189. data/spec/unit/mutant/meta/example/verification_spec.rb +0 -154
  190. data/spec/unit/mutant/meta/example_spec.rb +0 -34
  191. data/spec/unit/mutant/mutation_spec.rb +0 -140
  192. data/spec/unit/mutant/mutator/node_spec.rb +0 -47
  193. data/spec/unit/mutant/mutator_spec.rb +0 -21
  194. data/spec/unit/mutant/parallel/driver_spec.rb +0 -126
  195. data/spec/unit/mutant/parallel/source/array_spec.rb +0 -57
  196. data/spec/unit/mutant/parallel/worker_spec.rb +0 -206
  197. data/spec/unit/mutant/parallel_spec.rb +0 -115
  198. data/spec/unit/mutant/parser_spec.rb +0 -26
  199. data/spec/unit/mutant/range_spec.rb +0 -141
  200. data/spec/unit/mutant/registry_spec.rb +0 -74
  201. data/spec/unit/mutant/reporter/cli/printer/config_spec.rb +0 -17
  202. data/spec/unit/mutant/reporter/cli/printer/env_progress_spec.rb +0 -85
  203. data/spec/unit/mutant/reporter/cli/printer/env_result_spec.rb +0 -45
  204. data/spec/unit/mutant/reporter/cli/printer/isolation_result_spec.rb +0 -132
  205. data/spec/unit/mutant/reporter/cli/printer/mutation_progress_result_spec.rb +0 -25
  206. data/spec/unit/mutant/reporter/cli/printer/mutation_result_spec.rb +0 -153
  207. data/spec/unit/mutant/reporter/cli/printer/status_progressive_spec.rb +0 -45
  208. data/spec/unit/mutant/reporter/cli/printer/subject_progress_spec.rb +0 -36
  209. data/spec/unit/mutant/reporter/cli/printer/subject_result_spec.rb +0 -44
  210. data/spec/unit/mutant/reporter/cli/printer/test_result_spec.rb +0 -16
  211. data/spec/unit/mutant/reporter/cli/printer_spec.rb +0 -163
  212. data/spec/unit/mutant/reporter/cli_spec.rb +0 -137
  213. data/spec/unit/mutant/reporter/null_spec.rb +0 -14
  214. data/spec/unit/mutant/reporter/sequence_spec.rb +0 -31
  215. data/spec/unit/mutant/repository/diff/ranges_spec.rb +0 -180
  216. data/spec/unit/mutant/repository/diff_spec.rb +0 -122
  217. data/spec/unit/mutant/repository/subject_filter_spec.rb +0 -30
  218. data/spec/unit/mutant/require_highjack_spec.rb +0 -73
  219. data/spec/unit/mutant/result/class_methods_spec.rb +0 -51
  220. data/spec/unit/mutant/result/env_spec.rb +0 -161
  221. data/spec/unit/mutant/result/mutation_spec.rb +0 -70
  222. data/spec/unit/mutant/result/subject_spec.rb +0 -111
  223. data/spec/unit/mutant/result/test_spec.rb +0 -14
  224. data/spec/unit/mutant/result_spec.rb +0 -33
  225. data/spec/unit/mutant/runner/sink_spec.rb +0 -174
  226. data/spec/unit/mutant/runner_spec.rb +0 -121
  227. data/spec/unit/mutant/selector/expression_spec.rb +0 -62
  228. data/spec/unit/mutant/selector/null_spec.rb +0 -17
  229. data/spec/unit/mutant/subject/method/instance_spec.rb +0 -276
  230. data/spec/unit/mutant/subject/method/metaclass_spec.rb +0 -63
  231. data/spec/unit/mutant/subject/method/singleton_spec.rb +0 -61
  232. data/spec/unit/mutant/subject_spec.rb +0 -93
  233. data/spec/unit/mutant/transform/array_spec.rb +0 -92
  234. data/spec/unit/mutant/transform/bool_spec.rb +0 -63
  235. data/spec/unit/mutant/transform/error_spec.rb +0 -132
  236. data/spec/unit/mutant/transform/exception_spec.rb +0 -44
  237. data/spec/unit/mutant/transform/hash_spec.rb +0 -236
  238. data/spec/unit/mutant/transform/index_spec.rb +0 -92
  239. data/spec/unit/mutant/transform/named_spec.rb +0 -49
  240. data/spec/unit/mutant/transform/primitive_spec.rb +0 -56
  241. data/spec/unit/mutant/transform/sequence_spec.rb +0 -98
  242. data/spec/unit/mutant/util/one_spec.rb +0 -22
  243. data/spec/unit/mutant/warnings_spec.rb +0 -89
  244. data/spec/unit/mutant/world_spec.rb +0 -63
  245. data/spec/unit/mutant/zombifier_spec.rb +0 -122
  246. data/test_app/.rspec +0 -1
  247. data/test_app/Gemfile.minitest +0 -6
  248. data/test_app/Gemfile.rspec3.8 +0 -7
  249. data/test_app/lib/test_app.rb +0 -114
  250. data/test_app/lib/test_app/literal.rb +0 -35
  251. data/test_app/lib/test_app/metaclasses.rb +0 -108
  252. data/test_app/spec/spec_helper.rb +0 -9
  253. data/test_app/spec/unit/test_app/literal_spec.rb +0 -20
  254. data/test_app/test/unit/test_app/literal_test.rb +0 -16
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Transform::Exception do
4
- subject { described_class.new(error_class, block) }
5
-
6
- let(:error_class) do
7
- Class.new(RuntimeError)
8
- end
9
-
10
- describe '#apply' do
11
- def apply
12
- subject.apply(input)
13
- end
14
-
15
- let(:input) { 2 }
16
-
17
- context 'block that does not raise' do
18
- let(:block) { ->(input) { input*input } }
19
-
20
- it 'returns expected success value' do
21
- expect(apply).to eql(Mutant::Either::Right.new(4))
22
- end
23
- end
24
-
25
- context 'on block that raises' do
26
- context 'a covered exception' do
27
- let(:block) { ->(_input) { fail(error_class, 'some message') } }
28
-
29
- let(:error) do
30
- Mutant::Transform::Error.new(
31
- cause: nil,
32
- input: input,
33
- message: 'some message',
34
- transform: subject
35
- )
36
- end
37
-
38
- it 'returns expected error' do
39
- expect(apply).to eql(Mutant::Either::Left.new(error))
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,236 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe Mutant::Transform::Hash do
4
- subject { described_class.new(attributes) }
5
-
6
- let(:required) { [] }
7
- let(:optional) { [] }
8
- let(:symbol) { Mutant::Transform::Primitive.new(Symbol) }
9
-
10
- let(:attributes) do
11
- {
12
- required: required,
13
- optional: optional
14
- }
15
- end
16
-
17
- describe '#apply' do
18
- def apply
19
- subject.apply(input)
20
- end
21
-
22
- context 'on Hash input' do
23
- context 'empty' do
24
- let(:input) { {} }
25
-
26
- it 'returns sucess' do
27
- expect(apply).to eql(Mutant::Either::Right.new(input))
28
- end
29
- end
30
-
31
- context 'missing key' do
32
- let(:input) { {} }
33
- let(:required) { [described_class::Key.new(:foo, symbol)] }
34
-
35
- let(:error) do
36
- Mutant::Transform::Error.new(
37
- cause: nil,
38
- input: input,
39
- message: 'Missing keys: [:foo], Unexpected keys: []',
40
- transform: subject
41
- )
42
- end
43
-
44
- it 'returns error' do
45
- expect(apply).to eql(Mutant::Either::Left.new(error))
46
- end
47
- end
48
-
49
- context 'extra key' do
50
- let(:input) { { foo: :bar } }
51
-
52
- let(:error) do
53
- Mutant::Transform::Error.new(
54
- cause: nil,
55
- input: input,
56
- message: 'Missing keys: [], Unexpected keys: [:foo]',
57
- transform: subject
58
- )
59
- end
60
-
61
- it 'returns error' do
62
- expect(apply).to eql(Mutant::Either::Left.new(error))
63
- end
64
- end
65
-
66
- context 'using required' do
67
- let(:input) { { foo: :bar } }
68
- let(:required) { [described_class::Key.new(:foo, symbol)] }
69
-
70
- it 'returns success' do
71
- expect(apply).to eql(Mutant::Either::Right.new(input))
72
- end
73
- end
74
-
75
- context 'using optional' do
76
- let(:optional) { [described_class::Key.new(:foo, symbol)] }
77
-
78
- context 'not providing the optional key' do
79
- let(:input) { {} }
80
-
81
- it 'returns success' do
82
- expect(apply).to eql(Mutant::Either::Right.new(input))
83
- end
84
- end
85
-
86
- context 'providing the optional key' do
87
- let(:input) { { foo: :bar } }
88
-
89
- it 'returns success' do
90
- expect(apply).to eql(Mutant::Either::Right.new(input))
91
- end
92
- end
93
- end
94
-
95
- shared_examples 'key transform error' do
96
- let(:innermost_error) do
97
- Mutant::Transform::Error.new(
98
- cause: nil,
99
- input: 'bar',
100
- message: 'Expected: Symbol but got: String',
101
- transform: symbol
102
- )
103
- end
104
-
105
- let(:inner_error) do
106
- Mutant::Transform::Error.new(
107
- cause: innermost_error,
108
- input: 'bar',
109
- message: nil,
110
- transform: key_transform
111
- )
112
- end
113
-
114
- let(:error) do
115
- Mutant::Transform::Error.new(
116
- cause: inner_error,
117
- input: input,
118
- message: nil,
119
- transform: subject
120
- )
121
- end
122
-
123
- it 'returns failure' do
124
- expect(apply).to eql(Mutant::Either::Left.new(error))
125
- end
126
- end
127
-
128
- context 'key transform error' do
129
- let(:input) { { foo: 'bar' } }
130
-
131
- let(:key_transform) { described_class::Key.new(:foo, symbol) }
132
-
133
- context 'on optional key' do
134
- let(:optional) { [key_transform] }
135
-
136
- include_examples 'key transform error'
137
- end
138
-
139
- context 'on required key' do
140
- let(:required) { [key_transform] }
141
-
142
- include_examples 'key transform error'
143
- end
144
- end
145
- end
146
-
147
- context 'on other input' do
148
- let(:input) { [] }
149
-
150
- let(:error) do
151
- Mutant::Transform::Error.new(
152
- cause: nil,
153
- input: input,
154
- message: 'Expected: Hash but got: Array',
155
- transform: subject
156
- )
157
- end
158
-
159
- it 'returns failure' do
160
- expect(apply).to eql(Mutant::Either::Left.new(error))
161
- end
162
- end
163
- end
164
- end
165
-
166
- RSpec.describe Mutant::Transform::Hash::Symbolize do
167
- subject { described_class.new }
168
-
169
- describe '#apply' do
170
- def apply
171
- subject.apply(input)
172
- end
173
-
174
- let(:input) { { 'foo' => 'bar' } }
175
-
176
- it 'returns success' do
177
- expect(apply).to eql(Mutant::Either::Right.new(foo: 'bar'))
178
- end
179
- end
180
- end
181
-
182
- RSpec.describe Mutant::Transform::Hash::Key do
183
- subject { described_class.new(:foo, boolean) }
184
-
185
- let(:boolean) { Mutant::Transform::Boolean.new }
186
-
187
- describe '#slug' do
188
- def apply
189
- subject.slug
190
- end
191
-
192
- it 'returns expected slug' do
193
- expect(apply).to eql('[:foo]')
194
- end
195
- end
196
-
197
- describe '#apply' do
198
- def apply
199
- subject.apply(input)
200
- end
201
-
202
- context 'on valid input' do
203
- let(:input) { true }
204
-
205
- it 'returns success' do
206
- expect(apply).to eql(Mutant::Either::Right.new(true))
207
- end
208
- end
209
-
210
- context 'on invalid input' do
211
- let(:input) { 1 }
212
-
213
- let(:inner_error) do
214
- Mutant::Transform::Error.new(
215
- cause: nil,
216
- input: 1,
217
- message: 'Expected: boolean but got: 1',
218
- transform: boolean
219
- )
220
- end
221
-
222
- let(:error) do
223
- Mutant::Transform::Error.new(
224
- cause: inner_error,
225
- input: 1,
226
- message: nil,
227
- transform: subject
228
- )
229
- end
230
-
231
- it 'returns failure' do
232
- expect(apply).to eql(Mutant::Either::Left.new(error))
233
- end
234
- end
235
- end
236
- end
@@ -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