mutest 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (236) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +38 -0
  3. data/{config/rubocop.yml → .rubocop.yml} +80 -183
  4. data/CHANGELOG.md +8 -0
  5. data/Gemfile +2 -3
  6. data/Gemfile.lock +41 -52
  7. data/README.md +16 -0
  8. data/Rakefile +1 -1
  9. data/lib/mutest.rb +5 -4
  10. data/lib/mutest/actor.rb +7 -6
  11. data/lib/mutest/actor/env.rb +3 -3
  12. data/lib/mutest/actor/mailbox.rb +5 -4
  13. data/lib/mutest/actor/receiver.rb +6 -5
  14. data/lib/mutest/actor/sender.rb +5 -4
  15. data/lib/mutest/ast.rb +4 -3
  16. data/lib/mutest/ast/meta.rb +3 -3
  17. data/lib/mutest/ast/meta/const.rb +7 -5
  18. data/lib/mutest/ast/meta/optarg.rb +6 -5
  19. data/lib/mutest/ast/meta/resbody.rb +6 -5
  20. data/lib/mutest/ast/meta/restarg.rb +6 -5
  21. data/lib/mutest/ast/meta/send.rb +8 -20
  22. data/lib/mutest/ast/meta/symbol.rb +6 -5
  23. data/lib/mutest/ast/named_children.rb +5 -5
  24. data/lib/mutest/ast/node_predicates.rb +4 -4
  25. data/lib/mutest/ast/nodes.rb +3 -3
  26. data/lib/mutest/ast/regexp.rb +3 -3
  27. data/lib/mutest/ast/regexp/transformer.rb +19 -11
  28. data/lib/mutest/ast/regexp/transformer/alternative.rb +6 -6
  29. data/lib/mutest/ast/regexp/transformer/character_set.rb +7 -7
  30. data/lib/mutest/ast/regexp/transformer/direct.rb +7 -7
  31. data/lib/mutest/ast/regexp/transformer/options_group.rb +7 -7
  32. data/lib/mutest/ast/regexp/transformer/quantifier.rb +11 -13
  33. data/lib/mutest/ast/regexp/transformer/recursive.rb +7 -7
  34. data/lib/mutest/ast/regexp/transformer/root.rb +6 -6
  35. data/lib/mutest/ast/regexp/transformer/text.rb +7 -7
  36. data/lib/mutest/ast/sexp.rb +3 -3
  37. data/lib/mutest/ast/types.rb +8 -6
  38. data/lib/mutest/cli.rb +5 -3
  39. data/lib/mutest/color.rb +4 -3
  40. data/lib/mutest/config.rb +4 -3
  41. data/lib/mutest/context.rb +4 -3
  42. data/lib/mutest/diff.rb +5 -3
  43. data/lib/mutest/env.rb +5 -5
  44. data/lib/mutest/env/bootstrap.rb +7 -5
  45. data/lib/mutest/expression.rb +7 -5
  46. data/lib/mutest/expression/method.rb +4 -4
  47. data/lib/mutest/expression/methods.rb +4 -4
  48. data/lib/mutest/expression/namespace.rb +9 -8
  49. data/lib/mutest/expression/parser.rb +9 -8
  50. data/lib/mutest/integration.rb +5 -3
  51. data/lib/mutest/integration/null.rb +3 -3
  52. data/lib/mutest/isolation.rb +2 -2
  53. data/lib/mutest/isolation/fork.rb +4 -4
  54. data/lib/mutest/isolation/none.rb +4 -4
  55. data/lib/mutest/loader.rb +2 -2
  56. data/lib/mutest/matcher.rb +4 -3
  57. data/lib/mutest/matcher/chain.rb +3 -3
  58. data/lib/mutest/matcher/compiler.rb +7 -5
  59. data/lib/mutest/matcher/config.rb +5 -4
  60. data/lib/mutest/matcher/filter.rb +3 -3
  61. data/lib/mutest/matcher/method.rb +13 -13
  62. data/lib/mutest/matcher/method/instance.rb +6 -6
  63. data/lib/mutest/matcher/method/singleton.rb +5 -5
  64. data/lib/mutest/matcher/methods.rb +7 -6
  65. data/lib/mutest/matcher/namespace.rb +3 -3
  66. data/lib/mutest/matcher/null.rb +3 -3
  67. data/lib/mutest/matcher/scope.rb +3 -3
  68. data/lib/mutest/matcher/static.rb +3 -3
  69. data/lib/mutest/meta.rb +4 -4
  70. data/lib/mutest/meta/example.rb +5 -4
  71. data/lib/mutest/meta/example/dsl.rb +12 -11
  72. data/lib/mutest/meta/example/verification.rb +7 -6
  73. data/lib/mutest/mutation.rb +7 -6
  74. data/lib/mutest/mutator.rb +6 -6
  75. data/lib/mutest/mutator/node.rb +19 -7
  76. data/lib/mutest/mutator/node/and_asgn.rb +4 -4
  77. data/lib/mutest/mutator/node/argument.rb +6 -5
  78. data/lib/mutest/mutator/node/arguments.rb +18 -5
  79. data/lib/mutest/mutator/node/begin.rb +4 -4
  80. data/lib/mutest/mutator/node/binary.rb +4 -4
  81. data/lib/mutest/mutator/node/block.rb +6 -5
  82. data/lib/mutest/mutator/node/block_pass.rb +4 -4
  83. data/lib/mutest/mutator/node/break.rb +4 -4
  84. data/lib/mutest/mutator/node/case.rb +6 -4
  85. data/lib/mutest/mutator/node/class.rb +4 -4
  86. data/lib/mutest/mutator/node/conditional_loop.rb +4 -4
  87. data/lib/mutest/mutator/node/const.rb +4 -4
  88. data/lib/mutest/mutator/node/define.rb +6 -6
  89. data/lib/mutest/mutator/node/defined.rb +4 -4
  90. data/lib/mutest/mutator/node/dstr.rb +4 -4
  91. data/lib/mutest/mutator/node/dsym.rb +4 -4
  92. data/lib/mutest/mutator/node/generic.rb +5 -4
  93. data/lib/mutest/mutator/node/if.rb +6 -4
  94. data/lib/mutest/mutator/node/index.rb +128 -0
  95. data/lib/mutest/mutator/node/kwbegin.rb +4 -4
  96. data/lib/mutest/mutator/node/literal.rb +4 -4
  97. data/lib/mutest/mutator/node/literal/array.rb +8 -6
  98. data/lib/mutest/mutator/node/literal/boolean.rb +5 -5
  99. data/lib/mutest/mutator/node/literal/fixnum.rb +5 -5
  100. data/lib/mutest/mutator/node/literal/float.rb +5 -5
  101. data/lib/mutest/mutator/node/literal/hash.rb +6 -6
  102. data/lib/mutest/mutator/node/literal/nil.rb +5 -5
  103. data/lib/mutest/mutator/node/literal/range.rb +5 -5
  104. data/lib/mutest/mutator/node/literal/regex.rb +5 -5
  105. data/lib/mutest/mutator/node/literal/string.rb +5 -5
  106. data/lib/mutest/mutator/node/literal/symbol.rb +5 -5
  107. data/lib/mutest/mutator/node/masgn.rb +4 -4
  108. data/lib/mutest/mutator/node/match_current_line.rb +4 -4
  109. data/lib/mutest/mutator/node/mlhs.rb +4 -4
  110. data/lib/mutest/mutator/node/named_value/access.rb +6 -6
  111. data/lib/mutest/mutator/node/named_value/constant_assignment.rb +6 -5
  112. data/lib/mutest/mutator/node/named_value/variable_assignment.rb +5 -5
  113. data/lib/mutest/mutator/node/next.rb +4 -4
  114. data/lib/mutest/mutator/node/nthref.rb +4 -4
  115. data/lib/mutest/mutator/node/op_asgn.rb +4 -4
  116. data/lib/mutest/mutator/node/or_asgn.rb +5 -4
  117. data/lib/mutest/mutator/node/procarg_zero.rb +45 -0
  118. data/lib/mutest/mutator/node/regexp.rb +6 -6
  119. data/lib/mutest/mutator/node/regexp/alternation_meta.rb +5 -5
  120. data/lib/mutest/mutator/node/regexp/capture_group.rb +5 -5
  121. data/lib/mutest/mutator/node/regexp/character_type.rb +5 -5
  122. data/lib/mutest/mutator/node/regexp/end_of_line_anchor.rb +5 -5
  123. data/lib/mutest/mutator/node/regexp/end_of_string_or_before_end_of_line_anchor.rb +5 -5
  124. data/lib/mutest/mutator/node/regexp/one_or_more.rb +5 -5
  125. data/lib/mutest/mutator/node/regexp/zero_or_more.rb +5 -5
  126. data/lib/mutest/mutator/node/regopt.rb +4 -4
  127. data/lib/mutest/mutator/node/resbody.rb +6 -4
  128. data/lib/mutest/mutator/node/rescue.rb +6 -4
  129. data/lib/mutest/mutator/node/return.rb +5 -4
  130. data/lib/mutest/mutator/node/send.rb +6 -34
  131. data/lib/mutest/mutator/node/send/attribute_assignment.rb +5 -5
  132. data/lib/mutest/mutator/node/send/binary.rb +5 -5
  133. data/lib/mutest/mutator/node/send/conditional.rb +5 -5
  134. data/lib/mutest/mutator/node/splat.rb +4 -4
  135. data/lib/mutest/mutator/node/super.rb +4 -4
  136. data/lib/mutest/mutator/node/when.rb +4 -4
  137. data/lib/mutest/mutator/node/yield.rb +4 -4
  138. data/lib/mutest/mutator/node/zsuper.rb +4 -4
  139. data/lib/mutest/mutator/util.rb +3 -3
  140. data/lib/mutest/mutator/util/array.rb +6 -6
  141. data/lib/mutest/mutator/util/symbol.rb +4 -4
  142. data/lib/mutest/parallel.rb +16 -12
  143. data/lib/mutest/parallel/master.rb +4 -4
  144. data/lib/mutest/parallel/source.rb +6 -5
  145. data/lib/mutest/parallel/worker.rb +6 -5
  146. data/lib/mutest/parser.rb +4 -3
  147. data/lib/mutest/registry.rb +6 -5
  148. data/lib/mutest/reporter.rb +2 -2
  149. data/lib/mutest/reporter/cli.rb +3 -3
  150. data/lib/mutest/reporter/cli/format.rb +9 -8
  151. data/lib/mutest/reporter/cli/printer.rb +8 -8
  152. data/lib/mutest/reporter/cli/printer/config.rb +5 -5
  153. data/lib/mutest/reporter/cli/printer/env_progress.rb +16 -16
  154. data/lib/mutest/reporter/cli/printer/env_result.rb +5 -5
  155. data/lib/mutest/reporter/cli/printer/mutation_progress_result.rb +5 -5
  156. data/lib/mutest/reporter/cli/printer/mutation_result.rb +5 -5
  157. data/lib/mutest/reporter/cli/printer/status.rb +6 -5
  158. data/lib/mutest/reporter/cli/printer/status_progressive.rb +5 -5
  159. data/lib/mutest/reporter/cli/printer/subject_progress.rb +5 -5
  160. data/lib/mutest/reporter/cli/printer/subject_result.rb +5 -5
  161. data/lib/mutest/reporter/cli/printer/test_result.rb +5 -5
  162. data/lib/mutest/reporter/cli/tput.rb +6 -5
  163. data/lib/mutest/reporter/null.rb +3 -3
  164. data/lib/mutest/reporter/sequence.rb +3 -3
  165. data/lib/mutest/repository.rb +9 -7
  166. data/lib/mutest/require_highjack.rb +2 -2
  167. data/lib/mutest/requirer.rb +2 -2
  168. data/lib/mutest/result.rb +18 -12
  169. data/lib/mutest/runner.rb +6 -3
  170. data/lib/mutest/runner/sink.rb +3 -3
  171. data/lib/mutest/scope.rb +2 -2
  172. data/lib/mutest/selector.rb +4 -3
  173. data/lib/mutest/selector/expression.rb +3 -3
  174. data/lib/mutest/source_file.rb +6 -5
  175. data/lib/mutest/subject.rb +5 -3
  176. data/lib/mutest/subject/method.rb +3 -3
  177. data/lib/mutest/subject/method/instance.rb +5 -5
  178. data/lib/mutest/subject/method/singleton.rb +4 -4
  179. data/lib/mutest/test.rb +4 -3
  180. data/lib/mutest/util.rb +3 -3
  181. data/lib/mutest/version.rb +2 -2
  182. data/lib/mutest/warning_filter.rb +3 -3
  183. data/lib/mutest/zombifier.rb +5 -4
  184. data/meta/block.rb +22 -3
  185. data/meta/case.rb +29 -1
  186. data/meta/index.rb +132 -0
  187. data/meta/indexasgn.rb +42 -0
  188. data/meta/lambda.rb +17 -0
  189. data/meta/send.rb +5 -139
  190. data/mutest-rspec.gemspec +1 -1
  191. data/mutest.gemspec +11 -12
  192. data/spec/integration/mutest/rspec_spec.rb +1 -1
  193. data/spec/shared/framework_integration_behavior.rb +1 -1
  194. data/spec/shared/idempotent_method_behavior.rb +2 -1
  195. data/spec/spec_helper.rb +5 -5
  196. data/spec/support/compress_helper.rb +2 -1
  197. data/spec/support/corpus.rb +12 -8
  198. data/spec/support/fake_actor.rb +19 -14
  199. data/spec/support/file_system.rb +10 -7
  200. data/spec/support/ice_nine_config.rb +3 -3
  201. data/spec/support/ruby_vm.rb +10 -11
  202. data/spec/support/shared_context.rb +1 -1
  203. data/spec/support/test_app.rb +1 -1
  204. data/spec/support/warning.rb +8 -7
  205. data/spec/support/xspec.rb +18 -17
  206. data/spec/unit/mutest/actor/binding_spec.rb +1 -0
  207. data/spec/unit/mutest/ast/meta/optarg_spec.rb +1 -0
  208. data/spec/unit/mutest/ast/meta/send/proc_predicate_spec.rb +1 -1
  209. data/spec/unit/mutest/ast/meta/send/receiver_possible_top_level_const_predicate_spec.rb +1 -1
  210. data/spec/unit/mutest/ast/meta/send_spec.rb +14 -18
  211. data/spec/unit/mutest/ast/regexp_spec.rb +4 -3
  212. data/spec/unit/mutest/ast_spec.rb +1 -1
  213. data/spec/unit/mutest/cli_spec.rb +15 -15
  214. data/spec/unit/mutest/env/bootstrap_spec.rb +1 -1
  215. data/spec/unit/mutest/integration_spec.rb +1 -0
  216. data/spec/unit/mutest/isolation/none_spec.rb +1 -1
  217. data/spec/unit/mutest/matcher/config_spec.rb +1 -0
  218. data/spec/unit/mutest/mutator/node_spec.rb +1 -1
  219. data/spec/unit/mutest/parallel/master_spec.rb +3 -3
  220. data/spec/unit/mutest/reporter/cli/printer_spec.rb +2 -0
  221. data/spec/unit/mutest/reporter/cli/tput_spec.rb +2 -0
  222. data/spec/unit/mutest/reporter/cli_spec.rb +2 -0
  223. data/spec/unit/mutest/repository/diff_spec.rb +1 -1
  224. data/spec/unit/mutest/runner_spec.rb +1 -1
  225. data/spec/unit/mutest/subject_spec.rb +1 -1
  226. data/spec/unit/mutest/warning_filter_spec.rb +2 -3
  227. data/spec/unit/mutest/zombifier_spec.rb +1 -1
  228. data/test_app/Gemfile.rspec3.8 +7 -0
  229. metadata +67 -68
  230. data/.buildkite/hooks/pre-command +0 -3
  231. data/.buildkite/pipeline.yml +0 -38
  232. data/.gitmodules +0 -3
  233. data/circle.yml +0 -10
  234. data/config/triage.yml +0 -2
  235. data/config/yardstick.yml +0 -2
  236. data/lib/mutest/mutator/node/send/index.rb +0 -47
@@ -31,11 +31,11 @@ module XSpec
31
31
  end
32
32
 
33
33
  def exception(_, exception)
34
- fail exception
34
+ raise exception
35
35
  end
36
36
 
37
37
  def yields(observation, yields)
38
- block = observation.block or fail 'No block passed where expected'
38
+ block = observation.block or raise 'No block passed where expected'
39
39
 
40
40
  validate_block_arity(observation, yields)
41
41
 
@@ -48,12 +48,13 @@ module XSpec
48
48
 
49
49
  # block allows anything we can skip the check
50
50
  return if observed.equal?(-1)
51
- fail 'Optargs currently not supported' if observed < -1
51
+ raise 'Optargs currently not supported' if observed < -1
52
+
52
53
  block_arity_mismatch(observation, expected, observed) unless expected.equal?(observed)
53
54
  end
54
55
 
55
56
  def block_arity_mismatch(observation, expected, observed)
56
- fail "block arity mismatch, expected #{expected} observed #{observed}\nobservation:\n#{observation.inspect}"
57
+ raise "block arity mismatch, expected #{expected} observed #{observed}\nobservation:\n#{observation.inspect}"
57
58
  end
58
59
 
59
60
  alias_method :yields_return, :yields
@@ -67,23 +68,23 @@ module XSpec
67
68
 
68
69
  def self.assert_valid_events(event_list)
69
70
  event_list.map(&:first).each do |event|
70
- fail "Invalid event: #{event}" unless VALID_EVENTS.include?(event)
71
+ raise "Invalid event: #{event}" unless VALID_EVENTS.include?(event)
71
72
  end
72
73
  end
73
74
  private_class_method :assert_valid_events
74
75
 
75
76
  def self.assert_not_empty(event_list)
76
- fail 'no events' if event_list.empty?
77
+ raise 'no events' if event_list.empty?
77
78
  end
78
79
  private_class_method :assert_not_empty
79
80
 
80
81
  def self.assert_total(event_list)
81
82
  return unless event_list[0..-2].map(&:first).any?(&TERMINATE_EVENTS.method(:include?))
82
83
 
83
- fail "Reaction not total: #{event_list}"
84
+ raise "Reaction not total: #{event_list}"
84
85
  end
85
86
  private_class_method :assert_total
86
- end # MessageReaction
87
+ end
87
88
 
88
89
  class MessageExpectation
89
90
  include Anima.new(:receiver, :selector, :arguments, :reaction)
@@ -118,30 +119,30 @@ module XSpec
118
119
  end
119
120
 
120
121
  def error(message)
121
- fail "#{message},\n observation:\n #{observation.inspect}\n expectation:\n #{expectation.inspect}"
122
+ raise "#{message},\n observation:\n #{observation.inspect}\n expectation:\n #{expectation.inspect}"
122
123
  end
123
124
 
124
125
  def trigger_exception
125
126
  exception = expectation.exception
126
- fail exception if exception
127
+ raise exception if exception
127
128
  end
128
- end # Verifier
129
- end # MessageExpectation
129
+ end
130
+ end
130
131
 
131
132
  class MessageObservation
132
133
  include Anima.new(:receiver, :selector, :arguments, :block)
133
- end # MessageObservation
134
+ end
134
135
 
135
136
  class ExpectationVerifier
136
137
  include Concord.new(:expectations)
137
138
 
138
139
  def call(observation)
139
- expectation = expectations.shift or fail "No expected message but observed #{observation}"
140
+ expectation = expectations.shift or raise "No expected message but observed #{observation}"
140
141
  expectation.call(observation)
141
142
  end
142
143
 
143
144
  def assert_done
144
- expectations.empty? or fail "unconsumed expectations:\n#{expectations.map(&:inspect).join}"
145
+ expectations.empty? or raise "unconsumed expectations:\n#{expectations.map(&:inspect).join}"
145
146
  end
146
147
 
147
148
  # rubocop:disable MethodLength
@@ -171,5 +172,5 @@ module XSpec
171
172
 
172
173
  verifier.assert_done
173
174
  end
174
- end # ExpectationVerifier
175
- end # XSpec
175
+ end
176
+ end
@@ -18,6 +18,7 @@ RSpec.describe Mutest::Actor::Binding do
18
18
 
19
19
  context 'when return type equals request type' do
20
20
  let(:response_type) { type }
21
+
21
22
  it { is_expected.to be(payload) }
22
23
  end
23
24
 
@@ -15,6 +15,7 @@ RSpec.describe Mutest::AST::Meta::Optarg do
15
15
 
16
16
  context 'when name is prefixed with an underscore' do
17
17
  let(:name) { :_foo }
18
+
18
19
  it { is_expected.to be false }
19
20
  end
20
21
  end
@@ -2,7 +2,7 @@ RSpec.describe Mutest::AST::Meta::Send, '#proc?' do
2
2
  subject { described_class.new(node).proc? }
3
3
 
4
4
  shared_context 'proc send' do |source|
5
- let(:node) { Parser::CurrentRuby.parse(source).children.first }
5
+ let(:node) { Unparser.parse(source).children.first }
6
6
  end
7
7
 
8
8
  shared_examples 'proc definition' do |*args|
@@ -2,7 +2,7 @@ RSpec.describe Mutest::AST::Meta::Send, '#receiver_possible_top_level_const?' do
2
2
  subject { described_class.new(node).receiver_possible_top_level_const? }
3
3
 
4
4
  def parse(source)
5
- Parser::CurrentRuby.parse(source)
5
+ Unparser.parse(source)
6
6
  end
7
7
 
8
8
  context 'when implicit top level const' do
@@ -7,35 +7,31 @@ RSpec.describe Mutest::AST::Meta::Send do
7
7
 
8
8
  let(:method_call) { parse('foo.bar(baz)') }
9
9
  let(:attribute_read) { parse('foo.bar') }
10
- let(:index_assignment) { parse('foo[0] = bar') }
11
10
  let(:attribute_assignment) { parse('foo.bar = baz') }
12
11
  let(:binary_method_operator) { parse('foo == bar') }
13
12
  let(:method_method_call) { parse('foo.method(:bar)') }
14
13
  let(:public_method_call) { parse("foo.public_method('bar')") }
15
14
 
16
15
  class Expectation
17
- include Adamantium,
18
- Anima.new(
19
- :name,
20
- :assignment,
21
- :attribute_assignment,
22
- :index_assignment,
23
- :binary_method_operator,
24
- :method_object_selector
25
- )
16
+ include Anima.new(
17
+ :name,
18
+ :attribute_assignment,
19
+ :binary_method_operator,
20
+ :method_object_selector
21
+ )
22
+ include Adamantium
26
23
 
27
24
  ALL = [
28
- [:method_call, false, false, false, false, false],
29
- [:attribute_read, false, false, false, false, false],
30
- [:index_assignment, true, false, true, false, false],
31
- [:attribute_assignment, true, true, false, false, false],
32
- [:binary_method_operator, false, false, false, true, false],
33
- [:method_method_call, false, false, false, false, true],
34
- [:public_method_call, false, false, false, false, true]
25
+ [:method_call, false, false, false],
26
+ [:attribute_read, false, false, false],
27
+ [:attribute_assignment, true, false, false],
28
+ [:binary_method_operator, false, true, false],
29
+ [:method_method_call, false, false, true],
30
+ [:public_method_call, false, false, true]
35
31
  ].map do |values|
36
32
  new(Hash[anima.attribute_names.zip(values)])
37
33
  end.freeze
38
- end # Expectation
34
+ end
39
35
 
40
36
  # Rspec should have a build in for this kind of "n-dimensional assertion with context"
41
37
  (Expectation.anima.attribute_names - %i[name]).each do |name|
@@ -20,8 +20,8 @@ module RegexpSpec
20
20
  NONE = Object.new.freeze
21
21
 
22
22
  include Equalizer.new(:token, :text, :mode, :min, :max)
23
- end # Quantifier
24
- end # Expression
23
+ end
24
+ end
25
25
 
26
26
  RSpec.shared_context 'regexp transformation' do
27
27
  let(:parsed) { Mutest::AST::Regexp.parse(regexp) }
@@ -66,6 +66,7 @@ module RegexpSpec
66
66
  RSpec.describe Mutest::AST::Regexp::Transformer.lookup(type) do
67
67
  context "when mapping #{regexp.inspect}" do
68
68
  let(:regexp) { regexp }
69
+
69
70
  let(:expected, &block)
70
71
 
71
72
  include_context 'regexp transformation'
@@ -74,7 +75,7 @@ module RegexpSpec
74
75
  end
75
76
  end
76
77
  end
77
- end # RegexpSpec
78
+ end
78
79
 
79
80
  RegexpSpec.expect_mapping(/A/, :regexp_root_expression) do
80
81
  s(:regexp_root_expression,
@@ -28,7 +28,7 @@ RSpec.describe Mutest::AST do
28
28
  end
29
29
 
30
30
  context 'on non Parser::AST::Node child' do
31
- let(:block) { ->(node) { fail if node.equal?(child_a) } }
31
+ let(:block) { ->(node) { raise if node.equal?(child_a) } }
32
32
  let(:child_a) { AST::Node.new(:foo) }
33
33
 
34
34
  it 'does not yield that node' do
@@ -107,21 +107,21 @@ RSpec.describe Mutest::CLI do
107
107
  it_behaves_like 'a cli parser'
108
108
 
109
109
  let(:expected_message) do
110
- strip_indent(<<-MESSAGE)
111
- usage: mutest [options] MATCH_EXPRESSION ...
112
- Environment:
113
- --zombie Run mutest zombified
114
- -I, --include DIRECTORY Add DIRECTORY to $LOAD_PATH
115
- -r, --require NAME Require file with NAME
116
- -j, --jobs NUMBER Number of kill jobs. Defaults to number of processors.
117
-
118
- Options:
119
- --use INTEGRATION Use INTEGRATION to kill mutations
120
- --ignore-subject EXPRESSION Ignore subjects that match EXPRESSION as prefix
121
- --since REVISION Only select subjects touched since REVISION
122
- --fail-fast Fail fast
123
- --version Print mutests version
124
- -h, --help Show this message
110
+ <<~MESSAGE
111
+ usage: mutest [options] MATCH_EXPRESSION ...
112
+ Environment:
113
+ --zombie Run mutest zombified
114
+ -I, --include DIRECTORY Add DIRECTORY to $LOAD_PATH
115
+ -r, --require NAME Require file with NAME
116
+ -j, --jobs NUMBER Number of kill jobs. Defaults to number of processors.
117
+
118
+ Options:
119
+ --use INTEGRATION Use INTEGRATION to kill mutations
120
+ --ignore-subject EXPRESSION Ignore subjects that match EXPRESSION as prefix
121
+ --since REVISION Only select subjects touched since REVISION
122
+ --fail-fast Fail fast
123
+ --version Print mutests version
124
+ -h, --help Show this message
125
125
  MESSAGE
126
126
  end
127
127
  end
@@ -84,7 +84,7 @@ RSpec.describe Mutest::Env::Bootstrap do
84
84
  let(:invalid_class) do
85
85
  Class.new do
86
86
  def self.name
87
- fail
87
+ raise
88
88
  end
89
89
  end
90
90
  end
@@ -7,6 +7,7 @@ RSpec.describe Mutest::Integration do
7
7
 
8
8
  describe '#setup' do
9
9
  subject { object.setup }
10
+
10
11
  it_behaves_like 'a command method'
11
12
  end
12
13
 
@@ -7,7 +7,7 @@ RSpec.describe Mutest::Isolation::None do
7
7
  end
8
8
 
9
9
  it 'wraps *all* exceptions' do
10
- expect { object.call { fail 'foo' } }.to raise_error(
10
+ expect { object.call { raise 'foo' } }.to raise_error(
11
11
  Mutest::Isolation::Error,
12
12
  'foo'
13
13
  )
@@ -10,6 +10,7 @@ RSpec.describe Mutest::Matcher::Config do
10
10
 
11
11
  context 'with one expression' do
12
12
  let(:object) { described_class::DEFAULT.add(:match_expressions, parse_expression('Foo')) }
13
+
13
14
  it { is_expected.to eql('#<Mutest::Matcher::Config match_expressions: [Foo]>') }
14
15
  end
15
16
 
@@ -5,7 +5,7 @@ Mutest::Meta::Example::ALL.each.group_by(&:node_type).each do |type, examples|
5
5
  it "generates the correct mutations on #{toplevel_nodes} toplevel examples" do
6
6
  examples.each do |example|
7
7
  verification = example.verification
8
- fail verification.error_report unless verification.success?
8
+ raise verification.error_report unless verification.success?
9
9
  end
10
10
  end
11
11
  end
@@ -67,7 +67,7 @@ RSpec.describe Mutest::Parallel::Master do
67
67
  def stop?
68
68
  @stop
69
69
  end
70
- end # FakeSink
70
+ end
71
71
 
72
72
  # Needed because of rubies undefined-ivar-read-is-nil stuff
73
73
  describe 'object initialization' do
@@ -79,6 +79,8 @@ RSpec.describe Mutest::Parallel::Master do
79
79
  end
80
80
 
81
81
  describe '.call' do
82
+ subject { described_class.call(config) }
83
+
82
84
  before do
83
85
  expect(Mutest::Parallel::Worker).to receive(:run).with(
84
86
  mailbox: actor_env.mailbox(:worker_a),
@@ -87,8 +89,6 @@ RSpec.describe Mutest::Parallel::Master do
87
89
  ).and_return(worker_a)
88
90
  end
89
91
 
90
- subject { described_class.call(config) }
91
-
92
92
  context 'with multiple workers configured' do
93
93
  let(:config) { super().with(jobs: 2) }
94
94
  let(:expected_results) { [] }
@@ -67,6 +67,7 @@ RSpec.describe Mutest::Reporter::CLI::Printer do
67
67
 
68
68
  context 'on failure' do
69
69
  let(:success?) { false }
70
+
70
71
  it_reports Mutest::Color::RED.format('foo bar') << "\n"
71
72
  end
72
73
  end
@@ -155,6 +156,7 @@ RSpec.describe Mutest::Reporter::CLI::Printer do
155
156
 
156
157
  context 'when output is NOT a tty?' do
157
158
  let(:tty?) { false }
159
+
158
160
  it_reports "foo\n"
159
161
  end
160
162
  end
@@ -38,9 +38,11 @@ RSpec.describe Mutest::Reporter::CLI::Tput do
38
38
  context 'when ed fails' do
39
39
  let(:tput_ed?) { false }
40
40
  let(:tput_cd?) { true }
41
+
41
42
  before do
42
43
  expect_command('tput cd', '[cd]', tput_cd?)
43
44
  end
45
+
44
46
  its(:prepare) { is_expected.to eql('[reset][sc]') }
45
47
  its(:restore) { is_expected.to eql('[rc][cd]') }
46
48
  end
@@ -82,11 +82,13 @@ RSpec.describe Mutest::Reporter::CLI do
82
82
 
83
83
  context 'when on CI' do
84
84
  let(:ci?) { true }
85
+
85
86
  it { is_expected.to eql(described_class.new(output, progressive_format)) }
86
87
  end
87
88
 
88
89
  context 'when output is not a tty?' do
89
90
  let(:tty?) { false }
91
+
90
92
  it { is_expected.to eql(described_class.new(output, progressive_format)) }
91
93
  end
92
94
 
@@ -31,7 +31,7 @@ describe Mutest::Repository::Diff do
31
31
  expect(config.kernel).to receive(:system)
32
32
  .ordered
33
33
  .with(
34
- *%W[git ls-files --error-unmatch -- #{path}],
34
+ *%W[git ls-files --error-unmatch -- #{path}], # rubocop:disable Lint/UnneededSplatExpansion
35
35
  out: File::NULL,
36
36
  err: File::NULL
37
37
  ).and_return(git_ls_success?)
@@ -39,7 +39,7 @@ RSpec.describe Mutest::Runner do
39
39
  Mutest::Parallel::Config.new(
40
40
  env: actor_env,
41
41
  jobs: 1,
42
- processor: ->(_object) { fail },
42
+ processor: ->(_object) { raise },
43
43
  sink: Mutest::Runner::Sink.new(env),
44
44
  source: Mutest::Parallel::Source::Array.new(env.mutations)
45
45
  )
@@ -17,7 +17,7 @@ RSpec.describe Mutest::Subject do
17
17
  let(:object) { class_under_test.new(context, node) }
18
18
 
19
19
  let(:node) do
20
- Parser::CurrentRuby.parse(<<-RUBY)
20
+ Unparser.parse(<<-RUBY)
21
21
  def foo
22
22
  end
23
23
  RUBY
@@ -54,8 +54,8 @@ RSpec.describe Mutest::WarningFilter do
54
54
  it 'resets to original stderr after execution with exception ' do
55
55
  original = $stderr
56
56
  begin
57
- object.use { fail }
58
- rescue
57
+ object.use { raise }
58
+ rescue StandardError
59
59
  :make_rubo_cop_happy
60
60
  end
61
61
  expect($stderr).to be(original)
@@ -64,7 +64,6 @@ RSpec.describe Mutest::WarningFilter do
64
64
  it 'returns warnings generated within block' do
65
65
  warnings =
66
66
  object.use do
67
- # rubocop:disable Security/Eval
68
67
  eval(<<-RUBY)
69
68
  Class.new do
70
69
  def foo
@@ -78,7 +78,7 @@ RSpec.describe Mutest::Zombifier do
78
78
  let(:file_entries) do
79
79
  {
80
80
  'a/project.rb' => { file: true, contents: 'module Project; end' },
81
- 'b/bar.rb' => { file: true, contents: 'module Bar; end' }
81
+ 'b/bar.rb' => { file: true, contents: 'module Bar; end' }
82
82
  }
83
83
  end
84
84
 
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rspec', '~> 3.8.0'
4
+ gem 'rspec-core', '~> 3.8.0'
5
+ gem 'mutest', path: '../'
6
+ gem 'mutest-rspec', path: '../'
7
+ gem 'adamantium'