class Oktest::MainApp

Constants

HELP_MESSAGE
SKELETON

Public Class Methods

main(argv=nil) click to toggle source
# File lib/oktest.rb, line 2471
def self.main(argv=nil)
  #; [!tb6sx] returns 0 when no errors raised.
  #; [!d5mql] returns 1 when a certain error raised.
  argv ||= ARGV
  begin
    status = self.new.run(*argv)  or raise "** internal error"
    return status
  #; [!jr49p] reports error when unknown option specified.
  #; [!uqomj] reports error when required argument is missing.
  #; [!8i755] reports error when argument is invalid.
  rescue OptionParser::ParseError => exc
    case exc
    when OptionParser::InvalidOption   ; s = "unknown option."
    when OptionParser::InvalidArgument ; s = "invalid argument."
    when OptionParser::MissingArgument ; s = "argument required."
    else                               ; s = nil
    end
    msg = s ? "#{exc.args.join(' ')}: #{s}" : exc.message
    $stderr.puts("#{File.basename($0)}: #{msg}")
    return 1
  end
end

Public Instance Methods

run(*args) click to toggle source
# File lib/oktest.rb, line 2494
def run(*args)
  color_enabled = nil
  opts = Options.new
  parser = option_parser(opts)
  filenames = parser.parse(args)
  #; [!9973n] '-h' or '--help' option prints help message.
  if opts.help
    puts help_message()
    return 0
  end
  #; [!qqizl] '--version' option prints version number.
  if opts.version
    puts VERSION
    return 0
  end
  #; [!dk8eg] '-C' or '--create' option prints test code skeleton.
  if opts.create
    print SKELETON
    return 0
  end
  #; [!uxh5e] '-G' or '--generate' option prints test code.
  #; [!wmxu5] '--generate=unaryop' option prints test code with unary op.
  if opts.generate
    print generate(filenames, opts.generate)
    return 0
  end
  #; [!65vdx] prints help message if no arguments specified.
  if filenames.empty? && !THE_GLOBAL_SCOPE.has_child?
    puts help_message()
    return 0
  end
  #; [!6ro7j] '--color=on' option enables output coloring forcedly.
  #; [!vmw0q] '--color=off' option disables output coloring forcedly.
  if opts.color
    color_enabled = Config.color_enabled
    Config.color_enabled = (opts.color == 'on')
  end
  #; [!qs8ab] '--faster' chanages 'Config.ok_location' to false.
  if opts.faster
    Config.ok_location = false    # will make 'ok{}' faster
  end
  #
  $LOADED_FEATURES << __FILE__ unless $LOADED_FEATURES.include?(__FILE__) # avoid loading twice
  #; [!hiu5b] finds test scripts in directory and runs them.
  load_files(filenames)
  #; [!yz7g5] '-F topic=...' option filters topics.
  #; [!ww2mp] '-F spec=...' option filters specs.
  #; [!8uvib] '-F tag=...' option filters by tag name.
  #; [!m0iwm] '-F sid=...' option filters by spec id.
  #; [!noi8i] '-F' option supports negative filter.
  if opts.filter
    filter_obj = FILTER_CLASS.create_from(opts.filter)
    Oktest.filter(filter_obj)
  end
  #; [!bim36] changes auto-running to off.
  Config.auto_run = false
  #; [!18qpe] runs test scripts.
  #; [!0qd92] '-s verbose' or '-sv' option prints test results in verbose mode.
  #; [!zfdr5] '-s simple' or '-ss' option prints test results in simple mode.
  #; [!ef5v7] '-s compact' or '-sc' option prints test results in compact mode.
  #; [!244te] '-s plain' or '-sp' option prints test results in plain mode.
  #; [!ai61w] '-s quiet' or '-sq' option prints test results in quiet mode.
  n_errors = Oktest.run(:style=>opts.style)
  #; [!dsrae] reports if 'ok()' called but assertion not performed.
  AssertionObject.report_not_yet()
  #; [!bzgiw] returns total number of failures and errors.
  return n_errors
ensure
  #; [!937kw] recovers 'Config.color_enabled' value.
  Config.color_enabled = color_enabled if color_enabled != nil
end

Private Instance Methods

generate(filenames, styleoption) click to toggle source
# File lib/oktest.rb, line 2648
def generate(filenames, styleoption)
  buf = []
  filenames.each do |fname|
    generator = TestGenerator.new(styleoption)
    File.open(fname) do |f|
      buf << generator.generate(f)
    end
  end
  return buf.join()
end
help_message(command=nil) click to toggle source
# File lib/oktest.rb, line 2605
def help_message(command=nil)
  command ||= File.basename($0)
  return HELP_MESSAGE % {command: command}
end
load_dir(dir, pattern=/^(test_.*|.*_test)\.rb$/) click to toggle source
# File lib/oktest.rb, line 2641
def load_dir(dir, pattern=/^(test_.*|.*_test)\.rb$/)
  Dir.glob("#{dir}/**/*").sort.each do |path|
    next unless File.file?(path)
    load(path) if File.basename(path) =~ pattern
  end
end
load_files(filenames) click to toggle source
# File lib/oktest.rb, line 2631
def load_files(filenames)
  filenames.each do |fname|
    File.exist?(fname)  or
      raise OptionParser::InvalidOption, "#{fname}: not found."
  end
  filenames.each do |fname|
    File.directory?(fname) ? load_dir(fname) : load(fname)
  end
end
option_parser(opts) click to toggle source
# File lib/oktest.rb, line 2572
def option_parser(opts)
  require 'optparse' unless defined?(OptionParser)
  parser = OptionParser.new
  parser.on('-h', '--help')    { opts.help    = true }
  parser.on(      '--version') { opts.version = true }
  parser.on('-s STYLE') {|val|
    REPORTER_CLASSES.key?(val)  or
      raise OptionParser::InvalidArgument, val
    opts.style = val
  }
  parser.on('-F PATTERN') {|val|
    #; [!71h2x] '-F ...' option will be error.
    val =~ /\A(topic|spec|tag|sid)(=|!=)/  or
      raise OptionParser::InvalidArgument, val
    opts.filter = val
  }
  parser.on(      '--color[={on|off}]') {|val|
    #; [!9nr94] '--color=true' option raises error.
    val.nil? || val == 'on' || val == 'off'  or
      raise OptionParser::InvalidArgument, val
    #; [!dptgn] '--color' is same as '--color=on'.
    opts.color = val || 'on'
  }
  parser.on('-C', '--create') { opts.create = true }
  parser.on('-G', '--generate[=styleoption]') {|val|
    val.nil? || val == 'unaryop'  or
      raise OptionParser::InvalidArgument, val
    opts.generate = val || true
  }
  parser.on(      '--faster') { opts.faster = true }
  return parser
end