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
@@ -1,7 +1,8 @@
1
1
  module Mutest
2
2
  module Meta
3
3
  class Example
4
- include Adamantium, Anima.new(:file, :node, :node_type, :expected)
4
+ include Anima.new(:file, :node, :node_type, :expected)
5
+ include Adamantium
5
6
 
6
7
  # Verification instance for example
7
8
  #
@@ -27,6 +28,6 @@ module Mutest
27
28
  end
28
29
  end
29
30
  memoize :generated
30
- end # Example
31
- end # Meta
32
- end # Mutest
31
+ end
32
+ end
33
+ end
@@ -33,7 +33,8 @@ module Mutest
33
33
  # @raise [RuntimeError]
34
34
  # in case example cannot be build
35
35
  def example
36
- fail 'source not defined' unless @node
36
+ raise 'source not defined' unless @node
37
+
37
38
  Example.new(
38
39
  file: @file,
39
40
  node: @node,
@@ -50,7 +51,8 @@ module Mutest
50
51
  #
51
52
  # @return [undefined]
52
53
  def source(input)
53
- fail 'source already defined' if @node
54
+ raise 'source already defined' if @node
55
+
54
56
  @node = node(input)
55
57
  end
56
58
 
@@ -61,9 +63,8 @@ module Mutest
61
63
  # @return [undefined]
62
64
  def mutation(input)
63
65
  node = node(input)
64
- if @expected.include?(node)
65
- fail "Mutation for input: #{input.inspect} is already expected"
66
- end
66
+ raise "Mutation for input: #{input.inspect} is already expected" if @expected.include?(node)
67
+
67
68
  @expected << node
68
69
  end
69
70
 
@@ -94,14 +95,14 @@ module Mutest
94
95
  def node(input)
95
96
  case input
96
97
  when String
97
- Unparser::Preprocessor.run(::Parser::CurrentRuby.parse(input))
98
+ Unparser::Preprocessor.run(Unparser.parse(input))
98
99
  when ::Parser::AST::Node
99
100
  input
100
101
  else
101
- fail "Cannot coerce to node: #{input.inspect}"
102
+ raise "Cannot coerce to node: #{input.inspect}"
102
103
  end
103
104
  end
104
- end # DSL
105
- end # Example
106
- end # Meta
107
- end # Mutest
105
+ end
106
+ end
107
+ end
108
+ end
@@ -3,7 +3,8 @@ module Mutest
3
3
  class Example
4
4
  # Example verification
5
5
  class Verification
6
- include Adamantium::Flat, Concord.new(:example, :mutations)
6
+ include Concord.new(:example, :mutations)
7
+ include Adamantium::Flat
7
8
 
8
9
  # Test if mutation was verified successfully
9
10
  #
@@ -16,7 +17,7 @@ module Mutest
16
17
  #
17
18
  # @return [String]
18
19
  def error_report
19
- fail 'no error report on successful validation' if success?
20
+ raise 'no error report on successful validation' if success?
20
21
 
21
22
  YAML.dump(
22
23
  'file' => example.file,
@@ -79,7 +80,7 @@ module Mutest
79
80
  example.expected - mutations.map(&:node)
80
81
  end
81
82
  memoize :missing
82
- end # Verification
83
- end # Example
84
- end # Meta
85
- end # Mutest
83
+ end
84
+ end
85
+ end
86
+ end
@@ -1,7 +1,8 @@
1
1
  module Mutest
2
2
  # Represent a mutated node with its subject
3
3
  class Mutation
4
- include AbstractType, Adamantium::Flat
4
+ include Adamantium::Flat
5
+ include AbstractType
5
6
  include Concord::Public.new(:subject, :node)
6
7
 
7
8
  CODE_DELIMITER = "\0".freeze
@@ -84,18 +85,18 @@ module Mutest
84
85
  class Evil < self
85
86
  SYMBOL = 'evil'.freeze
86
87
  TEST_PASS_SUCCESS = false
87
- end # Evil
88
+ end
88
89
 
89
90
  # Neutral mutation that should not cause mutations to fail tests
90
91
  class Neutral < self
91
92
  SYMBOL = 'neutral'.freeze
92
93
  TEST_PASS_SUCCESS = true
93
- end # Neutral
94
+ end
94
95
 
95
96
  # Noop mutation, special case of neutral
96
97
  class Noop < Neutral
97
98
  SYMBOL = 'noop'.freeze
98
99
  TEST_PASS_SUCCESS = true
99
- end # Noop
100
- end # Mutation
101
- end # Mutest
100
+ end
101
+ end
102
+ end
@@ -3,10 +3,10 @@ module Mutest
3
3
  class Mutator
4
4
  REGISTRY = Registry.new
5
5
 
6
- include Adamantium::Flat,
7
- Concord.new(:input, :filter, :parent),
8
- AbstractType,
9
- Procto.call(:output)
6
+ include Procto.call(:output)
7
+ include AbstractType
8
+ include Concord.new(:input, :filter, :parent)
9
+ include Adamantium::Flat
10
10
 
11
11
  # Lookup and invoke dedicated AST mutator
12
12
  #
@@ -111,5 +111,5 @@ module Mutest
111
111
 
112
112
  mutator.call(nodes, filter).each(&block)
113
113
  end
114
- end # Mutator
115
- end # Mutest
114
+ end
115
+ end
@@ -3,8 +3,12 @@ module Mutest
3
3
  class Mutator
4
4
  # Abstract base class for node mutators
5
5
  class Node < self
6
- include AbstractType, Unparser::Constants
7
- include AST::NamedChildren, AST::NodePredicates, AST::Sexp, AST::Nodes
6
+ include Unparser::Constants
7
+ include AbstractType
8
+ include AST::Nodes
9
+ include AST::Sexp
10
+ include AST::NodePredicates
11
+ include AST::NamedChildren
8
12
 
9
13
  TAUTOLOGY = ->(_input) { true }
10
14
 
@@ -49,6 +53,7 @@ module Mutest
49
53
  block ||= TAUTOLOGY
50
54
  mutate(children.fetch(index), self).each do |mutation|
51
55
  next unless block.call(mutation)
56
+
52
57
  emit_child_update(index, mutation)
53
58
  end
54
59
  end
@@ -85,6 +90,13 @@ module Mutest
85
90
  emit(::Parser::AST::Node.new(node.type, children))
86
91
  end
87
92
 
93
+ # Emit propagation if node can stand alone
94
+ #
95
+ # @return [undefined]
96
+ def emit_propagation(node)
97
+ emit(node) unless AST::Types::NOT_STANDALONE.include?(node.type)
98
+ end
99
+
88
100
  # Emit singleton literals
89
101
  #
90
102
  # @return [undefined]
@@ -115,7 +127,7 @@ module Mutest
115
127
  # @return [nil]
116
128
  # otherwise
117
129
  def parent_node
118
- parent.node if parent
130
+ parent&.node
119
131
  end
120
132
 
121
133
  # Parent type
@@ -126,7 +138,7 @@ module Mutest
126
138
  # @return [nil]
127
139
  # otherwise
128
140
  def parent_type
129
- parent_node.type if parent_node
141
+ parent_node&.type
130
142
  end
131
143
 
132
144
  # Test if the node is the left of an or_asgn or op_asgn
@@ -154,6 +166,6 @@ module Mutest
154
166
  yield child, index unless children.one?
155
167
  end
156
168
  end
157
- end # Node
158
- end # Mutator
159
- end # Mutest
169
+ end
170
+ end
171
+ end
@@ -19,7 +19,7 @@ module Mutest
19
19
  end
20
20
  emit_right_mutations
21
21
  end
22
- end # AndAsgn
23
- end # Node
24
- end # Mutator
25
- end # Mutest
22
+ end
23
+ end
24
+ end
25
+ end
@@ -23,6 +23,7 @@ module Mutest
23
23
  # @return [undefined]
24
24
  def emit_name_mutation
25
25
  return if skip?
26
+
26
27
  emit_name(:"#{UNDERSCORE}#{name}")
27
28
  end
28
29
 
@@ -61,8 +62,8 @@ module Mutest
61
62
  def emit_required_mutation
62
63
  emit(s(TYPE_MAP.fetch(node.type), name))
63
64
  end
64
- end # Optional
65
- end # Argument
66
- end # Node
67
- end # Mutator
68
- end # Mutest
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -22,11 +22,23 @@ module Mutest
22
22
  # @return [undefined]
23
23
  def emit_argument_presence
24
24
  emit_type
25
+
25
26
  mutate_with(Util::Array::Presence, children) do |children|
26
- emit_type(*children)
27
+ if children.one? && n_mlhs?(Mutest::Util.one(children))
28
+ emit_procarg(Mutest::Util.one(children))
29
+ else
30
+ emit_type(*children)
31
+ end
27
32
  end
28
33
  end
29
34
 
35
+ # Emit procarg form
36
+ #
37
+ # @return [undefined]
38
+ def emit_procarg(arg)
39
+ emit_type(s(:procarg0, *arg))
40
+ end
41
+
30
42
  # Emit argument mutations
31
43
  #
32
44
  # @return [undefined]
@@ -34,6 +46,7 @@ module Mutest
34
46
  children.each_with_index do |child, index|
35
47
  mutate(child).each do |mutest|
36
48
  next if invalid_argument_replacement?(mutest, index)
49
+
37
50
  emit_child_update(index, mutest)
38
51
  end
39
52
  end
@@ -84,7 +97,7 @@ module Mutest
84
97
  n_mlhs?(child)
85
98
  end
86
99
  end
87
- end # Arguments
88
- end # Node
89
- end # Mutator
90
- end # Mutest
100
+ end
101
+ end
102
+ end
103
+ end
@@ -15,7 +15,7 @@ module Mutest
15
15
  emit(child)
16
16
  end
17
17
  end
18
- end # Begin
19
- end # Node
20
- end # Mutator
21
- end # Mutest
18
+ end
19
+ end
20
+ end
21
+ end
@@ -58,7 +58,7 @@ module Mutest
58
58
  def emit_left_negation
59
59
  emit(s(node.type, n_not(left), right))
60
60
  end
61
- end # Binary
62
- end # Node
63
- end # Mutator
64
- end # Mutest
61
+ end
62
+ end
63
+ end
64
+ end
@@ -14,7 +14,7 @@ module Mutest
14
14
  # @return [undefined]
15
15
  def dispatch
16
16
  emit_singletons
17
- emit(send)
17
+ emit(send) unless n_lambda?(send)
18
18
  emit_send_mutations(&method(:n_send?))
19
19
  emit_arguments_mutations
20
20
 
@@ -29,6 +29,7 @@ module Mutest
29
29
  emit_body(N_RAISE)
30
30
 
31
31
  return unless body
32
+
32
33
  emit(body)
33
34
  emit_body_mutations
34
35
 
@@ -45,7 +46,7 @@ module Mutest
45
46
 
46
47
  emit(s(:send, send, body_meta.selector, *body_meta.arguments))
47
48
  end
48
- end # Block
49
- end # Node
50
- end # Mutator
51
- end # Mutest
49
+ end
50
+ end
51
+ end
52
+ end
@@ -23,7 +23,7 @@ module Mutest
23
23
  emit_arg(s(:sym, method))
24
24
  end
25
25
  end
26
- end # BlockPass
27
- end # Node
28
- end # Mutator
29
- end # Mutest
26
+ end
27
+ end
28
+ end
29
+ end
@@ -15,7 +15,7 @@ module Mutest
15
15
  emit_singletons
16
16
  children.each_index(&method(:delete_child))
17
17
  end
18
- end # Break
19
- end # Node
20
- end # Mutator
21
- end # Mutest
18
+ end
19
+ end
20
+ end
21
+ end
@@ -37,11 +37,13 @@ module Mutest
37
37
  def emit_else_mutations
38
38
  else_branch = children.last
39
39
  else_index = children.length - 1
40
+
40
41
  return unless else_branch
42
+
41
43
  mutate_child(else_index)
42
44
  emit_child_update(else_index, nil)
43
45
  end
44
- end # Case
45
- end # Node
46
- end # Mutator
47
- end # Mutest
46
+ end
47
+ end
48
+ end
49
+ end
@@ -15,7 +15,7 @@ module Mutest
15
15
  def dispatch
16
16
  emit_body_mutations if body
17
17
  end
18
- end # Class
19
- end # Node
20
- end # Mutator
21
- end # Mutest
18
+ end
19
+ end
20
+ end
21
+ end
@@ -19,7 +19,7 @@ module Mutest
19
19
  emit_body(nil)
20
20
  emit_body(N_RAISE)
21
21
  end
22
- end # ConditionalLoop
23
- end # Node
24
- end # Mutator
25
- end # Mutest
22
+ end
23
+ end
24
+ end
25
+ end
@@ -17,7 +17,7 @@ module Mutest
17
17
  mutate_child(index) if child.instance_of?(::Parser::AST::Node)
18
18
  end
19
19
  end
20
- end # Const
21
- end # Node
22
- end # Mutator
23
- end # Mutest
20
+ end
21
+ end
22
+ end
23
+ end
@@ -69,15 +69,15 @@ module Mutest
69
69
  handle :def
70
70
 
71
71
  children :name, :arguments, :body
72
- end # Instance
72
+ end
73
73
 
74
74
  # Mutator for singleton method defines
75
75
  class Singleton < self
76
76
  handle :defs
77
77
 
78
78
  children :subject, :name, :arguments, :body
79
- end # Singleton
80
- end # Define
81
- end # Node
82
- end # Mutator
83
- end # Mutest
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end