class Assert::Test

Public Class Methods

for_block(name, context_info, config, &block) click to toggle source
# File lib/assert/test.rb, line 17
def self.for_block(name, context_info, config, &block)
  new(name_file_line_context_data(context_info, name).merge({
    context_info: context_info,
    config: config,
    code: block,
  }))
end
name_file_line_context_data(ci, name) click to toggle source

Test is some code/method to run in the scope of a Context that may produce results.

# File lib/assert/test.rb, line 11
def self.name_file_line_context_data(ci, name)
  { name: ci.test_name(name),
    file_line: ci.called_from,
  }
end
new(build_data = nil) click to toggle source
# File lib/assert/test.rb, line 25
def initialize(build_data = nil)
  @build_data      = build_data || {}
  @result_callback = nil
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/assert/test.rb, line 81
def <=>(other)
  name <=> other.name
end
code() click to toggle source
# File lib/assert/test.rb, line 66
def code
  @code ||= @build_data[:code]
end
config() click to toggle source
# File lib/assert/test.rb, line 62
def config
  @config ||= @build_data[:config]
end
context_class() click to toggle source
# File lib/assert/test.rb, line 58
def context_class
  context_info.klass
end
context_info() click to toggle source
# File lib/assert/test.rb, line 54
def context_info
  @context_info ||= @build_data[:context_info]
end
file_line() click to toggle source
# File lib/assert/test.rb, line 30
def file_line
  @file_line ||= FileLine.parse((@build_data[:file_line] || "").to_s)
end
file_name() click to toggle source
# File lib/assert/test.rb, line 34
def file_name
  file_line.file
end
inspect() click to toggle source
# File lib/assert/test.rb, line 85
def inspect
  attributes_string = ([:name, :context_info].map do |attr|
    "@#{attr}=#{send(attr).inspect}"
  end).join(" ")
  "#<#{self.class}:#{"0x0%x" % (object_id << 1)} #{attributes_string}>"
end
line_num() click to toggle source
# File lib/assert/test.rb, line 38
def line_num
  file_line.line.to_i
end
name() click to toggle source
# File lib/assert/test.rb, line 42
def name
  @name ||= (@build_data[:name] || "")
end
output() click to toggle source
# File lib/assert/test.rb, line 46
def output
  @output ||= (@build_data[:output] || +"")
end
run(&result_callback) click to toggle source
# File lib/assert/test.rb, line 70
def run(&result_callback)
  @result_callback = result_callback || proc{ |result| } # noop by default
  scope = context_class.new(self, config, @result_callback)
  start_time = Time.now
  capture_output do
    context_class.run_arounds(scope){ run_test(scope) }
  end
  @result_callback = nil
  @run_time = Time.now - start_time
end
run_time() click to toggle source
# File lib/assert/test.rb, line 50
def run_time
  @run_time ||= (@build_data[:run_time] || 0)
end

Private Instance Methods

capture_io() click to toggle source
# File lib/assert/test.rb, line 143
def capture_io
  StringIO.new(output, "a+")
end
capture_output(&block) click to toggle source
# File lib/assert/test.rb, line 132
def capture_output(&block)
  if config.capture_output == true
    orig_stdout = $stdout.clone
    $stdout = capture_io
    block.call
    $stdout = orig_stdout
  else
    block.call
  end
end
capture_result(result_klass, err) click to toggle source
# File lib/assert/test.rb, line 128
def capture_result(result_klass, err)
  @result_callback.call(result_klass.for_test(self, err))
end
run_test(scope) click to toggle source
# File lib/assert/test.rb, line 94
def run_test(scope)
  begin
    # run any assert style "setup do" setups
    context_class.run_setups(scope)
    # run any test/unit style "def setup" setups
    scope.setup if scope.respond_to?(:setup)
    # run the code block
    scope.instance_eval(&(code || proc{}))
  rescue Result::TestFailure => ex
    capture_result(Result::Fail, ex)
  rescue Result::TestSkipped => ex
    capture_result(Result::Skip, ex)
  rescue SignalException => ex
    raise(ex)
  rescue => ex
    capture_result(Result::Error, ex)
  ensure
    begin
      # run any assert style "teardown do" teardowns
      context_class.run_teardowns(scope)
      # run any test/unit style "def teardown" teardowns
      scope.teardown if scope.respond_to?(:teardown)
    rescue Result::TestFailure => ex
      capture_result(Result::Fail, ex)
    rescue Result::TestSkipped => ex
      capture_result(Result::Skip, ex)
    rescue SignalException => ex
      raise(ex)
    rescue => ex
      capture_result(Result::Error, ex)
    end
  end
end