Class: Mutant::Subject

Inherits:
Object
  • Object
show all
Includes:
AbstractType, Adamantium::Flat, Enumerable
Defined in:
lib/mutant/subject.rb,
lib/mutant/subject/method.rb,
lib/mutant/subject/method/instance.rb,
lib/mutant/subject/method/singleton.rb

Overview

Subject of a mutation

Direct Known Subclasses

Method

Defined Under Namespace

Classes: Method

Instance Method Summary collapse

Instance Method Details

#expressionExpression

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return match expression

Returns:



113
# File 'lib/mutant/subject.rb', line 113

abstract_method :expression

#identificationString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return subject identification

Returns:

  • (String)


79
80
81
# File 'lib/mutant/subject.rb', line 79

def identification
  "#{expression.syntax}:#{source_path}:#{source_line}"
end

#match_expressionsEnumerable<Expression>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return match expressions

Returns:



121
122
123
# File 'lib/mutant/subject.rb', line 121

def match_expressions
  [expression].concat(context.match_expressions)
end

#mutationsEnumerable<Mutation>, undefined

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return mutations

Returns:



14
15
16
17
18
# File 'lib/mutant/subject.rb', line 14

def mutations
  mutations = [neutral_mutation]
  generate_mutations(mutations)
  mutations
end

#prepareself

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Prepare the subject for the insertion of mutation

Returns:

  • (self)


59
60
61
# File 'lib/mutant/subject.rb', line 59

def prepare
  self
end

#root(node) ⇒ Parser::AST::Node

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return root AST for node

Parameters:

  • node (Parser::AST::Node)

Returns:

  • (Parser::AST::Node)


103
104
105
# File 'lib/mutant/subject.rb', line 103

def root(node)
  context.root(node)
end

#sourceString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return source representation of ast

Returns:

  • (String)


90
91
92
# File 'lib/mutant/subject.rb', line 90

def source
  Unparser.unparse(node)
end

#source_lineFixnum

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return source line

Returns:

  • (Fixnum)


69
70
71
# File 'lib/mutant/subject.rb', line 69

def source_line
  node.location.expression.line
end

#source_pathString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return source path

Returns:

  • (String)


27
28
29
# File 'lib/mutant/subject.rb', line 27

def source_path
  context.source_path
end

#testsArray<Test>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return tests for mutation

TODO: This logic is now centralized but still fucked.

Parameters:

Returns:



41
42
43
44
45
46
47
48
49
50
# File 'lib/mutant/subject.rb', line 41

def tests
  match_expressions.each do |match_expression|
    tests = config.integration.all_tests.select do |test|
      match_expression.prefix?(test.expression)
    end
    return tests if tests.any?
  end

  EMPTY_ARRAY
end