class Mutest::Mutator
Generator for mutations
Generator for mutations
Constants
- REGISTRY
Attributes
Return output
@return [Set<Parser::AST::Node>]
Public Class Methods
Lookup and invoke dedicated AST
mutator
@param node [Parser::AST::Node] @param parent [nil,Mutest::Mutator::Node]
@return [Set<Parser::AST::Node>]
# File lib/mutest/mutator.rb, line 17 def self.mutate(node, filter = ->(_) {}, parent = nil) self::REGISTRY.lookup(node.type).call(node, filter, parent) end
Initialize object
@param [Object] input @param [#call] mutation filter @param [Object] parent @param [#call(node)] block
@return [undefined]
# File lib/mutest/mutator.rb, line 46 def initialize(_input, _filter, _parent = nil) super @output = Set.new dispatch unless disabled? end
Private Class Methods
Register node class handler
@return [undefined]
# File lib/mutest/mutator.rb, line 24 def self.handle(*types) types.each do |type| self::REGISTRY.register(type, self) end end
Private Instance Methods
# File lib/mutest/mutator.rb, line 54 def disabled? filter.call(input) end
Shortcut to create a new unfrozen duplicate of input
@return [Object]
# File lib/mutest/mutator.rb, line 86 def dup_input input.dup end
Emit generated mutation if object is not equivalent to input
@param [Object] object
@return [undefined]
# File lib/mutest/mutator.rb, line 77 def emit(object) return unless new?(object) output << object end
Mutate child nodes within source path
@return [Set<Parser::AST::Node>]
# File lib/mutest/mutator.rb, line 93 def mutate(node, parent = nil) self.class.mutate(node, filter, parent) end
Mutate nodes using a specific mutator class
@yield [Object] value emitted by provided mutator
@return [undefined]
# File lib/mutest/mutator.rb, line 109 def mutate_with(mutator, nodes, &block) block ||= method(:emit) mutator.call(nodes, filter).each(&block) end
Test
if generated object is not guarded from emitting
@param [Object] object
@return [Boolean]
# File lib/mutest/mutator.rb, line 63 def new?(object) !object.eql?(input) end
Run input with mutator
@return [undefined]
# File lib/mutest/mutator.rb, line 100 def run(mutator) mutate_with(mutator, input) end