Sha256: 441c5044893f1e010ffc1f88ee95b95eade71d5d6ce6d468aa363cbfb6bb503c

Contents?: true

Size: 1.88 KB

Versions: 5

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
            [[], [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

5 entries across 5 versions & 1 rubygems

Version Path
mutant-0.2.7 lib/mutant/mutator/node/literal/hash.rb
mutant-0.2.6 lib/mutant/mutator/node/literal/hash.rb
mutant-0.2.5 lib/mutant/mutator/node/literal/hash.rb
mutant-0.2.4 lib/mutant/mutator/node/literal/hash.rb
mutant-0.2.3 lib/mutant/mutator/node/literal/hash.rb