469 lines
12 KiB
Ruby
469 lines
12 KiB
Ruby
require File.expand_path("../helper", __FILE__)
|
|
|
|
TESTING_REQUIRE = []
|
|
|
|
class TestRakeApplicationOptions < Rake::TestCase
|
|
|
|
def setup
|
|
super
|
|
|
|
@testkey = ENV["TESTKEY"]
|
|
clear_argv
|
|
Rake::FileUtilsExt.verbose_flag = false
|
|
Rake::FileUtilsExt.nowrite_flag = false
|
|
TESTING_REQUIRE.clear
|
|
end
|
|
|
|
def teardown
|
|
ENV["TESTKEY"] = @testkey
|
|
clear_argv
|
|
Rake::FileUtilsExt.verbose_flag = false
|
|
Rake::FileUtilsExt.nowrite_flag = false
|
|
|
|
super
|
|
end
|
|
|
|
def clear_argv
|
|
ARGV.pop until ARGV.empty?
|
|
end
|
|
|
|
def test_default_options
|
|
opts = command_line
|
|
assert_nil opts.backtrace
|
|
assert_nil opts.dryrun
|
|
assert_nil opts.ignore_system
|
|
assert_nil opts.load_system
|
|
assert_nil opts.always_multitask
|
|
assert_nil opts.nosearch
|
|
assert_equal ["rakelib"], opts.rakelib
|
|
assert_nil opts.show_prereqs
|
|
assert_nil opts.show_task_pattern
|
|
assert_nil opts.show_tasks
|
|
assert_nil opts.silent
|
|
assert_nil opts.trace
|
|
assert_nil opts.thread_pool_size
|
|
assert_equal ["rakelib"], opts.rakelib
|
|
assert ! Rake::FileUtilsExt.verbose_flag
|
|
assert ! Rake::FileUtilsExt.nowrite_flag
|
|
end
|
|
|
|
def test_dry_run
|
|
flags("--dry-run", "-n") do |opts|
|
|
assert opts.dryrun
|
|
assert opts.trace
|
|
assert Rake::FileUtilsExt.verbose_flag
|
|
assert Rake::FileUtilsExt.nowrite_flag
|
|
end
|
|
end
|
|
|
|
def test_describe
|
|
flags("--describe") do |opts|
|
|
assert_equal :describe, opts.show_tasks
|
|
assert_equal(//.to_s, opts.show_task_pattern.to_s)
|
|
end
|
|
end
|
|
|
|
def test_describe_with_pattern
|
|
flags("--describe=X") do |opts|
|
|
assert_equal :describe, opts.show_tasks
|
|
assert_equal(/X/.to_s, opts.show_task_pattern.to_s)
|
|
end
|
|
end
|
|
|
|
def test_execute
|
|
$xyzzy = 0
|
|
flags("--execute=$xyzzy=1", "-e $xyzzy=1") do
|
|
assert_equal 1, $xyzzy
|
|
assert_equal :exit, @exit
|
|
$xyzzy = 0
|
|
end
|
|
end
|
|
|
|
def test_execute_and_continue
|
|
$xyzzy = 0
|
|
flags("--execute-continue=$xyzzy=1", "-E $xyzzy=1") do
|
|
assert_equal 1, $xyzzy
|
|
refute_equal :exit, @exit
|
|
$xyzzy = 0
|
|
end
|
|
end
|
|
|
|
def test_execute_and_print
|
|
$xyzzy = 0
|
|
out, = capture_io do
|
|
flags('--execute-print=$xyzzy="pugh"', '-p $xyzzy="pugh"') do
|
|
assert_equal "pugh", $xyzzy
|
|
assert_equal :exit, @exit
|
|
$xyzzy = 0
|
|
end
|
|
end
|
|
|
|
assert_match(/^pugh$/, out)
|
|
end
|
|
|
|
def test_help
|
|
out, = capture_io do
|
|
flags "--help", "-H", "-h"
|
|
end
|
|
|
|
assert_match(/\Arake/, out)
|
|
assert_match(/\boptions\b/, out)
|
|
assert_match(/\btargets\b/, out)
|
|
assert_equal :exit, @exit
|
|
end
|
|
|
|
def test_jobs
|
|
flags([]) do |opts|
|
|
assert_nil opts.thread_pool_size
|
|
end
|
|
flags(["--jobs", "0"], ["-j", "0"]) do |opts|
|
|
assert_equal 0, opts.thread_pool_size
|
|
end
|
|
flags(["--jobs", "1"], ["-j", "1"]) do |opts|
|
|
assert_equal 0, opts.thread_pool_size
|
|
end
|
|
flags(["--jobs", "4"], ["-j", "4"]) do |opts|
|
|
assert_equal 3, opts.thread_pool_size
|
|
end
|
|
flags(["--jobs", "asdas"], ["-j", "asdas"]) do |opts|
|
|
assert_equal Rake.suggested_thread_count-1, opts.thread_pool_size
|
|
end
|
|
flags("--jobs", "-j") do |opts|
|
|
assert opts.thread_pool_size > 1_000_000, "thread pool size should be huge (was #{opts.thread_pool_size})"
|
|
end
|
|
end
|
|
|
|
def test_libdir
|
|
flags(["--libdir", "xx"], ["-I", "xx"], ["-Ixx"]) do
|
|
$:.include?("xx")
|
|
end
|
|
ensure
|
|
$:.delete("xx")
|
|
end
|
|
|
|
def test_multitask
|
|
flags("--multitask", "-m") do |opts|
|
|
assert_equal opts.always_multitask, true
|
|
end
|
|
end
|
|
|
|
def test_rakefile
|
|
flags(["--rakefile", "RF"], ["--rakefile=RF"], ["-f", "RF"], ["-fRF"]) do
|
|
assert_equal ["RF"], @app.instance_eval { @rakefiles }
|
|
end
|
|
end
|
|
|
|
def test_rakelib
|
|
dirs = %w(A B C).join(File::PATH_SEPARATOR)
|
|
flags(
|
|
["--rakelibdir", dirs],
|
|
["--rakelibdir=#{dirs}"],
|
|
["-R", dirs],
|
|
["-R#{dirs}"]) do |opts|
|
|
assert_equal ["A", "B", "C"], opts.rakelib
|
|
end
|
|
end
|
|
|
|
def test_require
|
|
$LOAD_PATH.unshift @tempdir
|
|
|
|
open "reqfile.rb", "w" do |io| io << "TESTING_REQUIRE << 1" end
|
|
open "reqfile2.rb", "w" do |io| io << "TESTING_REQUIRE << 2" end
|
|
open "reqfile3.rake", "w" do |io| io << "TESTING_REQUIRE << 3" end
|
|
|
|
flags(["--require", "reqfile"], "-rreqfile2", "-rreqfile3")
|
|
|
|
assert_includes TESTING_REQUIRE, 1
|
|
assert_includes TESTING_REQUIRE, 2
|
|
assert_includes TESTING_REQUIRE, 3
|
|
|
|
assert_equal 3, TESTING_REQUIRE.size
|
|
ensure
|
|
$LOAD_PATH.delete @tempdir
|
|
end
|
|
|
|
def test_missing_require
|
|
ex = assert_raises(LoadError) do
|
|
flags(["--require", "test/missing"]) do |opts|
|
|
end
|
|
end
|
|
assert_match(/such file/, ex.message)
|
|
assert_match(/test\/missing/, ex.message)
|
|
end
|
|
|
|
def test_prereqs
|
|
flags("--prereqs", "-P") do |opts|
|
|
assert opts.show_prereqs
|
|
end
|
|
end
|
|
|
|
def test_quiet
|
|
Rake::FileUtilsExt.verbose_flag = true
|
|
flags("--quiet", "-q") do |opts|
|
|
assert ! Rake::FileUtilsExt.verbose_flag, "verbose flag should be false"
|
|
assert ! opts.silent, "should not be silent"
|
|
end
|
|
end
|
|
|
|
def test_no_search
|
|
flags("--nosearch", "--no-search", "-N") do |opts|
|
|
assert opts.nosearch
|
|
end
|
|
end
|
|
|
|
def test_silent
|
|
Rake::FileUtilsExt.verbose_flag = true
|
|
flags("--silent", "-s") do |opts|
|
|
assert ! Rake::FileUtilsExt.verbose_flag, "verbose flag should be false"
|
|
assert opts.silent, "should be silent"
|
|
end
|
|
end
|
|
|
|
def test_system
|
|
flags("--system", "-g") do |opts|
|
|
assert opts.load_system
|
|
end
|
|
end
|
|
|
|
def test_no_system
|
|
flags("--no-system", "-G") do |opts|
|
|
assert opts.ignore_system
|
|
end
|
|
end
|
|
|
|
def test_trace
|
|
flags("--trace", "-t") do |opts|
|
|
assert opts.trace, "should enable trace option"
|
|
assert opts.backtrace, "should enabled backtrace option"
|
|
assert_equal $stderr, opts.trace_output
|
|
assert Rake::FileUtilsExt.verbose_flag
|
|
assert ! Rake::FileUtilsExt.nowrite_flag
|
|
end
|
|
end
|
|
|
|
def test_trace_with_stdout
|
|
flags("--trace=stdout", "-tstdout") do |opts|
|
|
assert opts.trace, "should enable trace option"
|
|
assert opts.backtrace, "should enabled backtrace option"
|
|
assert_equal $stdout, opts.trace_output
|
|
assert Rake::FileUtilsExt.verbose_flag
|
|
assert ! Rake::FileUtilsExt.nowrite_flag
|
|
end
|
|
end
|
|
|
|
def test_trace_with_stderr
|
|
flags("--trace=stderr", "-tstderr") do |opts|
|
|
assert opts.trace, "should enable trace option"
|
|
assert opts.backtrace, "should enabled backtrace option"
|
|
assert_equal $stderr, opts.trace_output
|
|
assert Rake::FileUtilsExt.verbose_flag
|
|
assert ! Rake::FileUtilsExt.nowrite_flag
|
|
end
|
|
end
|
|
|
|
def test_trace_with_error
|
|
ex = assert_raises(Rake::CommandLineOptionError) do
|
|
flags("--trace=xyzzy") do |opts| end
|
|
end
|
|
assert_match(/un(known|recognized).*\btrace\b.*xyzzy/i, ex.message)
|
|
end
|
|
|
|
def test_trace_with_following_task_name
|
|
flags(["--trace", "taskname"], ["-t", "taskname"]) do |opts|
|
|
assert opts.trace, "should enable trace option"
|
|
assert opts.backtrace, "should enabled backtrace option"
|
|
assert_equal $stderr, opts.trace_output
|
|
assert Rake::FileUtilsExt.verbose_flag
|
|
assert_equal ["taskname"], @app.top_level_tasks
|
|
end
|
|
end
|
|
|
|
def test_backtrace
|
|
flags("--backtrace") do |opts|
|
|
assert opts.backtrace, "should enable backtrace option"
|
|
assert_equal $stderr, opts.trace_output
|
|
assert ! opts.trace, "should not enable trace option"
|
|
end
|
|
end
|
|
|
|
def test_backtrace_with_stdout
|
|
flags("--backtrace=stdout") do |opts|
|
|
assert opts.backtrace, "should enable backtrace option"
|
|
assert_equal $stdout, opts.trace_output
|
|
assert ! opts.trace, "should not enable trace option"
|
|
end
|
|
end
|
|
|
|
def test_backtrace_with_stderr
|
|
flags("--backtrace=stderr") do |opts|
|
|
assert opts.backtrace, "should enable backtrace option"
|
|
assert_equal $stderr, opts.trace_output
|
|
assert ! opts.trace, "should not enable trace option"
|
|
end
|
|
end
|
|
|
|
def test_backtrace_with_error
|
|
ex = assert_raises(Rake::CommandLineOptionError) do
|
|
flags("--backtrace=xyzzy") do |opts| end
|
|
end
|
|
assert_match(/un(known|recognized).*\bbacktrace\b.*xyzzy/i, ex.message)
|
|
end
|
|
|
|
def test_backtrace_with_following_task_name
|
|
flags(["--backtrace", "taskname"]) do |opts|
|
|
assert ! opts.trace, "should enable trace option"
|
|
assert opts.backtrace, "should enabled backtrace option"
|
|
assert_equal $stderr, opts.trace_output
|
|
assert_equal ["taskname"], @app.top_level_tasks
|
|
end
|
|
end
|
|
|
|
def test_trace_rules
|
|
flags("--rules") do |opts|
|
|
assert opts.trace_rules
|
|
end
|
|
end
|
|
|
|
def test_tasks
|
|
flags("--tasks", "-T") do |opts|
|
|
assert_equal :tasks, opts.show_tasks
|
|
assert_equal(//.to_s, opts.show_task_pattern.to_s)
|
|
assert_equal nil, opts.show_all_tasks
|
|
end
|
|
flags(["--tasks", "xyz"], ["-Txyz"]) do |opts|
|
|
assert_equal :tasks, opts.show_tasks
|
|
assert_equal(/xyz/.to_s, opts.show_task_pattern.to_s)
|
|
assert_equal nil, opts.show_all_tasks
|
|
end
|
|
flags(["--tasks", "xyz", "--comments"]) do |opts|
|
|
assert_equal :tasks, opts.show_tasks
|
|
assert_equal(/xyz/.to_s, opts.show_task_pattern.to_s)
|
|
assert_equal false, opts.show_all_tasks
|
|
end
|
|
end
|
|
|
|
def test_where
|
|
flags("--where", "-W") do |opts|
|
|
assert_equal :lines, opts.show_tasks
|
|
assert_equal(//.to_s, opts.show_task_pattern.to_s)
|
|
assert_equal true, opts.show_all_tasks
|
|
end
|
|
flags(["--where", "xyz"], ["-Wxyz"]) do |opts|
|
|
assert_equal :lines, opts.show_tasks
|
|
assert_equal(/xyz/.to_s, opts.show_task_pattern.to_s)
|
|
assert_equal true, opts.show_all_tasks
|
|
end
|
|
flags(["--where", "xyz", "--comments"], ["-Wxyz", "--comments"]) do |opts|
|
|
assert_equal :lines, opts.show_tasks
|
|
assert_equal(/xyz/.to_s, opts.show_task_pattern.to_s)
|
|
assert_equal false, opts.show_all_tasks
|
|
end
|
|
end
|
|
|
|
def test_no_deprecated_messages
|
|
flags("--no-deprecation-warnings", "-X") do |opts|
|
|
assert opts.ignore_deprecate
|
|
end
|
|
end
|
|
|
|
def test_verbose
|
|
capture_io do
|
|
flags("--verbose", "-v") do |opts|
|
|
assert Rake::FileUtilsExt.verbose_flag, "verbose should be true"
|
|
assert ! opts.silent, "opts should not be silent"
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_version
|
|
out, _ = capture_io do
|
|
flags "--version", "-V"
|
|
end
|
|
|
|
assert_match(/\bversion\b/, out)
|
|
assert_match(/\b#{Rake::VERSION}\b/, out)
|
|
assert_equal :exit, @exit
|
|
end
|
|
|
|
def test_bad_option
|
|
_, err = capture_io do
|
|
ex = assert_raises(OptionParser::InvalidOption) do
|
|
flags("--bad-option")
|
|
end
|
|
|
|
if ex.message =~ /^While/ # Ruby 1.9 error message
|
|
assert_match(/while parsing/i, ex.message)
|
|
else # Ruby 1.8 error message
|
|
assert_match(/(invalid|unrecognized) option/i, ex.message)
|
|
assert_match(/--bad-option/, ex.message)
|
|
end
|
|
end
|
|
|
|
assert_equal "", err
|
|
end
|
|
|
|
def test_task_collection
|
|
command_line("a", "b")
|
|
assert_equal ["a", "b"], @tasks.sort
|
|
end
|
|
|
|
def test_default_task_collection
|
|
command_line()
|
|
assert_equal ["default"], @tasks
|
|
end
|
|
|
|
def test_environment_definition
|
|
ENV.delete("TESTKEY")
|
|
command_line("TESTKEY=12")
|
|
assert_equal "12", ENV["TESTKEY"]
|
|
end
|
|
|
|
def test_multiline_environment_definition
|
|
ENV.delete("TESTKEY")
|
|
command_line("TESTKEY=a\nb\n")
|
|
assert_equal "a\nb\n", ENV["TESTKEY"]
|
|
end
|
|
|
|
def test_environment_and_tasks_together
|
|
ENV.delete("TESTKEY")
|
|
command_line("a", "b", "TESTKEY=12")
|
|
assert_equal ["a", "b"], @tasks.sort
|
|
assert_equal "12", ENV["TESTKEY"]
|
|
end
|
|
|
|
def test_rake_explicit_task_library
|
|
Rake.add_rakelib "app/task", "other"
|
|
|
|
libs = Rake.application.options.rakelib
|
|
|
|
assert libs.include?("app/task")
|
|
assert libs.include?("other")
|
|
end
|
|
|
|
private
|
|
|
|
def flags(*sets)
|
|
sets.each do |set|
|
|
ARGV.clear
|
|
|
|
@exit = catch(:system_exit) { command_line(*set) }
|
|
|
|
yield(@app.options) if block_given?
|
|
end
|
|
end
|
|
|
|
def command_line(*options)
|
|
options.each do |opt| ARGV << opt end
|
|
@app = Rake::Application.new
|
|
def @app.exit(*args)
|
|
throw :system_exit, :exit
|
|
end
|
|
@app.instance_eval do
|
|
args = handle_options
|
|
collect_command_line_tasks(args)
|
|
end
|
|
@tasks = @app.top_level_tasks
|
|
@app.options
|
|
end
|
|
end
|