Sha256: 7d01cd23c3892bea430d1e30b39006da8a97a505993cf010f11d71badf59db4f

Contents?: true

Size: 1.37 KB

Versions: 3

Compression:

Stored size: 1.37 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'.freeze

    # Kill mutation
    #
    # @param [Mutation] mutation
    #
    # @return [Result::Mutation]
    def kill(mutation)
      test_result = run_mutation_tests(mutation)
      Result::Mutation.new(
        mutation:    mutation,
        test_result: test_result
      )
    end

  private

    # Kill mutation under isolation with integration
    #
    # @param [Isolation] isolation
    # @param [Integration] integration
    #
    # @return [Result::Test]
    #
    # rubocop:disable MethodLength
    def run_mutation_tests(mutation)
      start = Time.now
      tests = selector.call(mutation.subject)

      config.isolation.call do
        mutation.insert(config.kernel)
        integration.call(tests)
      end
    rescue Isolation::Error => error
      Result::Test.new(
        output:  error.message,
        passed:  false,
        runtime: Time.now - start,
        tests:   tests
      )
    end

  end # Env
end # Mutant

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mutant-0.8.19 lib/mutant/env.rb
mutant-0.8.18 lib/mutant/env.rb
mutant-0.8.17 lib/mutant/env.rb