module Oktest::SpecHelper

Attributes

__TODO[RW]
__at_end_blocks[RW]

Public Instance Methods

AND(*args) click to toggle source
# File lib/oktest.rb, line 1384
def AND(*args)
  #; [!38jln] creates `AND` object.
  return JsonMatcher::AND.new(*args)
end
Any() click to toggle source
# File lib/oktest.rb, line 1394
def Any()
  #; [!dlo1o] creates an 'Any' object.
  return JsonMatcher::Any.new
end
Bool() click to toggle source
# File lib/oktest.rb, line 1374
def Bool()
  #; [!vub5j] creates a set of true and false.
  return Enum(true, false)
end
Enum(*values) click to toggle source
# File lib/oktest.rb, line 1369
def Enum(*values)
  #; [!fbfr0] creates Enum object which is a subclass of Set.
  return JsonMatcher::Enum.new(values)
end
JSON(actual) click to toggle source
# File lib/oktest.rb, line 1364
def JSON(actual)
  #; [!n0k03] creates JsonMatcher object.
  return JsonMatcher.new(actual)
end
Length(n) click to toggle source
# File lib/oktest.rb, line 1389
def Length(n)
  #; [!qqas3] creates Length object.
  return JsonMatcher::Length.new(n)
end
OR(*args) click to toggle source
# File lib/oktest.rb, line 1379
def OR(*args)
  #; [!9e8im] creates `OR` object.
  return JsonMatcher::OR.new(*args)
end
TODO() click to toggle source
# File lib/oktest.rb, line 1227
def TODO()
  location = caller(1).first   # ex: "foo_test.rb:123:in ...."
  @__TODO = location
end
at_end(&block) click to toggle source
# File lib/oktest.rb, line 1232
def at_end(&block)
  #; [!x58eo] records clean-up block.
  (@__at_end_blocks ||= []) << block
end
capture_sio(input="", tty: false) { |sout, serr| ... } click to toggle source
# File lib/oktest.rb, line 1237
def capture_sio(input="", tty: false, &b)
  require 'stringio' unless defined?(StringIO)
  bkup = [$stdin, $stdout, $stderr]
  #; [!53mai] takes $stdin data.
  $stdin  = sin  = StringIO.new(input)
  #; [!1kbnj] captures $stdio and $stderr.
  $stdout = sout = StringIO.new
  $stderr = serr = StringIO.new
  #; [!6ik8b] can simulate tty.
  if tty
    def sin.tty?; true; end
    def sout.tty?; true; end
    def serr.tty?; true; end
  end
  #; [!4j494] returns outpouts of stdout and stderr.
  yield sout, serr
  return sout.string, serr.string
ensure
  #; [!wq8a9] recovers stdio even when exception raised.
  $stdin, $stdout, $stderr = bkup
end
dummy_attrs(object, **keyvals, &b) click to toggle source
# File lib/oktest.rb, line 1325
def dummy_attrs(object, **keyvals, &b)
  #; [!4vd73] changes object attributes temporarily.
  prev_values = {}
  keyvals.each do |k, v|
    prev_values[k] = object.__send__(k)
    object.__send__("#{k}=", v)
  end
  #; [!fi0t3] recovers attribute values.
  recover = proc do
    prev_values.each {|k, v| object.__send__("#{k}=", v) }
  end
  #; [!27yeh] returns keyvals.
  #; [!j7tvp] can take block argument.
  return __do_dummy(keyvals, recover, &b)
end
dummy_dir(dirname=nil, &b) click to toggle source
# File lib/oktest.rb, line 1287
def dummy_dir(dirname=nil, &b)
  #; [!r14uy] generates temporary directory name if 1st arg is nil.
  dirname ||= "_tmpdir_#{rand().to_s[2...8]}"
  #; [!zypj6] raises error when dummy dir already exists.
  ! File.exist?(dirname)  or
    raise ArgumentError, "dummy_dir('#{dirname}'): temporary directory already exists."
  #; [!l34d5] creates dummy directory.
  require 'fileutils' unless defined?(FileUtils)
  FileUtils.mkdir_p(dirname)
  #; [!01gt7] removes dummy directory even if it contains other files.
  recover = proc { FileUtils.rm_rf(dirname) if File.exist?(dirname) }
  #; [!jxh30] returns directory name.
  #; [!tfsqo] can take block argument.
  return __do_dummy(dirname, recover, &b)
end
dummy_file(filename=nil, content=nil, encoding: 'utf-8', &b) click to toggle source
# File lib/oktest.rb, line 1273
def dummy_file(filename=nil, content=nil, encoding: 'utf-8', &b)
  #; [!3mg26] generates temporary filename if 1st arg is nil.
  filename ||= "_tmpfile_#{rand().to_s[2...8]}"
  #; [!yvfxq] raises error when dummy file already exists.
  ! File.exist?(filename)  or
    raise ArgumentError, "dummy_file('#{filename}'): temporary file already exists."
  #; [!7e0bo] creates dummy file.
  File.write(filename, content, encoding: encoding)
  recover = proc { File.unlink(filename) if File.exist?(filename) }
  #; [!nvlkq] returns filename.
  #; [!ky7nh] can take block argument.
  return __do_dummy(filename, recover, &b)
end
dummy_ivars(object, **keyvals, &b) click to toggle source
# File lib/oktest.rb, line 1341
def dummy_ivars(object, **keyvals, &b)
  #; [!rnqiv] changes instance variables temporarily.
  prev_values = {}
  keyvals.each do |k, v|
    prev_values[k] = object.instance_variable_get("@#{k}")
    object.instance_variable_set("@#{k}", v)
  end
  #; [!8oirn] recovers instance variables.
  recover = proc do
    prev_values.each {|k, v| object.instance_variable_set("@#{k}", v) }
  end
  #; [!01dc8] returns keyvals.
  #; [!myzk4] can take block argument.
  return __do_dummy(keyvals, recover, &b)
end
dummy_values(hashobj, keyvals={}, &b) click to toggle source
# File lib/oktest.rb, line 1303
def dummy_values(hashobj, keyvals={}, &b)  # never use keyword args!
  #; [!hgwg2] changes hash value temporarily.
  prev_values = {}
  key_not_exists = {}
  keyvals.each do |k, v|
    if hashobj.key?(k)
      prev_values[k] = hashobj[k]
    else
      key_not_exists[k] = true
    end
    hashobj[k] = v
  end
  #; [!jw2kx] recovers hash values.
  recover = proc do
    key_not_exists.each {|k, _| hashobj.delete(k) }
    prev_values.each {|k, v| hashobj[k] = v }
  end
  #; [!w3r0p] returns keyvals.
  #; [!pwq6v] can take block argument.
  return __do_dummy(keyvals, recover, &b)
end
fixture(name, *args) click to toggle source
# File lib/oktest.rb, line 1209
def fixture(name, *args)
  #; [!zgfg9] finds fixture block in current or parent node.
  node = self.class.__node
  while node && (tuple = node.get_fixture_block(name)) == nil
    node = node.parent
  end
  #; [!wxcsp] raises error when fixture not found.
  unless tuple
    exc = FixtureNotFoundError.new("`#{name.inspect}`: fixture not found.")
    exc.set_backtrace([caller(1).first])
    raise exc
  end
  #; [!m4ava] calls fixture block and returns result of it.
  #; [!l2mcx] accepts block arguments.
  block, _, _ = tuple
  return block.call(*args)
end
not_ok() { || ... } click to toggle source
# File lib/oktest.rb, line 1188
def not_ok()
  #; [!agmx8] records invoked location.
  #; [!a9508] not record invoked location when `Config.ok_location == false`.
  if Config.ok_location
    location = caller(1).first  # caller() makes performance slower, but necessary.
  else
    location = nil
  end
  #; [!d332o] creates new assertion object for negative condition.
  actual = yield
  ass = Oktest::AssertionObject.new(actual, false, location)
  Oktest::AssertionObject::NOT_YET[ass.__id__] = ass
  return ass
end
ok() { || ... } click to toggle source
# File lib/oktest.rb, line 1173
def ok()
  #; [!bc3l2] records invoked location.
  #; [!mqtdy] not record invoked location when `Config.ok_location == false`.
  if Config.ok_location
    location = caller(1).first  # caller() makes performance slower, but necessary.
  else
    location = nil
  end
  #; [!3jhg6] creates new assertion object.
  actual = yield
  ass = Oktest::AssertionObject.new(actual, true, location)
  Oktest::AssertionObject::NOT_YET[ass.__id__] = ass
  return ass
end
recorder() click to toggle source
# File lib/oktest.rb, line 1357
def recorder()
  #; [!qwrr8] loads 'benry/recorder' automatically.
  require 'benry/recorder' unless defined?(Benry::Recorder)
  #; [!glfvx] creates Benry::Recorder object.
  return Benry::Recorder.new
end
skip_when(condition, reason) click to toggle source
# File lib/oktest.rb, line 1203
def skip_when(condition, reason)
  #; [!3xqf4] raises SkipException if condition is truthy.
  #; [!r7cxx] not raise nothing if condition is falsy.
  raise SkipException, reason if condition
end

Private Instance Methods

__do_dummy(val, recover) { |val| ... } click to toggle source
# File lib/oktest.rb, line 1259
def __do_dummy(val, recover, &b)
  if block_given?()
    begin
      return yield val
    ensure
      recover.call
    end
  else
    at_end(&recover)
    return val
  end
end