Sha256: 383509e4e93e124576f05bfab1f504c7c10be9980070ecac43285d047845f6eb

Contents?: true

Size: 1.71 KB

Versions: 4

Compression:

Stored size: 1.71 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
            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
            [[], [new_nil, new_nil] + dup_array]
          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

4 entries across 4 versions & 1 rubygems

Version Path
mutant-0.2.12 lib/mutant/mutator/node/literal/hash.rb
mutant-0.2.11 lib/mutant/mutator/node/literal/hash.rb
mutant-0.2.9 lib/mutant/mutator/node/literal/hash.rb
mutant-0.2.8 lib/mutant/mutator/node/literal/hash.rb