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
@@ -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