Sha256: 7fe98587d3a4c6c8a15b222e54f64abc836039dfa8cdfb085b200a807f8d3732

Contents?: true

Size: 1.74 KB

Versions: 9

Compression:

Stored size: 1.74 KB

Contents

# encoding: UTF-8

class MutationVerifier
  include Adamantium::Flat, Concord.new(:original_node, :expected, :generated)

  # Test if mutation was verified successfully
  #
  # @return [Boolean]
  #
  # @api private
  #
  def success?
    unparser.success? && missing.empty? && unexpected.empty?
  end

  # Return error report
  #
  # @return [String]
  #
  # @api private
  #
  def error_report
    unless unparser.success?
      return unparser.report
    end
    mutation_report
  end

private

  # Return unexpected mutationso
  #
  # @return [Array<Parser::AST::Node>]
  #
  # @api private
  #
  def unexpected
    generated - expected
  end
  memoize :unexpected

  # Return mutation report
  #
  # @return [String]
  #
  # @api private
  #
  def mutation_report
    message = ['Original-AST:', original_node.inspect, 'Original-Source:', Unparser.unparse(original_node)]
    if missing.any?
      message << 'Missing mutations:'
      message << missing.map(&method(:format_mutation)).join("\n-----\n")
    end
    if unexpected.any?
      message << 'Unexpected mutations:'
      message << unexpected.map(&method(:format_mutation)).join("\n-----\n")
    end
    message.join("\n======\n")
  end

  # Format mutation
  #
  # @return [String]
  #
  # @api private
  #
  def format_mutation(node)
    [
      node.inspect,
      Unparser.unparse(node)
    ].join("\n")
  end

  # Return missing mutationso
  #
  # @return [Array<Parser::AST::Node>]
  #
  # @api private
  #
  def missing
    expected - generated
  end
  memoize :missing

  # Return unparser verifier
  #
  # @return [Unparser::CLI::Source]
  #
  # @api private
  #
  def unparser
    Unparser::CLI::Source::Node.new(Unparser::Preprocessor.run(original_node))
  end
  memoize :unparser

end # MutationVerifier

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
mutant-0.5.26 spec/support/mutation_verifier.rb
mutant-0.5.25 spec/support/mutation_verifier.rb
mutant-0.5.24 spec/support/mutation_verifier.rb
mutant-0.5.23 spec/support/mutation_verifier.rb
mutant-0.5.22 spec/support/mutation_verifier.rb
mutant-0.5.21 spec/support/mutation_verifier.rb
mutant-0.5.20 spec/support/mutation_verifier.rb
mutant-0.5.19 spec/support/mutation_verifier.rb
mutant-0.5.18 spec/support/mutation_verifier.rb