def options
@options ||= OptionParser.new do |o|
o.banner = "Test::Unit automatic runner."
o.banner << "\nUsage: #{$0} [options] [-- untouched arguments]"
o.on
o.on('-r', '--runner=RUNNER', RUNNERS,
"Use the given RUNNER.",
"(" + keyword_display(RUNNERS) + ")") do |r|
@runner = r
end
if (@standalone)
o.on('-b', '--basedir=DIR', "Base directory of test suites.") do |b|
@base = b
end
o.on('-w', '--workdir=DIR', "Working directory to run tests.") do |w|
@workdir = w
end
o.on('-a', '--add=TORUN', Array,
"Add TORUN to the list of things to run;",
"can be a file or a directory.") do |a|
@to_run.concat(a)
end
@pattern = []
o.on('-p', '--pattern=PATTERN', Regexp,
"Match files to collect against PATTERN.") do |e|
@pattern << e
end
@exclude = []
o.on('-x', '--exclude=PATTERN', Regexp,
"Ignore files to collect against PATTERN.") do |e|
@exclude << e
end
end
o.on('-n', '--name=NAME', String,
"Runs tests matching NAME.",
"(patterns may be used).") do |n|
n = (%r{\A/(.*)/\Z} =~ n ? Regexp.new($1) : n)
case n
when Regexp
@filters << proc{|t| n =~ t.method_name ? true : false}
else
@filters << proc{|t| n == t.method_name}
end
end
o.on('-t', '--testcase=TESTCASE', String,
"Runs tests in TestCases matching TESTCASE.",
"(patterns may be used).") do |n|
n = (%r{\A/(.*)/\Z} =~ n ? Regexp.new($1) : n)
case n
when Regexp
@filters << proc{|t| n =~ t.class.name ? true : false}
else
@filters << proc{|t| n == t.class.name}
end
end
priority_filter = Proc.new do |test|
if @filters == [priority_filter]
Priority::Checker.new(test).need_to_run?
else
nil
end
end
o.on("--[no-]priority-mode",
"Runs some tests based on their priority.") do |priority_mode|
if priority_mode
Priority.enable
@filters |= [priority_filter]
else
Priority.disable
@filters -= [priority_filter]
end
end
o.on("--default-priority=PRIORITY",
Priority.available_values,
"Uses PRIORITY as default priority",
"(#{keyword_display(Priority.available_values)})") do |priority|
Priority.default = priority
end
o.on('-I', "--load-path=DIR[#{File::PATH_SEPARATOR}DIR...]",
"Appends directory list to $LOAD_PATH.") do |dirs|
$LOAD_PATH.concat(dirs.split(File::PATH_SEPARATOR))
end
color_schemes = ColorScheme.all
o.on("--color-scheme=SCHEME", color_schemes,
"Use SCHEME as color scheme.",
"(#{keyword_display(color_schemes)})") do |scheme|
@color_scheme = scheme
end
o.on("--config=FILE",
"Use YAML fomat FILE content as configuration file.") do |file|
load_config(file)
end
o.on("--order=ORDER", TestCase::AVAILABLE_ORDERS,
"Run tests in a test case in ORDER order.",
"(#{keyword_display(TestCase::AVAILABLE_ORDERS)})") do |order|
TestCase.test_order = order
end
ADDITIONAL_OPTIONS.each do |option_builder|
option_builder.call(self, o)
end
o.on('--',
"Stop processing options so that the",
"remaining options will be passed to the",
"test."){o.terminate}
o.on('-h', '--help', 'Display this help.'){puts o; exit}
o.on_tail
o.on_tail('Deprecated options:')
o.on_tail('--console', 'Console runner (use --runner).') do
warn("Deprecated option (--console).")
@runner = self.class.runner(:console)
end
if RUNNERS[:fox]
o.on_tail('--fox', 'Fox runner (use --runner).') do
warn("Deprecated option (--fox).")
@runner = self.class.runner(:fox)
end
end
o.on_tail
end
end