class Petitest::TestRunner

Attributes

error[RW]

@return [StandardError, nil]

finished_at[RW]

@return [Time, nil]

started_at[RW]

@return [Time, nil]

test[R]

@return [Petitest::Test]

test_group[R]

@return [Petitest::TestGroup]

test_method_name[R]

@return [Symbol]

Public Class Methods

new( test:, test_group:, test_method_name: ) click to toggle source

@param test [Petitest::Test] @param test_group [Petitest::TestGroup] @param test_method_name [Symbol]

# File lib/petitest/test_runner.rb, line 24
def initialize(
  test:,
  test_group:,
  test_method_name:
)
  @duration = nil
  @processed = false
  @test = test
  @test_group = test_group
  @test_method_name = test_method_name
end

Public Instance Methods

backtrace() click to toggle source

@return [Array<String>, nil]

# File lib/petitest/test_runner.rb, line 37
def backtrace
  if error
    error.backtrace
  end
end
description() click to toggle source

@return [String]

# File lib/petitest/test_runner.rb, line 44
def description
  test.class.description_by_method_name[test_method_name] || "##{test_method_name}"
end
error_class_name() click to toggle source

@return [String, nil]

# File lib/petitest/test_runner.rb, line 57
def error_class_name
  if error
    error.class.to_s
  end
end
error_message() click to toggle source

@return [String, nil]

# File lib/petitest/test_runner.rb, line 64
def error_message
  if error
    error.to_s
  end
end
failed?() click to toggle source

@return [Boolean]

# File lib/petitest/test_runner.rb, line 71
def failed?
  processed? && !skipped? && !error.nil?
end
filtered_backtrace() click to toggle source

@return [Array<String>, nil]

# File lib/petitest/test_runner.rb, line 76
def filtered_backtrace
  @filtered_backtrace ||= begin
    path = ::File.expand_path("../test_group.rb", __FILE__)
    backtrace.reverse_each.each_with_object([]) do |line, lines|
      if line.start_with?(path)
        break lines
      end
      unless ::Petitest.configuration.backtrace_filters.any? { |filter| filter === line }
        lines << line
      end
    end.reverse
  end
end
full_description() click to toggle source

@return [String]

# File lib/petitest/test_runner.rb, line 49
def full_description
  [
    test_group.full_description,
    description,
  ].join(" ")
end
inspect() click to toggle source

@note Override

# File lib/petitest/test_runner.rb, line 91
def inspect
  "#<#{self.class}>"
end
passed?() click to toggle source

@return [Boolean]

# File lib/petitest/test_runner.rb, line 96
def passed?
  processed? && !skipped? && !failed?
end
processed?() click to toggle source

@return [Boolean]

# File lib/petitest/test_runner.rb, line 101
def processed?
  @processed
end
run() click to toggle source
# File lib/petitest/test_runner.rb, line 105
def run
  self.started_at = ::Time.now
  test.send(test_method_name)
  true
rescue => error
  self.error = error
  false
ensure
  @finished_at = ::Time.now
  @processed = true
end
skipped?() click to toggle source

@return [Boolean]

# File lib/petitest/test_runner.rb, line 118
def skipped?
  processed? && error.is_a?(::Petitest::AssertionSkipError)
end
test_method() click to toggle source

@return [Petitest::TestMethod]

# File lib/petitest/test_runner.rb, line 123
def test_method
  @test_method ||= begin
    source_location = test.public_method(test_method_name).source_location
    ::Petitest::TestMethod.new(
      line_number: source_location[0],
      method_name: test_method_name,
      path: source_location[1],
    )
  end
end