Module: Oktest

Defined in:
lib/oktest.rb

Defined Under Namespace

Modules: Color, SpecHelper, Util Classes: AssertionFailed, AssertionObject, BaseReporter, Config, Context, Filter, FixtureManager, FixtureNotFoundError, Item, LoopedDependencyError, MainApp, Node, OktestError, PlainReporter, QuietReporter, Reporter, Runner, ScopeNode, SimpleReporter, SkipException, SpecLeaf, TestGenerator, TodoException, TopicNode, Traverser, VerboseReporter, Visitor

Constant Summary collapse

VERSION =
'$Release: 1.0.1 $'.split()[1]
FAIL_EXCEPTION =

FAIL_EXCEPTION = (defined?(MiniTest) ? MiniTest::Assertion :

defined?(Test::Unit) ? Test::Unit::AssertionFailedError : AssertionFailed)
AssertionFailed
SKIP_EXCEPTION =
SkipException
TODO_EXCEPTION =
TodoException
THE_GLOBAL_SCOPE =
ScopeNode.new(nil, __FILE__)
STATUSES =
[:PASS, :FAIL, :ERROR, :SKIP, :TODO]
RUNNER_CLASS =
Runner
THE_FIXTURE_MANAGER =
FixtureManager.new()
REPORTER_CLASS =
VerboseReporter
REPORTER_CLASSES =
{
  'verbose' => VerboseReporter,  'v' => VerboseReporter,
  'simple'  => SimpleReporter,   's' => SimpleReporter,
  'plain'   => PlainReporter,    'p' => PlainReporter,
  'quiet'   => QuietReporter,    'q' => QuietReporter,
}
FILTER_CLASS =
Filter

Class Method Summary collapse

Class Method Details

.__scope(scope, &block) ⇒ Object

:nodoc:



914
915
916
917
918
919
920
921
# File 'lib/oktest.rb', line 914

def self.__scope(scope, &block)  #:nodoc:
  ! @_in_scope  or
    raise OktestError, "scope() and global_scope() are not nestable."
  @_in_scope = true
  scope.run_block_in_context_class(&block)
ensure
  @_in_scope = false
end

.auto_run?Boolean

:nodoc:

Returns:

  • (Boolean)


2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
# File 'lib/oktest.rb', line 2347

def self.auto_run?()   # :nodoc:
  #; [!7vm4d] returns false if error raised when loading test scripts.
  #; [!oae85] returns true if exit() called.
  exc = $!
  return false if exc && !exc.is_a?(SystemExit)
  #; [!rg5aw] returns false if Oktest.scope() never been called.
  return false unless THE_GLOBAL_SCOPE.has_child?
  #; [!0j3ek] returns true if Config.auto_run is enabled.
  return Config.auto_run
end

.filter(filter_obj) ⇒ Object



1972
1973
1974
# File 'lib/oktest.rb', line 1972

def self.filter(filter_obj)
  filter_obj.filter_children!(THE_GLOBAL_SCOPE)
end

.global_scope(&block) ⇒ Object



885
886
887
888
889
890
891
# File 'lib/oktest.rb', line 885

def self.global_scope(&block)
  #; [!flnpc] run block in the THE_GLOBAL_SCOPE object.
  #; [!pe0g2] raises error when nested called.
  self.__scope(THE_GLOBAL_SCOPE, &block)
  #; [!fcmt2] not create new scope object.
  return THE_GLOBAL_SCOPE
end

.main(argv = nil) ⇒ Object



2338
2339
2340
2341
# File 'lib/oktest.rb', line 2338

def self.main(argv=nil)
  status = MainApp.main(argv)
  exit(status)
end

.on_exitObject

:nodoc:



2343
2344
2345
# File 'lib/oktest.rb', line 2343

def self.on_exit()     # :nodoc:
  Oktest.main() if self.auto_run?()
end

.run(reporter: nil, style: nil) ⇒ Object



1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
# File 'lib/oktest.rb', line 1689

def self.run(reporter: nil, style: nil)
  #; [!kfi8b] do nothing when 'Oktest.scope()' not called.
  return unless THE_GLOBAL_SCOPE.has_child?
  #; [!6xn3t] creates reporter object according to 'style:' keyword arg.
  klass = (style ? REPORTER_CLASSES[style] : REPORTER_CLASS)  or
    raise ArgumentError, "#{style.inspect}: unknown style."
  reporter ||= klass.new
  #; [!mn451] run test cases.
  runner = RUNNER_CLASS.new(reporter)
  runner.start()
  ! THE_GLOBAL_SCOPE.has_child?  or "** internal error"
  #; [!p52se] returns total number of failures and errors.
  counts = reporter.counts
  return counts[:FAIL] + counts[:ERROR]
end

.scope(tag: nil, &block) ⇒ Object



893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
# File 'lib/oktest.rb', line 893

def self.scope(tag: nil, &block)
  #; [!kem4y] detects test script filename.
  location = caller(1).first  # caller() makes performance slower, but necessary.
  filename = location =~ /:\d+/ ? $` : nil
  #; [!6ullm] changes test script filename from absolute path to relative path.
  if filename
    pwd = Dir.pwd()
    if filename.start_with?(pwd)
      filename = filename[pwd.length..-1].sub(/\A\//, '')
    elsif filename.start_with?('./')
      filename = filename[2..-1]
    end
  end
  #; [!vxoy1] creates new scope object.
  #; [!rsimc] adds scope object as child of THE_GLOBAL_SCOPE.
  scope = ScopeNode.new(THE_GLOBAL_SCOPE, filename, tag: tag)
  #; [!jmc4q] raises error when nested called.
  self.__scope(scope, &block)
  return scope
end