Module: Oktest

Defined in:
lib/oktest.rb

Defined Under Namespace

Modules: Color, SpecHelper, Util, UtilHelper 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.3.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:



1209
1210
1211
1212
1213
1214
1215
1216
# File 'lib/oktest.rb', line 1209

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)


2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
# File 'lib/oktest.rb', line 2857

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



2464
2465
2466
# File 'lib/oktest.rb', line 2464

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

.global_scope(&block) ⇒ Object



1180
1181
1182
1183
1184
1185
1186
# File 'lib/oktest.rb', line 1180

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



2848
2849
2850
2851
# File 'lib/oktest.rb', line 2848

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

.on_exitObject

:nodoc:



2853
2854
2855
# File 'lib/oktest.rb', line 2853

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

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



2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
# File 'lib/oktest.rb', line 2112

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



1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
# File 'lib/oktest.rb', line 1188

def self.scope(tag: nil, &block)
  #; [!kem4y] detects test script filename.
  location = caller_locations(1, 1).first
  filename = location.path.to_s
  #; [!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