def throw expected_symbol = nil, &block
      failure = Tokyo.__send__(
        @assert ? :assert_thrown_as_expected : :refute_thrown_as_expected,
        @object, expected_symbol ? expected_symbol.to_sym : nil, block
      )
      Tokyo.fail(failure, caller[0]) if failure
    end
def throw expected_symbol = nil, &block
      failure = Tokyo.__send__(
        @assert ? :assert_thrown_as_expected : :refute_thrown_as_expected,
        @object, expected_symbol ? expected_symbol.to_sym : nil, block
      )
      Tokyo.fail(failure, caller[0]) if failure
    end
ensure given block thrown as expected

 @note if block given it will have precedence over arguments

 @example assertion pass if any symbol thrown
   assert {some code}.throw

 @example assertion pass only if :x symbol thrown
   assert {some code}.throw(:x)

 @example assertion pass only if given block validates thrown symbol
   assert {some code}.throw {|sym| sym == :x}