free_mutant/lib/mutant/mutator/node/literal/hash.rb

83 lines
1.7 KiB
Ruby

module Mutant
class Mutator
class Node
class Literal
# Mutator for hash literals
class Hash < self
handle(Rubinius::AST::HashLiteral)
private
# Emit mutations
#
# @return [undefined]
#
# @api private
#
def dispatch
emit_nil
emit_values(values)
emit_element_presence
emit_body
end
# Emit body mutations
#
# @return [undefined]
#
# @api private
#
def emit_body
emit_attribute_mutations(:array, Mutator::Util::Array::Element)
end
# Return array of values in literal
#
# @return [Array]
#
# @api private
#
def array
node.array
end
# Return duplicate of array values in literal
#
# @return [Array]
#
# @api private
#
def dup_array
array.dup
end
# Return values to mutate against
#
# @return [Array]
#
# @api private
#
def values
[[]]
end
# Emit element presence mutations
#
# @return [undefined]
#
# @api private
#
def emit_element_presence
0.step(array.length-1, 2) do |index|
contents = dup_array
contents.delete_at(index)
contents.delete_at(index)
emit_self(contents)
end
end
end
end
end
end
end