Sha256: feafeaed0779c5923ba2830e2a3ab8e4fe9385d307ffbb5dbb93461a84ee7fd0

Contents?: true

Size: 1.75 KB

Versions: 7

Compression:

Stored size: 1.75 KB

Contents

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 mutations
  #
  # @return [Array<Parser::AST::Node>]
  #
  # @api private
  #
  def unexpected
    generated - expected
  end
  memoize :unexpected

  # Return mutation report
  #
  # @return [String]
  #
  # @api private
  #
  # rubocop:disable AbcSize
  #
  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 mutations
  #
  # @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

7 entries across 7 versions & 1 rubygems

Version Path
mutant-0.8.0 spec/support/mutation_verifier.rb
mutant-0.7.9 spec/support/mutation_verifier.rb
mutant-0.7.8 spec/support/mutation_verifier.rb
mutant-0.7.7 spec/support/mutation_verifier.rb
mutant-0.7.6 spec/support/mutation_verifier.rb
mutant-0.7.5 spec/support/mutation_verifier.rb
mutant-0.7.4 spec/support/mutation_verifier.rb