module StructuredWarnings::Test::Assertions

This module ecapsulates all extensions to support test/unit.

Public Instance Methods

assert_no_warn(message = nil) {|| ...} click to toggle source
assert_no_warn(warning_class, message) {|| ...}
assert_no_warn(warning_instance) {|| ...}

Asserts that the given warning was not emmitted. It may be restricted to a certain subtree of warnings and/or message.

def foo
  warn StructuredWarnings::DeprecatedMethodWarning, 'used foo, use bar instead'
  bar
end

assert_no_warn(StructuredWarnings::StandardWarning) { foo }    # passes

assert_no_warn(StructuredWarnings::DeprecationWarning) { foo } # fails
assert_no_warn() { foo }                                       # fails

See assert_warn for more examples.

Note: It is currently not possible to add a custom failure message.

# File lib/structured_warnings/test/assertions.rb, line 24
def assert_no_warn(*args)
  warning, message = parse_arguments(args)

  w = StructuredWarnings::Test::Warner.new
  StructuredWarnings::with_warner(w) do
    yield
  end

  assert_equal(false, w.warned?(warning, message), "<#{args_inspect(args)}> has been emitted.")
end
assert_warn(message = nil) {|| ...} click to toggle source
assert_warn(warning_class, message) {|| ...}
assert_warn(warning_instance) {|| ...}

Asserts that the given warning was emmitted. It may be restricted to a certain subtree of warnings and/or message.

def foo
  warn StructuredWarnings::DeprecatedMethodWarning, 'used foo, use bar instead'
  bar
end

# passes
assert_warn(StructuredWarnings::DeprecatedMethodWarning) { foo }
assert_warn(StructuredWarnings::DeprecationWarning) { foo }
assert_warn() { foo }
assert_warn(StructuredWarnings::Base, 'used foo, use bar instead') { foo }
assert_warn(StructuredWarnings::Base, /use bar/) { foo }
assert_warn(StructuredWarnings::Base.new('used foo, use bar instead')) { foo }

# fails
assert_warn(StructuredWarnings::StandardWarning) { foo }
assert_warn(StructuredWarnings::Base, /deprecated/) { foo }
assert_warn(StructuredWarnings::Base.new) { foo }

Note: It is currently not possible to add a custom failure message.

# File lib/structured_warnings/test/assertions.rb, line 62
def assert_warn(*args)
  warning, message = parse_arguments(args)

  w = StructuredWarnings::Test::Warner.new
  StructuredWarnings::with_warner(w) do
    yield
  end

  assert_equal(true, w.warned?(warning, message), "<#{args_inspect(args)}> has not been emitted.")
end

Private Instance Methods

args_inspect(args) click to toggle source
# File lib/structured_warnings/test/assertions.rb, line 103
def args_inspect(args)
  args.map { |a| a.inspect }.join(', ')
end
parse_arguments(args) click to toggle source
# File lib/structured_warnings/test/assertions.rb, line 75
def parse_arguments(args)
  args = args.clone
  first = args.shift
  if first.is_a? Class and first <= StructuredWarnings::Base
    warning = first
    message = args.shift

  elsif first.is_a? StructuredWarnings::Base
    warning = first.class
    message = first.message

  elsif first.is_a? String
    warning = StructuredWarnings::StandardWarning
    message = first

  else
    warning = StructuredWarnings::Base
    message = nil
  end

  unless args.empty?
    raise ArgumentError,
          "wrong number of arguments (#{args.size + 2} for 2)"
  end

  return warning, message
end