mutant 0.3.0.beta21 → 0.3.0.beta22

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 (223) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +37 -6
  3. data/.rspec +2 -0
  4. data/.ruby-gemset +1 -0
  5. data/.travis.yml +13 -7
  6. data/Gemfile +8 -3
  7. data/Gemfile.devtools +2 -6
  8. data/Guardfile +22 -8
  9. data/README.md +3 -1
  10. data/Rakefile +3 -0
  11. data/bin/mutant +4 -3
  12. data/config/devtools.yml +1 -1
  13. data/config/flay.yml +1 -1
  14. data/config/flog.yml +1 -1
  15. data/config/reek.yml +7 -6
  16. data/config/rubocop.yml +55 -0
  17. data/lib/mutant.rb +3 -1
  18. data/lib/mutant/cache.rb +2 -0
  19. data/lib/mutant/cli.rb +14 -10
  20. data/lib/mutant/cli/classifier.rb +22 -10
  21. data/lib/mutant/cli/classifier/method.rb +14 -15
  22. data/lib/mutant/cli/classifier/namespace.rb +6 -2
  23. data/lib/mutant/cli/classifier/scope.rb +3 -1
  24. data/lib/mutant/color.rb +7 -3
  25. data/lib/mutant/config.rb +2 -0
  26. data/lib/mutant/constants.rb +5 -4
  27. data/lib/mutant/context.rb +2 -0
  28. data/lib/mutant/context/scope.rb +3 -1
  29. data/lib/mutant/differ.rb +10 -2
  30. data/lib/mutant/killer.rb +4 -1
  31. data/lib/mutant/killer/forked.rb +2 -0
  32. data/lib/mutant/killer/forking.rb +2 -0
  33. data/lib/mutant/killer/rspec.rb +19 -3
  34. data/lib/mutant/killer/static.rb +2 -0
  35. data/lib/mutant/loader.rb +8 -1
  36. data/lib/mutant/matcher.rb +2 -0
  37. data/lib/mutant/matcher/chain.rb +2 -0
  38. data/lib/mutant/matcher/method.rb +15 -3
  39. data/lib/mutant/matcher/method/finder.rb +2 -0
  40. data/lib/mutant/matcher/method/instance.rb +4 -1
  41. data/lib/mutant/matcher/method/singleton.rb +7 -1
  42. data/lib/mutant/matcher/methods.rb +3 -1
  43. data/lib/mutant/matcher/namespace.rb +4 -2
  44. data/lib/mutant/matcher/scope.rb +2 -0
  45. data/lib/mutant/mutation.rb +19 -5
  46. data/lib/mutant/mutation/evil.rb +12 -0
  47. data/lib/mutant/mutation/filter.rb +2 -0
  48. data/lib/mutant/mutation/filter/code.rb +3 -1
  49. data/lib/mutant/mutation/filter/regexp.rb +2 -0
  50. data/lib/mutant/mutation/filter/whitelist.rb +2 -0
  51. data/lib/mutant/mutation/neutral.rb +25 -0
  52. data/lib/mutant/mutator.rb +4 -6
  53. data/lib/mutant/mutator/node.rb +5 -1
  54. data/lib/mutant/mutator/node/argument.rb +2 -0
  55. data/lib/mutant/mutator/node/arguments.rb +2 -0
  56. data/lib/mutant/mutator/node/begin.rb +2 -0
  57. data/lib/mutant/mutator/node/block.rb +2 -0
  58. data/lib/mutant/mutator/node/case.rb +3 -1
  59. data/lib/mutant/mutator/node/connective/binary.rb +3 -1
  60. data/lib/mutant/mutator/node/const.rb +2 -0
  61. data/lib/mutant/mutator/node/define.rb +2 -0
  62. data/lib/mutant/mutator/node/generic.rb +4 -3
  63. data/lib/mutant/mutator/node/if.rb +2 -0
  64. data/lib/mutant/mutator/node/literal.rb +2 -0
  65. data/lib/mutant/mutator/node/literal/array.rb +2 -0
  66. data/lib/mutant/mutator/node/literal/boolean.rb +2 -0
  67. data/lib/mutant/mutator/node/literal/dynamic.rb +2 -0
  68. data/lib/mutant/mutator/node/literal/fixnum.rb +3 -1
  69. data/lib/mutant/mutator/node/literal/float.rb +2 -0
  70. data/lib/mutant/mutator/node/literal/hash.rb +2 -0
  71. data/lib/mutant/mutator/node/literal/nil.rb +2 -0
  72. data/lib/mutant/mutator/node/literal/range.rb +2 -1
  73. data/lib/mutant/mutator/node/literal/regex.rb +2 -0
  74. data/lib/mutant/mutator/node/literal/string.rb +2 -0
  75. data/lib/mutant/mutator/node/literal/symbol.rb +5 -1
  76. data/lib/mutant/mutator/node/masgn.rb +2 -0
  77. data/lib/mutant/mutator/node/mlhs.rb +2 -0
  78. data/lib/mutant/mutator/node/named_value/access.rb +2 -0
  79. data/lib/mutant/mutator/node/named_value/constant_assignment.rb +2 -0
  80. data/lib/mutant/mutator/node/named_value/variable_assignment.rb +3 -1
  81. data/lib/mutant/mutator/node/{cbase.rb → noop.rb} +7 -5
  82. data/lib/mutant/mutator/node/return.rb +2 -0
  83. data/lib/mutant/mutator/node/send.rb +2 -0
  84. data/lib/mutant/mutator/node/send/binary.rb +2 -0
  85. data/lib/mutant/mutator/node/splat.rb +2 -0
  86. data/lib/mutant/mutator/node/super.rb +2 -0
  87. data/lib/mutant/mutator/node/when.rb +3 -1
  88. data/lib/mutant/mutator/node/while.rb +2 -0
  89. data/lib/mutant/mutator/node/zsuper.rb +2 -0
  90. data/lib/mutant/mutator/registry.rb +55 -13
  91. data/lib/mutant/mutator/util.rb +2 -0
  92. data/lib/mutant/mutator/util/array.rb +3 -1
  93. data/lib/mutant/mutator/util/symbol.rb +2 -0
  94. data/lib/mutant/node_helpers.rb +10 -4
  95. data/lib/mutant/random.rb +2 -0
  96. data/lib/mutant/reporter.rb +2 -0
  97. data/lib/mutant/reporter/cli.rb +2 -0
  98. data/lib/mutant/reporter/cli/printer.rb +2 -0
  99. data/lib/mutant/reporter/cli/printer/config.rb +5 -2
  100. data/lib/mutant/reporter/cli/printer/killer.rb +2 -0
  101. data/lib/mutant/reporter/cli/printer/mutation.rb +13 -6
  102. data/lib/mutant/reporter/cli/printer/subject.rb +5 -1
  103. data/lib/mutant/reporter/null.rb +2 -0
  104. data/lib/mutant/runner.rb +2 -0
  105. data/lib/mutant/runner/config.rb +2 -0
  106. data/lib/mutant/runner/mutation.rb +2 -0
  107. data/lib/mutant/runner/subject.rb +2 -0
  108. data/lib/mutant/singleton_methods.rb +5 -3
  109. data/lib/mutant/strategy.rb +2 -0
  110. data/lib/mutant/strategy/method_expansion.rb +2 -0
  111. data/lib/mutant/strategy/rspec.rb +2 -0
  112. data/lib/mutant/strategy/rspec/dm2.rb +2 -0
  113. data/lib/mutant/strategy/rspec/dm2/lookup.rb +4 -2
  114. data/lib/mutant/strategy/rspec/dm2/lookup/method.rb +2 -0
  115. data/lib/mutant/strategy/static.rb +2 -0
  116. data/lib/mutant/subject.rb +4 -1
  117. data/lib/mutant/subject/method.rb +2 -0
  118. data/lib/mutant/subject/method/instance.rb +2 -0
  119. data/lib/mutant/subject/method/singleton.rb +2 -0
  120. data/lib/mutant/support/method_object.rb +2 -0
  121. data/lib/mutant/zombifier.rb +10 -6
  122. data/mutant.gemspec +11 -10
  123. data/spec/integration/mutant/rspec_killer_spec.rb +9 -4
  124. data/spec/integration/mutant/test_mutator_handles_types_spec.rb +3 -1
  125. data/spec/integration/mutant/zombie_spec.rb +2 -0
  126. data/spec/shared/method_matcher_behavior.rb +2 -0
  127. data/spec/shared/mutator_behavior.rb +16 -7
  128. data/spec/spec_helper.rb +26 -5
  129. data/spec/support/compress_helper.rb +5 -5
  130. data/spec/support/ice_nine_config.rb +2 -0
  131. data/spec/support/rspec.rb +2 -0
  132. data/spec/support/test_app.rb +2 -0
  133. data/spec/unit/mutant/class_methods/singleton_subclass_instance_spec.rb +2 -0
  134. data/spec/unit/mutant/cli/class_methods/new_spec.rb +17 -8
  135. data/spec/unit/mutant/cli/class_methods/run_spec.rb +10 -2
  136. data/spec/unit/mutant/cli/classifier/class_methods/build_spec.rb +4 -1
  137. data/spec/unit/mutant/cli/classifier/method/each_spec.rb +89 -0
  138. data/spec/unit/mutant/cli/classifier/namespace/flat/each_spec.rb +58 -0
  139. data/spec/unit/mutant/cli/classifier/namespace/recursive/each_spec.rb +58 -0
  140. data/spec/unit/mutant/cli/classifier/scope/each_spec.rb +33 -0
  141. data/spec/unit/mutant/context/root_spec.rb +5 -1
  142. data/spec/unit/mutant/context/scope/root_spec.rb +2 -0
  143. data/spec/unit/mutant/context/scope/unqualified_name_spec.rb +2 -0
  144. data/spec/unit/mutant/differ/class_methods/build_spec.rb +2 -0
  145. data/spec/unit/mutant/differ/class_methods/colorize_line_spec.rb +2 -0
  146. data/spec/unit/mutant/differ/diff_spec.rb +67 -5
  147. data/spec/unit/mutant/killer/rspec/class_methods/new_spec.rb +21 -4
  148. data/spec/unit/mutant/killer/success_predicate_spec.rb +2 -0
  149. data/spec/unit/mutant/loader/eval/class_methods/run_spec.rb +12 -5
  150. data/spec/unit/mutant/matcher/chain/each_spec.rb +2 -0
  151. data/spec/unit/mutant/matcher/chain/matchers_spec.rb +2 -0
  152. data/spec/unit/mutant/matcher/each_spec.rb +8 -1
  153. data/spec/unit/mutant/matcher/method/instance/class_methods/build_spec.rb +4 -2
  154. data/spec/unit/mutant/matcher/method/instance/each_spec.rb +21 -20
  155. data/spec/unit/mutant/matcher/method/singleton/each_spec.rb +22 -19
  156. data/spec/unit/mutant/matcher/methods/instance/each_spec.rb +8 -3
  157. data/spec/unit/mutant/matcher/methods/singleton/each_spec.rb +8 -3
  158. data/spec/unit/mutant/matcher/namespace/each_spec.rb +8 -2
  159. data/spec/unit/mutant/mutator/each_spec.rb +2 -0
  160. data/spec/unit/mutant/mutator/emit_new_spec.rb +10 -3
  161. data/spec/unit/mutant/mutator/emit_spec.rb +4 -2
  162. data/spec/unit/mutant/mutator/node/and_asgn/mutation_spec.rb +26 -0
  163. data/spec/unit/mutant/mutator/node/begin/mutation_spec.rb +2 -0
  164. data/spec/unit/mutant/mutator/node/block/mutation_spec.rb +4 -2
  165. data/spec/unit/mutant/mutator/node/block_pass/mutation_spec.rb +14 -0
  166. data/spec/unit/mutant/mutator/node/break/mutation_spec.rb +15 -0
  167. data/spec/unit/mutant/mutator/node/case/mutation_spec.rb +2 -0
  168. data/spec/unit/mutant/mutator/node/cbase/mutation_spec.rb +3 -6
  169. data/spec/unit/mutant/mutator/node/connective/binary/mutation_spec.rb +2 -0
  170. data/spec/unit/mutant/mutator/node/const/mutation_spec.rb +3 -6
  171. data/spec/unit/mutant/mutator/node/define/mutation_spec.rb +2 -1
  172. data/spec/unit/mutant/mutator/node/defined_predicate/mutation_spec.rb +10 -0
  173. data/spec/unit/mutant/mutator/node/dstr/mutation_spec.rb +21 -0
  174. data/spec/unit/mutant/mutator/node/dsym/mutation_spec.rb +21 -0
  175. data/spec/unit/mutant/mutator/node/ensure/mutation_spec.rb +15 -0
  176. data/spec/unit/mutant/mutator/node/if/mutation_spec.rb +2 -1
  177. data/spec/unit/mutant/mutator/node/literal/array_spec.rb +2 -0
  178. data/spec/unit/mutant/mutator/node/literal/boolean/mutation_spec.rb +2 -0
  179. data/spec/unit/mutant/mutator/node/literal/fixnum_spec.rb +2 -0
  180. data/spec/unit/mutant/mutator/node/literal/float_spec.rb +4 -2
  181. data/spec/unit/mutant/mutator/node/literal/hash_spec.rb +2 -0
  182. data/spec/unit/mutant/mutator/node/literal/nil_spec.rb +4 -5
  183. data/spec/unit/mutant/mutator/node/literal/range_spec.rb +8 -8
  184. data/spec/unit/mutant/mutator/node/literal/regex_spec.rb +2 -0
  185. data/spec/unit/mutant/mutator/node/literal/string_spec.rb +2 -0
  186. data/spec/unit/mutant/mutator/node/literal/symbol_spec.rb +2 -0
  187. data/spec/unit/mutant/mutator/node/masgn/mutation_spec.rb +4 -10
  188. data/spec/unit/mutant/mutator/node/match_current_line/mutation_spec.rb +20 -0
  189. data/spec/unit/mutant/mutator/node/named_value/access/mutation_spec.rb +3 -2
  190. data/spec/unit/mutant/mutator/node/named_value/constant_assignment/mutation_spec.rb +3 -2
  191. data/spec/unit/mutant/mutator/node/named_value/variable_assignment/mutation_spec.rb +3 -2
  192. data/spec/unit/mutant/mutator/node/next/mutation_spec.rb +15 -0
  193. data/spec/unit/mutant/mutator/node/op_assgn/mutation_spec.rb +26 -0
  194. data/spec/unit/mutant/mutator/node/or_asgn/mutation_spec.rb +26 -0
  195. data/spec/unit/mutant/mutator/node/redo/mutation_spec.rb +10 -0
  196. data/spec/unit/mutant/mutator/node/rescue/mutation_spec.rb +24 -0
  197. data/spec/unit/mutant/mutator/node/restarg/mutation_spec.rb +16 -0
  198. data/spec/unit/mutant/mutator/node/return/mutation_spec.rb +2 -0
  199. data/spec/unit/mutant/mutator/node/send/mutation_spec.rb +3 -1
  200. data/spec/unit/mutant/mutator/node/super/mutation_spec.rb +2 -0
  201. data/spec/unit/mutant/mutator/node/while/mutation_spec.rb +3 -1
  202. data/spec/unit/mutant/mutator/node/yield/mutation_spec.rb +15 -0
  203. data/spec/unit/mutant/node_helpers/n_not_spec.rb +2 -0
  204. data/spec/unit/mutant/runner/config/subjects_spec.rb +6 -2
  205. data/spec/unit/mutant/runner/config/success_predicate_spec.rb +15 -6
  206. data/spec/unit/mutant/runner/mutation/killer_spec.rb +3 -1
  207. data/spec/unit/mutant/runner/subject/success_predicate_spec.rb +15 -8
  208. data/spec/unit/mutant/strategy/method_expansion/class_methods/run_spec.rb +2 -0
  209. data/spec/unit/mutant/strategy/rspec/dm2/lookup/method/instance/spec_files_spec.rb +32 -11
  210. data/spec/unit/mutant/strategy/rspec/dm2/lookup/method/singleton/spec_files_spec.rb +31 -11
  211. data/spec/unit/mutant/subject/context_spec.rb +2 -0
  212. data/spec/unit/mutant/subject/mutations_spec.rb +2 -0
  213. data/spec/unit/mutant/subject/node_spec.rb +2 -0
  214. data/test_app/lib/test_app.rb +2 -0
  215. data/test_app/lib/test_app/literal.rb +2 -0
  216. data/test_app/spec/shared/method_filter_parse_behavior.rb +5 -1
  217. data/test_app/spec/shared/method_match_behavior.rb +2 -0
  218. data/test_app/spec/spec_helper.rb +3 -1
  219. data/test_app/spec/unit/test_app/literal/command_spec.rb +2 -0
  220. data/test_app/spec/unit/test_app/literal/string_spec.rb +3 -1
  221. metadata +66 -18
  222. data/bin/zombie +0 -18
  223. data/test_app/spec/shared/mutator_behavior.rb +0 -44
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Matcher
3
5
  class Method
@@ -92,7 +94,11 @@ module Mutant
92
94
  when :const
93
95
  receiver_name?(receiver)
94
96
  else
95
- $stderr.puts "Can only match self or const, got #{receiver.type}, unable to match receiver of defs node"
97
+ message = sprintf(
98
+ 'Can only match :defs on :self or :const got %s unable to match',
99
+ receiver.type.inspect
100
+ )
101
+ $stderr.puts(message)
96
102
  false
97
103
  end
98
104
  end
@@ -1,6 +1,8 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Matcher
3
- # Abstract base class for matcher that returns method subjects extracted from scope
5
+ # Abstract base class for matcher that returns method subjects from scope
4
6
  class Methods < self
5
7
  include AbstractType, Concord::Public.new(:cache, :scope)
6
8
 
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Matcher
3
5
 
@@ -34,7 +36,7 @@ module Mutant
34
36
  # @api private
35
37
  #
36
38
  def pattern
37
- %r(\A#{Regexp.escape(namespace.name)}(?:::)?)
39
+ /\A#{Regexp.escape(namespace.name)}(?:::)?/
38
40
  end
39
41
  memoize :pattern
40
42
 
@@ -62,7 +64,7 @@ module Mutant
62
64
  #
63
65
  def emit_scope(scope)
64
66
  name = scope.name
65
- # FIXME Fix nokogiri to return a string here
67
+ # FIXME: Fix nokogiri to return a string here
66
68
  return unless name.kind_of?(String)
67
69
  if pattern =~ name
68
70
  yield scope
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Matcher
3
5
  # Matcher for specific namespace
@@ -1,7 +1,10 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  # Represent a mutated node with its subject
3
5
  class Mutation
4
- include AbstractType, Adamantium::Flat, Concord::Public.new(:subject, :node)
6
+ include AbstractType, Adamantium::Flat
7
+ include Concord::Public.new(:subject, :node)
5
8
 
6
9
  # Return mutated root node
7
10
  #
@@ -28,12 +31,23 @@ module Mutant
28
31
  #
29
32
  abstract_method :success?
30
33
 
34
+ # Indicate if a killer should treat a kill as problematic
35
+ #
36
+ # @return [true]
37
+ # if killing is unexpected
38
+ #
39
+ # @return [false]
40
+ # if killing is expected
41
+ #
42
+ # @api private
43
+ #
44
+ abstract_method :should_survive?
45
+
31
46
  # Insert mutated node
32
47
  #
33
- # FIXME:
34
- # Cache subject visibility in a better way! Ideally dont mutate it implicitly.
35
- # Also subject.public? should NOT be a public interface it is a detail of method
36
- # mutations.
48
+ # FIXME: Cache subject visibility in a better way! Ideally dont mutate it
49
+ # implicitly. Also subject.public? should NOT be a public interface it
50
+ # is a detail of method mutations.
37
51
  #
38
52
  # @return [self]
39
53
  #
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutation
3
5
  # Evul mutation
@@ -30,6 +32,16 @@ module Mutant
30
32
  killer.killed?
31
33
  end
32
34
 
35
+ # Indicate if a killer should treat a kill as problematic
36
+ #
37
+ # @return [false] Killing evil mutants is not problematic
38
+ #
39
+ # @api private
40
+ #
41
+ def should_survive?
42
+ false
43
+ end
44
+
33
45
  end # Evil
34
46
  end # Mutation
35
47
  end # Mutant
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutation
3
5
  # Abstract filter for mutations
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutation
3
5
  class Filter
@@ -21,7 +23,7 @@ module Mutant
21
23
  mutation.code.eql?(code)
22
24
  end
23
25
 
24
- PATTERN = %r(\Acode:([a-f0-9]{1,6})\z).freeze
26
+ PATTERN = /\Acode:([a-f0-9]{1,6})\z/.freeze
25
27
 
26
28
  # Test if class handles string
27
29
  #
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutation
3
5
  class Filter
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutation
3
5
  class Filter
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutation
3
5
  # Neutral mutation
@@ -10,6 +12,19 @@ module Mutant
10
12
 
11
13
  SYMBOL = 'noop'
12
14
 
15
+ # Indicate if a killer should treat a kill as problematic
16
+ #
17
+ # @return [false] Killing noop mutants is a serious problem. Failures
18
+ # in noop may indicate a broken test suite, but they can also be an
19
+ # indication mutant has altered the runtime environment in a subtle
20
+ # way and tickled an odd bug
21
+ #
22
+ # @api private
23
+ #
24
+ def should_survive?
25
+ false
26
+ end
27
+
13
28
  end
14
29
 
15
30
  # Return identification
@@ -39,6 +54,16 @@ module Mutant
39
54
  !killer.killed?
40
55
  end
41
56
 
57
+ # Indicate if a killer should treat a kill as problematic
58
+ #
59
+ # @return [true] Neutral mutants must die
60
+ #
61
+ # @api private
62
+ #
63
+ def should_survive?
64
+ false
65
+ end
66
+
42
67
  end # Neutral
43
68
  end # Mutation
44
69
  end # Mutant
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  # Generator for mutations
3
5
  class Mutator
@@ -12,7 +14,7 @@ module Mutant
12
14
  #
13
15
  # @api private
14
16
  #
15
- def self.each(node, parent=nil, &block)
17
+ def self.each(node, parent = nil, &block)
16
18
  return to_enum(__method__, node, parent) unless block_given?
17
19
  Registry.lookup(node).new(node, parent, block)
18
20
 
@@ -135,17 +137,13 @@ module Mutant
135
137
 
136
138
  # Call block until it generates a mutation
137
139
  #
138
- # The primary use of this method is to give the random generated object
139
- # a nice interface for retring generation when generation accidentally generated the
140
- # input
141
- #
142
140
  # @yield
143
141
  # Execute block until object is generated where new?(object) returns true
144
142
  #
145
143
  # @return [self]
146
144
  #
147
145
  # @raise [RuntimeError]
148
- # raises RuntimeError in case no new ast node can be generated after MAX_TRIES.
146
+ # raises RuntimeError when no new node can be generated after MAX_TRIES.
149
147
  #
150
148
  # @api private
151
149
  #
@@ -1,6 +1,10 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
4
+
2
5
  # Generator for mutations
3
6
  class Mutator
7
+
4
8
  # Abstract base class for node mutators
5
9
  class Node < self
6
10
  include AbstractType, NodeHelpers, Unparser::Constants
@@ -154,7 +158,7 @@ module Mutant
154
158
  #
155
159
  def emit_child_update(index, node)
156
160
  new_children = children.dup
157
- new_children[index]=node
161
+ new_children[index] = node
158
162
  emit_self(*new_children)
159
163
  end
160
164
 
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -30,7 +32,7 @@ module Mutant
30
32
  # @api private
31
33
  #
32
34
  def emit_when_mutations
33
- indices = children.each_index.drop(1).take(children.length-2)
35
+ indices = children.each_index.drop(1).take(children.length - 2)
34
36
  one = indices.one?
35
37
  indices.each do |index|
36
38
  mutate_child(index)
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -11,7 +13,7 @@ module Mutant
11
13
  :or => :and,
12
14
  }.freeze
13
15
 
14
- handle *INVERSE.keys
16
+ handle(*INVERSE.keys)
15
17
 
16
18
  children :left, :right
17
19
 
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -8,10 +10,9 @@ module Mutant
8
10
  # These nodes still need a dedicated mutator,
9
11
  # your contribution is that close!
10
12
  handle(
11
- :defined,
12
- :next, :break, :match, :ensure,
13
+ :next, :break, :ensure,
13
14
  :dstr, :dsym, :yield, :rescue, :redo, :defined?,
14
- :blockarg, :block_pass, :op_asgn, :and_asgn,
15
+ :blockarg, :op_asgn, :and_asgn,
15
16
  :regopt, :restarg, :resbody, :retry, :arg_expr,
16
17
  :kwrestarg, :kwoptarg, :kwarg, :undef, :module, :empty,
17
18
  :alias, :for, :xstr, :back_ref, :nth_ref, :class,
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -28,7 +30,7 @@ module Mutant
28
30
  # @api private
29
31
  #
30
32
  def values
31
- [0, 1, -value, value+1, value-1]
33
+ [0, 1, -value, value + 1, value - 1]
32
34
  end
33
35
 
34
36
  # Return value
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node
@@ -48,7 +50,6 @@ module Mutant
48
50
  # @api private
49
51
  #
50
52
  def emit_end_mutations
51
- #emit_self(negative_infinity, finish)
52
53
  emit_self(NAN, _end)
53
54
  end
54
55
 
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Mutant
2
4
  class Mutator
3
5
  class Node