Sha256: eade3753bcb6e4243b1d35a95fe99139568c0747263cfaefe915ad48faf3b4ef

Contents?: true

Size: 1.88 KB

Versions: 3

Compression:

Stored size: 1.88 KB

Contents

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
            array.each_with_index do |element, index|
              dup = dup_array
              Mutator.each(element).each do |mutation|
                dup[index]=mutation
                emit_self(dup)
              end
            end
          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
            [[], dup_array << new_nil << new_nil ]
          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

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mutant-0.2.2 lib/mutant/mutator/node/literal/hash.rb
mutant-0.2.1 lib/mutant/mutator/node/literal/hash.rb
mutant-0.2.0 lib/mutant/mutator/node/literal/hash.rb