Module: Oktest

Defined in:
lib/oktest.rb

Defined Under Namespace

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

Constant Summary collapse

VERSION =
'$Release: 1.1.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,
  'compact' => CompactReporter,  'c' => CompactReporter,
  'plain'   => PlainReporter,    'p' => PlainReporter,
  'quiet'   => QuietReporter,    'q' => QuietReporter,
}
FILTER_CLASS =
Filter

Class Method Summary collapse

Class Method Details

.__scope(scope, &block) ⇒ Object

:nodoc:



1160
1161
1162
1163
1164
1165
1166
1167
# File 'lib/oktest.rb', line 1160

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)


2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
# File 'lib/oktest.rb', line 2712

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



2335
2336
2337
# File 'lib/oktest.rb', line 2335

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

.global_scope(&block) ⇒ Object



1131
1132
1133
1134
1135
1136
1137
# File 'lib/oktest.rb', line 1131

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



2703
2704
2705
2706
# File 'lib/oktest.rb', line 2703

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

.on_exitObject

:nodoc:



2708
2709
2710
# File 'lib/oktest.rb', line 2708

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

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



2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
# File 'lib/oktest.rb', line 2054

def self.run(reporter: nil, style: nil)
  #; [!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



1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
# File 'lib/oktest.rb', line 1139

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