free_mutant/lib/mutant/env.rb
2015-11-21 22:02:51 +00:00

60 lines
1.3 KiB
Ruby

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