free_mutant/lib/mutant/subject.rb

138 lines
2.3 KiB
Ruby
Raw Normal View History

module Mutant
# Subject of a mutation
2012-08-01 12:34:03 -04:00
class Subject
2013-07-28 13:05:17 -04:00
include AbstractType, Adamantium::Flat, Enumerable
include Concord::Public.new(:context, :node)
# Return mutations
#
# @return [Enumerable<Mutation>]
#
# @api private
#
def mutations
mutations = []
generate_mutations(mutations)
mutations
end
memoize :mutations
# Return source path
#
# @return [String]
#
# @api private
#
def source_path
context.source_path
end
# Prepare the subject for the insertion of mutation
#
# @return [self]
#
# @api private
#
def prepare
self
end
# Return source line
#
# @return [Fixnum]
#
# @api private
#
def source_line
2013-06-14 14:23:46 -04:00
node.location.expression.line
end
2013-06-23 02:08:32 -04:00
# Return subject identification
#
# @return [String]
#
# @api private
#
def identification
"#{match_expression}:#{source_path}:#{source_line}"
end
memoize :identification
# Return source representation of ast
#
# @return [String]
#
# @api private
2013-04-17 23:31:21 -04:00
#
def source
Unparser.unparse(node)
end
memoize :source
2012-08-14 16:45:34 -04:00
# Return root AST for node
#
# @param [Parser::AST::Node] node
2012-08-14 16:45:34 -04:00
#
# @return [Parser::AST::Node]
2012-08-14 16:45:34 -04:00
#
# @api private
#
def root(node)
context.root(node)
end
# Return root AST node for original AST ndoe
#
# @return [Parser::AST::Node]
#
# @api private
#
def original_root
root(node)
end
memoize :original_root
# Return match expression
2013-01-13 16:25:49 -05:00
#
# @return [String]
#
# @api private
#
abstract_method :match_expression
# Return match prefixes
#
# @return [Enumerable<String>]
#
# @api private
#
def match_prefixes
[match_expression].concat(context.match_prefixes)
end
memoize :match_prefixes
private
2013-01-13 16:25:49 -05:00
# Return neutral mutation
#
# @return [Mutation::Neutral]
#
# @api private
#
def noop_mutation
Mutation::Neutral::Noop.new(self, node)
end
# Generate mutations
#
# @param [#<<] emitter
#
# @return [undefined]
#
# @api private
#
abstract_method :generate_mutations
end # Subject
end # Mutant