summaryrefslogtreecommitdiff
path: root/test/rake
diff options
context:
space:
mode:
Diffstat (limited to 'test/rake')
-rw-r--r--test/rake/helper.rb37
-rw-r--r--test/rake/test_rake_application.rb104
-rw-r--r--test/rake/test_rake_file_utils.rb47
-rw-r--r--test/rake/test_rake_functional.rb96
-rw-r--r--test/rake/test_rake_task.rb14
-rw-r--r--test/rake/test_rake_task_argument_parsing.rb31
-rw-r--r--test/rake/test_rake_task_manager.rb8
-rw-r--r--test/rake/test_rake_task_with_arguments.rb5
-rw-r--r--test/rake/test_rake_test_task.rb4
-rw-r--r--test/rake/test_rake_top_level_functions.rb69
10 files changed, 233 insertions, 182 deletions
diff --git a/test/rake/helper.rb b/test/rake/helper.rb
index 70b06d7fe2..4d8c8185bd 100644
--- a/test/rake/helper.rb
+++ b/test/rake/helper.rb
@@ -1,15 +1,22 @@
require 'rubygems'
-require 'minitest/unit'
-require 'flexmock/test_unit_integration'
+
+begin
+ gem 'minitest'
+rescue Gem::LoadError
+end
+
require 'minitest/autorun'
require 'rake'
require 'tmpdir'
require File.expand_path('../file_creation', __FILE__)
-class Rake::TestCase < MiniTest::Unit::TestCase
- include FlexMock::ArgumentTypes
- include FlexMock::MockContainer
+begin
+ require 'test/ruby/envutil'
+rescue LoadError
+ # for ruby trunk
+end
+class Rake::TestCase < MiniTest::Unit::TestCase
include FileCreation
include Rake::DSL
@@ -18,6 +25,8 @@ class Rake::TestCase < MiniTest::Unit::TestCase
include Rake::TaskManager
end
+ RUBY = defined?(EnvUtil) ? EnvUtil.rubybin : Gem.ruby
+
def setup
ARGV.clear
@@ -43,11 +52,10 @@ class Rake::TestCase < MiniTest::Unit::TestCase
Rake.application = Rake::Application.new
Rake::TaskManager.record_task_metadata = true
+ RakeFileUtils.verbose_flag = false
end
def teardown
- flexmock_teardown
-
Dir.chdir @orig_PWD
FileUtils.rm_rf @tempdir
@@ -434,17 +442,6 @@ end
end
end
- def rakefile_statusreturn
- rakefile <<-STATUSRETURN
-task :exit5 do
- exit(5)
-end
-
-task :normal do
-end
- STATUSRETURN
- end
-
def rakefile_unittest
rakefile '# Empty Rakefile for Unit Test'
@@ -494,7 +491,3 @@ end
end
-# workarounds for 1.8
-$" << 'test/helper.rb'
-Test::Unit.run = true if Test::Unit.respond_to? :run=
-
diff --git a/test/rake/test_rake_application.rb b/test/rake/test_rake_application.rb
index c030c30292..b5d8c652c4 100644
--- a/test/rake/test_rake_application.rb
+++ b/test/rake/test_rake_application.rb
@@ -232,7 +232,9 @@ class TestRakeApplication < Rake::TestCase
def test_load_from_calculated_system_rakefile
rakefile_default
- flexmock(@app, :standard_system_dir => "__STD_SYS_DIR__")
+ def @app.standard_system_dir
+ "__STD_SYS_DIR__"
+ end
ENV['RAKE_SYSTEM'] = nil
@@ -270,25 +272,28 @@ class TestRakeApplication < Rake::TestCase
end
def test_loading_imports
- mock = flexmock("loader")
- mock.should_receive(:load).with("x.dummy").once
+ loader = util_loader
+
@app.instance_eval do
- add_loader("dummy", mock)
+ add_loader("dummy", loader)
add_import("x.dummy")
load_imports
end
+
+ # HACK no assertions
end
def test_building_imported_files_on_demand
- mock = flexmock("loader")
- mock.should_receive(:load).with("x.dummy").once
- mock.should_receive(:make_dummy).with_no_args.once
+ loader = util_loader
+
@app.instance_eval do
- intern(Rake::Task, "x.dummy").enhance do mock.make_dummy end
- add_loader("dummy", mock)
+ intern(Rake::Task, "x.dummy").enhance do loader.make_dummy end
+ add_loader("dummy", loader)
add_import("x.dummy")
load_imports
end
+
+ # HACK no assertions
end
def test_handle_options_should_strip_options_from_ARGV
@@ -399,5 +404,86 @@ class TestRakeApplication < Rake::TestCase
assert_match(/use 'b' instead/i, err)
assert_match(/at c$/i, err)
end
+
+ def test_standard_exception_handling_invalid_option
+ out, err = capture_io do
+ e = assert_raises SystemExit do
+ @app.standard_exception_handling do
+ raise OptionParser::InvalidOption, 'blah'
+ end
+ end
+
+ assert_equal 1, e.status
+ end
+
+ assert_empty out
+ assert_equal "invalid option: blah\n", err
+ end
+
+ def test_standard_exception_handling_other
+ out, err = capture_io do
+ e = assert_raises SystemExit do
+ @app.standard_exception_handling do
+ raise 'blah'
+ end
+ end
+
+ assert_equal 1, e.status
+ end
+
+ assert_empty out
+ assert_match "rake aborted!\n", err
+ assert_match "blah\n", err
+ end
+
+ def test_standard_exception_handling_system_exit
+ out, err = capture_io do
+ e = assert_raises SystemExit do
+ @app.standard_exception_handling do
+ exit 0
+ end
+ end
+
+ assert_equal 0, e.status
+ end
+
+ assert_empty out
+ assert_empty err
+ end
+
+ def test_standard_exception_handling_system_exit_nonzero
+ out, err = capture_io do
+ e = assert_raises SystemExit do
+ @app.standard_exception_handling do
+ exit 5
+ end
+ end
+
+ assert_equal 5, e.status
+ end
+
+ assert_empty out
+ assert_empty err
+ end
+
+ def util_loader
+ loader = Object.new
+
+ loader.instance_variable_set :@load_called, false
+ def loader.load arg
+ raise 'called more than once' if @load_called
+ raise ArgumentError, arg unless arg == 'x.dummy'
+ @load_called = true
+ end
+
+ loader.instance_variable_set :@make_dummy_called, false
+ def loader.make_dummy
+ raise 'called more than once' if @make_dummy_called
+ @make_dummy_called = true
+ end
+
+ loader
+ end
+
end
diff --git a/test/rake/test_rake_file_utils.rb b/test/rake/test_rake_file_utils.rb
index 0f5ad3e7ab..90565e3ebd 100644
--- a/test/rake/test_rake_file_utils.rb
+++ b/test/rake/test_rake_file_utils.rb
@@ -119,33 +119,16 @@ class TestRakeFileUtils < Rake::TestCase
def test_sh
shellcommand
- verbose(false) { sh %{#{FileUtils::RUBY} shellcommand.rb} }
+ verbose(false) { sh %{#{Rake::TestCase::RUBY} shellcommand.rb} }
assert true, "should not fail"
end
- # If the :sh method is invoked directly from a test unit instance
- # (under mini/test), the mini/test version of fail is invoked rather
- # than the kernel version of fail. So we run :sh from within a
- # non-test class to avoid the problem.
- class Sh
- include FileUtils
- def run(*args)
- sh(*args)
- end
- def self.run(*args)
- new.run(*args)
- end
- def self.ruby(*args)
- Sh.run(RUBY, *args)
- end
- end
-
def test_sh_with_a_single_string_argument
check_expansion
ENV['RAKE_TEST_SH'] = 'someval'
verbose(false) {
- sh %{#{FileUtils::RUBY} check_expansion.rb #{env_var} someval}
+ sh %{#{RUBY} check_expansion.rb #{env_var} someval}
}
end
@@ -154,7 +137,7 @@ class TestRakeFileUtils < Rake::TestCase
ENV['RAKE_TEST_SH'] = 'someval'
verbose(false) {
- Sh.ruby 'check_no_expansion.rb', env_var, 'someval'
+ sh RUBY, 'check_no_expansion.rb', env_var, 'someval'
}
end
@@ -162,7 +145,7 @@ class TestRakeFileUtils < Rake::TestCase
shellcommand
assert_raises(RuntimeError) {
- verbose(false) { Sh.run %{#{FileUtils::RUBY} shellcommand.rb 1} }
+ verbose(false) { sh %{#{RUBY} shellcommand.rb 1} }
}
end
@@ -171,12 +154,12 @@ class TestRakeFileUtils < Rake::TestCase
count = 0
verbose(false) {
- sh(%{#{FileUtils::RUBY} shellcommand.rb}) do |ok, res|
+ sh(%{#{RUBY} shellcommand.rb}) do |ok, res|
assert(ok)
assert_equal 0, res.exitstatus
count += 1
end
- sh(%{#{FileUtils::RUBY} shellcommand.rb 1}) do |ok, res|
+ sh(%{#{RUBY} shellcommand.rb 1}) do |ok, res|
assert(!ok)
assert_equal 1, res.exitstatus
count += 1
@@ -241,7 +224,9 @@ class TestRakeFileUtils < Rake::TestCase
ENV['RAKE_TEST_SH'] = 'someval'
verbose(false) {
- ruby %{check_expansion.rb #{env_var} someval}
+ replace_ruby {
+ ruby %{check_expansion.rb #{env_var} someval}
+ }
}
end
@@ -250,7 +235,9 @@ class TestRakeFileUtils < Rake::TestCase
ENV['RAKE_TEST_SH'] = 'someval'
verbose(false) {
- ruby 'check_no_expansion.rb', env_var, 'someval'
+ replace_ruby {
+ ruby 'check_no_expansion.rb', env_var, 'someval'
+ }
}
end
@@ -289,6 +276,16 @@ end
CHECK_EXPANSION
end
+ def replace_ruby
+ ruby = FileUtils::RUBY
+ FileUtils.send :remove_const, :RUBY
+ FileUtils.const_set :RUBY, RUBY
+ yield
+ ensure
+ FileUtils.send :remove_const, :RUBY
+ FileUtils.const_set:RUBY, ruby
+ end
+
def shellcommand
command 'shellcommand.rb', <<-SHELLCOMMAND
#!/usr/bin/env ruby
diff --git a/test/rake/test_rake_functional.rb b/test/rake/test_rake_functional.rb
index f95a7689a7..9b3afedc44 100644
--- a/test/rake/test_rake_functional.rb
+++ b/test/rake/test_rake_functional.rb
@@ -1,38 +1,6 @@
-begin
- old_verbose = $VERBOSE
- $VERBOSE = nil
- require 'session'
-rescue LoadError
- if File::ALT_SEPARATOR
- puts "Unable to run functional tests on MS Windows. Skipping."
- else
- puts "Unable to run functional tests -- please run \"gem install session\""
- end
-ensure
- $VERBOSE = old_verbose
-end
-
-if defined?(Session)
- if File::ALT_SEPARATOR
- puts "Unable to run functional tests on MS Windows. Skipping."
- end
-end
-
require File.expand_path('../helper', __FILE__)
require 'fileutils'
-
-# Version 2.1.9 of session has a bug where the @debug instance
-# variable is not initialized, causing warning messages. This snippet
-# of code fixes that problem.
-module Session
- class AbstractSession
- alias old_initialize initialize
- def initialize(*args)
- @debug = nil
- old_initialize(*args)
- end
- end
-end if defined? Session
+require 'open3'
class TestRakeFunctional < Rake::TestCase
@@ -59,16 +27,14 @@ class TestRakeFunctional < Rake::TestCase
rake
assert_match(/^DEFAULT$/, @out)
- assert_status
end
def test_rake_error_on_bad_task
rakefile_default
- rake "xyz"
+ rake '-t', 'xyz'
assert_match(/rake aborted/, @err)
- assert_status(1)
end
def test_env_available_at_top_scope
@@ -77,16 +43,14 @@ class TestRakeFunctional < Rake::TestCase
rake "TESTTOPSCOPE=1"
assert_match(/^TOPSCOPE$/, @out)
- assert_status
end
def test_env_available_at_task_scope
rakefile_default
- rake "TESTTASKSCOPE=1 task_scope"
+ rake 'TESTTASKSCOPE=1', 'task_scope'
assert_match(/^TASKSCOPE$/, @out)
- assert_status
end
def test_multi_desc
@@ -283,8 +247,6 @@ class TestRakeFunctional < Rake::TestCase
rake "--dry-run"
refute_match(/No such file/, @out)
-
- assert_status
end
# Test for the trace/dry_run bug found by Brian Chandler
@@ -298,7 +260,6 @@ class TestRakeFunctional < Rake::TestCase
rake "--trace"
refute_match(/No such file/, @out)
- assert_status
end
def test_imports
@@ -309,7 +270,6 @@ class TestRakeFunctional < Rake::TestCase
assert File.exist?(File.join(@tempdir, 'dynamic_deps')),
"'dynamic_deps' file should exist"
assert_match(/^FIRST$\s+^DYNAMIC$\s+^STATIC$\s+^OTHER$/, @out)
- assert_status
end
def test_rules_chaining_to_file_task
@@ -319,7 +279,6 @@ class TestRakeFunctional < Rake::TestCase
assert File.exist?(File.join(@tempdir, 'play.app')),
"'play.app' file should exist"
- assert_status
end
def test_file_creation_task
@@ -335,7 +294,7 @@ class TestRakeFunctional < Rake::TestCase
def test_dash_f_with_no_arg_foils_rakefile_lookup
rakefile_rakelib
- rake "-I rakelib -rtest1 -f"
+ rake '-I', 'rakelib', '-rtest1', '-f'
assert_match(/^TEST1$/, @out)
end
@@ -343,8 +302,9 @@ class TestRakeFunctional < Rake::TestCase
def test_dot_rake_files_can_be_loaded_with_dash_r
rakefile_rakelib
- rake "-I rakelib -rtest2 -f"
+ rake '-I', 'rakelib', '-rtest2', '-f'
+ assert_empty @err
assert_match(/^TEST2$/, @out)
end
@@ -412,22 +372,6 @@ class TestRakeFunctional < Rake::TestCase
assert_match(/^PREPARE\nSCOPEDEP$/m, @out)
end
- def test_rake_returns_status_error_values
- rakefile_statusreturn
-
- rake "exit5"
-
- assert_status 5
- end
-
- def test_rake_returns_no_status_error_on_normal_exit
- rakefile_statusreturn
-
- rake "normal"
-
- assert_status 0
- end
-
def test_comment_before_task_acts_like_desc
rakefile_comments
@@ -469,42 +413,38 @@ class TestRakeFunctional < Rake::TestCase
end
def test_file_list_is_requirable_separately
- ruby "-rrake/file_list", "-e 'puts Rake::FileList[\"a\"].size'"
+ ruby '-rrake/file_list', '-e', 'puts Rake::FileList["a"].size'
assert_equal "1\n", @out
- assert_equal 0, @status
end
private
# Run a shell Ruby command with command line options (using the
- # default test options). Output is captured in @out, @err and
- # @status.
+ # default test options). Output is captured in @out and @err
def ruby(*option_list)
run_ruby(@ruby_options + option_list)
end
# Run a command line rake with the give rake options. Default
# command line ruby options are included. Output is captured in
- # @out, @err and @status.
+ # @out and @err
def rake(*rake_options)
run_ruby @ruby_options + [@rake_path] + rake_options
end
# Low level ruby command runner ...
def run_ruby(option_list)
- shell = Session::Shell.new
- command = "#{Gem.ruby} #{option_list.join ' '}"
- puts "COMMAND: [#{command}]" if @verbose
- @out, @err = shell.execute command
- @status = shell.exit_status
- puts "STATUS: [#{@status}]" if @verbose
+ puts "COMMAND: [#{RUBY} #{option_list.join ' '}]" if @verbose
+
+ inn, out, err, wait = Open3.popen3(Gem.ruby, *option_list)
+ inn.close
+
+ @out = out.read
+ @err = err.read
+
puts "OUTPUT: [#{@out}]" if @verbose
puts "ERROR: [#{@err}]" if @verbose
puts "PWD: [#{Dir.pwd}]" if @verbose
- shell.close
end
- def assert_status(expected_status=0)
- assert_equal expected_status, @status
- end
-end if defined?(Session)
+end
diff --git a/test/rake/test_rake_task.rb b/test/rake/test_rake_task.rb
index ebbcb2ac2d..a5bc693237 100644
--- a/test/rake/test_rake_task.rb
+++ b/test/rake/test_rake_task.rb
@@ -208,10 +208,7 @@ class TestRakeTask < Rake::TestCase
b = task :b
c = task :c
- faux_stamp = 100
- flexmock(Time, :now => faux_stamp)
-
- assert_equal faux_stamp, a.timestamp
+ assert_in_delta Time.now, a.timestamp, 0.1, 'computer too slow?'
end
def test_timestamp_returns_latest_prereq_timestamp
@@ -219,12 +216,11 @@ class TestRakeTask < Rake::TestCase
b = task :b
c = task :c
- faux_stamp = 100
- flexmock(Time, :now => faux_stamp-10)
- flexmock(b, :timestamp => faux_stamp - 1)
- flexmock(c, :timestamp => faux_stamp)
+ now = Time.now
+ def b.timestamp() Time.now + 10 end
+ def c.timestamp() Time.now + 5 end
- assert_equal faux_stamp, a.timestamp
+ assert_in_delta now + 10, a.timestamp, 0.1, 'computer too slow?'
end
def test_investigation_output
diff --git a/test/rake/test_rake_task_argument_parsing.rb b/test/rake/test_rake_task_argument_parsing.rb
index 7a03b2addc..8ef9d7236b 100644
--- a/test/rake/test_rake_task_argument_parsing.rb
+++ b/test/rake/test_rake_task_argument_parsing.rb
@@ -51,38 +51,31 @@ class TestRakeTaskArgumentParsing < Rake::TestCase
end
def test_terminal_width_using_stty
- app = Rake::Application.new
-
- flexmock(app,
- :unix? => true,
- :dynamic_width_stty => 1235,
- :dynamic_width_tput => 0)
+ def @app.unix?() true end
+ def @app.dynamic_width_stty() 1235 end
+ def @app.dynamic_width_tput() 0 end
- assert_equal 1235, app.terminal_width
+ assert_equal 1235, @app.terminal_width
end
def test_terminal_width_using_tput
- app = Rake::Application.new
- flexmock(app,
- :unix? => true,
- :dynamic_width_stty => 0,
- :dynamic_width_tput => 1236)
+ def @app.unix?() true end
+ def @app.dynamic_width_stty() 0 end
+ def @app.dynamic_width_tput() 1236 end
- assert_equal 1236, app.terminal_width
+ assert_equal 1236, @app.terminal_width
end
def test_terminal_width_using_hardcoded_80
- app = Rake::Application.new
- flexmock(app, :unix? => false)
+ def @app.unix?() true end
- assert_equal 80, app.terminal_width
+ assert_equal 80, @app.terminal_width
end
def test_terminal_width_with_failure
- app = Rake::Application.new
- flexmock(app).should_receive(:unix?).and_throw(RuntimeError)
+ def @app.unix?() raise end
- assert_equal 80, app.terminal_width
+ assert_equal 80, @app.terminal_width
end
def test_no_rakeopt
diff --git a/test/rake/test_rake_task_manager.rb b/test/rake/test_rake_task_manager.rb
index 847f784fa8..110ce65d4c 100644
--- a/test/rake/test_rake_task_manager.rb
+++ b/test/rake/test_rake_task_manager.rb
@@ -19,6 +19,14 @@ class TestRakeTaskManager < Rake::TestCase
assert_equal @tm, t.application
end
+ def test_index
+ e = assert_raises RuntimeError do
+ @tm['bad']
+ end
+
+ assert_equal "Don't know how to build task 'bad'", e.message
+ end
+
def test_name_lookup
t = @tm.define_task(Rake::Task, :t)
assert_equal t, @tm[:t]
diff --git a/test/rake/test_rake_task_with_arguments.rb b/test/rake/test_rake_task_with_arguments.rb
index fe1bcf5a49..ce81a4c1a8 100644
--- a/test/rake/test_rake_task_with_arguments.rb
+++ b/test/rake/test_rake_task_with_arguments.rb
@@ -160,11 +160,14 @@ class TestRakeTaskWithArguments < Rake::TestCase
end
def test_values_at
- t = task(:pre, [:a, :b, :c]) { |t, args|
+ t = task(:pre, [:a, :b, :c]) { |task, args|
a, b, c = args.values_at(:a, :b, :c)
assert_equal %w[1 2 3], [a, b, c]
}
+
t.invoke(*%w[1 2 3])
+
+ # HACK no assertions
end
end
diff --git a/test/rake/test_rake_test_task.rb b/test/rake/test_rake_test_task.rb
index 7d490a0f6c..1a6d23e425 100644
--- a/test/rake/test_rake_test_task.rb
+++ b/test/rake/test_rake_test_task.rb
@@ -93,7 +93,7 @@ class TestRakeTestTask < Rake::TestCase
t.loader = :testrb
end
- flexmock(test_task).should_receive(:ruby_version).and_return('1.8.2')
+ def test_task.ruby_version() '1.8.2' end
assert_match(/^-S testrb +".*"$/, test_task.run_code)
end
@@ -103,7 +103,7 @@ class TestRakeTestTask < Rake::TestCase
t.loader = :testrb
end
- flexmock(test_task).should_receive(:ruby_version).and_return('1.8.6')
+ def test_task.ruby_version() '1.8.6' end
assert_match(/^-S testrb +$/, test_task.run_code)
end
diff --git a/test/rake/test_rake_top_level_functions.rb b/test/rake/test_rake_top_level_functions.rb
index 69ef8691fb..1ed1af02e3 100644
--- a/test/rake/test_rake_top_level_functions.rb
+++ b/test/rake/test_rake_top_level_functions.rb
@@ -5,28 +5,43 @@ class TestRakeTopLevelFunctions < Rake::TestCase
def setup
super
- @app = Rake.application
- Rake.application = flexmock("app")
- Rake.application.should_receive(:deprecate).
- and_return { |old, new, call| @app.deprecate(old, new, call) }
- end
+ @app = Object.new
- def teardown
- Rake.application = @app
+ def @app.called
+ @called
+ end
- super
+ def @app.method_missing(*a, &b)
+ @called ||= []
+ @called << [a, b]
+ nil
+ end
+
+ Rake.application = @app
end
def test_namespace
- Rake.application.should_receive(:in_namespace).with("xyz", any).once
- namespace "xyz" do end
+ block = proc do end
+
+ namespace("xyz", &block)
+
+ expected = [
+ [[:in_namespace, 'xyz'], block]
+ ]
+
+ assert_equal expected, @app.called
end
def test_import
- Rake.application.should_receive(:add_import).with("x").once.ordered
- Rake.application.should_receive(:add_import).with("y").once.ordered
- Rake.application.should_receive(:add_import).with("z").once.ordered
import('x', 'y', 'z')
+
+ expected = [
+ [[:add_import, 'x'], nil],
+ [[:add_import, 'y'], nil],
+ [[:add_import, 'z'], nil],
+ ]
+
+ assert_equal expected, @app.called
end
def test_when_writing
@@ -51,23 +66,43 @@ class TestRakeTopLevelFunctions < Rake::TestCase
end
def test_missing_constants_task
- Rake.application.should_receive(:const_warning).with(:Task).once
Object.const_missing(:Task)
+
+ expected = [
+ [[:const_warning, :Task], nil]
+ ]
+
+ assert_equal expected, @app.called
end
def test_missing_constants_file_task
- Rake.application.should_receive(:const_warning).with(:FileTask).once
Object.const_missing(:FileTask)
+
+ expected = [
+ [[:const_warning, :FileTask], nil]
+ ]
+
+ assert_equal expected, @app.called
end
def test_missing_constants_file_creation_task
- Rake.application.should_receive(:const_warning).with(:FileCreationTask).once
Object.const_missing(:FileCreationTask)
+
+ expected = [
+ [[:const_warning, :FileCreationTask], nil]
+ ]
+
+ assert_equal expected, @app.called
end
def test_missing_constants_rake_app
- Rake.application.should_receive(:const_warning).with(:RakeApp).once
Object.const_missing(:RakeApp)
+
+ expected = [
+ [[:const_warning, :RakeApp], nil]
+ ]
+
+ assert_equal expected, @app.called
end
def test_missing_other_constant