module TestBench::Fixture

Constants

Error

Attributes

session=[W]
test_session[W]

Public Class Methods

assure_fixture(cls) click to toggle source
# File lib/test_bench/fixture/fixture.rb, line 21
def self.assure_fixture(cls)
  unless cls.included_modules.include?(self)
    raise Error, "Not a fixture class (Class: #{cls.inspect})"
  end
end
build(cls, *args, session: nil, output: nil, error_policy: nil, factory_method: nil, **kwargs, &block) click to toggle source
# File lib/test_bench/fixture/fixture.rb, line 5
def self.build(cls, *args, session: nil, output: nil, error_policy: nil, factory_method: nil, **kwargs, &block)
  assure_fixture(cls)

  factory_method = factory_method(cls)

  if kwargs.empty?
    instance = factory_method.(*args, &block)
  else
    instance = factory_method.(*args, **kwargs, &block)
  end

  Session.configure(instance, session: session, output: output, error_policy: error_policy)

  instance
end
call(cls, *args, **kwargs, &block) click to toggle source
# File lib/test_bench/fixture/fixture.rb, line 37
def self.call(cls, *args, **kwargs, &block)
  factory_method = factory_method(cls)

  if factory_method.name == :new
    last_parameter_type, _ = cls.instance_method(:initialize).parameters.last
  else
    last_parameter_type, _ = factory_method.parameters.last
  end

  if last_parameter_type == :block
    instance = build(cls, *args, **kwargs, &block)
    block = nil
  else
    instance = build(cls, *args, **kwargs)
  end

  instance.test_session.fixture(instance, &block)

  instance
end
factory_method(cls) click to toggle source
# File lib/test_bench/fixture/fixture.rb, line 27
def self.factory_method(cls)
  if cls.respond_to?(:build)
    cls.method(:build)
  elsif cls.respond_to?(:new)
    cls.method(:new)
  else
    raise Error, "Must be given a class (Argument: #{cls.inspect})"
  end
end

Public Instance Methods

assert(value, caller_location: nil) click to toggle source
# File lib/test_bench/fixture/fixture.rb, line 81
def assert(value, caller_location: nil)
  caller_location ||= caller[0]

  test_session.assert(value, caller_location: caller_location)
end
assert_raises(error_class=nil, message=nil, strict: nil, caller_location: nil, &block) click to toggle source
# File lib/test_bench/fixture/fixture.rb, line 93
def assert_raises(error_class=nil, message=nil, strict: nil, caller_location: nil, &block)
  if error_class.nil?
    strict ||= false
    error_class = StandardError
  else
    strict = true if strict.nil?
  end

  caller_location ||= caller[0]

  detail "Expected Error: #{error_class}#{' (strict)' if strict}"
  detail "Expected Message: #{message.inspect}" unless message.nil?

  block.()

  detail "(No error was raised)"

rescue error_class => error

  detail "Raised error: #{error.inspect}#{" (subclass of #{error_class})" if error.class < error_class}"

  if strict && !error.instance_of?(error_class)
    raise error
  end

  if message.nil?
    result = true
  else
    result = error.message == message
  end

  assert(result, caller_location: caller_location)

else
  assert(false, caller_location: caller_location)
end
comment(text, *additional_lines) click to toggle source
# File lib/test_bench/fixture/fixture.rb, line 65
def comment(text, *additional_lines)
  test_session.comment(text)

  additional_lines.each do |text|
    test_session.comment(text)
  end
end
context(text=nil, &block) click to toggle source
# File lib/test_bench/fixture/fixture.rb, line 164
def context(text=nil, &block)
  test_session.context(text, &block)
end
detail(text, *additional_lines) click to toggle source
# File lib/test_bench/fixture/fixture.rb, line 73
def detail(text, *additional_lines)
  test_session.detail(text)

  additional_lines.each do |text|
    test_session.detail(text)
  end
end
fixture(cls, *args, **kwargs, &block) click to toggle source
# File lib/test_bench/fixture/fixture.rb, line 182
def fixture(cls, *args, **kwargs, &block)
  Fixture.(cls, *args, session: test_session, **kwargs, &block)
end
refute(value, caller_location: nil) click to toggle source
# File lib/test_bench/fixture/fixture.rb, line 87
def refute(value, caller_location: nil)
  caller_location ||= caller[0]

  test_session.assert(!value, caller_location: caller_location)
end
refute_raises(error_class=nil, strict: nil, caller_location: nil, &block) click to toggle source
# File lib/test_bench/fixture/fixture.rb, line 130
def refute_raises(error_class=nil, strict: nil, caller_location: nil, &block)
  if error_class.nil?
    strict ||= false
    error_class = StandardError
  else
    strict = true if strict.nil?
  end

  caller_location ||= caller[0]

  detail "Prohibited Error: #{error_class}#{' (strict)' if strict}"

  block.()

  detail "(No error was raised)"

  result = true

rescue error_class => error

  detail "Raised Error: #{error.inspect}"

  if strict && !error.instance_of?(error_class)
    raise error
  end

  result = false

ensure
  unless result.nil?
    assert(result, caller_location: caller_location)
  end
end
session()
Alias for: test_session
test(text=nil, &block) click to toggle source
# File lib/test_bench/fixture/fixture.rb, line 168
def test(text=nil, &block)
  test_session.test(text, &block)
end
test!(text=nil, &block) click to toggle source
# File lib/test_bench/fixture/fixture.rb, line 172
def test!(text=nil, &block)
  result = test(text, &block)

  unless result
    raise Session::Abort.new, "Context aborted"
  end

  result
end
test_session() click to toggle source
# File lib/test_bench/fixture/fixture.rb, line 58
def test_session
  @test_session ||= Session::Substitute.build
end
Also aliased as: session