Sha256: 63e3cd5267fb90437c0c46d132cf4fe48b9ffa74c3055ce8767f1cff8c49e4b1

Contents?: true

Size: 1.38 KB

Versions: 1

Compression:

Stored size: 1.38 KB

Contents

# frozen_string_literal: true

module Mutant
  # Abstract base class for mutant environments
  class Env
    include Adamantium::Flat, Anima.new(
      :actor_env,
      :config,
      :integration,
      :matchable_scopes,
      :mutations,
      :parser,
      :selector,
      :subjects
    )

    SEMANTICS_MESSAGE =
      "Fix your lib to follow normal ruby semantics!\n" \
      '{Module,Class}#name should return resolvable constant name as String or nil'

    # Kill mutation
    #
    # @param [Mutation] mutation
    #
    # @return [Result::Mutation]
    def kill(mutation)
      start = Timer.now

      Result::Mutation.new(
        isolation_result: run_mutation_tests(mutation),
        mutation:         mutation,
        runtime:          Timer.now - start
      )
    end

    # The test selections
    #
    # @return Hash{Mutation => Enumerable<Test>}
    def selections
      subjects.map do |subject|
        [subject, selector.call(subject)]
      end.to_h
    end
    memoize :selections

  private

    # Kill mutation under isolation with integration
    #
    # @param [Isolation] isolation
    # @param [Integration] integration
    #
    # @return [Result::Isolation]
    def run_mutation_tests(mutation)
      config.isolation.call do
        mutation.insert(config.kernel)
        integration.call(selections.fetch(mutation.subject))
      end
    end

  end # Env
end # Mutant

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mutant-0.8.24 lib/mutant/env.rb