mutest 0.0.9 → 0.0.10

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 (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'