summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/rake/capture_stdout.rb24
-rw-r--r--test/rake/check_expansion.rb5
-rw-r--r--test/rake/check_no_expansion.rb5
-rw-r--r--test/rake/data/chains/Rakefile15
-rw-r--r--test/rake/data/default/Rakefile19
-rw-r--r--test/rake/data/dryrun/Rakefile22
-rw-r--r--test/rake/data/file_creation_task/Rakefile33
-rw-r--r--test/rake/data/imports/Rakefile19
-rw-r--r--test/rake/data/imports/deps.mf1
-rw-r--r--test/rake/data/multidesc/Rakefile17
-rw-r--r--test/rake/data/namespace/Rakefile57
-rw-r--r--test/rake/data/rakelib/test1.rake3
-rw-r--r--test/rake/data/rbext/rakefile.rb3
-rw-r--r--test/rake/data/sample.mf14
-rw-r--r--test/rake/data/statusreturn/Rakefile8
-rw-r--r--test/rake/data/unittest/Rakefile1
-rw-r--r--test/rake/data/unittest/subdir/.gitignore2
-rw-r--r--test/rake/file_creation.rb (renamed from test/rake/filecreation.rb)22
-rw-r--r--test/rake/helper.rb500
-rw-r--r--test/rake/in_environment.rb30
-rw-r--r--test/rake/rake_test_setup.rb9
-rw-r--r--test/rake/reqfile.rb3
-rw-r--r--test/rake/reqfile2.rb3
-rw-r--r--test/rake/reqfile3.rb3
-rwxr-xr-xtest/rake/shellcommand.rb3
-rw-r--r--test/rake/test_application.rb687
-rw-r--r--test/rake/test_invocation_chain.rb75
-rw-r--r--test/rake/test_package_task.rb115
-rw-r--r--test/rake/test_rake.rb9
-rw-r--r--test/rake/test_rake_application.rb403
-rw-r--r--test/rake/test_rake_application_options.rb335
-rw-r--r--test/rake/test_rake_clean.rb (renamed from test/rake/test_clean.rb)6
-rw-r--r--test/rake/test_rake_definitions.rb (renamed from test/rake/test_definitions.rb)23
-rw-r--r--test/rake/test_rake_directory_task.rb45
-rw-r--r--test/rake/test_rake_dsl.rb73
-rw-r--r--test/rake/test_rake_early_time.rb (renamed from test/rake/test_earlytime.rb)6
-rw-r--r--test/rake/test_rake_extension.rb (renamed from test/rake/test_extension.rb)6
-rw-r--r--test/rake/test_rake_file_creation_task.rb (renamed from test/rake/test_file_creation_task.rb)16
-rw-r--r--test/rake/test_rake_file_list.rb (renamed from test/rake/test_filelist.rb)291
-rw-r--r--test/rake/test_rake_file_list_path_map.rb8
-rw-r--r--test/rake/test_rake_file_task.rb (renamed from test/rake/test_file_task.rb)87
-rw-r--r--test/rake/test_rake_file_utils.rb (renamed from test/rake/test_fileutils.rb)197
-rw-r--r--test/rake/test_rake_ftp_file.rb (renamed from test/rake/contrib/test_ftp.rb)22
-rw-r--r--test/rake/test_rake_functional.rb514
-rw-r--r--test/rake/test_rake_invocation_chain.rb52
-rw-r--r--test/rake/test_rake_makefile_loader.rb (renamed from test/rake/test_makefile_loader.rb)28
-rw-r--r--test/rake/test_rake_multi_task.rb (renamed from test/rake/test_multitask.rb)28
-rw-r--r--test/rake/test_rake_name_space.rb (renamed from test/rake/test_namespace.rb)9
-rw-r--r--test/rake/test_rake_package_task.rb79
-rw-r--r--test/rake/test_rake_path_map.rb (renamed from test/rake/test_pathmap.rb)58
-rw-r--r--test/rake/test_rake_path_map_explode.rb34
-rw-r--r--test/rake/test_rake_path_map_partial.rb18
-rw-r--r--test/rake/test_rake_pseudo_status.rb (renamed from test/rake/test_pseudo_status.rb)12
-rw-r--r--test/rake/test_rake_rdoc_task.rb83
-rw-r--r--test/rake/test_rake_require.rb40
-rw-r--r--test/rake/test_rake_rules.rb (renamed from test/rake/test_rules.rb)151
-rw-r--r--test/rake/test_rake_task.rb (renamed from test/rake/test_tasks.rb)247
-rw-r--r--test/rake/test_rake_task_argument_parsing.rb110
-rw-r--r--test/rake/test_rake_task_arguments.rb (renamed from test/rake/test_task_arguments.rb)24
-rw-r--r--test/rake/test_rake_task_lib.rb (renamed from test/rake/test_tasklib.rb)5
-rw-r--r--test/rake/test_rake_task_manager.rb (renamed from test/rake/test_task_manager.rb)60
-rw-r--r--test/rake/test_rake_task_manager_argument_resolution.rb36
-rw-r--r--test/rake/test_rake_task_with_arguments.rb162
-rw-r--r--test/rake/test_rake_test_task.rb116
-rw-r--r--test/rake/test_rake_top_level_functions.rb76
-rw-r--r--test/rake/test_rake_win32.rb72
-rw-r--r--test/rake/test_require.rb32
-rw-r--r--test/rake/test_sys.rb20
-rw-r--r--test/rake/test_test_task.rb81
-rw-r--r--test/rake/test_top_level_functions.rb91
-rw-r--r--test/rake/test_win32.rb45
71 files changed, 3334 insertions, 2174 deletions
diff --git a/test/rake/capture_stdout.rb b/test/rake/capture_stdout.rb
deleted file mode 100644
index f54ec42f69..0000000000
--- a/test/rake/capture_stdout.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-require 'stringio'
-
-# Mix-in for capturing standard output.
-module CaptureStdout
- def capture_stdout
- s = StringIO.new
- oldstdout = $stdout
- $stdout = s
- yield
- s.string
- ensure
- $stdout = oldstdout
- end
-
- def capture_stderr
- s = StringIO.new
- oldstderr = $stderr
- $stderr = s
- yield
- s.string
- ensure
- $stderr = oldstderr
- end
-end
diff --git a/test/rake/check_expansion.rb b/test/rake/check_expansion.rb
deleted file mode 100644
index 659cf71e51..0000000000
--- a/test/rake/check_expansion.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-if ARGV[0] != ARGV[1]
- exit 1
-else
- exit 0
-end
diff --git a/test/rake/check_no_expansion.rb b/test/rake/check_no_expansion.rb
deleted file mode 100644
index 24f586a7f5..0000000000
--- a/test/rake/check_no_expansion.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-if ARGV[0] != ARGV[1]
- exit 0
-else
- exit 1
-end
diff --git a/test/rake/data/chains/Rakefile b/test/rake/data/chains/Rakefile
deleted file mode 100644
index 31bdc2578d..0000000000
--- a/test/rake/data/chains/Rakefile
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- ruby -*-
-
-task :default => "play.app"
-
-file "play.scpt" => "base" do |t|
- cp t.prerequisites.first, t.name
-end
-
-rule ".app" => ".scpt" do |t|
- cp t.source, t.name
-end
-
-file 'base' do
- touch 'base'
-end
diff --git a/test/rake/data/default/Rakefile b/test/rake/data/default/Rakefile
deleted file mode 100644
index 22ed5e0ca9..0000000000
--- a/test/rake/data/default/Rakefile
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env ruby
-
-if ENV['TESTTOPSCOPE']
- puts "TOPSCOPE"
-end
-
-task :default do
- puts "DEFAULT"
-end
-
-task :other => [:default] do
- puts "OTHER"
-end
-
-task :task_scope do
- if ENV['TESTTASKSCOPE']
- puts "TASKSCOPE"
- end
-end
diff --git a/test/rake/data/dryrun/Rakefile b/test/rake/data/dryrun/Rakefile
deleted file mode 100644
index 0a68a0d606..0000000000
--- a/test/rake/data/dryrun/Rakefile
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-
-task :default => ["temp_main"]
-
-file "temp_main" => [:all_apps] do touch "temp_main" end
-
-task :all_apps => [:one, :two]
-task :one => ["temp_one"]
-task :two => ["temp_two"]
-
-file "temp_one" do |t|
- touch "temp_one"
-end
-file "temp_two" do |t|
- touch "temp_two"
-end
-
-task :clean do
- ["temp_one", "temp_two", "temp_main"].each do |file|
- rm_f file
- end
-end
diff --git a/test/rake/data/file_creation_task/Rakefile b/test/rake/data/file_creation_task/Rakefile
deleted file mode 100644
index 94641b6972..0000000000
--- a/test/rake/data/file_creation_task/Rakefile
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env ruby
-
-N = 2
-
-task :default => :run
-
-BUILD_DIR = 'build'
-task :clean do
- rm_rf 'build'
- rm_rf 'src'
-end
-
-task :run
-
-TARGET_DIR = 'build/copies'
-
-FileList['src/*'].each do |src|
- directory TARGET_DIR
- target = File.join TARGET_DIR, File.basename(src)
- file target => [src, TARGET_DIR] do
- cp src, target
- # sleep 3 if src !~ /foo#{N-1}$/ # I'm commenting out this sleep, it doesn't seem to do anything.
- end
- task :run => target
-end
-
-task :prep => :clean do
- mkdir_p 'src'
- N.times do |n|
- puts "DBG: Touching src/foo#{n}"
- touch "src/foo#{n}"
- end
-end
diff --git a/test/rake/data/imports/Rakefile b/test/rake/data/imports/Rakefile
deleted file mode 100644
index 6a60f612bc..0000000000
--- a/test/rake/data/imports/Rakefile
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- ruby -*-
-
-require 'rake/loaders/makefile'
-
-task :default
-
-task :other do
- puts "OTHER"
-end
-
-file "dynamic_deps" do |t|
- open(t.name, "w") do |f| f.puts "puts 'DYNAMIC'" end
-end
-
-import "dynamic_deps"
-import "static_deps"
-import "static_deps"
-import "deps.mf"
-puts "FIRST"
diff --git a/test/rake/data/imports/deps.mf b/test/rake/data/imports/deps.mf
deleted file mode 100644
index 04643d0d8e..0000000000
--- a/test/rake/data/imports/deps.mf
+++ /dev/null
@@ -1 +0,0 @@
-default: other
diff --git a/test/rake/data/multidesc/Rakefile b/test/rake/data/multidesc/Rakefile
deleted file mode 100644
index 5342481922..0000000000
--- a/test/rake/data/multidesc/Rakefile
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/env ruby
-
-task :b
-
-desc "A"
-task :a
-
-desc "B"
-task :b
-
-desc "A2"
-task :a
-
-task :c
-
-desc "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-task :d
diff --git a/test/rake/data/namespace/Rakefile b/test/rake/data/namespace/Rakefile
deleted file mode 100644
index 6de98edae9..0000000000
--- a/test/rake/data/namespace/Rakefile
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env ruby
-
-desc "copy"
-task :copy do
- puts "COPY"
-end
-
-namespace "nest" do
- desc "nest copy"
- task :copy do
- puts "NEST COPY"
- end
- task :xx => :copy
-end
-
-anon_ns = namespace do
- desc "anonymous copy task"
- task :copy do
- puts "ANON COPY"
- end
-end
-
-desc "Top level task to run the anonymous version of copy"
-task :anon => anon_ns[:copy]
-
-namespace "very" do
- namespace "nested" do
- task "run" => "rake:copy"
- end
-end
-
-namespace "a" do
- desc "Run task in the 'a' namespace"
- task "run" do
- puts "IN A"
- end
-end
-
-namespace "b" do
- desc "Run task in the 'b' namespace"
- task "run" => "a:run" do
- puts "IN B"
- end
-end
-
-namespace "file1" do
- file "xyz.rb" do
- puts "XYZ1"
- end
-end
-
-namespace "file2" do
- file "xyz.rb" do
- puts "XYZ2"
- end
-end
-
diff --git a/test/rake/data/rakelib/test1.rake b/test/rake/data/rakelib/test1.rake
deleted file mode 100644
index bb1c419b40..0000000000
--- a/test/rake/data/rakelib/test1.rake
+++ /dev/null
@@ -1,3 +0,0 @@
-task :default do
- puts "TEST1"
-end
diff --git a/test/rake/data/rbext/rakefile.rb b/test/rake/data/rbext/rakefile.rb
deleted file mode 100644
index 670604d733..0000000000
--- a/test/rake/data/rbext/rakefile.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-task :default do
- puts "OK"
-end
diff --git a/test/rake/data/sample.mf b/test/rake/data/sample.mf
deleted file mode 100644
index 778e9d456f..0000000000
--- a/test/rake/data/sample.mf
+++ /dev/null
@@ -1,14 +0,0 @@
-# Comments
-a: a1 a2 a3 a4
-b: b1 b2 b3 \
- b4 b5 b6\
-# Mid: Comment
-b7
-
- a : a5 a6 a7
-c: c1
-d: d1 d2 \
-
-e f : e1 f1
-
-g\ 0: g1 g\ 2 g\ 3 g4
diff --git a/test/rake/data/statusreturn/Rakefile b/test/rake/data/statusreturn/Rakefile
deleted file mode 100644
index 68023052f8..0000000000
--- a/test/rake/data/statusreturn/Rakefile
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env ruby
-
-task :exit5 do
- exit(5)
-end
-
-task :normal do
-end
diff --git a/test/rake/data/unittest/Rakefile b/test/rake/data/unittest/Rakefile
deleted file mode 100644
index 9c3b8ac11c..0000000000
--- a/test/rake/data/unittest/Rakefile
+++ /dev/null
@@ -1 +0,0 @@
-# Empty Rakefile for Unit Test
diff --git a/test/rake/data/unittest/subdir/.gitignore b/test/rake/data/unittest/subdir/.gitignore
deleted file mode 100644
index d6b7ef32c8..0000000000
--- a/test/rake/data/unittest/subdir/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*
-!.gitignore
diff --git a/test/rake/filecreation.rb b/test/rake/file_creation.rb
index e4c6e347da..facc57a038 100644
--- a/test/rake/filecreation.rb
+++ b/test/rake/file_creation.rb
@@ -1,15 +1,18 @@
module FileCreation
- OLDFILE = "testdata/old"
- NEWFILE = "testdata/new"
+ OLDFILE = "old"
+ NEWFILE = "new"
def create_timed_files(oldfile, *newfiles)
- return if File.exist?(oldfile) && newfiles.all? { |newfile| File.exist?(newfile) }
- old_time = create_file(oldfile)
+ return if (File.exist?(oldfile) &&
+ newfiles.all? { |newfile|
+ File.exist?(newfile) && File.stat(newfile).mtime > File.stat(oldfile).mtime
+ })
+ now = Time.now
+
+ create_file(oldfile, now - 60)
+
newfiles.each do |newfile|
- while create_file(newfile) <= old_time
- sleep(0.1)
- File.delete(newfile) rescue nil
- end
+ create_file(newfile, now)
end
end
@@ -18,9 +21,10 @@ module FileCreation
File.stat(dirname).mtime
end
- def create_file(name)
+ def create_file(name, file_time=nil)
create_dir(File.dirname(name))
FileUtils.touch(name) unless File.exist?(name)
+ File.utime(file_time, file_time, name) unless file_time.nil?
File.stat(name).mtime
end
diff --git a/test/rake/helper.rb b/test/rake/helper.rb
new file mode 100644
index 0000000000..70b06d7fe2
--- /dev/null
+++ b/test/rake/helper.rb
@@ -0,0 +1,500 @@
+require 'rubygems'
+require 'minitest/unit'
+require 'flexmock/test_unit_integration'
+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
+
+ include FileCreation
+
+ include Rake::DSL
+
+ class TaskManager
+ include Rake::TaskManager
+ end
+
+ def setup
+ ARGV.clear
+
+ @orig_PWD = Dir.pwd
+ @orig_APPDATA = ENV['APPDATA']
+ @orig_HOME = ENV['HOME']
+ @orig_HOMEDRIVE = ENV['HOMEDRIVE']
+ @orig_HOMEPATH = ENV['HOMEPATH']
+ @orig_RAKE_COLUMNS = ENV['RAKE_COLUMNS']
+ @orig_RAKE_SYSTEM = ENV['RAKE_SYSTEM']
+ @orig_RAKEOPT = ENV['RAKEOPT']
+ @orig_USERPROFILE = ENV['USERPROFILE']
+ ENV.delete 'RAKE_COLUMNS'
+ ENV.delete 'RAKE_SYSTEM'
+ ENV.delete 'RAKEOPT'
+
+ tmpdir = Dir.chdir Dir.tmpdir do Dir.pwd end
+ @tempdir = File.join tmpdir, "test_rake_#{$$}"
+
+ FileUtils.mkdir_p @tempdir
+
+ Dir.chdir @tempdir
+
+ Rake.application = Rake::Application.new
+ Rake::TaskManager.record_task_metadata = true
+ end
+
+ def teardown
+ flexmock_teardown
+
+ Dir.chdir @orig_PWD
+ FileUtils.rm_rf @tempdir
+
+ if @orig_APPDATA then
+ ENV['APPDATA'] = @orig_APPDATA
+ else
+ ENV.delete 'APPDATA'
+ end
+
+ ENV['HOME'] = @orig_HOME
+ ENV['HOMEDRIVE'] = @orig_HOMEDRIVE
+ ENV['HOMEPATH'] = @orig_HOMEPATH
+ ENV['RAKE_COLUMNS'] = @orig_RAKE_COLUMNS
+ ENV['RAKE_SYSTEM'] = @orig_RAKE_SYSTEM
+ ENV['RAKEOPT'] = @orig_RAKEOPT
+ ENV['USERPROFILE'] = @orig_USERPROFILE
+ end
+
+ def ignore_deprecations
+ Rake.application.options.ignore_deprecate = true
+ yield
+ ensure
+ Rake.application.options.ignore_deprecate = false
+ end
+
+ def rake_system_dir
+ @system_dir = 'system'
+
+ FileUtils.mkdir_p @system_dir
+
+ open File.join(@system_dir, 'sys1.rake'), 'w' do |io|
+ io << <<-SYS
+task "sys1" do
+ puts "SYS1"
+end
+ SYS
+ end
+
+ ENV['RAKE_SYSTEM'] = @system_dir
+ end
+
+ def rakefile contents
+ open 'Rakefile', 'w' do |io|
+ io << contents
+ end
+ end
+
+ def rakefile_access
+ rakefile <<-ACCESS
+TOP_LEVEL_CONSTANT = 0
+
+def a_top_level_function
+end
+
+task :default => [:work, :obj, :const]
+
+task :work do
+ begin
+ a_top_level_function
+ puts "GOOD:M Top level methods can be called in tasks"
+ rescue NameError => ex
+ puts "BAD:M Top level methods can not be called in tasks"
+ end
+end
+
+# TODO: remove `disabled_' when DeprecatedObjectDSL removed
+task :obj
+task :disabled_obj do
+ begin
+ Object.new.instance_eval { task :xyzzy }
+ puts "BAD:D Rake DSL are polluting objects"
+ rescue StandardError => ex
+ puts "GOOD:D Rake DSL are not polluting objects"
+ end
+end
+
+task :const do
+ begin
+ TOP_LEVEL_CONSTANT
+ puts "GOOD:C Top level constants are available in tasks"
+ rescue StandardError => ex
+ puts "BAD:C Top level constants are NOT available in tasks"
+ end
+end
+ ACCESS
+ end
+
+ def rakefile_chains
+ rakefile <<-DEFAULT
+task :default => "play.app"
+
+file "play.scpt" => "base" do |t|
+ cp t.prerequisites.first, t.name
+end
+
+rule ".app" => ".scpt" do |t|
+ cp t.source, t.name
+end
+
+file 'base' do
+ touch 'base'
+end
+ DEFAULT
+ end
+
+ def rakefile_comments
+ rakefile <<-COMMENTS
+# comment for t1
+task :t1 do
+end
+
+# no comment or task because there's a blank line
+
+task :t2 do
+end
+
+desc "override comment for t3"
+# this is not the description
+multitask :t3 do
+end
+
+# this is not the description
+desc "override comment for t4"
+file :t4 do
+end
+ COMMENTS
+ end
+
+ def rakefile_default
+ rakefile <<-DEFAULT
+if ENV['TESTTOPSCOPE']
+ puts "TOPSCOPE"
+end
+
+task :default do
+ puts "DEFAULT"
+end
+
+task :other => [:default] do
+ puts "OTHER"
+end
+
+task :task_scope do
+ if ENV['TESTTASKSCOPE']
+ puts "TASKSCOPE"
+ end
+end
+ DEFAULT
+ end
+
+ def rakefile_dryrun
+ rakefile <<-DRYRUN
+task :default => ["temp_main"]
+
+file "temp_main" => [:all_apps] do touch "temp_main" end
+
+task :all_apps => [:one, :two]
+task :one => ["temp_one"]
+task :two => ["temp_two"]
+
+file "temp_one" do |t|
+ touch "temp_one"
+end
+file "temp_two" do |t|
+ touch "temp_two"
+end
+
+task :clean do
+ ["temp_one", "temp_two", "temp_main"].each do |file|
+ rm_f file
+ end
+end
+ DRYRUN
+
+ FileUtils.touch 'temp_main'
+ FileUtils.touch 'temp_two'
+ end
+
+ def rakefile_extra
+ rakefile 'task :default'
+
+ FileUtils.mkdir_p 'rakelib'
+
+ open File.join('rakelib', 'extra.rake'), 'w' do |io|
+ io << <<-EXTRA_RAKE
+# Added for testing
+
+namespace :extra do
+ desc "An Extra Task"
+ task :extra do
+ puts "Read all about it"
+ end
+end
+ EXTRA_RAKE
+ end
+ end
+
+ def rakefile_file_creation
+ rakefile <<-'FILE_CREATION'
+N = 2
+
+task :default => :run
+
+BUILD_DIR = 'build'
+task :clean do
+ rm_rf 'build'
+ rm_rf 'src'
+end
+
+task :run
+
+TARGET_DIR = 'build/copies'
+
+FileList['src/*'].each do |src|
+ directory TARGET_DIR
+ target = File.join TARGET_DIR, File.basename(src)
+ file target => [src, TARGET_DIR] do
+ cp src, target
+ # sleep 3 if src !~ /foo#{N-1}$/ # I'm commenting out this sleep, it doesn't seem to do anything.
+ end
+ task :run => target
+end
+
+task :prep => :clean do
+ mkdir_p 'src'
+ N.times do |n|
+ puts "DBG: Touching src/foo#{n}"
+ touch "src/foo#{n}"
+ end
+end
+ FILE_CREATION
+ end
+
+ def rakefile_imports
+ rakefile <<-IMPORTS
+require 'rake/loaders/makefile'
+
+task :default
+
+task :other do
+ puts "OTHER"
+end
+
+file "dynamic_deps" do |t|
+ open(t.name, "w") do |f| f.puts "puts 'DYNAMIC'" end
+end
+
+import "dynamic_deps"
+import "static_deps"
+import "static_deps"
+import "deps.mf"
+puts "FIRST"
+ IMPORTS
+
+ open 'deps.mf', 'w' do |io|
+ io << <<-DEPS
+default: other
+ DEPS
+ end
+
+ open "static_deps", "w" do |f|
+ f.puts 'puts "STATIC"'
+ end
+ end
+
+ def rakefile_multidesc
+ rakefile <<-MULTIDESC
+task :b
+
+desc "A"
+task :a
+
+desc "B"
+task :b
+
+desc "A2"
+task :a
+
+task :c
+
+desc "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+task :d
+ MULTIDESC
+ end
+
+ def rakefile_namespace
+ rakefile <<-NAMESPACE
+desc "copy"
+task :copy do
+ puts "COPY"
+end
+
+namespace "nest" do
+ desc "nest copy"
+ task :copy do
+ puts "NEST COPY"
+ end
+ task :xx => :copy
+end
+
+anon_ns = namespace do
+ desc "anonymous copy task"
+ task :copy do
+ puts "ANON COPY"
+ end
+end
+
+desc "Top level task to run the anonymous version of copy"
+task :anon => anon_ns[:copy]
+
+namespace "very" do
+ namespace "nested" do
+ task "run" => "rake:copy"
+ end
+end
+
+namespace "a" do
+ desc "Run task in the 'a' namespace"
+ task "run" do
+ puts "IN A"
+ end
+end
+
+namespace "b" do
+ desc "Run task in the 'b' namespace"
+ task "run" => "a:run" do
+ puts "IN B"
+ end
+end
+
+namespace "file1" do
+ file "xyz.rb" do
+ puts "XYZ1"
+ end
+end
+
+namespace "file2" do
+ file "xyz.rb" do
+ puts "XYZ2"
+ end
+end
+
+namespace "scopedep" do
+ task :prepare do
+ touch "scopedep.rb"
+ puts "PREPARE"
+ end
+ file "scopedep.rb" => [:prepare] do
+ puts "SCOPEDEP"
+ end
+end
+ NAMESPACE
+ end
+
+ def rakefile_nosearch
+ FileUtils.touch 'dummy'
+ end
+
+ def rakefile_rakelib
+ FileUtils.mkdir_p 'rakelib'
+
+ Dir.chdir 'rakelib' do
+ open 'test1.rb', 'w' do |io|
+ io << <<-TEST1
+task :default do
+ puts "TEST1"
+end
+ TEST1
+ end
+
+ open 'test2.rake', 'w' do |io|
+ io << <<-TEST1
+task :default do
+ puts "TEST2"
+end
+ TEST1
+ end
+ end
+ end
+
+ def rakefile_rbext
+ open 'rakefile.rb', 'w' do |io|
+ io << 'task :default do puts "OK" 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'
+
+ readme = File.join 'subdir', 'README'
+ FileUtils.mkdir_p File.dirname readme
+
+ FileUtils.touch readme
+ end
+
+ def rakefile_verbose
+ rakefile <<-VERBOSE
+task :standalone_verbose_true do
+ verbose true
+ sh "ruby -e '0'"
+end
+
+task :standalone_verbose_false do
+ verbose false
+ sh "ruby -e '0'"
+end
+
+task :inline_verbose_default do
+ sh "ruby -e '0'"
+end
+
+task :inline_verbose_false do
+ sh "ruby -e '0'", :verbose => false
+end
+
+task :inline_verbose_true do
+ sh "ruby -e '0'", :verbose => true
+end
+
+task :block_verbose_true do
+ verbose(true) do
+ sh "ruby -e '0'"
+ end
+end
+
+task :block_verbose_false do
+ verbose(false) do
+ sh "ruby -e '0'"
+ end
+end
+ VERBOSE
+ end
+
+end
+
+# workarounds for 1.8
+$" << 'test/helper.rb'
+Test::Unit.run = true if Test::Unit.respond_to? :run=
+
diff --git a/test/rake/in_environment.rb b/test/rake/in_environment.rb
deleted file mode 100644
index f6fd8fb731..0000000000
--- a/test/rake/in_environment.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-module InEnvironment
- private
-
- # Create an environment for a test. At the completion of the yielded
- # block, the environment is restored to its original conditions.
- def in_environment(settings)
- original_settings = set_env(settings)
- yield
- ensure
- set_env(original_settings) if original_settings
- end
-
- # Set the environment according to the settings hash.
- def set_env(settings) # :nodoc:
- result = {}
- settings.each do |k, v|
- result[k] = ENV[k]
- if k == 'PWD'
- result[k] = Dir.pwd
- Dir.chdir(v)
- elsif v.nil?
- ENV.delete(k)
- else
- ENV[k] = v
- end
- end
- result
- end
-
-end
diff --git a/test/rake/rake_test_setup.rb b/test/rake/rake_test_setup.rb
deleted file mode 100644
index de94d56b40..0000000000
--- a/test/rake/rake_test_setup.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-# Common setup for all test files.
-
-# require 'flexmock/test_unit'
-
-module TestMethods
- def assert_exception(ex, msg=nil, &block)
- assert_raise(ex, msg, &block)
- end
-end
diff --git a/test/rake/reqfile.rb b/test/rake/reqfile.rb
deleted file mode 100644
index 5372544b66..0000000000
--- a/test/rake/reqfile.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-# For --require testing
-
-TESTING_REQUIRE << 1
diff --git a/test/rake/reqfile2.rb b/test/rake/reqfile2.rb
deleted file mode 100644
index 65993907ac..0000000000
--- a/test/rake/reqfile2.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-# For --require testing
-
-TESTING_REQUIRE << 2
diff --git a/test/rake/reqfile3.rb b/test/rake/reqfile3.rb
deleted file mode 100644
index 11fc16b2ab..0000000000
--- a/test/rake/reqfile3.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-# For --require testing
-
-TESTING_REQUIRE << 3
diff --git a/test/rake/shellcommand.rb b/test/rake/shellcommand.rb
deleted file mode 100755
index 58db8a0871..0000000000
--- a/test/rake/shellcommand.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-
-exit((ARGV[0] || "0").to_i)
diff --git a/test/rake/test_application.rb b/test/rake/test_application.rb
deleted file mode 100644
index 27c7d8df05..0000000000
--- a/test/rake/test_application.rb
+++ /dev/null
@@ -1,687 +0,0 @@
-require 'test/unit'
-require 'rake'
-require_relative 'capture_stdout'
-require_relative 'in_environment'
-
-TESTING_REQUIRE = [ ]
-
-######################################################################
-class Rake::TestApplication < Test::Unit::TestCase
- include CaptureStdout
- include InEnvironment
- BASEDIR = File.dirname(__FILE__)
-
- def defmock(*names, &block)
- class << (@mock ||= Object.new); self; end.class_eval do
- names.each do |name|
- define_method(name, block)
- end
- end
- @mock
- end
-
- def setup
- @app = Rake::Application.new
- @app.options.rakelib = []
- end
-
- def test_constant_warning
- err = capture_stderr do @app.instance_eval { const_warning("Task") } end
- assert_match(/warning/i, err)
- assert_match(/deprecated/i, err)
- assert_match(/Task/i, err)
- end
-
- def test_display_tasks
- @app.options.show_task_pattern = //
- @app.last_description = "COMMENT"
- @app.define_task(Rake::Task, "t")
- out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
- assert_match(/^rake t/, out)
- assert_match(/# COMMENT/, out)
- end
-
- def test_display_tasks_with_long_comments
- in_environment('RAKE_COLUMNS' => '80') do
- @app.options.show_task_pattern = //
- @app.last_description = "1234567890" * 8
- @app.define_task(Rake::Task, "t")
- out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
- assert_match(/^rake t/, out)
- assert_match(/# 12345678901234567890123456789012345678901234567890123456789012345\.\.\./, out)
- end
- end
-
- def test_display_tasks_with_task_name_wider_than_tty_display
- in_environment('RAKE_COLUMNS' => '80') do
- @app.options.show_task_pattern = //
- description = "something short"
- task_name = "task name" * 80
- @app.last_description = "something short"
- @app.define_task(Rake::Task, task_name )
- out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
- # Ensure the entire task name is output and we end up showing no description
- assert_match(/rake #{task_name} # .../, out)
- end
- end
-
- def test_display_tasks_with_very_long_task_name_to_a_non_tty_shows_name_and_comment
- @app.options.show_task_pattern = //
- @app.tty_output = false
- description = "something short"
- task_name = "task name" * 80
- @app.last_description = "something short"
- @app.define_task(Rake::Task, task_name )
- out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
- # Ensure the entire task name is output and we end up showing no description
- assert_match(/rake #{task_name} # #{description}/, out)
- end
-
- def test_display_tasks_with_long_comments_to_a_non_tty_shows_entire_comment
- @app.options.show_task_pattern = //
- @app.tty_output = false
- @app.last_description = "1234567890" * 8
- @app.define_task(Rake::Task, "t")
- out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
- assert_match(/^rake t/, out)
- assert_match(/# #{@app.last_description}/, out)
- end
-
- def test_display_tasks_with_long_comments_to_a_non_tty_with_columns_set_truncates_comments
- in_environment("RAKE_COLUMNS" => '80') do
- @app.options.show_task_pattern = //
- @app.tty_output = false
- @app.last_description = "1234567890" * 8
- @app.define_task(Rake::Task, "t")
- out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
- assert_match(/^rake t/, out)
- assert_match(/# 12345678901234567890123456789012345678901234567890123456789012345\.\.\./, out)
- end
- end
-
- def test_display_tasks_with_full_descriptions
- @app.options.show_task_pattern = //
- @app.options.full_description = true
- @app.last_description = "COMMENT"
- @app.define_task(Rake::Task, "t")
- out = capture_stdout do @app.instance_eval { display_tasks_and_comments } end
- assert_match(/^rake t$/, out)
- assert_match(/^ {4}COMMENT$/, out)
- end
-
- def test_finding_rakefile
- in_environment("PWD" => File.join(BASEDIR, "data/unittest")) do
- assert_match(/Rakefile/i, @app.instance_eval { have_rakefile })
- end
- end
-
- def test_not_finding_rakefile
- @app.instance_eval { @rakefiles = ['NEVER_FOUND'] }
- assert( ! @app.instance_eval do have_rakefile end )
- assert_nil @app.rakefile
- end
-
- def test_load_rakefile
- in_environment("PWD" => File.join(BASEDIR, "data/unittest")) do
- @app.instance_eval do
- handle_options
- options.silent = true
- load_rakefile
- end
- assert_equal "rakefile", @app.rakefile.downcase
- assert_match(%r(unittest$), Dir.pwd)
- end
- end
-
- def test_load_rakefile_from_subdir
- in_environment("PWD" => File.join(BASEDIR, "data/unittest/subdir")) do
- @app.instance_eval do
- handle_options
- options.silent = true
- load_rakefile
- end
- assert_equal "rakefile", @app.rakefile.downcase
- assert_match(%r(unittest$), Dir.pwd)
- end
- end
-
- def test_load_rakefile_not_found
- in_environment("PWD" => "/", "RAKE_SYSTEM" => 'not_exist') do
- @app.instance_eval do
- handle_options
- options.silent = true
- end
- ex = assert_raise(RuntimeError) do
- @app.instance_eval do raw_load_rakefile end
- end
- assert_match(/no rakefile found/i, ex.message)
- end
- end
-
- def test_load_from_system_rakefile
- system_dir = File.expand_path('../data/default', __FILE__)
- in_environment('RAKE_SYSTEM' => system_dir) do
- @app.options.rakelib = []
- @app.instance_eval do
- handle_options
- options.silent = true
- options.load_system = true
- options.rakelib = []
- load_rakefile
- end
- assert_equal system_dir, @app.system_dir
- assert_nil @app.rakefile
- end
- end
-
- def test_windows
- assert ! (@app.windows? && @app.unix?)
- end
-
- def test_loading_imports
- args = []
- mock = defmock(:load) {|*a| args << a}
- @app.instance_eval do
- add_loader("dummy", mock)
- add_import("x.dummy")
- load_imports
- end
- assert_equal([["x.dummy"]], args)
- end
-
- def test_building_imported_files_on_demand
- args = []
- callback = false
- mock = defmock(:load) {|*a| args << a}
- @app.instance_eval do
- intern(Rake::Task, "x.dummy").enhance do callback = true end
- add_loader("dummy", mock)
- add_import("x.dummy")
- load_imports
- end
- assert_equal([["x.dummy"]], args)
- assert(callback)
- end
-
- def test_handle_options_should_strip_options_from_ARGV
- assert !@app.options.trace
-
- valid_option = '--trace'
- ARGV.clear
- ARGV << valid_option
-
- @app.handle_options
-
- assert !ARGV.include?(valid_option)
- assert @app.options.trace
- end
-
- def test_good_run
- ran = false
- ARGV.clear
- ARGV << '--rakelib=""'
- @app.options.silent = true
- @app.instance_eval do
- intern(Rake::Task, "default").enhance { ran = true }
- end
- in_environment("PWD" => File.join(BASEDIR, "data/default")) do
- @app.run
- end
- assert ran
- end
-
- def test_display_task_run
- ran = false
- ARGV.clear
- ARGV << '-f' << '-s' << '--tasks' << '--rakelib=""'
- @app.last_description = "COMMENT"
- @app.define_task(Rake::Task, "default")
- out = capture_stdout { @app.run }
- assert @app.options.show_tasks
- assert ! ran
- assert_match(/rake default/, out)
- assert_match(/# COMMENT/, out)
- end
-
- def test_display_prereqs
- ran = false
- ARGV.clear
- ARGV << '-f' << '-s' << '--prereqs' << '--rakelib=""'
- @app.last_description = "COMMENT"
- t = @app.define_task(Rake::Task, "default")
- t.enhance([:a, :b])
- @app.define_task(Rake::Task, "a")
- @app.define_task(Rake::Task, "b")
- out = capture_stdout { @app.run }
- assert @app.options.show_prereqs
- assert ! ran
- assert_match(/rake a$/, out)
- assert_match(/rake b$/, out)
- assert_match(/rake default\n( *(a|b)\n){2}/m, out)
- end
-
- def test_bad_run
- @app.intern(Rake::Task, "default").enhance { fail }
- ARGV.clear
- ARGV << '-f' << '-s' << '--rakelib=""'
- assert_raise(SystemExit) {
- err = capture_stderr { @app.run }
- assert_match(/see full trace/, err)
- }
- ensure
- ARGV.clear
- end
-
- def test_bad_run_with_trace
- @app.intern(Rake::Task, "default").enhance { fail }
- ARGV.clear
- ARGV << '-f' << '-s' << '-t'
- assert_raise(SystemExit) {
- err = capture_stderr { capture_stdout { @app.run } }
- assert_no_match(/see full trace/, err)
- }
- ensure
- ARGV.clear
- end
-
- def test_run_with_bad_options
- @app.intern(Rake::Task, "default").enhance { fail }
- ARGV.clear
- ARGV << '-f' << '-s' << '--xyzzy'
- assert_raise(SystemExit) {
- err = capture_stderr { capture_stdout { @app.run } }
- }
- ensure
- ARGV.clear
- end
-end
-
-
-######################################################################
-class Rake::TestApplicationOptions < Test::Unit::TestCase
- include CaptureStdout
-
- def setup
- clear_argv
- RakeFileUtils.verbose_flag = false
- RakeFileUtils.nowrite_flag = false
- TESTING_REQUIRE.clear
- end
-
- def teardown
- clear_argv
- RakeFileUtils.verbose_flag = false
- RakeFileUtils.nowrite_flag = false
- end
-
- def clear_argv
- while ! ARGV.empty?
- ARGV.pop
- end
- end
-
- def test_default_options
- opts = command_line
- assert_nil opts.classic_namespace
- assert_nil opts.dryrun
- assert_nil opts.full_description
- assert_nil opts.ignore_system
- assert_nil opts.load_system
- 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_equal ['rakelib'], opts.rakelib
- assert ! RakeFileUtils.verbose_flag
- assert ! RakeFileUtils.nowrite_flag
- end
-
- def test_dry_run
- flags('--dry-run', '-n') do |opts|
- assert opts.dryrun
- assert opts.trace
- assert RakeFileUtils.verbose_flag
- assert RakeFileUtils.nowrite_flag
- end
- end
-
- def test_describe
- flags('--describe') do |opts|
- assert opts.full_description
- assert 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 opts.full_description
- assert 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 |opts|
- 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 |opts|
- assert_equal 1, $xyzzy
- assert_not_equal :exit, @exit
- $xyzzy = 0
- end
- end
-
- def test_execute_and_print
- $xyzzy = 0
- flags('--execute-print=$xyzzy="pugh"', '-p $xyzzy="pugh"') do |opts|
- assert_equal 'pugh', $xyzzy
- assert_equal :exit, @exit
- assert_match(/^pugh$/, @out)
- $xyzzy = 0
- end
- end
-
- def test_help
- flags('--help', '-H', '-h') do |opts|
- assert_match(/\Arake/, @out)
- assert_match(/\boptions\b/, @out)
- assert_match(/\btargets\b/, @out)
- assert_equal :exit, @exit
- assert_equal :exit, @exit
- end
- end
-
- def test_libdir
- flags(['--libdir', 'xx'], ['-I', 'xx'], ['-Ixx']) do |opts|
- $:.include?('xx')
- end
- ensure
- $:.delete('xx')
- end
-
- def test_rakefile
- flags(['--rakefile', 'RF'], ['--rakefile=RF'], ['-f', 'RF'], ['-fRF']) do |opts|
- assert_equal ['RF'], @app.instance_eval { @rakefiles }
- end
- end
-
- def test_rakelib
- flags(['--rakelibdir', 'A:B:C'], ['--rakelibdir=A:B:C'], ['-R', 'A:B:C'], ['-RA:B:C']) do |opts|
- assert_equal ['A', 'B', 'C'], opts.rakelib
- end
- end
-
- def test_require
- flags(['--require', File.expand_path('../reqfile', __FILE__)],
- "-r#{File.expand_path('../reqfile2', __FILE__)}",
- "-r#{File.expand_path('../reqfile3', __FILE__)}") do |opts|
- end
- assert TESTING_REQUIRE.include?(1)
- assert TESTING_REQUIRE.include?(2)
- assert TESTING_REQUIRE.include?(3)
- assert_equal 3, TESTING_REQUIRE.size
- end
-
- def test_missing_require
- ex = assert_raise(LoadError) do
- flags(['--require', File.expand_path('../missing', __FILE__)]) do |opts|
- end
- end
- assert_match(/cannot load such file/, ex.message)
- assert_match(/#{File.basename(File.dirname(__FILE__))}\/missing/, ex.message)
- end
-
- def test_prereqs
- flags('--prereqs', '-P') do |opts|
- assert opts.show_prereqs
- end
- end
-
- def test_quiet
- flags('--quiet', '-q') do |opts|
- assert ! RakeFileUtils.verbose_flag
- assert ! opts.silent
- end
- end
-
- def test_no_search
- flags('--nosearch', '--no-search', '-N') do |opts|
- assert opts.nosearch
- end
- end
-
- def test_silent
- flags('--silent', '-s') do |opts|
- assert ! RakeFileUtils.verbose_flag
- assert opts.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
- assert RakeFileUtils.verbose_flag
- assert ! RakeFileUtils.nowrite_flag
- 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 opts.show_tasks
- assert_equal(//.to_s, opts.show_task_pattern.to_s)
- end
- flags(['--tasks', 'xyz'], ['-Txyz']) do |opts|
- assert opts.show_tasks
- assert_equal(/xyz/, opts.show_task_pattern)
- end
- end
-
- def test_verbose
- flags('--verbose', '-V') do |opts|
- assert RakeFileUtils.verbose_flag
- assert ! opts.silent
- end
- end
-
- def test_version
- flags('--version', '-V') do |opts|
- assert_match(/\bversion\b/, @out)
- assert_match(/\b#{RAKEVERSION}\b/, @out)
- assert_equal :exit, @exit
- end
- end
-
- def test_classic_namespace
- flags(['--classic-namespace'], ['-C', '-T', '-P', '-n', '-s', '-t']) do |opts|
- assert opts.classic_namespace
- assert_equal opts.show_tasks, $show_tasks
- assert_equal opts.show_prereqs, $show_prereqs
- assert_equal opts.trace, $trace
- assert_equal opts.dryrun, $dryrun
- assert_equal opts.silent, $silent
- end
- end
-
- def test_bad_option
- capture_stderr do
- ex = assert_raise(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
- 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("a", "TESTKEY=12")
- assert_equal ["a"], @tasks.sort
- assert '12', ENV['TESTKEY']
- end
-
- private
-
- def flags(*sets)
- sets.each do |set|
- ARGV.clear
- @out = capture_stdout {
- @exit = catch(:system_exit) { opts = 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
- handle_options
- collect_tasks
- end
- @tasks = @app.top_level_tasks
- @app.options
- end
-end
-
-class Rake::TestTaskArgumentParsing < Test::Unit::TestCase
- def setup
- @app = Rake::Application.new
- end
-
- def test_name_only
- name, args = @app.parse_task_string("name")
- assert_equal "name", name
- assert_equal [], args
- end
-
- def test_empty_args
- name, args = @app.parse_task_string("name[]")
- assert_equal "name", name
- assert_equal [], args
- end
-
- def test_one_argument
- name, args = @app.parse_task_string("name[one]")
- assert_equal "name", name
- assert_equal ["one"], args
- end
-
- def test_two_arguments
- name, args = @app.parse_task_string("name[one,two]")
- assert_equal "name", name
- assert_equal ["one", "two"], args
- end
-
- def test_can_handle_spaces_between_args
- name, args = @app.parse_task_string("name[one, two,\tthree , \tfour]")
- assert_equal "name", name
- assert_equal ["one", "two", "three", "four"], args
- end
-
- def test_keeps_embedded_spaces
- name, args = @app.parse_task_string("name[a one ana, two]")
- assert_equal "name", name
- assert_equal ["a one ana", "two"], args
- end
-
-end
-
-class Rake::TestTaskArgumentParsing < Test::Unit::TestCase
- include InEnvironment
-
- def test_terminal_width_using_env
- app = Rake::Application.new
- in_environment('RAKE_COLUMNS' => '1234') do
- assert_equal 1234, app.terminal_width
- end
- end
-
- def test_terminal_width_using_stty
- app = Rake::Application.new
- def app.unix?() true end
- def app.dynamic_width_stty() 1235 end
- def app.dynamic_width_tput() 0 end
- in_environment('RAKE_COLUMNS' => nil) do
- assert_equal 1235, app.terminal_width
- end
- end
-
- def test_terminal_width_using_tput
- app = Rake::Application.new
- def app.unix?() true end
- def app.dynamic_width_stty() 0 end
- def app.dynamic_width_tput() 1236 end
- in_environment('RAKE_COLUMNS' => nil) do
- assert_equal 1236, app.terminal_width
- end
- end
-
- def test_terminal_width_using_hardcoded_80
- app = Rake::Application.new
- def app.unix?() false end
- in_environment('RAKE_COLUMNS' => nil) do
- assert_equal 80, app.terminal_width
- end
- end
-
- def test_terminal_width_with_failure
- app = Rake::Application.new
- called = false
- class << app; self; end.class_eval do
- define_method(:unix?) {|*a|
- called = a
- raise RuntimeError
- }
- end
- in_environment('RAKE_COLUMNS' => nil) do
- assert_equal 80, app.terminal_width
- end
- assert_equal([], called)
- end
-end
diff --git a/test/rake/test_invocation_chain.rb b/test/rake/test_invocation_chain.rb
deleted file mode 100644
index 2b06493773..0000000000
--- a/test/rake/test_invocation_chain.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-require 'test/unit'
-require 'rake'
-
-######################################################################
-class Rake::TestAnEmptyInvocationChain < Test::Unit::TestCase
-
- def setup
- @empty = Rake::InvocationChain::EMPTY
- end
-
- def test_should_be_able_to_add_members
- assert_nothing_raised do
- @empty.append("A")
- end
- end
-
- def test_to_s
- assert_equal "TOP", @empty.to_s
- end
-end
-
-######################################################################
-class Rake::TestAnInvocationChainWithOneMember < Test::Unit::TestCase
-
- def setup
- @empty = Rake::InvocationChain::EMPTY
- @first_member = "A"
- @chain = @empty.append(@first_member)
- end
-
- def test_should_report_first_member_as_a_member
- assert @chain.member?(@first_member)
- end
-
- def test_should_fail_when_adding_original_member
- ex = assert_raise RuntimeError do
- @chain.append(@first_member)
- end
- assert_match(/circular +dependency/i, ex.message)
- assert_match(/A.*=>.*A/, ex.message)
- end
-
- def test_to_s
- assert_equal "TOP => A", @chain.to_s
- end
-
-end
-
-######################################################################
-class Rake::TestAnInvocationChainWithMultipleMember < Test::Unit::TestCase
-
- def setup
- @first_member = "A"
- @second_member = "B"
- ch = Rake::InvocationChain::EMPTY.append(@first_member)
- @chain = ch.append(@second_member)
- end
-
- def test_should_report_first_member_as_a_member
- assert @chain.member?(@first_member)
- end
-
- def test_should_report_second_member_as_a_member
- assert @chain.member?(@second_member)
- end
-
- def test_should_fail_when_adding_original_member
- ex = assert_raise RuntimeError do
- @chain.append(@first_member)
- end
- assert_match(/A.*=>.*B.*=>.*A/, ex.message)
- end
-end
-
-
diff --git a/test/rake/test_package_task.rb b/test/rake/test_package_task.rb
deleted file mode 100644
index 0ed20e42c0..0000000000
--- a/test/rake/test_package_task.rb
+++ /dev/null
@@ -1,115 +0,0 @@
-require 'tmpdir'
-require 'fileutils'
-require 'test/unit'
-require 'rake/packagetask'
-
-class Rake::TestPackageTask < Test::Unit::TestCase
- include Rake
-
- def test_create
- pwd = Dir.pwd
- tmpdir = Dir.mktmpdir("rake")
- Dir.chdir(tmpdir)
- Dir.mkdir("bin")
- open("bin/rake", "wb") {}
- pkg = Rake::PackageTask.new("pkgr", "1.2.3") { |p|
- p.package_files << "install.rb"
- p.package_files.include(
- '[A-Z]*',
- 'bin/**/*',
- 'lib/**/*.rb',
- 'test/**/*.rb',
- 'doc/**/*',
- 'build/rubyapp.rb',
- '*.blurb')
- p.package_files.exclude(/\bCVS\b/)
- p.package_files.exclude(/~$/)
- p.package_dir = 'pkg'
- p.need_tar = true
- p.need_tar_gz = true
- p.need_tar_bz2 = true
- p.need_zip = true
- }
- assert_equal "pkg", pkg.package_dir
- assert pkg.package_files.include?("bin/rake")
- assert "pkgr", pkg.name
- assert "1.2.3", pkg.version
- assert Task[:package]
- assert Task['pkg/pkgr-1.2.3.tgz']
- assert Task['pkg/pkgr-1.2.3.tar.gz']
- assert Task['pkg/pkgr-1.2.3.tar.bz2']
- assert Task['pkg/pkgr-1.2.3.zip']
- assert Task["pkg/pkgr-1.2.3"]
- assert Task[:clobber_package]
- assert Task[:repackage]
- ensure
- Dir.chdir(pwd)
- FileUtils.rm_rf(tmpdir)
- end
-
- def test_missing_version
- assert_raise(RuntimeError) {
- pkg = Rake::PackageTask.new("pkgr") { |p| }
- }
- end
-
- def test_no_version
- pkg = Rake::PackageTask.new("pkgr", :noversion) { |p| }
- assert "pkgr", pkg.send(:package_name)
- end
-
- def test_clone
- pkg = Rake::PackageTask.new("x", :noversion)
- p2 = pkg.clone
- pkg.package_files << "y"
- p2.package_files << "x"
- assert_equal ["y"], pkg.package_files
- assert_equal ["x"], p2.package_files
- end
-end
-
-
-require 'rake/gempackagetask'
-
-class Rake::TestGemPackageTask < Test::Unit::TestCase
- def test_gem_package
- gem = Gem::Specification.new do |g|
- g.name = "pkgr"
- g.version = "1.2.3"
- g.files = FileList["x"].resolve
- end
- pkg = Rake::GemPackageTask.new(gem) do |p|
- p.package_files << "y"
- end
- assert_equal ["x", "y"], pkg.package_files
- assert_equal "pkgr-1.2.3.gem", pkg.gem_file
- end
-
- def test_gem_package_with_current_platform
- gem = Gem::Specification.new do |g|
- g.name = "pkgr"
- g.version = "1.2.3"
- g.files = FileList["x"].resolve
- g.platform = Gem::Platform::CURRENT
- end
- pkg = Rake::GemPackageTask.new(gem) do |p|
- p.package_files << "y"
- end
- assert_equal ["x", "y"], pkg.package_files
- assert_match(/^pkgr-1\.2\.3-(\S+)\.gem$/, pkg.gem_file)
- end
-
- def test_gem_package_with_ruby_platform
- gem = Gem::Specification.new do |g|
- g.name = "pkgr"
- g.version = "1.2.3"
- g.files = FileList["x"].resolve
- g.platform = Gem::Platform::RUBY
- end
- pkg = Rake::GemPackageTask.new(gem) do |p|
- p.package_files << "y"
- end
- assert_equal ["x", "y"], pkg.package_files
- assert_equal "pkgr-1.2.3.gem", pkg.gem_file
- end
-end
diff --git a/test/rake/test_rake.rb b/test/rake/test_rake.rb
index 44fecee559..b2a3928b26 100644
--- a/test/rake/test_rake.rb
+++ b/test/rake/test_rake.rb
@@ -1,7 +1,6 @@
-require 'test/unit'
-require 'rake'
+require File.expand_path('../helper', __FILE__)
-class Rake::TestRake < Test::Unit::TestCase
+class TestRake < Rake::TestCase
def test_each_dir_parent
assert_equal ['a'], alldirs('a')
assert_equal ['a/b', 'a'], alldirs('a/b')
@@ -27,13 +26,15 @@ class Rake::TestRake < Test::Unit::TestCase
old_app = Rake.application
fake_app = Object.new
Rake.application = fake_app
+
assert_equal fake_app, Rake.application
+
ensure
Rake.application = old_app
end
def test_original_dir_reports_current_dir
- assert_equal Dir.pwd, Rake.original_dir
+ assert_equal @tempdir, Rake.original_dir
end
end
diff --git a/test/rake/test_rake_application.rb b/test/rake/test_rake_application.rb
new file mode 100644
index 0000000000..c030c30292
--- /dev/null
+++ b/test/rake/test_rake_application.rb
@@ -0,0 +1,403 @@
+require File.expand_path('../helper', __FILE__)
+
+class TestRakeApplication < Rake::TestCase
+
+ def setup
+ super
+
+ @app = Rake.application
+ @app.options.rakelib = []
+ end
+
+ def test_constant_warning
+ _, err = capture_io do @app.instance_eval { const_warning("Task") } end
+ assert_match(/warning/i, err)
+ assert_match(/deprecated/i, err)
+ assert_match(/Task/i, err)
+ end
+
+ def test_display_tasks
+ @app.options.show_tasks = :tasks
+ @app.options.show_task_pattern = //
+ @app.last_description = "COMMENT"
+ @app.define_task(Rake::Task, "t")
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
+ assert_match(/^rake t/, out)
+ assert_match(/# COMMENT/, out)
+ end
+
+ def test_display_tasks_with_long_comments
+ @app.terminal_columns = 80
+ @app.options.show_tasks = :tasks
+ @app.options.show_task_pattern = //
+ @app.last_description = "1234567890" * 8
+ @app.define_task(Rake::Task, "t")
+
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
+
+ assert_match(/^rake t/, out)
+ assert_match(/# 12345678901234567890123456789012345678901234567890123456789012345\.\.\./, out)
+ end
+
+ def test_display_tasks_with_task_name_wider_than_tty_display
+ @app.terminal_columns = 80
+ @app.options.show_tasks = :tasks
+ @app.options.show_task_pattern = //
+ task_name = "task name" * 80
+ @app.last_description = "something short"
+ @app.define_task(Rake::Task, task_name )
+
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
+
+ # Ensure the entire task name is output and we end up showing no description
+ assert_match(/rake #{task_name} # .../, out)
+ end
+
+ def test_display_tasks_with_very_long_task_name_to_a_non_tty_shows_name_and_comment
+ @app.options.show_tasks = :tasks
+ @app.options.show_task_pattern = //
+ @app.tty_output = false
+ description = "something short"
+ task_name = "task name" * 80
+ @app.last_description = "something short"
+ @app.define_task(Rake::Task, task_name )
+
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
+
+ # Ensure the entire task name is output and we end up showing no description
+ assert_match(/rake #{task_name} # #{description}/, out)
+ end
+
+ def test_display_tasks_with_long_comments_to_a_non_tty_shows_entire_comment
+ @app.options.show_tasks = :tasks
+ @app.options.show_task_pattern = //
+ @app.tty_output = false
+ @app.last_description = "1234567890" * 8
+ @app.define_task(Rake::Task, "t")
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
+ assert_match(/^rake t/, out)
+ assert_match(/# #{@app.last_description}/, out)
+ end
+
+ def test_display_tasks_with_long_comments_to_a_non_tty_with_columns_set_truncates_comments
+ @app.terminal_columns = 80
+ @app.options.show_tasks = :tasks
+ @app.options.show_task_pattern = //
+ @app.tty_output = false
+ @app.last_description = "1234567890" * 8
+ @app.define_task(Rake::Task, "t")
+
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
+
+ assert_match(/^rake t/, out)
+ assert_match(/# 12345678901234567890123456789012345678901234567890123456789012345\.\.\./, out)
+ end
+
+ def test_describe_tasks
+ @app.options.show_tasks = :describe
+ @app.options.show_task_pattern = //
+ @app.last_description = "COMMENT"
+ @app.define_task(Rake::Task, "t")
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
+ assert_match(/^rake t$/, out)
+ assert_match(/^ {4}COMMENT$/, out)
+ end
+
+ def test_show_lines
+ @app.options.show_tasks = :lines
+ @app.options.show_task_pattern = //
+ @app.last_description = "COMMENT"
+ @app.define_task(Rake::Task, "t")
+ @app['t'].locations << "HERE:1"
+ out, = capture_io do @app.instance_eval { display_tasks_and_comments } end
+ assert_match(/^rake t +[^:]+:\d+ *$/, out)
+ end
+
+ def test_finding_rakefile
+ rakefile_default
+
+ assert_match(/Rakefile/i, @app.instance_eval { have_rakefile })
+ end
+
+ def test_not_finding_rakefile
+ @app.instance_eval { @rakefiles = ['NEVER_FOUND'] }
+ assert( ! @app.instance_eval do have_rakefile end )
+ assert_nil @app.rakefile
+ end
+
+ def test_load_rakefile
+ rakefile_unittest
+
+ @app.instance_eval do
+ handle_options
+ options.silent = true
+ load_rakefile
+ end
+
+ assert_equal "rakefile", @app.rakefile.downcase
+ assert_equal @tempdir, Dir.pwd
+ end
+
+ def test_load_rakefile_doesnt_print_rakefile_directory_from_same_dir
+ rakefile_unittest
+
+ _, err = capture_io do
+ @app.instance_eval do
+ # pretend we started from the unittest dir
+ @original_dir = File.expand_path(".")
+ raw_load_rakefile
+ end
+ end
+
+ assert_empty err
+ end
+
+ def test_load_rakefile_from_subdir
+ rakefile_unittest
+ Dir.chdir 'subdir'
+
+ @app.instance_eval do
+ handle_options
+ options.silent = true
+ load_rakefile
+ end
+
+ assert_equal "rakefile", @app.rakefile.downcase
+ assert_equal @tempdir, Dir.pwd
+ end
+
+ def test_load_rakefile_prints_rakefile_directory_from_subdir
+ rakefile_unittest
+ Dir.chdir 'subdir'
+
+ app = Rake::Application.new
+ app.options.rakelib = []
+
+ _, err = capture_io do
+ app.instance_eval do
+ raw_load_rakefile
+ end
+ end
+
+ assert_equal "(in #{@tempdir}\)\n", err
+ end
+
+ def test_load_rakefile_doesnt_print_rakefile_directory_from_subdir_if_silent
+ rakefile_unittest
+ Dir.chdir 'subdir'
+
+ _, err = capture_io do
+ @app.instance_eval do
+ handle_options
+ options.silent = true
+ raw_load_rakefile
+ end
+ end
+
+ assert_empty err
+ end
+
+ def test_load_rakefile_not_found
+ Dir.chdir @tempdir
+ ENV['RAKE_SYSTEM'] = 'not_exist'
+
+ @app.instance_eval do
+ handle_options
+ options.silent = true
+ end
+
+ ex = assert_raises(RuntimeError) do
+ @app.instance_eval do raw_load_rakefile end
+ end
+
+ assert_match(/no rakefile found/i, ex.message)
+ end
+
+ def test_load_from_system_rakefile
+ rake_system_dir
+
+ @app.instance_eval do
+ handle_options
+ options.silent = true
+ options.load_system = true
+ options.rakelib = []
+ load_rakefile
+ end
+
+ assert_equal @system_dir, @app.system_dir
+ assert_nil @app.rakefile
+ rescue SystemExit
+ flunk 'failed to load rakefile'
+ end
+
+ def test_load_from_calculated_system_rakefile
+ rakefile_default
+ flexmock(@app, :standard_system_dir => "__STD_SYS_DIR__")
+
+ ENV['RAKE_SYSTEM'] = nil
+
+ @app.instance_eval do
+ handle_options
+ options.silent = true
+ options.load_system = true
+ options.rakelib = []
+ load_rakefile
+ end
+
+ assert_equal "__STD_SYS_DIR__", @app.system_dir
+ rescue SystemExit
+ flunk 'failed to find system rakefile'
+ end
+
+ def test_terminal_columns
+ old_RAKE_COLUMNS = ENV['RAKE_COLUMNS']
+
+ ENV['RAKE_COLUMNS'] = '42'
+
+ app = Rake::Application.new
+
+ assert_equal 42, app.terminal_columns
+ ensure
+ if old_RAKE_COLUMNS then
+ ENV['RAKE_COLUMNS'].delete
+ else
+ ENV['RAKE_COLUMNS'] = old_RAKE_COLUMNS
+ end
+ end
+
+ def test_windows
+ assert ! (@app.windows? && @app.unix?)
+ end
+
+ def test_loading_imports
+ mock = flexmock("loader")
+ mock.should_receive(:load).with("x.dummy").once
+ @app.instance_eval do
+ add_loader("dummy", mock)
+ add_import("x.dummy")
+ load_imports
+ end
+ 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
+ @app.instance_eval do
+ intern(Rake::Task, "x.dummy").enhance do mock.make_dummy end
+ add_loader("dummy", mock)
+ add_import("x.dummy")
+ load_imports
+ end
+ end
+
+ def test_handle_options_should_strip_options_from_ARGV
+ assert !@app.options.trace
+
+ valid_option = '--trace'
+ ARGV.clear
+ ARGV << valid_option
+
+ @app.handle_options
+
+ assert !ARGV.include?(valid_option)
+ assert @app.options.trace
+ end
+
+ def test_good_run
+ ran = false
+
+ ARGV << '--rakelib=""'
+
+ @app.options.silent = true
+
+ @app.instance_eval do
+ intern(Rake::Task, "default").enhance { ran = true }
+ end
+
+ rakefile_default
+
+ out, err = capture_io do
+ @app.run
+ end
+
+ assert ran
+ assert_empty err
+ assert_equal "DEFAULT\n", out
+ end
+
+ def test_display_task_run
+ ran = false
+ ARGV.clear
+ ARGV << '-f' << '-s' << '--tasks' << '--rakelib=""'
+ @app.last_description = "COMMENT"
+ @app.define_task(Rake::Task, "default")
+ out, = capture_io { @app.run }
+ assert @app.options.show_tasks
+ assert ! ran
+ assert_match(/rake default/, out)
+ assert_match(/# COMMENT/, out)
+ end
+
+ def test_display_prereqs
+ ran = false
+ ARGV.clear
+ ARGV << '-f' << '-s' << '--prereqs' << '--rakelib=""'
+ @app.last_description = "COMMENT"
+ t = @app.define_task(Rake::Task, "default")
+ t.enhance([:a, :b])
+ @app.define_task(Rake::Task, "a")
+ @app.define_task(Rake::Task, "b")
+ out, = capture_io { @app.run }
+ assert @app.options.show_prereqs
+ assert ! ran
+ assert_match(/rake a$/, out)
+ assert_match(/rake b$/, out)
+ assert_match(/rake default\n( *(a|b)\n){2}/m, out)
+ end
+
+ def test_bad_run
+ @app.intern(Rake::Task, "default").enhance { fail }
+ ARGV.clear
+ ARGV << '-f' << '-s' << '--rakelib=""'
+ assert_raises(SystemExit) {
+ _, err = capture_io { @app.run }
+ assert_match(/see full trace/, err)
+ }
+ ensure
+ ARGV.clear
+ end
+
+ def test_bad_run_with_trace
+ @app.intern(Rake::Task, "default").enhance { fail }
+ ARGV.clear
+ ARGV << '-f' << '-s' << '-t'
+ assert_raises(SystemExit) {
+ _, err = capture_io { @app.run }
+ refute_match(/see full trace/, err)
+ }
+ ensure
+ ARGV.clear
+ end
+
+ def test_run_with_bad_options
+ @app.intern(Rake::Task, "default").enhance { fail }
+ ARGV.clear
+ ARGV << '-f' << '-s' << '--xyzzy'
+ assert_raises(SystemExit) {
+ capture_io { @app.run }
+ }
+ ensure
+ ARGV.clear
+ end
+
+ def test_deprecation_message
+ _, err = capture_io do
+ @app.deprecate("a", "b", "c")
+ end
+ assert_match(/'a' is deprecated/i, err)
+ assert_match(/use 'b' instead/i, err)
+ assert_match(/at c$/i, err)
+ end
+end
+
diff --git a/test/rake/test_rake_application_options.rb b/test/rake/test_rake_application_options.rb
new file mode 100644
index 0000000000..c1471f443e
--- /dev/null
+++ b/test/rake/test_rake_application_options.rb
@@ -0,0 +1,335 @@
+require File.expand_path('../helper', __FILE__)
+
+TESTING_REQUIRE = [ ]
+
+class TestRakeApplicationOptions < Rake::TestCase
+
+ def setup
+ super
+
+ clear_argv
+ Rake::FileUtilsExt.verbose_flag = false
+ Rake::FileUtilsExt.nowrite_flag = false
+ TESTING_REQUIRE.clear
+ end
+
+ def teardown
+ clear_argv
+ Rake::FileUtilsExt.verbose_flag = false
+ Rake::FileUtilsExt.nowrite_flag = false
+
+ super
+ end
+
+ def clear_argv
+ while ! ARGV.empty?
+ ARGV.pop
+ end
+ end
+
+ def test_default_options
+ opts = command_line
+ assert_nil opts.classic_namespace
+ assert_nil opts.dryrun
+ assert_nil opts.ignore_system
+ assert_nil opts.load_system
+ 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_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 |opts|
+ 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 |opts|
+ 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 |opts|
+ 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_libdir
+ flags(['--libdir', 'xx'], ['-I', 'xx'], ['-Ixx']) do |opts|
+ $:.include?('xx')
+ end
+ ensure
+ $:.delete('xx')
+ end
+
+ def test_rakefile
+ flags(['--rakefile', 'RF'], ['--rakefile=RF'], ['-f', 'RF'], ['-fRF']) do |opts|
+ assert_equal ['RF'], @app.instance_eval { @rakefiles }
+ end
+ end
+
+ def test_rakelib
+ flags(['--rakelibdir', 'A:B:C'], ['--rakelibdir=A:B:C'], ['-R', 'A:B:C'], ['-RA:B:C']) 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
+ flags('--quiet', '-q') do |opts|
+ assert ! Rake::FileUtilsExt.verbose_flag
+ assert ! opts.silent
+ end
+ end
+
+ def test_no_search
+ flags('--nosearch', '--no-search', '-N') do |opts|
+ assert opts.nosearch
+ end
+ end
+
+ def test_silent
+ flags('--silent', '-s') do |opts|
+ assert ! Rake::FileUtilsExt.verbose_flag
+ assert opts.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
+ assert Rake::FileUtilsExt.verbose_flag
+ assert ! Rake::FileUtilsExt.nowrite_flag
+ 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)
+ end
+ flags(['--tasks', 'xyz'], ['-Txyz']) do |opts|
+ assert_equal :tasks, opts.show_tasks
+ assert_equal(/xyz/.to_s, opts.show_task_pattern.to_s)
+ 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)
+ end
+ flags(['--where', 'xyz'], ['-Wxyz']) do |opts|
+ assert_equal :lines, opts.show_tasks
+ assert_equal(/xyz/.to_s, opts.show_task_pattern.to_s)
+ end
+ end
+
+ def test_no_deprecated_messages
+ flags('--no-deprecation-warnings', '-X') do |opts|
+ assert opts.ignore_deprecate
+ end
+ end
+
+ def test_verbose
+ out, = capture_io do
+ flags('--verbose', '-V') do |opts|
+ assert Rake::FileUtilsExt.verbose_flag
+ assert ! opts.silent
+ end
+ end
+
+ assert_equal "rake, version #{Rake::VERSION}\n", out
+ end
+
+ def test_version
+ out, = capture_io do
+ flags '--version', '-V'
+ end
+
+ assert_match(/\bversion\b/, out)
+ assert_match(/\b#{RAKEVERSION}\b/, out)
+ assert_equal :exit, @exit
+ end
+
+ def test_classic_namespace
+ _, err = capture_io do
+ flags(['--classic-namespace'],
+ ['-C', '-T', '-P', '-n', '-s', '-t']) do |opts|
+ assert opts.classic_namespace
+ assert_equal opts.show_tasks, $show_tasks
+ assert_equal opts.show_prereqs, $show_prereqs
+ assert_equal opts.trace, $trace
+ assert_equal opts.dryrun, $dryrun
+ assert_equal opts.silent, $silent
+ end
+ end
+
+ assert_match(/deprecated/, err)
+ 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("a", "TESTKEY=12")
+ assert_equal ["a"], @tasks.sort
+ assert '12', ENV['TESTKEY']
+ end
+
+ 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
+ handle_options
+ collect_tasks
+ end
+ @tasks = @app.top_level_tasks
+ @app.options
+ end
+end
+
diff --git a/test/rake/test_clean.rb b/test/rake/test_rake_clean.rb
index 0e8b81c2c7..1541c69359 100644
--- a/test/rake/test_clean.rb
+++ b/test/rake/test_rake_clean.rb
@@ -1,9 +1,11 @@
-require 'test/unit'
+require File.expand_path('../helper', __FILE__)
require 'rake/clean'
-class Rake::TestClean < Test::Unit::TestCase
+class TestRakeClean < Rake::TestCase
include Rake
def test_clean
+ load 'rake/clean.rb', true
+
assert Task['clean'], "Should define clean"
assert Task['clobber'], "Should define clobber"
assert Task['clobber'].prerequisites.include?("clean"),
diff --git a/test/rake/test_definitions.rb b/test/rake/test_rake_definitions.rb
index a5440dcadc..839c40419e 100644
--- a/test/rake/test_definitions.rb
+++ b/test/rake/test_rake_definitions.rb
@@ -1,15 +1,14 @@
-require 'test/unit'
+require File.expand_path('../helper', __FILE__)
require 'fileutils'
-require 'rake'
-require_relative 'filecreation'
-######################################################################
-class Rake::TestDefinitions < Test::Unit::TestCase
+class TestRakeDefinitions < Rake::TestCase
include Rake
- EXISTINGFILE = "testdata/existing"
+ EXISTINGFILE = "existing"
def setup
+ super
+
Task.clear
end
@@ -24,10 +23,10 @@ class Rake::TestDefinitions < Test::Unit::TestCase
def test_file_task
done = false
- file "testdata/one" => "testdata/two" do done = true end
- file "testdata/two"
- file "testdata/three" => ["testdata/one", "testdata/two"]
- check_tasks("testdata/one", "testdata/two", "testdata/three")
+ file "one" => "two" do done = true end
+ file "two"
+ file "three" => ["one", "two"]
+ check_tasks("one", "two", "three")
assert done, "Should be done"
end
@@ -56,8 +55,8 @@ class Rake::TestDefinitions < Test::Unit::TestCase
end
def test_missing_dependencies
- task :x => ["testdata/missing"]
- assert_raise(RuntimeError) { Task[:x].invoke }
+ task :x => ["missing"]
+ assert_raises(RuntimeError) { Task[:x].invoke }
end
def test_implicit_file_dependencies
diff --git a/test/rake/test_rake_directory_task.rb b/test/rake/test_rake_directory_task.rb
new file mode 100644
index 0000000000..7f641f53ca
--- /dev/null
+++ b/test/rake/test_rake_directory_task.rb
@@ -0,0 +1,45 @@
+require File.expand_path('../helper', __FILE__)
+require 'fileutils'
+
+class TestRakeDirectoryTask < Rake::TestCase
+ include Rake
+
+ def test_directory
+ desc "DESC"
+
+ directory "a/b/c"
+
+ assert_equal FileCreationTask, Task["a"].class
+ assert_equal FileCreationTask, Task["a/b"].class
+ assert_equal FileCreationTask, Task["a/b/c"].class
+
+ assert_nil Task["a"].comment
+ assert_nil Task["a/b"].comment
+ assert_equal "DESC", Task["a/b/c"].comment
+
+ verbose(false) {
+ Task['a/b'].invoke
+ }
+
+ assert File.exist?("a/b")
+ refute File.exist?("a/b/c")
+ end
+
+ if Rake::Win32.windows?
+ def test_directory_win32
+ desc "WIN32 DESC"
+ directory 'c:/a/b/c'
+ assert_equal FileCreationTask, Task['c:'].class
+ assert_equal FileCreationTask, Task['c:/a'].class
+ assert_equal FileCreationTask, Task['c:/a/b/c'].class
+ assert_nil Task['c:/'].comment
+ assert_equal "WIN32 DESC", Task['c:/a/b/c'].comment
+ assert_nil Task['c:/a/b'].comment
+ verbose(false) {
+ Task['c:/a/b'].invoke
+ }
+ assert File.exist?('c:/a/b')
+ refute File.exist?('c:/a/b/c')
+ end
+ end
+end
diff --git a/test/rake/test_rake_dsl.rb b/test/rake/test_rake_dsl.rb
new file mode 100644
index 0000000000..294ff2bd0d
--- /dev/null
+++ b/test/rake/test_rake_dsl.rb
@@ -0,0 +1,73 @@
+require File.expand_path('../helper', __FILE__)
+
+class TestRakeDsl < Rake::TestCase
+
+ def setup
+ super
+ Rake::Task.clear
+ end
+
+ def test_namespace_command
+ namespace "n" do
+ task "t"
+ end
+ refute_nil Rake::Task["n:t"]
+ end
+
+ def test_namespace_command_with_bad_name
+ ex = assert_raises(ArgumentError) do
+ namespace 1 do end
+ end
+ assert_match(/string/i, ex.message)
+ assert_match(/symbol/i, ex.message)
+ end
+
+ def test_namespace_command_with_a_string_like_object
+ name = Object.new
+ def name.to_str
+ "bob"
+ end
+ namespace name do
+ task "t"
+ end
+ refute_nil Rake::Task["bob:t"]
+ end
+
+ class Foo
+ def initialize
+ task :foo_deprecated_a => "foo_deprecated_b" do
+ print "a"
+ end
+ file "foo_deprecated_b" do
+ print "b"
+ end
+ end
+ end
+
+ def test_deprecated_object_dsl
+ out, err = capture_io do
+ Foo.new
+ Rake.application.invoke_task :foo_deprecated_a
+ end
+ assert_equal("ba", out)
+ assert_match(/deprecated/, err)
+ assert_match(/Foo\#task/, err)
+ assert_match(/Foo\#file/, err)
+ assert_match(/test_rake_dsl\.rb:\d+/, err)
+ end
+
+ def test_deprecated_object_dsl_with_suppressed_warnings
+ Rake.application.options.ignore_deprecate = true
+ out, err = capture_io do
+ Foo.new
+ Rake.application.invoke_task :foo_deprecated_a
+ end
+ assert_equal("ba", out)
+ refute_match(/deprecated/, err)
+ refute_match(/Foo\#task/, err)
+ refute_match(/Foo\#file/, err)
+ refute_match(/test_rake_dsl\.rb:\d+/, err)
+ ensure
+ Rake.application.options.ignore_deprecate = false
+ end
+end
diff --git a/test/rake/test_earlytime.rb b/test/rake/test_rake_early_time.rb
index d94523cffd..18c4dad324 100644
--- a/test/rake/test_earlytime.rb
+++ b/test/rake/test_rake_early_time.rb
@@ -1,10 +1,8 @@
-require 'test/unit'
-require 'rake'
+require File.expand_path('../helper', __FILE__)
-class Rake::TestEarlyTime < Test::Unit::TestCase
+class TestRakeEarlyTime < Rake::TestCase
def test_create
early = Rake::EarlyTime.instance
- time = Time.mktime(1970, 1, 1, 0, 0, 0)
assert early <= Time.now
assert early < Time.now
assert early != Time.now
diff --git a/test/rake/test_extension.rb b/test/rake/test_rake_extension.rb
index 3b10a4c6ed..18d55f19f9 100644
--- a/test/rake/test_extension.rb
+++ b/test/rake/test_rake_extension.rb
@@ -1,9 +1,7 @@
-require 'test/unit'
-require 'rake'
+require File.expand_path('../helper', __FILE__)
require 'stringio'
-######################################################################
-class Rake::TestExtension < Test::Unit::TestCase
+class TestRakeExtension < Rake::TestCase
module Redirect
def error_redirect
diff --git a/test/rake/test_file_creation_task.rb b/test/rake/test_rake_file_creation_task.rb
index 1f2af90399..d486d2f0d4 100644
--- a/test/rake/test_file_creation_task.rb
+++ b/test/rake/test_rake_file_creation_task.rb
@@ -1,21 +1,17 @@
-require 'test/unit'
+require File.expand_path('../helper', __FILE__)
require 'fileutils'
-require 'rake'
-require_relative 'filecreation'
######################################################################
-class Rake::TestFileCreationTask < Test::Unit::TestCase
+class TestRakeFileCreationTask < Rake::TestCase
include Rake
- include FileCreation
+ include Rake::DSL
- DUMMY_DIR = 'testdata/dummy_dir'
+ DUMMY_DIR = 'dummy_dir'
def setup
- Task.clear
- end
+ super
- def teardown
- FileUtils.rm_rf DUMMY_DIR
+ Task.clear
end
def test_file_needed
diff --git a/test/rake/test_filelist.rb b/test/rake/test_rake_file_list.rb
index 2b1ad44237..08939fb6ed 100644
--- a/test/rake/test_filelist.rb
+++ b/test/rake/test_rake_file_list.rb
@@ -1,28 +1,34 @@
-require 'test/unit'
-require 'tmpdir'
-require 'rake'
+require File.expand_path('../helper', __FILE__)
-require_relative 'capture_stdout'
-
-class Rake::TestFileList < Test::Unit::TestCase
+class TestRakeFileList < Rake::TestCase
FileList = Rake::FileList
- include CaptureStdout
def setup
- @oldwd = Dir.pwd
- @tmpwd = Dir.mktmpdir
- Dir.chdir(@tmpwd)
- create_test_data
- end
+ super
+
+ FileUtils.mkdir "CVS" rescue nil
+ FileUtils.mkdir ".svn" rescue nil
+ @cdir = "cfiles"
+ FileUtils.mkdir @cdir rescue nil
+ FileUtils.touch ".dummy"
+ FileUtils.touch "x.bak"
+ FileUtils.touch "x~"
+ FileUtils.touch "core"
+ FileUtils.touch "x.c"
+ FileUtils.touch "xyz.c"
+ FileUtils.touch "abc.c"
+ FileUtils.touch "abc.h"
+ FileUtils.touch "abc.x"
+ FileUtils.touch "existing"
+
+ open 'xyzzy.txt', 'w' do |io|
+ io.puts 'x'
+ io.puts 'XYZZY'
+ end
- def teardown
-# FileList.select_default_ignore_patterns
- FileUtils.rm_rf("testdata")
- Dir.chdir(@oldwd)
- FileUtils.rm_rf(@tmpwd)
end
- def test_delgating_methods_do_not_include_to_a_or_to_ary
+ def test_delegating_methods_do_not_include_to_a_or_to_ary
assert ! FileList::DELEGATING_METHODS.include?("to_a"), "should not include to_a"
assert ! FileList::DELEGATING_METHODS.include?(:to_a), "should not include to_a"
assert ! FileList::DELEGATING_METHODS.include?("to_ary"), "should not include to_ary"
@@ -35,8 +41,8 @@ class Rake::TestFileList < Test::Unit::TestCase
end
def test_create_with_args
- fl = FileList.new("testdata/*.c", "x")
- assert_equal ["testdata/abc.c", "testdata/x.c", "testdata/xyz.c", "x"].sort,
+ fl = FileList.new("*.c", "x")
+ assert_equal ["abc.c", "x.c", "xyz.c", "x"].sort,
fl.sort
end
@@ -46,14 +52,14 @@ class Rake::TestFileList < Test::Unit::TestCase
end
def test_create_with_brackets
- fl = FileList["testdata/*.c", "x"]
- assert_equal ["testdata/abc.c", "testdata/x.c", "testdata/xyz.c", "x"].sort,
+ fl = FileList["*.c", "x"]
+ assert_equal ["abc.c", "x.c", "xyz.c", "x"].sort,
fl.sort
end
def test_create_with_brackets_and_filelist
- fl = FileList[FileList["testdata/*.c", "x"]]
- assert_equal ["testdata/abc.c", "testdata/x.c", "testdata/xyz.c", "x"].sort,
+ fl = FileList[FileList["*.c", "x"]]
+ assert_equal ["abc.c", "x.c", "xyz.c", "x"].sort,
fl.sort
end
@@ -63,8 +69,8 @@ class Rake::TestFileList < Test::Unit::TestCase
end
def test_include_with_another_filelist
- fl = FileList.new.include(FileList["testdata/*.c", "x"])
- assert_equal ["testdata/abc.c", "testdata/x.c", "testdata/xyz.c", "x"].sort,
+ fl = FileList.new.include(FileList["*.c", "x"])
+ assert_equal ["abc.c", "x.c", "xyz.c", "x"].sort,
fl.sort
end
@@ -92,86 +98,87 @@ class Rake::TestFileList < Test::Unit::TestCase
def test_match
fl = FileList.new
- fl.include(File.expand_path('../test*.rb', __FILE__))
- assert fl.include?(__FILE__)
- assert fl.size > 3
- fl.each { |fn| assert_match(/\.rb$/, fn) }
+ fl.include '*.c'
+
+ assert_equal %w[abc.c x.c xyz.c], fl.sort
end
def test_add_matching
fl = FileList.new
fl << "a.java"
- fl.include(File.dirname(__FILE__)+"/*.rb")
- assert_equal "a.java", fl[0]
- assert fl.size > 2
- assert fl.include?(__FILE__)
+ fl.include '*.c'
+
+ assert_equal %w[a.java abc.c x.c xyz.c], fl.sort
end
def test_multiple_patterns
- create_test_data
fl = FileList.new
- fl.include('*.c', '*xist*')
+ fl.include('*.z', '*foo*')
+
assert_equal [], fl
- fl.include('testdata/*.c', 'testdata/*xist*')
- assert_equal [
- 'testdata/x.c', 'testdata/xyz.c', 'testdata/abc.c', 'testdata/existing'
- ].sort, fl.sort
+
+ fl.include('*.c', '*xist*')
+ assert_equal %w[x.c xyz.c abc.c existing].sort, fl.sort
end
def test_square_bracket_pattern
fl = FileList.new
- fl.include("testdata/abc.[ch]")
+ fl.include("abc.[ch]")
assert fl.size == 2
- assert fl.include?("testdata/abc.c")
- assert fl.include?("testdata/abc.h")
+ assert fl.include?("abc.c")
+ assert fl.include?("abc.h")
end
def test_curly_bracket_pattern
fl = FileList.new
- fl.include("testdata/abc.{c,h}")
+ fl.include("abc.{c,h}")
assert fl.size == 2
- assert fl.include?("testdata/abc.c")
- assert fl.include?("testdata/abc.h")
+ assert fl.include?("abc.c")
+ assert fl.include?("abc.h")
end
def test_reject
fl = FileList.new
- fl.include %w(testdata/x.c testdata/abc.c testdata/xyz.c testdata/existing)
- fl.reject! { |fn| fn =~ %r{/x} }
- assert_equal [
- 'testdata/abc.c', 'testdata/existing'
- ], fl
+ fl.include %w(x.c abc.c xyz.c existing)
+ fl.reject! { |fn| fn =~ /^x/ }
+ assert_equal %w[abc.c existing], fl
end
def test_exclude
- fl = FileList['testdata/x.c', 'testdata/abc.c', 'testdata/xyz.c', 'testdata/existing']
+ fl = FileList['x.c', 'abc.c', 'xyz.c', 'existing']
fl.each { |fn| touch fn, :verbose => false }
- x = fl.exclude(%r{/x.+\.})
+
+ x = fl.exclude(%r{^x.+\.})
+
assert_equal FileList, x.class
- assert_equal %w(testdata/x.c testdata/abc.c testdata/existing), fl
+ assert_equal %w(x.c abc.c existing), fl
assert_equal fl.object_id, x.object_id
- fl.exclude('testdata/*.c')
- assert_equal ['testdata/existing'], fl
- fl.exclude('testdata/existing')
+
+ fl.exclude('*.c')
+
+ assert_equal ['existing'], fl
+
+ fl.exclude('existing')
+
assert_equal [], fl
end
def test_excluding_via_block
- fl = FileList['testdata/a.c', 'testdata/b.c', 'testdata/xyz.c']
+ fl = FileList['a.c', 'b.c', 'xyz.c']
fl.exclude { |fn| fn.pathmap('%n') == 'xyz' }
assert fl.exclude?("xyz.c"), "Should exclude xyz.c"
- assert_equal ['testdata/a.c', 'testdata/b.c'], fl
+ assert_equal ['a.c', 'b.c'], fl
end
def test_exclude_return_on_create
- fl = FileList['testdata/*'].exclude(/.*\.[hcx]$/)
- assert_equal ['testdata/existing', 'testdata/cfiles'].sort, fl.sort
+ fl = FileList['*'].exclude(/.*\.[hcx]$/)
+ assert_equal %w[cfiles existing xyzzy.txt], fl.sort
assert_equal FileList, fl.class
end
def test_exclude_with_string_return_on_create
- fl = FileList['testdata/*'].exclude('testdata/abc.c')
- assert_equal %w(testdata/existing testdata/cfiles testdata/x.c testdata/abc.h testdata/abc.x testdata/xyz.c).sort, fl.sort
+ fl = FileList['*'].exclude('abc.c')
+ assert_equal %w[abc.h abc.x cfiles existing x.c xyz.c xyzzy.txt], fl.sort
assert_equal FileList, fl.class
end
@@ -179,8 +186,8 @@ class Rake::TestFileList < Test::Unit::TestCase
fl = FileList.new
fl.clear_exclude
fl.include("**/*~", "**/*.bak", "**/core")
- assert fl.member?("testdata/core"), "Should include core"
- assert fl.member?("testdata/x.bak"), "Should include .bak files"
+ assert fl.member?("core"), "Should include core"
+ assert fl.member?("x.bak"), "Should include .bak files"
end
def test_unique
@@ -207,54 +214,54 @@ class Rake::TestFileList < Test::Unit::TestCase
end
def test_to_s_pending
- fl = FileList['testdata/abc.*']
+ fl = FileList['abc.*']
result = fl.to_s
- assert_match(%r{testdata/abc\.c}, result)
- assert_match(%r{testdata/abc\.h}, result)
- assert_match(%r{testdata/abc\.x}, result)
- assert_match(%r{(testdata/abc\..\b ?){2}}, result)
+ assert_match(%r{abc\.c}, result)
+ assert_match(%r{abc\.h}, result)
+ assert_match(%r{abc\.x}, result)
+ assert_match(%r{(abc\..\b ?){2}}, result)
end
def test_inspect_pending
- fl = FileList['testdata/abc.*']
+ fl = FileList['abc.*']
result = fl.inspect
- assert_match(%r{"testdata/abc\.c"}, result)
- assert_match(%r{"testdata/abc\.h"}, result)
- assert_match(%r{"testdata/abc\.x"}, result)
- assert_match(%r|^\[("testdata/abc\..", ){2}"testdata/abc\.."\]$|, result)
+ assert_match(%r{"abc\.c"}, result)
+ assert_match(%r{"abc\.h"}, result)
+ assert_match(%r{"abc\.x"}, result)
+ assert_match(%r|^\[("abc\..", ){2}"abc\.."\]$|, result)
end
def test_sub
- fl = FileList["testdata/*.c"]
+ fl = FileList["*.c"]
f2 = fl.sub(/\.c$/, ".o")
assert_equal FileList, f2.class
- assert_equal ["testdata/abc.o", "testdata/x.o", "testdata/xyz.o"].sort,
+ assert_equal ["abc.o", "x.o", "xyz.o"].sort,
f2.sort
f3 = fl.gsub(/\.c$/, ".o")
assert_equal FileList, f3.class
- assert_equal ["testdata/abc.o", "testdata/x.o", "testdata/xyz.o"].sort,
+ assert_equal ["abc.o", "x.o", "xyz.o"].sort,
f3.sort
end
def test_claim_to_be_a_kind_of_array
- fl = FileList['testdata/*.c']
+ fl = FileList['*.c']
assert fl.is_a?(Array)
assert fl.kind_of?(Array)
end
def test_claim_to_be_a_kind_of_filelist
- fl = FileList['testdata/*.c']
+ fl = FileList['*.c']
assert fl.is_a?(FileList)
assert fl.kind_of?(FileList)
end
def test_claim_to_be_a_filelist_instance
- fl = FileList['testdata/*.c']
+ fl = FileList['*.c']
assert fl.instance_of?(FileList)
end
def test_dont_claim_to_be_an_array_instance
- fl = FileList['testdata/*.c']
+ fl = FileList['*.c']
assert ! fl.instance_of?(Array)
end
@@ -310,73 +317,89 @@ class Rake::TestFileList < Test::Unit::TestCase
end
def test_gsub
- create_test_data
- fl = FileList["testdata/*.c"]
+ fl = FileList["*.c"]
f2 = fl.gsub(/a/, "A")
- assert_equal ["testdAtA/Abc.c", "testdAtA/x.c", "testdAtA/xyz.c"].sort,
+ assert_equal ["Abc.c", "x.c", "xyz.c"].sort,
f2.sort
end
def test_gsub!
- create_test_data
- f = FileList["testdata/*.c"]
+ f = FileList["*.c"]
f.gsub!(/a/, "A")
- assert_equal ["testdAtA/Abc.c", "testdAtA/x.c", "testdAtA/xyz.c"].sort,
+ assert_equal ["Abc.c", "x.c", "xyz.c"].sort,
f.sort
end
+ def test_egrep_returns_0_if_no_matches
+ files = FileList['test/lib/*_test.rb'].exclude("test/lib/filelist_test.rb")
+ assert_equal 0, files.egrep(/XYZZY/) { }
+ end
+
def test_egrep_with_output
- files = FileList[File.expand_path('../test*.rb', __FILE__)]
- the_line_number = __LINE__ + 1
- out = capture_stdout do files.egrep(/PUGH/) end
- assert_match(/:#{the_line_number}:/, out)
+ files = FileList['*.txt']
+
+ out, = capture_io do
+ files.egrep(/XYZZY/)
+ end
+
+ assert_equal "xyzzy.txt:2:XYZZY\n", out
end
def test_egrep_with_block
- files = FileList[File.expand_path('../test*.rb', __FILE__)]
- found = false
- the_line_number = __LINE__ + 1
- files.egrep(/XYZZY/) do |fn, ln, line |
- assert_equal __FILE__, fn
- assert_equal the_line_number, ln
- assert_match(/files\.egrep/, line)
- found = true
+ files = FileList['*.txt']
+ found = nil
+
+ files.egrep(/XYZZY/) do |fn, ln, line|
+ found = [fn, ln, line]
+ end
+
+ assert_equal ["xyzzy.txt", 2, "XYZZY\n"], found
+ end
+
+ def test_egrep_with_error
+ files = FileList['*.txt']
+
+ _, err = capture_io do
+ files.egrep(/XYZZY/) do |fn, ln, line |
+ raise "_EGREP_FAILURE_"
+ end
end
- assert found, "should have found a matching line"
+
+ assert_equal "Error while processing 'xyzzy.txt': _EGREP_FAILURE_\n", err
end
def test_existing
- fl = FileList['testdata/abc.c', 'testdata/notthere.c']
- assert_equal ["testdata/abc.c"], fl.existing
+ fl = FileList['abc.c', 'notthere.c']
+ assert_equal ["abc.c"], fl.existing
assert fl.existing.is_a?(FileList)
end
def test_existing!
- fl = FileList['testdata/abc.c', 'testdata/notthere.c']
+ fl = FileList['abc.c', 'notthere.c']
result = fl.existing!
- assert_equal ["testdata/abc.c"], fl
+ assert_equal ["abc.c"], fl
assert_equal fl.object_id, result.object_id
end
def test_ignore_special
- f = FileList['testdata/*']
- assert ! f.include?("testdata/CVS"), "Should not contain CVS"
- assert ! f.include?("testdata/.svn"), "Should not contain .svn"
- assert ! f.include?("testdata/.dummy"), "Should not contain dot files"
- assert ! f.include?("testdata/x.bak"), "Should not contain .bak files"
- assert ! f.include?("testdata/x~"), "Should not contain ~ files"
- assert ! f.include?("testdata/core"), "Should not contain core files"
+ f = FileList['*']
+ assert ! f.include?("CVS"), "Should not contain CVS"
+ assert ! f.include?(".svn"), "Should not contain .svn"
+ assert ! f.include?(".dummy"), "Should not contain dot files"
+ assert ! f.include?("x.bak"), "Should not contain .bak files"
+ assert ! f.include?("x~"), "Should not contain ~ files"
+ assert ! f.include?("core"), "Should not contain core files"
end
def test_clear_ignore_patterns
- f = FileList['testdata/*', 'testdata/.svn']
+ f = FileList['*', '.svn']
f.clear_exclude
- assert f.include?("testdata/abc.c")
- assert f.include?("testdata/xyz.c")
- assert f.include?("testdata/CVS")
- assert f.include?("testdata/.svn")
- assert f.include?("testdata/x.bak")
- assert f.include?("testdata/x~")
+ assert f.include?("abc.c")
+ assert f.include?("xyz.c")
+ assert f.include?("CVS")
+ assert f.include?(".svn")
+ assert f.include?("x.bak")
+ assert f.include?("x~")
end
def test_exclude_with_alternate_file_seps
@@ -414,8 +437,8 @@ class Rake::TestFileList < Test::Unit::TestCase
end
def test_flatten
- assert_equal ['a', 'testdata/x.c', 'testdata/xyz.c', 'testdata/abc.c'].sort,
- ['a', FileList['testdata/*.c']].flatten.sort
+ assert_equal ['a', 'x.c', 'xyz.c', 'abc.c'].sort,
+ ['a', FileList['*.c']].flatten.sort
end
def test_clone_and_dup
@@ -449,7 +472,7 @@ class Rake::TestFileList < Test::Unit::TestCase
a = FileList['a', 'b', 'c']
a.freeze
c = a.clone
- assert_raise(TypeError, RuntimeError) do
+ assert_raises(TypeError, RuntimeError) do
c << 'more'
end
end
@@ -592,7 +615,7 @@ class Rake::TestFileList < Test::Unit::TestCase
end
def test_file_utils_can_use_filelists
- cfiles = FileList['testdata/*.c']
+ cfiles = FileList['*.c']
cp cfiles, @cdir, :verbose => false
@@ -601,25 +624,5 @@ class Rake::TestFileList < Test::Unit::TestCase
assert File.exist?(File.join(@cdir, 'x.c'))
end
- def create_test_data
- verbose(false) do
-
- mkdir "testdata" unless File.exist? "testdata"
- mkdir "testdata/CVS" rescue nil
- mkdir "testdata/.svn" rescue nil
- @cdir = "testdata/cfiles"
- mkdir @cdir rescue nil
- touch "testdata/.dummy"
- touch "testdata/x.bak"
- touch "testdata/x~"
- touch "testdata/core"
- touch "testdata/x.c"
- touch "testdata/xyz.c"
- touch "testdata/abc.c"
- touch "testdata/abc.h"
- touch "testdata/abc.x"
- touch "testdata/existing"
- end
- end
-
end
+
diff --git a/test/rake/test_rake_file_list_path_map.rb b/test/rake/test_rake_file_list_path_map.rb
new file mode 100644
index 0000000000..5935dc2689
--- /dev/null
+++ b/test/rake/test_rake_file_list_path_map.rb
@@ -0,0 +1,8 @@
+require File.expand_path('../helper', __FILE__)
+
+class TestRakeFileListPathMap < Rake::TestCase
+ def test_file_list_supports_pathmap
+ assert_equal ['a', 'b'], FileList['dir/a.rb', 'dir/b.rb'].pathmap("%n")
+ end
+end
+
diff --git a/test/rake/test_file_task.rb b/test/rake/test_rake_file_task.rb
index 132bd88853..e586551237 100644
--- a/test/rake/test_file_task.rb
+++ b/test/rake/test_rake_file_task.rb
@@ -1,14 +1,12 @@
-require 'test/unit'
+require File.expand_path('../helper', __FILE__)
require 'fileutils'
-require 'rake'
-require_relative 'filecreation'
-######################################################################
-class Rake::TestFileTask < Test::Unit::TestCase
+class TestRakeFileTask < Rake::TestCase
include Rake
- include FileCreation
def setup
+ super
+
Task.clear
@runs = Array.new
FileUtils.rm_f NEWFILE
@@ -16,22 +14,26 @@ class Rake::TestFileTask < Test::Unit::TestCase
end
def test_file_need
- name = "testdata/dummy"
+ name = "dummy"
file name
+
ftask = Task[name]
+
assert_equal name.to_s, ftask.name
File.delete(ftask.name) rescue nil
+
assert ftask.needed?, "file should be needed"
+
open(ftask.name, "w") { |f| f.puts "HI" }
+
assert_equal nil, ftask.prerequisites.collect{|n| Task[n].timestamp}.max
assert ! ftask.needed?, "file should not be needed"
+ ensure
File.delete(ftask.name) rescue nil
end
def test_file_times_new_depends_on_old
- until File.exist?(OLDFILE) && File.exist?(NEWFILE)
- create_timed_files(OLDFILE, NEWFILE)
- end
+ create_timed_files(OLDFILE, NEWFILE)
t1 = Rake.application.intern(FileTask, NEWFILE).enhance([OLDFILE])
t2 = Rake.application.intern(FileTask, OLDFILE)
@@ -40,9 +42,7 @@ class Rake::TestFileTask < Test::Unit::TestCase
end
def test_file_times_old_depends_on_new
- until File.exist?(OLDFILE) && File.exist?(NEWFILE)
- create_timed_files(OLDFILE, NEWFILE)
- end
+ create_timed_files(OLDFILE, NEWFILE)
t1 = Rake.application.intern(FileTask,OLDFILE).enhance([NEWFILE])
t2 = Rake.application.intern(FileTask, NEWFILE)
@@ -66,11 +66,19 @@ class Rake::TestFileTask < Test::Unit::TestCase
end
def test_existing_file_depends_on_non_existing_file
+ @ran = false
+
create_file(OLDFILE)
delete_file(NEWFILE)
- file NEWFILE
+ file NEWFILE do
+ @ran = true
+ end
+
file OLDFILE => NEWFILE
- assert_nothing_raised do Task[OLDFILE].invoke end
+
+ Task[OLDFILE].invoke
+
+ assert @ran
end
# I have currently disabled this test. I'm not convinced that
@@ -92,52 +100,3 @@ class Rake::TestFileTask < Test::Unit::TestCase
end
-######################################################################
-class Rake::TestDirectoryTask < Test::Unit::TestCase
- include Rake
-
- def setup
- rm_rf "testdata2", :verbose=>false
- end
-
- def teardown
- rm_rf "testdata2", :verbose=>false
- end
-
- def test_directory
- desc "DESC"
- directory "testdata2/a/b/c"
- assert_equal FileCreationTask, Task["testdata2"].class
- assert_equal FileCreationTask, Task["testdata2/a"].class
- assert_equal FileCreationTask, Task["testdata2/a/b/c"].class
- assert_nil Task["testdata2"].comment
- assert_equal "DESC", Task["testdata2/a/b/c"].comment
- assert_nil Task["testdata2/a/b"].comment
- verbose(false) {
- Task['testdata2/a/b'].invoke
- }
- assert File.exist?("testdata2/a/b")
- assert ! File.exist?("testdata2/a/b/c")
- end
-
- if Rake::Win32.windows?
- def test_directory_win32
- desc "WIN32 DESC"
- FileUtils.mkdir_p("testdata2")
- Dir.chdir("testdata2") do
- directory 'c:/testdata2/a/b/c'
- assert_equal FileCreationTask, Task['c:/testdata2'].class
- assert_equal FileCreationTask, Task['c:/testdata2/a'].class
- assert_equal FileCreationTask, Task['c:/testdata2/a/b/c'].class
- assert_nil Task['c:/testdata2'].comment
- assert_equal "WIN32 DESC", Task['c:/testdata2/a/b/c'].comment
- assert_nil Task['c:/testdata2/a/b'].comment
- verbose(false) {
- Task['c:/testdata2/a/b'].invoke
- }
- assert File.exist?('c:/testdata2/a/b')
- assert ! File.exist?('c:/testdata2/a/b/c')
- end
- end
- end
-end
diff --git a/test/rake/test_fileutils.rb b/test/rake/test_rake_file_utils.rb
index b6106c0978..fb7a4a5307 100644
--- a/test/rake/test_fileutils.rb
+++ b/test/rake/test_rake_file_utils.rb
@@ -1,65 +1,47 @@
-require 'rake'
-require 'test/unit'
-require_relative 'filecreation'
+require File.expand_path('../helper', __FILE__)
require 'fileutils'
require 'stringio'
-class Rake::TestFileUtils < Test::Unit::TestCase
- include FileCreation
- BASEDIR = File.dirname(__FILE__)
- ShellCommand = "#{BASEDIR}/shellcommand.rb"
- ENV_RUBY = ENV['RUBY']
-
- def setup
- if ruby = ENV_RUBY
- @oldruby = FileUtils.class_eval {remove_const :RUBY}
- FileUtils.class_eval {const_set(:RUBY, ruby)}
- else
- @oldruby = nil
- end
- end
+class TestRakeFileUtils < Rake::TestCase
def teardown
- FileUtils.rm_rf("testdata")
FileUtils::LN_SUPPORTED[0] = true
- if @oldruby
- ruby = @oldruby
- FileUtils.class_eval {remove_const :RUBY}
- FileUtils.class_eval {const_set(:RUBY, ruby)}
- end
+
+ super
end
def test_rm_one_file
- create_file("testdata/a")
- FileUtils.rm_rf "testdata/a"
- assert ! File.exist?("testdata/a")
+ create_file("a")
+ FileUtils.rm_rf "a"
+ refute File.exist?("a")
end
def test_rm_two_files
- create_file("testdata/a")
- create_file("testdata/b")
- FileUtils.rm_rf ["testdata/a", "testdata/b"]
- assert ! File.exist?("testdata/a")
- assert ! File.exist?("testdata/b")
+ create_file("a")
+ create_file("b")
+ FileUtils.rm_rf ["a", "b"]
+ refute File.exist?("a")
+ refute File.exist?("b")
end
def test_rm_filelist
- list = Rake::FileList.new << "testdata/a" << "testdata/b"
+ list = Rake::FileList.new << "a" << "b"
list.each { |fn| create_file(fn) }
FileUtils.rm_r list
- assert ! File.exist?("testdata/a")
- assert ! File.exist?("testdata/b")
+ refute File.exist?("a")
+ refute File.exist?("b")
end
def test_ln
- create_dir("testdata")
- open("testdata/a", "w") { |f| f.puts "TEST_LN" }
- RakeFileUtils.safe_ln("testdata/a", "testdata/b", :verbose => false)
- assert_equal "TEST_LN\n", open("testdata/b") { |f| f.read }
+ open("a", "w") { |f| f.puts "TEST_LN" }
+
+ Rake::FileUtilsExt.safe_ln("a", "b", :verbose => false)
+
+ assert_equal "TEST_LN\n", File.read('b')
end
class BadLink
- include RakeFileUtils
+ include Rake::FileUtilsExt
attr_reader :cp_args
def initialize(klass)
@failure_class = klass
@@ -92,7 +74,7 @@ class Rake::TestFileUtils < Test::Unit::TestCase
def test_safe_ln_fails_on_script_error
FileUtils::LN_SUPPORTED[0] = true
c = BadLink.new(ScriptError)
- assert_raise(ScriptError) do c.safe_ln "a", "b" end
+ assert_raises(ScriptError) do c.safe_ln "a", "b" end
end
def test_verbose
@@ -118,21 +100,21 @@ class Rake::TestFileUtils < Test::Unit::TestCase
end
def test_file_utils_methods_are_available_at_top_level
- create_file("testdata/a")
- verbose(false) do
- rm_rf "testdata/a"
- end
- assert ! File.exist?("testdata/a")
+ create_file("a")
+ rm_rf "a"
+ refute File.exist?("a")
end
def test_fileutils_methods_dont_leak
obj = Object.new
- assert_raise(NoMethodError) { obj.copy } # from FileUtils
- assert_raise(NoMethodError) { obj.ruby } # from RubyFileUtils
+ assert_raises(NoMethodError) { obj.copy } # from FileUtils
+ assert_raises(NoMethodError) { obj.ruby "-v" } # from RubyFileUtils
end
def test_sh
- verbose(false) { sh %{#{RUBY} #{ShellCommand}} }
+ shellcommand
+
+ verbose(false) { sh %{#{FileUtils::RUBY} shellcommand.rb} }
assert true, "should not fail"
end
@@ -148,37 +130,48 @@ class Rake::TestFileUtils < Test::Unit::TestCase
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 %{#{RUBY} #{BASEDIR}/check_expansion.rb #{env_var} someval}
+ sh %{#{FileUtils::RUBY} check_expansion.rb #{env_var} someval}
}
end
def test_sh_with_multiple_arguments
+ check_no_expansion
ENV['RAKE_TEST_SH'] = 'someval'
+
verbose(false) {
- Sh.run RUBY, File.expand_path('../check_no_expansion.rb', __FILE__), env_var, 'someval'
+ Sh.ruby 'check_no_expansion.rb', env_var, 'someval'
}
end
def test_sh_failure
- assert_raise(RuntimeError) {
- verbose(false) { Sh.run "#{RUBY} #{File.expand_path('../shellcommand.rb', __FILE__)} 1" }
+ shellcommand
+
+ assert_raises(RuntimeError) {
+ verbose(false) { Sh.run %{#{FileUtils::RUBY} shellcommand.rb 1} }
}
end
def test_sh_special_handling
+ shellcommand
+
count = 0
verbose(false) {
- sh(%{#{RUBY} #{ShellCommand}}) do |ok, res|
+ sh(%{#{FileUtils::RUBY} shellcommand.rb}) do |ok, res|
assert(ok)
assert_equal 0, res.exitstatus
count += 1
end
- sh(%{#{RUBY} #{ShellCommand} 1}) do |ok, res|
+ sh(%{#{FileUtils::RUBY} shellcommand.rb 1}) do |ok, res|
assert(!ok)
assert_equal 1, res.exitstatus
count += 1
@@ -188,75 +181,113 @@ class Rake::TestFileUtils < Test::Unit::TestCase
end
def test_sh_noop
- verbose(false) { sh %{#{ShellCommand} 1}, :noop=>true }
+ shellcommand
+
+ verbose(false) { sh %{shellcommand.rb 1}, :noop=>true }
assert true, "should not fail"
end
def test_sh_bad_option
- ex = assert_raise(ArgumentError) {
- verbose(false) { sh %{#{ShellCommand}}, :bad_option=>true }
+ shellcommand
+
+ ex = assert_raises(ArgumentError) {
+ verbose(false) { sh %{shellcommand.rb}, :bad_option=>true }
}
assert_match(/bad_option/, ex.message)
end
def test_sh_verbose
- out = redirect_stderr {
+ shellcommand
+
+ _, err = capture_io do
verbose(true) {
- sh %{#{ShellCommand}}, :noop=>true
+ sh %{shellcommand.rb}, :noop=>true
}
- }
- assert_match(/^#{Regexp.quote(ShellCommand)}$/o, out)
+ end
+
+ assert_equal "shellcommand.rb\n", err
end
def test_sh_no_verbose
- out = redirect_stderr {
+ shellcommand
+
+ _, err = capture_io do
verbose(false) {
- sh %{#{ShellCommand}}, :noop=>true
+ sh %{shellcommand.rb}, :noop=>true
}
- }
- assert_equal '', out
+ end
+
+ assert_equal '', err
end
def test_ruby_with_a_single_string_argument
+ check_expansion
+
ENV['RAKE_TEST_SH'] = 'someval'
+
verbose(false) {
- ruby %{#{BASEDIR}/check_expansion.rb #{env_var} someval}
+ ruby %{check_expansion.rb #{env_var} someval}
}
end
def test_ruby_with_multiple_arguments
+ check_no_expansion
+
ENV['RAKE_TEST_SH'] = 'someval'
verbose(false) {
- ruby "#{BASEDIR}/check_no_expansion.rb", env_var, 'someval'
+ ruby 'check_no_expansion.rb', env_var, 'someval'
}
end
def test_split_all
- assert_equal ['a'], RakeFileUtils.split_all('a')
- assert_equal ['..'], RakeFileUtils.split_all('..')
- assert_equal ['/'], RakeFileUtils.split_all('/')
- assert_equal ['a', 'b'], RakeFileUtils.split_all('a/b')
- assert_equal ['/', 'a', 'b'], RakeFileUtils.split_all('/a/b')
- assert_equal ['..', 'a', 'b'], RakeFileUtils.split_all('../a/b')
+ assert_equal ['a'], Rake::FileUtilsExt.split_all('a')
+ assert_equal ['..'], Rake::FileUtilsExt.split_all('..')
+ assert_equal ['/'], Rake::FileUtilsExt.split_all('/')
+ assert_equal ['a', 'b'], Rake::FileUtilsExt.split_all('a/b')
+ assert_equal ['/', 'a', 'b'], Rake::FileUtilsExt.split_all('/a/b')
+ assert_equal ['..', 'a', 'b'], Rake::FileUtilsExt.split_all('../a/b')
end
- private
+ def command name, text
+ open name, 'w', 0750 do |io|
+ io << text
+ end
+ end
- def redirect_stderr
- old_err = $stderr
- $stderr = StringIO.new
- yield
- $stderr.string
- ensure
- $stderr = old_err
+ def check_no_expansion
+ command 'check_no_expansion.rb', <<-CHECK_EXPANSION
+if ARGV[0] != ARGV[1]
+ exit 0
+else
+ exit 1
+end
+ CHECK_EXPANSION
end
- def windows?
- ! File::ALT_SEPARATOR.nil?
+ def check_expansion
+ command 'check_expansion.rb', <<-CHECK_EXPANSION
+if ARGV[0] != ARGV[1]
+ exit 1
+else
+ exit 0
+end
+ CHECK_EXPANSION
+ end
+
+ def shellcommand
+ command 'shellcommand.rb', <<-SHELLCOMMAND
+#!/usr/bin/env ruby
+
+exit((ARGV[0] || "0").to_i)
+ SHELLCOMMAND
end
def env_var
windows? ? '%RAKE_TEST_SH%' : '$RAKE_TEST_SH'
end
+ def windows?
+ ! File::ALT_SEPARATOR.nil?
+ end
+
end
diff --git a/test/rake/contrib/test_ftp.rb b/test/rake/test_rake_ftp_file.rb
index 0346dd71ca..7f41faf0dd 100644
--- a/test/rake/contrib/test_ftp.rb
+++ b/test/rake/test_rake_ftp_file.rb
@@ -1,19 +1,22 @@
+require File.expand_path('../helper', __FILE__)
require 'date'
require 'time'
-require 'test/unit'
require 'rake/contrib/ftptools'
-class Rake::TestFtpFile < Test::Unit::TestCase
- class FakeDate
- def self.today
- Date.new(2003,10,3)
- end
- def self.now
- Time.local(2003,10,3,12,00,00)
- end
+class FakeDate
+ def self.today
+ Date.new(2003,10,3)
end
+ def self.now
+ Time.local(2003,10,3,12,00,00)
+ end
+end
+
+class TestRakeFtpFile < Rake::TestCase
def setup
+ super
+
Rake::FtpFile.class_eval { @date_class = FakeDate; @time_class = FakeDate }
end
@@ -53,3 +56,4 @@ class Rake::TestFtpFile < Test::Unit::TestCase
assert !file.directory?
end
end
+
diff --git a/test/rake/test_rake_functional.rb b/test/rake/test_rake_functional.rb
new file mode 100644
index 0000000000..e27d3cf68b
--- /dev/null
+++ b/test/rake/test_rake_functional.rb
@@ -0,0 +1,514 @@
+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
+
+class TestRakeFunctional < Rake::TestCase
+
+ def setup
+ @rake_path = File.expand_path("bin/rake")
+ lib_path = File.expand_path("lib")
+ @ruby_options = ["-I#{lib_path}", "-I."]
+ @verbose = ENV['VERBOSE']
+
+ if @verbose
+ puts
+ puts
+ puts '-' * 80
+ puts @__name__
+ puts '-' * 80
+ end
+
+ super
+ end
+
+ def test_rake_default
+ rakefile_default
+
+ rake
+
+ assert_match(/^DEFAULT$/, @out)
+ assert_status
+ end
+
+ def test_rake_error_on_bad_task
+ rakefile_default
+
+ rake "xyz"
+
+ assert_match(/rake aborted/, @err)
+ assert_status(1)
+ end
+
+ def test_env_available_at_top_scope
+ rakefile_default
+
+ rake "TESTTOPSCOPE=1"
+
+ assert_match(/^TOPSCOPE$/, @out)
+ assert_status
+ end
+
+ def test_env_available_at_task_scope
+ rakefile_default
+
+ rake "TESTTASKSCOPE=1 task_scope"
+
+ assert_match(/^TASKSCOPE$/, @out)
+ assert_status
+ end
+
+ def test_multi_desc
+ ENV['RAKE_COLUMNS'] = '80'
+ rakefile_multidesc
+
+ rake "-T"
+
+ assert_match %r{^rake a *# A / A2 *$}, @out
+ assert_match %r{^rake b *# B *$}, @out
+ refute_match %r{^rake c}, @out
+ assert_match %r{^rake d *# x{65}\.\.\.$}, @out
+ end
+
+ def test_long_description
+ rakefile_multidesc
+
+ rake "--describe"
+
+ assert_match %r{^rake a\n *A / A2 *$}m, @out
+ assert_match %r{^rake b\n *B *$}m, @out
+ assert_match %r{^rake d\n *x{80}}m, @out
+ refute_match %r{^rake c\n}m, @out
+ end
+
+ def test_proper_namespace_access
+ rakefile_access
+
+ rake
+
+ assert_not_match %r{^BAD:}, @out
+ end
+
+ def test_rbext
+ rakefile_rbext
+
+ rake "-N"
+
+ assert_match %r{^OK$}, @out
+ end
+
+ def test_system
+ rake_system_dir
+
+ rake '-g', "sys1"
+
+ assert_match %r{^SYS1}, @out
+ end
+
+ def test_system_excludes_rakelib_files_too
+ rake_system_dir
+
+ rake '-g', "sys1", '-T', 'extra'
+
+ refute_match %r{extra:extra}, @out
+ end
+
+ def test_by_default_rakelib_files_are_included
+ rake_system_dir
+ rakefile_extra
+
+ rake '-T', 'extra', '--trace'
+
+ assert_match %r{extra:extra}, @out
+ end
+
+ def test_implicit_system
+ rake_system_dir
+ Dir.chdir @tempdir
+
+ rake "sys1", "--trace"
+
+ assert_match %r{^SYS1}, @out
+ end
+
+ def test_no_system
+ rake_system_dir
+ rakefile_extra
+
+ rake '-G', "sys1"
+
+ assert_match %r{^Don't know how to build task}, @err # emacs wart: '
+ end
+
+ def test_nosearch_with_rakefile_uses_local_rakefile
+ rakefile_default
+
+ rake "--nosearch"
+
+ assert_match %r{^DEFAULT}, @out
+ end
+
+ def test_nosearch_without_rakefile_finds_system
+ rakefile_nosearch
+ rake_system_dir
+
+ rake "--nosearch", "sys1"
+
+ assert_match %r{^SYS1}, @out
+ end
+
+ def test_nosearch_without_rakefile_and_no_system_fails
+ rakefile_nosearch
+ ENV['RAKE_SYSTEM'] = 'not_exist'
+
+ rake "--nosearch"
+
+ assert_match %r{^No Rakefile found}, @err
+ end
+
+ def test_invalid_command_line_options
+ rakefile_default
+
+ rake "--bad-options"
+
+ assert_match %r{invalid +option}i, @err
+ end
+
+ def test_inline_verbose_default_should_show_command
+ rakefile_verbose
+
+ rake "inline_verbose_default"
+
+ assert_match(/ruby -e/, @err)
+ end
+
+ def test_inline_verbose_true_should_show_command
+ rakefile_verbose
+
+ rake "inline_verbose_true"
+
+ assert_match(/ruby -e/, @err)
+ end
+
+ def test_inline_verbose_false_should_not_show_command
+ rakefile_verbose
+
+ rake "inline_verbose_false"
+
+ refute_match(/ruby -e/, @err)
+ end
+
+ def test_block_verbose_false_should_not_show_command
+ rakefile_verbose
+
+ rake "block_verbose_false"
+
+ refute_match(/ruby -e/, @err)
+ end
+
+ def test_block_verbose_true_should_show_command
+ rakefile_verbose
+
+ rake "block_verbose_true"
+
+ assert_match(/ruby -e/, @err)
+ end
+
+ def test_standalone_verbose_true_should_show_command
+ rakefile_verbose
+
+ rake "standalone_verbose_true"
+
+ assert_match(/ruby -e/, @err)
+ end
+
+ def test_standalone_verbose_false_should_not_show_command
+ rakefile_verbose
+
+ rake "standalone_verbose_false"
+
+ refute_match(/ruby -e/, @err)
+ end
+
+ def test_dry_run
+ rakefile_default
+
+ rake "-n", "other"
+
+ assert_match %r{Execute \(dry run\) default}, @err
+ assert_match %r{Execute \(dry run\) other}, @err
+ refute_match %r{DEFAULT}, @out
+ refute_match %r{OTHER}, @out
+ end
+
+ # Test for the trace/dry_run bug found by Brian Chandler
+ def test_dry_run_bug
+ rakefile_dryrun
+
+ rake
+
+ FileUtils.rm_f 'temp_one'
+
+ rake "--dry-run"
+
+ refute_match(/No such file/, @out)
+
+ assert_status
+ end
+
+ # Test for the trace/dry_run bug found by Brian Chandler
+ def test_trace_bug
+ rakefile_dryrun
+
+ rake
+
+ FileUtils.rm_f 'temp_one'
+
+ rake "--trace"
+
+ refute_match(/No such file/, @out)
+ assert_status
+ end
+
+ def test_imports
+ rakefile_imports
+
+ rake
+
+ 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
+ rakefile_chains
+
+ rake
+
+ assert File.exist?(File.join(@tempdir, 'play.app')),
+ "'play.app' file should exist"
+ assert_status
+ end
+
+ def test_file_creation_task
+ rakefile_file_creation
+
+ rake "prep"
+ rake "run"
+ rake "run"
+
+ assert(@err !~ /^cp src/, "Should not recopy data")
+ end
+
+ def test_dash_f_with_no_arg_foils_rakefile_lookup
+ rakefile_rakelib
+
+ rake "-I rakelib -rtest1 -f"
+
+ assert_match(/^TEST1$/, @out)
+ end
+
+ def test_dot_rake_files_can_be_loaded_with_dash_r
+ rakefile_rakelib
+
+ rake "-I rakelib -rtest2 -f"
+
+ assert_match(/^TEST2$/, @out)
+ end
+
+ def test_can_invoke_task_in_toplevel_namespace
+ rakefile_namespace
+
+ rake "copy"
+
+ assert_match(/^COPY$/, @out)
+ end
+
+ def test_can_invoke_task_in_nested_namespace
+ rakefile_namespace
+
+ rake "nest:copy"
+
+ assert_match(/^NEST COPY$/, @out)
+ end
+
+ def test_tasks_can_reference_task_in_same_namespace
+ rakefile_namespace
+
+ rake "nest:xx"
+
+ assert_match(/^NEST COPY$/m, @out)
+ end
+
+ def test_tasks_can_reference_task_in_other_namespaces
+ rakefile_namespace
+
+ rake "b:run"
+
+ assert_match(/^IN A\nIN B$/m, @out)
+ end
+
+ def test_anonymous_tasks_can_be_invoked_indirectly
+ rakefile_namespace
+
+ rake "anon"
+
+ assert_match(/^ANON COPY$/m, @out)
+ end
+
+ def test_rake_namespace_refers_to_toplevel
+ rakefile_namespace
+
+ rake "very:nested:run"
+
+ assert_match(/^COPY$/m, @out)
+ end
+
+ def test_file_task_are_not_scoped_by_namespaces
+ rakefile_namespace
+
+ rake "xyz.rb"
+
+ assert_match(/^XYZ1\nXYZ2$/m, @out)
+ end
+
+ def test_file_task_dependencies_scoped_by_namespaces
+ rakefile_namespace
+
+ rake "scopedep.rb"
+
+ 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
+
+ rake "-T"
+
+ refute_match(/comment for t1/, @out)
+ end
+
+ def test_comment_separated_from_task_by_blank_line_is_not_picked_up
+ rakefile_comments
+
+ rake "-T"
+
+ assert_not_match("t2", @out)
+ end
+
+ def test_comment_after_desc_is_ignored
+ rakefile_comments
+
+ rake "-T"
+
+ assert_match("override comment for t3", @out)
+ end
+
+ def test_comment_before_desc_is_ignored
+ rakefile_comments
+
+ rake "-T"
+
+ assert_match("override comment for t4", @out)
+ end
+
+ def test_correct_number_of_tasks_reported
+ rakefile_comments
+
+ rake "-T"
+
+ assert_equal(2, @out.split(/\n/).grep(/t\d/).size)
+ end
+
+ def test_file_list_is_requirable_separately
+ ruby "-rrake/file_list", "-e 'puts Rake::FileList[\"a\"].size'"
+ assert_equal "1\n", @out
+ assert_equal 0, @status
+ end
+
+ private
+
+ def assert_not_match(pattern, string, comment="'#{pattern}' was found (incorrectly) in '#{string}.inspect")
+ assert_nil Regexp.new(pattern).match(string), comment
+ end
+
+ # Run a shell Ruby command with command line options (using the
+ # default test options). Output is captured in @out, @err and
+ # @status.
+ 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.
+ 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 "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)
diff --git a/test/rake/test_rake_invocation_chain.rb b/test/rake/test_rake_invocation_chain.rb
new file mode 100644
index 0000000000..1aab1eac81
--- /dev/null
+++ b/test/rake/test_rake_invocation_chain.rb
@@ -0,0 +1,52 @@
+require File.expand_path('../helper', __FILE__)
+
+class TestRakeInvocationChain < Rake::TestCase
+
+ def setup
+ super
+
+ @empty = Rake::InvocationChain::EMPTY
+
+ @first_member = "A"
+ @second_member = "B"
+ @one = @empty.append(@first_member)
+ @two = @one.append(@second_member)
+ end
+
+ def test_append
+ chain = @empty.append("A")
+
+ assert_equal 'TOP => A', chain.to_s # HACK
+ end
+
+ def test_append_one_circular
+ ex = assert_raises RuntimeError do
+ @one.append(@first_member)
+ end
+ assert_match(/circular +dependency/i, ex.message)
+ assert_match(/A.*=>.*A/, ex.message)
+ end
+
+ def test_append_two_circular
+ ex = assert_raises RuntimeError do
+ @two.append(@first_member)
+ end
+ assert_match(/A.*=>.*B.*=>.*A/, ex.message)
+ end
+
+ def test_member_eh_one
+ assert @one.member?(@first_member)
+ end
+
+ def test_member_eh_two
+ assert @two.member?(@first_member)
+ assert @two.member?(@second_member)
+ end
+
+ def test_to_s_empty
+ assert_equal "TOP", @empty.to_s
+ assert_equal "TOP => A", @one.to_s
+ end
+
+end
+
diff --git a/test/rake/test_makefile_loader.rb b/test/rake/test_rake_makefile_loader.rb
index 15933b1f9b..bd3c99ba71 100644
--- a/test/rake/test_makefile_loader.rb
+++ b/test/rake/test_rake_makefile_loader.rb
@@ -1,14 +1,34 @@
-require 'test/unit'
-require 'rake'
+require File.expand_path('../helper', __FILE__)
require 'rake/loaders/makefile'
-class Rake::TestMakefileLoader < Test::Unit::TestCase
+class TestRakeMakefileLoader < Rake::TestCase
include Rake
def test_parse
+ Dir.chdir @tempdir
+
+ open 'sample.mf', 'w' do |io|
+ io << <<-'SAMPLE_MF'
+# Comments
+a: a1 a2 a3 a4
+b: b1 b2 b3 \
+ b4 b5 b6\
+# Mid: Comment
+b7
+
+ a : a5 a6 a7
+c: c1
+d: d1 d2 \
+
+e f : e1 f1
+
+g\ 0: g1 g\ 2 g\ 3 g4
+ SAMPLE_MF
+ end
+
Task.clear
loader = Rake::MakefileLoader.new
- loader.load("#{File.dirname(__FILE__)}/data/sample.mf")
+ loader.load 'sample.mf'
%w(a b c d).each do |t|
assert Task.task_defined?(t), "#{t} should be a defined task"
end
diff --git a/test/rake/test_multitask.rb b/test/rake/test_rake_multi_task.rb
index 0413d03db3..cac235b9d3 100644
--- a/test/rake/test_multitask.rb
+++ b/test/rake/test_rake_multi_task.rb
@@ -1,18 +1,27 @@
-require 'test/unit'
-require 'rake'
+require File.expand_path('../helper', __FILE__)
+require 'thread'
-######################################################################
-class Rake::TestMultiTask < Test::Unit::TestCase
+class TestRakeMultiTask < Rake::TestCase
include Rake
+ include Rake::DSL
def setup
+ super
+
Task.clear
@runs = Array.new
+ @mutex = Mutex.new
+ end
+
+ def add_run(obj)
+ @mutex.synchronize do
+ @runs << obj
+ end
end
def test_running_multitasks
- task :a do 3.times do |i| @runs << "A#{i}"; sleep 0.01; end end
- task :b do 3.times do |i| @runs << "B#{i}"; sleep 0.01; end end
+ task :a do 3.times do |i| add_run("A#{i}"); sleep 0.01; end end
+ task :b do 3.times do |i| add_run("B#{i}"); sleep 0.01; end end
multitask :both => [:a, :b]
Task[:both].invoke
assert_equal 6, @runs.size
@@ -23,9 +32,9 @@ class Rake::TestMultiTask < Test::Unit::TestCase
end
def test_all_multitasks_wait_on_slow_prerequisites
- task :slow do 3.times do |i| @runs << "S#{i}"; sleep 0.05 end end
- task :a => [:slow] do 3.times do |i| @runs << "A#{i}"; sleep 0.01 end end
- task :b => [:slow] do 3.times do |i| @runs << "B#{i}"; sleep 0.01 end end
+ task :slow do 3.times do |i| add_run("S#{i}"); sleep 0.05 end end
+ task :a => [:slow] do 3.times do |i| add_run("A#{i}"); sleep 0.01 end end
+ task :b => [:slow] do 3.times do |i| add_run("B#{i}"); sleep 0.01 end end
multitask :both => [:a, :b]
Task[:both].invoke
assert_equal 9, @runs.size
@@ -40,4 +49,3 @@ class Rake::TestMultiTask < Test::Unit::TestCase
end
end
-
diff --git a/test/rake/test_namespace.rb b/test/rake/test_rake_name_space.rb
index bd513b6a10..b1f2ed00b2 100644
--- a/test/rake/test_namespace.rb
+++ b/test/rake/test_rake_name_space.rb
@@ -1,7 +1,6 @@
-require 'test/unit'
-require 'rake'
+require File.expand_path('../helper', __FILE__)
-class Rake::TestNameSpace < Test::Unit::TestCase
+class TestRakeNameSpace < Rake::TestCase
class TM
include Rake::TaskManager
@@ -10,7 +9,7 @@ class Rake::TestNameSpace < Test::Unit::TestCase
def test_namespace_creation
mgr = TM.new
ns = Rake::NameSpace.new(mgr, [])
- assert_not_nil ns
+ refute_nil ns
end
def test_namespace_lookup
@@ -19,7 +18,7 @@ class Rake::TestNameSpace < Test::Unit::TestCase
mgr.define_task(Rake::Task, "t")
end
- assert_not_nil ns["t"]
+ refute_nil ns["t"]
assert_equal mgr["n:t"], ns["t"]
end
diff --git a/test/rake/test_rake_package_task.rb b/test/rake/test_rake_package_task.rb
new file mode 100644
index 0000000000..87cb57c105
--- /dev/null
+++ b/test/rake/test_rake_package_task.rb
@@ -0,0 +1,79 @@
+require File.expand_path('../helper', __FILE__)
+require 'rake/packagetask'
+
+class TestRakePackageTask < Rake::TestCase
+
+ def test_initialize
+ touch 'install.rb'
+ touch 'a.c'
+ touch 'b.c'
+ mkdir 'CVS'
+ touch 'a.rb~'
+
+ pkg = Rake::PackageTask.new("pkgr", "1.2.3") { |p|
+ p.package_files << "install.rb"
+ p.package_files.include '*.c'
+ p.package_files.exclude(/\bCVS\b/)
+ p.package_files.exclude(/~$/)
+ p.package_dir = 'pkg'
+ p.need_tar = true
+ p.need_tar_gz = true
+ p.need_tar_bz2 = true
+ p.need_zip = true
+ }
+
+ assert_equal "pkg", pkg.package_dir
+
+ assert_includes pkg.package_files, 'a.c'
+
+ assert_equal 'pkgr', pkg.name
+ assert_equal '1.2.3', pkg.version
+ assert Rake::Task[:package]
+ assert Rake::Task['pkg/pkgr-1.2.3.tgz']
+ assert Rake::Task['pkg/pkgr-1.2.3.tar.gz']
+ assert Rake::Task['pkg/pkgr-1.2.3.tar.bz2']
+ assert Rake::Task['pkg/pkgr-1.2.3.zip']
+ assert Rake::Task['pkg/pkgr-1.2.3']
+ assert Rake::Task[:clobber_package]
+ assert Rake::Task[:repackage]
+ end
+
+ def test_initialize_no_version
+ e = assert_raises RuntimeError do
+ Rake::PackageTask.new 'pkgr'
+ end
+
+ assert_equal 'Version required (or :noversion)', e.message
+ end
+
+ def test_initialize_noversion
+ pkg = Rake::PackageTask.new 'pkgr', :noversion
+
+ assert_equal 'pkg', pkg.package_dir
+ assert_equal 'pkgr', pkg.name
+ assert_equal nil, pkg.version
+ end
+
+ def test_clone
+ pkg = Rake::PackageTask.new("x", :noversion)
+ p2 = pkg.clone
+ pkg.package_files << "y"
+ p2.package_files << "x"
+ assert_equal ["y"], pkg.package_files
+ assert_equal ["x"], p2.package_files
+ end
+
+ def test_package_name
+ pkg = Rake::PackageTask.new 'a', '1'
+
+ assert_equal 'a-1', pkg.package_name
+ end
+
+ def test_package_name_noversion
+ pkg = Rake::PackageTask.new 'a', :noversion
+
+ assert_equal 'a', pkg.package_name
+ end
+
+end
+
diff --git a/test/rake/test_pathmap.rb b/test/rake/test_rake_path_map.rb
index 2775b91039..32ffb854b1 100644
--- a/test/rake/test_pathmap.rb
+++ b/test/rake/test_rake_path_map.rb
@@ -1,8 +1,6 @@
-require 'test/unit'
-require 'rake'
+require File.expand_path('../helper', __FILE__)
-# ====================================================================
-class Rake::TestPathMap < Test::Unit::TestCase
+class TestRakePathMap < Rake::TestCase
def test_returns_self_with_no_args
assert_equal "abc.rb", "abc.rb".pathmap
@@ -84,7 +82,7 @@ class Rake::TestPathMap < Test::Unit::TestCase
end
def test_undefined_percent_causes_error
- ex = assert_raise(ArgumentError) {
+ assert_raises(ArgumentError) {
"dir/abc.rb".pathmap("%z")
}
end
@@ -128,7 +126,7 @@ class Rake::TestPathMap < Test::Unit::TestCase
end
def test_pattern_with_invalid_operator
- ex = assert_raise(ArgumentError) do
+ ex = assert_raises(ArgumentError) do
"abc.xyz".pathmap("%{src,bin}z")
end
assert_match(/unknown.*pathmap.*spec.*z/i, ex.message)
@@ -157,51 +155,3 @@ class Rake::TestPathMap < Test::Unit::TestCase
end
end
-class Rake::TestPathMapExplode < Test::Unit::TestCase
- def setup
- String.class_eval { public :pathmap_explode }
- end
-
- def teardown
- String.class_eval { protected :pathmap_explode }
- end
-
- def test_explode
- assert_equal ['a'], 'a'.pathmap_explode
- assert_equal ['a', 'b'], 'a/b'.pathmap_explode
- assert_equal ['a', 'b', 'c'], 'a/b/c'.pathmap_explode
- assert_equal ['/', 'a'], '/a'.pathmap_explode
- assert_equal ['/', 'a', 'b'], '/a/b'.pathmap_explode
- assert_equal ['/', 'a', 'b', 'c'], '/a/b/c'.pathmap_explode
- if File::ALT_SEPARATOR
- assert_equal ['c:.', 'a'], 'c:a'.pathmap_explode
- assert_equal ['c:.', 'a', 'b'], 'c:a/b'.pathmap_explode
- assert_equal ['c:.', 'a', 'b', 'c'], 'c:a/b/c'.pathmap_explode
- assert_equal ['c:/', 'a'], 'c:/a'.pathmap_explode
- assert_equal ['c:/', 'a', 'b'], 'c:/a/b'.pathmap_explode
- assert_equal ['c:/', 'a', 'b', 'c'], 'c:/a/b/c'.pathmap_explode
- end
- end
-end
-
-class Rake::TestPathMapPartial < Test::Unit::TestCase
- def test_pathmap_partial
- @path = "1/2/file"
- def @path.call(n)
- pathmap_partial(n)
- end
- assert_equal("1", @path.call(1))
- assert_equal("1/2", @path.call(2))
- assert_equal("1/2", @path.call(3))
- assert_equal(".", @path.call(0))
- assert_equal("2", @path.call(-1))
- assert_equal("1/2", @path.call(-2))
- assert_equal("1/2", @path.call(-3))
- end
-end
-
-class Rake::TestFileListPathMap < Test::Unit::TestCase
- def test_file_list_supports_pathmap
- assert_equal ['a', 'b'], FileList['dir/a.rb', 'dir/b.rb'].pathmap("%n")
- end
-end
diff --git a/test/rake/test_rake_path_map_explode.rb b/test/rake/test_rake_path_map_explode.rb
new file mode 100644
index 0000000000..a79235ee74
--- /dev/null
+++ b/test/rake/test_rake_path_map_explode.rb
@@ -0,0 +1,34 @@
+require File.expand_path('../helper', __FILE__)
+
+class TestRakePathMapExplode < Rake::TestCase
+ def setup
+ super
+
+ String.class_eval { public :pathmap_explode }
+ end
+
+ def teardown
+ String.class_eval { protected :pathmap_explode }
+
+ super
+ end
+
+ def test_explode
+ assert_equal ['a'], 'a'.pathmap_explode
+ assert_equal ['a', 'b'], 'a/b'.pathmap_explode
+ assert_equal ['a', 'b', 'c'], 'a/b/c'.pathmap_explode
+ assert_equal ['/', 'a'], '/a'.pathmap_explode
+ assert_equal ['/', 'a', 'b'], '/a/b'.pathmap_explode
+ assert_equal ['/', 'a', 'b', 'c'], '/a/b/c'.pathmap_explode
+
+ if File::ALT_SEPARATOR
+ assert_equal ['c:.', 'a'], 'c:a'.pathmap_explode
+ assert_equal ['c:.', 'a', 'b'], 'c:a/b'.pathmap_explode
+ assert_equal ['c:.', 'a', 'b', 'c'], 'c:a/b/c'.pathmap_explode
+ assert_equal ['c:/', 'a'], 'c:/a'.pathmap_explode
+ assert_equal ['c:/', 'a', 'b'], 'c:/a/b'.pathmap_explode
+ assert_equal ['c:/', 'a', 'b', 'c'], 'c:/a/b/c'.pathmap_explode
+ end
+ end
+end
+
diff --git a/test/rake/test_rake_path_map_partial.rb b/test/rake/test_rake_path_map_partial.rb
new file mode 100644
index 0000000000..566e681bb1
--- /dev/null
+++ b/test/rake/test_rake_path_map_partial.rb
@@ -0,0 +1,18 @@
+require File.expand_path('../helper', __FILE__)
+
+class TestRakePathMapPartial < Rake::TestCase
+ def test_pathmap_partial
+ @path = "1/2/file"
+ def @path.call(n)
+ pathmap_partial(n)
+ end
+ assert_equal("1", @path.call(1))
+ assert_equal("1/2", @path.call(2))
+ assert_equal("1/2", @path.call(3))
+ assert_equal(".", @path.call(0))
+ assert_equal("2", @path.call(-1))
+ assert_equal("1/2", @path.call(-2))
+ assert_equal("1/2", @path.call(-3))
+ end
+end
+
diff --git a/test/rake/test_pseudo_status.rb b/test/rake/test_rake_pseudo_status.rb
index 8bafd5f80a..51b3fef34e 100644
--- a/test/rake/test_pseudo_status.rb
+++ b/test/rake/test_rake_pseudo_status.rb
@@ -1,23 +1,21 @@
-require 'test/unit'
-require 'rake'
+require File.expand_path('../helper', __FILE__)
-require_relative 'capture_stdout'
-
-class Rake::TestPseudoStatus < Test::Unit::TestCase
+class TestRakePseudoStatus < Rake::TestCase
def test_with_zero_exit_status
s = Rake::PseudoStatus.new
assert_equal 0, s.exitstatus
assert_equal 0, s.to_i
assert_equal 0, s >> 8
- assert ! s.stopped?
+ refute s.stopped?
assert s.exited?
end
+
def test_with_99_exit_status
s = Rake::PseudoStatus.new(99)
assert_equal 99, s.exitstatus
assert_equal 25344, s.to_i
assert_equal 99, s >> 8
- assert ! s.stopped?
+ refute s.stopped?
assert s.exited?
end
end
diff --git a/test/rake/test_rake_rdoc_task.rb b/test/rake/test_rake_rdoc_task.rb
new file mode 100644
index 0000000000..0d24ef04a3
--- /dev/null
+++ b/test/rake/test_rake_rdoc_task.rb
@@ -0,0 +1,83 @@
+require File.expand_path('../helper', __FILE__)
+begin
+ old_stderr = $stderr
+ dev_null = File.exist?('/dev/null') ? '/dev/null' : 'NUL'
+ $stderr = open dev_null, 'w'
+ require 'rake/rdoctask'
+ensure
+ $stderr.close
+ $stderr = old_stderr
+end
+
+class TestRakeRDocTask < Rake::TestCase
+ include Rake
+
+ def setup
+ super
+
+ Task.clear
+ end
+
+ def test_tasks_creation
+ Rake::RDocTask.new
+ assert Task[:rdoc]
+ assert Task[:clobber_rdoc]
+ assert Task[:rerdoc]
+ end
+
+ def test_tasks_creation_with_custom_name_symbol
+ rd = Rake::RDocTask.new(:rdoc_dev)
+ assert Task[:rdoc_dev]
+ assert Task[:clobber_rdoc_dev]
+ assert Task[:rerdoc_dev]
+ assert_equal :rdoc_dev, rd.name
+ end
+
+ def test_tasks_creation_with_custom_name_string
+ rd = Rake::RDocTask.new("rdoc_dev")
+ assert Task[:rdoc_dev]
+ assert Task[:clobber_rdoc_dev]
+ assert Task[:rerdoc_dev]
+ assert_equal "rdoc_dev", rd.name
+ end
+
+ def test_tasks_creation_with_custom_name_hash
+ options = { :rdoc => "rdoc", :clobber_rdoc => "rdoc:clean", :rerdoc => "rdoc:force" }
+ rd = Rake::RDocTask.new(options)
+ assert Task[:"rdoc"]
+ assert Task[:"rdoc:clean"]
+ assert Task[:"rdoc:force"]
+ assert_raises(RuntimeError) { Task[:clobber_rdoc] }
+ assert_equal options, rd.name
+ end
+
+ def test_tasks_creation_with_custom_name_hash_will_use_default_if_an_option_isnt_given
+ Rake::RDocTask.new(:clobber_rdoc => "rdoc:clean")
+ assert Task[:rdoc]
+ assert Task[:"rdoc:clean"]
+ assert Task[:rerdoc]
+ end
+
+ def test_tasks_creation_with_custom_name_hash_raises_exception_if_invalid_option_given
+ assert_raises(ArgumentError) do
+ Rake::RDocTask.new(:foo => "bar")
+ end
+
+ begin
+ Rake::RDocTask.new(:foo => "bar")
+ rescue ArgumentError => e
+ assert_match(/foo/, e.message)
+ end
+ end
+
+ def test_inline_source_option_is_only_appended_if_option_not_already_given
+ rd = Rake::RDocTask.new
+ rd.options << '--inline-source'
+ assert_equal 1, rd.option_list.grep('--inline-source').size
+
+ rd = Rake::RDocTask.new
+ rd.options << '-S'
+ assert_equal 1, rd.option_list.grep('-S').size
+ assert_equal 0, rd.option_list.grep('--inline-source').size
+ end
+end
diff --git a/test/rake/test_rake_require.rb b/test/rake/test_rake_require.rb
new file mode 100644
index 0000000000..d229edbc2b
--- /dev/null
+++ b/test/rake/test_rake_require.rb
@@ -0,0 +1,40 @@
+require File.expand_path('../helper', __FILE__)
+
+class TestRakeRequire < Rake::TestCase
+
+ def test_can_load_rake_library
+ rakefile_rakelib
+ app = Rake::Application.new
+
+ assert app.instance_eval {
+ rake_require("test2", ['rakelib'], [])
+ }
+ end
+
+ def test_wont_reload_rake_library
+ rakefile_rakelib
+ app = Rake::Application.new
+
+ paths = ['rakelib']
+ loaded_files = []
+ app.rake_require("test2", paths, loaded_files)
+
+ assert ! app.instance_eval {
+ rake_require("test2", paths, loaded_files)
+ }
+ end
+
+ def test_throws_error_if_library_not_found
+ rakefile_rakelib
+
+ app = Rake::Application.new
+ ex = assert_raises(LoadError) {
+ assert app.instance_eval {
+ rake_require("testx", ['rakelib'], [])
+ }
+ }
+ assert_match(/(can *not|can't)\s+find/i, ex.message)
+ assert_match(/testx/, ex.message)
+ end
+end
+
diff --git a/test/rake/test_rules.rb b/test/rake/test_rake_rules.rb
index 34df180ff4..3f6e352322 100644
--- a/test/rake/test_rules.rb
+++ b/test/rake/test_rake_rules.rb
@@ -1,36 +1,23 @@
-require 'test/unit'
-require 'tmpdir'
+require File.expand_path('../helper', __FILE__)
require 'fileutils'
-require 'rake'
-require_relative 'filecreation'
-######################################################################
-class Rake::TestRules < Test::Unit::TestCase
+class TestRakeRules < Rake::TestCase
include Rake
- include FileCreation
- SRCFILE = "testdata/abc.c"
- SRCFILE2 = "testdata/xyz.c"
- FTNFILE = "testdata/abc.f"
- OBJFILE = "testdata/abc.o"
- FOOFILE = "testdata/foo"
- DOTFOOFILE = "testdata/.foo"
+ SRCFILE = "abc.c"
+ SRCFILE2 = "xyz.c"
+ FTNFILE = "abc.f"
+ OBJFILE = "abc.o"
+ FOOFILE = "foo"
+ DOTFOOFILE = ".foo"
def setup
- @oldpwd = Dir.pwd
- @tmpdir = Dir.mktmpdir("rake")
- Dir.chdir(@tmpdir)
- Dir.mkdir("testdata")
+ super
+
Task.clear
@runs = []
end
- def teardown
- FileList['testdata/{*,.[^.]*,}'].uniq.each do |f| rm_r(f, :verbose=>false) end
- Dir.chdir(@oldpwd)
- Dir.rmdir(@tmpdir)
- end
-
def test_multiple_rules1
create_file(FTNFILE)
delete_file(SRCFILE)
@@ -100,81 +87,70 @@ class Rake::TestRules < Test::Unit::TestCase
assert_equal [OBJFILE], @runs
end
- def test_file_names_beginning_with_dot_can_be_tricked_into_refering_to_file
+ def test_file_names_beginning_with_dot_can_be_tricked_into_referring_to_file
verbose(false) do
- chdir("testdata") do
- create_file('.foo')
- rule '.o' => "./.foo" do |t|
- @runs << t.name
- end
- Task[OBJFILE].invoke
- assert_equal [OBJFILE], @runs
+ create_file('.foo')
+ rule '.o' => "./.foo" do |t|
+ @runs << t.name
end
+ Task[OBJFILE].invoke
+ assert_equal [OBJFILE], @runs
end
end
def test_file_names_beginning_with_dot_can_be_wrapped_in_lambda
verbose(false) do
- chdir("testdata") do
- create_file(".foo")
- rule '.o' => lambda{".foo"} do |t|
- @runs << "#{t.name} - #{t.source}"
- end
- Task[OBJFILE].invoke
- assert_equal ["#{OBJFILE} - .foo"], @runs
+
+ create_file(".foo")
+ rule '.o' => lambda{".foo"} do |t|
+ @runs << "#{t.name} - #{t.source}"
end
+ Task[OBJFILE].invoke
+ assert_equal ["#{OBJFILE} - .foo"], @runs
end
end
def test_file_names_containing_percent_can_be_wrapped_in_lambda
verbose(false) do
- chdir("testdata") do
- create_file("foo%x")
- rule '.o' => lambda{"foo%x"} do |t|
- @runs << "#{t.name} - #{t.source}"
- end
- Task[OBJFILE].invoke
- assert_equal ["#{OBJFILE} - foo%x"], @runs
+ create_file("foo%x")
+ rule '.o' => lambda{"foo%x"} do |t|
+ @runs << "#{t.name} - #{t.source}"
end
+ Task[OBJFILE].invoke
+ assert_equal ["#{OBJFILE} - foo%x"], @runs
end
end
def test_non_extension_rule_name_refers_to_file
verbose(false) do
- chdir("testdata") do
- create_file("abc.c")
- rule "abc" => '.c' do |t|
- @runs << t.name
- end
- Task["abc"].invoke
- assert_equal ["abc"], @runs
+ create_file("abc.c")
+ rule "abc" => '.c' do |t|
+ @runs << t.name
end
+ Task["abc"].invoke
+ assert_equal ["abc"], @runs
end
end
def test_pathmap_automatically_applies_to_name
verbose(false) do
- chdir("testdata") do
- create_file("zzabc.c")
- rule ".o" => 'zz%{x,a}n.c' do |t|
- @runs << "#{t.name} - #{t.source}"
- end
- Task["xbc.o"].invoke
- assert_equal ["xbc.o - zzabc.c"], @runs
+ create_file("zzabc.c")
+ rule ".o" => 'zz%{x,a}n.c' do |t|
+ @runs << "#{t.name} - #{t.source}"
end
+ Task["xbc.o"].invoke
+ assert_equal ["xbc.o - zzabc.c"], @runs
end
end
def test_plain_strings_are_just_filenames
verbose(false) do
- chdir("testdata") do
- create_file("plainname")
- rule ".o" => 'plainname' do |t|
- @runs << "#{t.name} - #{t.source}"
- end
- Task["xbc.o"].invoke
- assert_equal ["xbc.o - plainname"], @runs
+ create_file("plainname")
+ rule ".o" => 'plainname' do |t|
+ @runs << "#{t.name} - #{t.source}"
end
+ Task["xbc.o"].invoke
+ assert_equal ["xbc.o - plainname"], @runs
end
end
@@ -191,12 +167,12 @@ class Rake::TestRules < Test::Unit::TestCase
end
def test_close_matches_on_name_do_not_trigger_rule
- create_file("testdata/x.c")
+ create_file("x.c")
rule '.o' => ['.c'] do |t|
@runs << t.name
end
- assert_raise(RuntimeError) { Task['testdata/x.obj'].invoke }
- assert_raise(RuntimeError) { Task['testdata/x.xyo'].invoke }
+ assert_raises(RuntimeError) { Task['x.obj'].invoke }
+ assert_raises(RuntimeError) { Task['x.xyo'].invoke }
end
def test_rule_rebuilds_obj_when_source_is_newer
@@ -281,27 +257,26 @@ class Rake::TestRules < Test::Unit::TestCase
end
def test_rule_with_proc_dependent_will_trigger
- ran = false
- mkdir_p("testdata/src/jw")
- create_file("testdata/src/jw/X.java")
+ mkdir_p("src/jw")
+ create_file("src/jw/X.java")
rule %r(classes/.*\.class) => [
- proc { |fn| fn.pathmap("%{classes,testdata/src}d/%n.java") }
+ proc { |fn| fn.pathmap("%{classes,src}d/%n.java") }
] do |task|
assert_equal task.name, 'classes/jw/X.class'
- assert_equal task.source, 'testdata/src/jw/X.java'
+ assert_equal task.source, 'src/jw/X.java'
@runs << :RULE
end
Task['classes/jw/X.class'].invoke
assert_equal [:RULE], @runs
ensure
- rm_r("testdata/src", :verbose=>false) rescue nil
+ rm_r("src", :verbose=>false) rescue nil
end
def test_proc_returning_lists_are_flattened_into_prereqs
ran = false
- mkdir_p("testdata/flatten")
- create_file("testdata/flatten/a.txt")
- task 'testdata/flatten/b.data' do |t|
+ mkdir_p("flatten")
+ create_file("flatten/a.txt")
+ task 'flatten/b.data' do |t|
ran = true
touch t.name, :verbose => false
end
@@ -309,43 +284,43 @@ class Rake::TestRules < Test::Unit::TestCase
proc { |fn|
[
fn.ext("txt"),
- "testdata/flatten/b.data"
+ "flatten/b.data"
]
} do |task|
end
- Task['testdata/flatten/a.html'].invoke
+ Task['flatten/a.html'].invoke
assert ran, "Should have triggered flattened dependency"
ensure
- rm_r("testdata/flatten", :verbose=>false) rescue nil
+ rm_r("flatten", :verbose=>false) rescue nil
end
def test_recursive_rules_will_work_as_long_as_they_terminate
actions = []
- create_file("testdata/abc.xml")
+ create_file("abc.xml")
rule '.y' => '.xml' do actions << 'y' end
rule '.c' => '.y' do actions << 'c'end
rule '.o' => '.c' do actions << 'o'end
rule '.exe' => '.o' do actions << 'exe'end
- Task["testdata/abc.exe"].invoke
+ Task["abc.exe"].invoke
assert_equal ['y', 'c', 'o', 'exe'], actions
end
def test_recursive_rules_that_dont_terminate_will_overflow
- create_file("testdata/a.a")
+ create_file("a.a")
prev = 'a'
('b'..'z').each do |letter|
rule ".#{letter}" => ".#{prev}" do |t| puts "#{t.name}" end
prev = letter
end
- ex = assert_raise(Rake::RuleRecursionOverflowError) {
- Task["testdata/a.z"].invoke
+ ex = assert_raises(Rake::RuleRecursionOverflowError) {
+ Task["a.z"].invoke
}
- assert_match(/a\.z => testdata\/a.y/, ex.message)
+ assert_match(/a\.z => a.y/, ex.message)
end
def test_rules_with_bad_dependents_will_fail
rule "a" => [ 1 ] do |t| puts t.name end
- assert_raise(RuntimeError) do Task['a'].invoke end
+ assert_raises(RuntimeError) do Task['a'].invoke end
end
end
diff --git a/test/rake/test_tasks.rb b/test/rake/test_rake_task.rb
index 110ee26a9e..ebbcb2ac2d 100644
--- a/test/rake/test_tasks.rb
+++ b/test/rake/test_rake_task.rb
@@ -1,16 +1,20 @@
-require 'test/unit'
+require File.expand_path('../helper', __FILE__)
require 'fileutils'
-require 'rake'
-require_relative 'filecreation'
-require_relative 'capture_stdout'
-######################################################################
-class Rake::TestTasks < Test::Unit::TestCase
- include CaptureStdout
+class TestRakeTask < Rake::TestCase
include Rake
def setup
+ super
+
Task.clear
+ Rake::TaskManager.record_task_metadata = true
+ end
+
+ def teardown
+ Rake::TaskManager.record_task_metadata = false
+
+ super
end
def test_create
@@ -23,10 +27,13 @@ class Rake::TestTasks < Test::Unit::TestCase
assert_equal t, arg
assert_nil t.source
assert_equal [], t.sources
+ assert_equal 1, t.locations.size
+ assert_match(/#{Regexp.quote(__FILE__)}/, t.locations.first)
end
def test_inspect
- t = task(:foo, :needs => [:bar, :baz])
+# t = task(:foo, :needs => [:bar, :baz])
+ t = task(:foo => [:bar, :baz])
assert_equal "<Rake::Task foo => [bar, baz]>", t.inspect
end
@@ -46,7 +53,7 @@ class Rake::TestTasks < Test::Unit::TestCase
t2 = task(:t2 => [:t1]) { |t| runlist << t.name }
assert_equal ["t2"], t1.prerequisites
assert_equal ["t1"], t2.prerequisites
- ex = assert_raise RuntimeError do
+ ex = assert_raises RuntimeError do
t1.invoke
end
assert_match(/circular dependency/i, ex.message)
@@ -57,10 +64,10 @@ class Rake::TestTasks < Test::Unit::TestCase
Rake.application.options.dryrun = true
runlist = []
t1 = task(:t1) { |t| runlist << t.name; 3321 }
- out = capture_stdout { t1.invoke }
- assert_match(/execute .*t1/i, out)
- assert_match(/dry run/i, out)
- assert_no_match(/invoke/i, out)
+ _, err = capture_io { t1.invoke }
+ assert_match(/execute .*t1/i, err)
+ assert_match(/dry run/i, err)
+ refute_match(/invoke/i, err)
assert_equal [], runlist
ensure
Rake.application.options.dryrun = false
@@ -69,11 +76,11 @@ class Rake::TestTasks < Test::Unit::TestCase
def test_tasks_can_be_traced
Rake.application.options.trace = true
t1 = task(:t1)
- out = capture_stdout {
+ _, err = capture_io {
t1.invoke
}
- assert_match(/invoke t1/i, out)
- assert_match(/execute t1/i, out)
+ assert_match(/invoke t1/i, err)
+ assert_match(/execute t1/i, err)
ensure
Rake.application.options.trace = false
end
@@ -119,7 +126,7 @@ class Rake::TestTasks < Test::Unit::TestCase
def test_find
task :tfind
assert_equal "tfind", Task[:tfind].name
- ex = assert_raise(RuntimeError) { Task[:leaves] }
+ ex = assert_raises(RuntimeError) { Task[:leaves] }
assert_equal "Don't know how to build task 'leaves'", ex.message
end
@@ -170,6 +177,56 @@ class Rake::TestTasks < Test::Unit::TestCase
assert_equal ["b", "c"], Task[:a].prerequisites
end
+ def test_prerequiste_tasks_returns_tasks_not_strings
+ a = task :a => ["b", "c"]
+ b = task :b
+ c = task :c
+ assert_equal [b, c], a.prerequisite_tasks
+ end
+
+ def test_prerequiste_tasks_fails_if_prerequisites_are_undefined
+ a = task :a => ["b", "c"]
+ b = task :b
+ assert_raises(RuntimeError) do
+ a.prerequisite_tasks
+ end
+ end
+
+ def test_prerequiste_tasks_honors_namespaces
+ a = b = nil
+ namespace "X" do
+ a = task :a => ["b", "c"]
+ b = task :b
+ end
+ c = task :c
+
+ assert_equal [b, c], a.prerequisite_tasks
+ end
+
+ def test_timestamp_returns_now_if_all_prereqs_have_no_times
+ a = task :a => ["b", "c"]
+ b = task :b
+ c = task :c
+
+ faux_stamp = 100
+ flexmock(Time, :now => faux_stamp)
+
+ assert_equal faux_stamp, a.timestamp
+ end
+
+ def test_timestamp_returns_latest_prereq_timestamp
+ a = task :a => ["b", "c"]
+ 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)
+
+ assert_equal faux_stamp, a.timestamp
+ end
+
def test_investigation_output
t1 = task(:t1 => [:t2, :t3]) { |t| runlist << t.name; 3321 }
task(:t2)
@@ -212,159 +269,3 @@ class Rake::TestTasks < Test::Unit::TestCase
end
end
-######################################################################
-class Rake::TestTaskWithArguments < Test::Unit::TestCase
- include CaptureStdout
- include Rake
-
- def setup
- Task.clear
- end
-
- def test_no_args_given
- t = task :t
- assert_equal [], t.arg_names
- end
-
- def test_args_given
- t = task :t, :a, :b
- assert_equal [:a, :b], t.arg_names
- end
-
- def test_name_and_needs
- t = task(:t => [:pre])
- assert_equal "t", t.name
- assert_equal [], t.arg_names
- assert_equal ["pre"], t.prerequisites
- end
-
- def test_name_and_explicit_needs
- t = task(:t, :needs => [:pre])
- assert_equal "t", t.name
- assert_equal [], t.arg_names
- assert_equal ["pre"], t.prerequisites
- end
-
- def test_name_args_and_explicit_needs
- t = task(:t, :x, :y, :needs => [:pre])
- assert_equal "t", t.name
- assert_equal [:x, :y], t.arg_names
- assert_equal ["pre"], t.prerequisites
- end
-
- def test_illegal_keys_in_task_name_hash
- assert_raise RuntimeError do
- t = task(:t, :x, :y => 1, :needs => [:pre])
- end
- end
-
- def test_arg_list_is_empty_if_no_args_given
- t = task(:t) { |tt, args| assert_equal({}, args.to_hash) }
- t.invoke(1, 2, 3)
- end
-
- def test_tasks_can_access_arguments_as_hash
- t = task :t, :a, :b, :c do |tt, args|
- assert_equal({:a => 1, :b => 2, :c => 3}, args.to_hash)
- assert_equal 1, args[:a]
- assert_equal 2, args[:b]
- assert_equal 3, args[:c]
- assert_equal 1, args.a
- assert_equal 2, args.b
- assert_equal 3, args.c
- end
- t.invoke(1, 2, 3)
- end
-
- def test_actions_of_various_arity_are_ok_with_args
- notes = []
- t = task(:t, :x) do
- notes << :a
- end
- t.enhance do | |
- notes << :b
- end
- t.enhance do |task|
- notes << :c
- assert_kind_of Task, task
- end
- t.enhance do |t2, args|
- notes << :d
- assert_equal t, t2
- assert_equal({:x => 1}, args.to_hash)
- end
- assert_nothing_raised do t.invoke(1) end
- assert_equal [:a, :b, :c, :d], notes
- end
-
- def test_arguments_are_passed_to_block
- t = task(:t, :a, :b) { |tt, args|
- assert_equal( { :a => 1, :b => 2 }, args.to_hash )
- }
- t.invoke(1, 2)
- end
-
- def test_extra_parameters_are_ignored
- ENV['b'] = nil
- t = task(:t, :a) { |tt, args|
- assert_equal 1, args.a
- assert_nil args.b
- }
- t.invoke(1, 2)
- end
-
- def test_arguments_are_passed_to_all_blocks
- counter = 0
- t = task :t, :a
- task :t do |tt, args|
- assert_equal 1, args.a
- counter += 1
- end
- task :t do |tt, args|
- assert_equal 1, args.a
- counter += 1
- end
- t.invoke(1)
- assert_equal 2, counter
- end
-
- def test_block_with_no_parameters_is_ok
- t = task(:t) { }
- t.invoke(1, 2)
- end
-
- def test_name_with_args
- desc "T"
- t = task(:tt, :a, :b)
- assert_equal "tt", t.name
- assert_equal "T", t.comment
- assert_equal "[a,b]", t.arg_description
- assert_equal "tt[a,b]", t.name_with_args
- assert_equal [:a, :b],t.arg_names
- end
-
- def test_named_args_are_passed_to_prereqs
- value = nil
- pre = task(:pre, :rev) { |t, args| value = args.rev }
- t = task(:t, :name, :rev, :needs => [:pre])
- t.invoke("bill", "1.2")
- assert_equal "1.2", value
- end
-
- def test_args_not_passed_if_no_prereq_names
- pre = task(:pre) { |t, args|
- assert_equal({}, args.to_hash)
- assert_equal "bill", args.name
- }
- t = task(:t, :name, :rev, :needs => [:pre])
- t.invoke("bill", "1.2")
- end
-
- def test_args_not_passed_if_no_arg_names
- pre = task(:pre, :rev) { |t, args|
- assert_equal({}, args.to_hash)
- }
- t = task(:t, :needs => [:pre])
- t.invoke("bill", "1.2")
- end
-end
diff --git a/test/rake/test_rake_task_argument_parsing.rb b/test/rake/test_rake_task_argument_parsing.rb
new file mode 100644
index 0000000000..7a03b2addc
--- /dev/null
+++ b/test/rake/test_rake_task_argument_parsing.rb
@@ -0,0 +1,110 @@
+require File.expand_path('../helper', __FILE__)
+
+class TestRakeTaskArgumentParsing < Rake::TestCase
+ def setup
+ super
+
+ @app = Rake::Application.new
+ end
+
+ def test_name_only
+ name, args = @app.parse_task_string("name")
+ assert_equal "name", name
+ assert_equal [], args
+ end
+
+ def test_empty_args
+ name, args = @app.parse_task_string("name[]")
+ assert_equal "name", name
+ assert_equal [], args
+ end
+
+ def test_one_argument
+ name, args = @app.parse_task_string("name[one]")
+ assert_equal "name", name
+ assert_equal ["one"], args
+ end
+
+ def test_two_arguments
+ name, args = @app.parse_task_string("name[one,two]")
+ assert_equal "name", name
+ assert_equal ["one", "two"], args
+ end
+
+ def test_can_handle_spaces_between_args
+ name, args = @app.parse_task_string("name[one, two,\tthree , \tfour]")
+ assert_equal "name", name
+ assert_equal ["one", "two", "three", "four"], args
+ end
+
+ def test_keeps_embedded_spaces
+ name, args = @app.parse_task_string("name[a one ana, two]")
+ assert_equal "name", name
+ assert_equal ["a one ana", "two"], args
+ end
+
+ def test_terminal_width_using_env
+ app = Rake::Application.new
+ app.terminal_columns = 1234
+
+ assert_equal 1234, app.terminal_width
+ end
+
+ def test_terminal_width_using_stty
+ app = Rake::Application.new
+
+ flexmock(app,
+ :unix? => true,
+ :dynamic_width_stty => 1235,
+ :dynamic_width_tput => 0)
+
+ 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)
+
+ assert_equal 1236, app.terminal_width
+ end
+
+ def test_terminal_width_using_hardcoded_80
+ app = Rake::Application.new
+ flexmock(app, :unix? => false)
+
+ 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)
+
+ assert_equal 80, app.terminal_width
+ end
+
+ def test_no_rakeopt
+ ARGV << '--trace'
+ app = Rake::Application.new
+ app.init
+ assert !app.options.silent
+ end
+
+ def test_rakeopt_with_blank_options
+ ARGV << '--trace'
+ app = Rake::Application.new
+ app.init
+ assert !app.options.silent
+ end
+
+ def test_rakeopt_with_silent_options
+ ENV['RAKEOPT'] = '-s'
+ app = Rake::Application.new
+
+ app.init
+
+ assert app.options.silent
+ end
+end
diff --git a/test/rake/test_task_arguments.rb b/test/rake/test_rake_task_arguments.rb
index 9e907aed7d..7001a4aeb2 100644
--- a/test/rake/test_task_arguments.rb
+++ b/test/rake/test_rake_task_arguments.rb
@@ -1,16 +1,12 @@
-require 'test/unit'
-require 'rake'
+require File.expand_path('../helper', __FILE__)
######################################################################
-class Rake::TestTaskArguments < Test::Unit::TestCase
- def setup
- @backup = ENV.to_hash
- ENV.clear
- end
-
+class TestRakeTaskArguments < Rake::TestCase
def teardown
- ENV.clear
- @backup.each {|k, v| ENV[k] = v }
+ ENV.delete('rev')
+ ENV.delete('VER')
+
+ super
end
def test_empty_arg_list_is_empty
@@ -53,12 +49,12 @@ class Rake::TestTaskArguments < Test::Unit::TestCase
assert_nil ta.cc
end
- def test_args_can_reference_env_values
+ def test_args_do_not_reference_env_values
ta = Rake::TaskArguments.new(["aa"], [1])
ENV['rev'] = "1.2"
ENV['VER'] = "2.3"
- assert_equal "1.2", ta.rev
- assert_equal "2.3", ta.ver
+ assert_nil ta.rev
+ assert_nil ta.ver
end
def test_creating_new_argument_scopes
@@ -84,7 +80,7 @@ class Rake::TestTaskArguments < Test::Unit::TestCase
assert_equal 'original_val', ta[:bb]
end
- def test_default_arguements_that_dont_match_names_are_ignored
+ def test_default_arguments_that_dont_match_names_are_ignored
ta = Rake::TaskArguments.new(["aa", "bb"], [nil, "original_val"])
ta.with_defaults({ "cc" => "default_val" })
assert_nil ta[:cc]
diff --git a/test/rake/test_tasklib.rb b/test/rake/test_rake_task_lib.rb
index c8b9cecdb2..9f3f7e9dae 100644
--- a/test/rake/test_tasklib.rb
+++ b/test/rake/test_rake_task_lib.rb
@@ -1,8 +1,7 @@
-require 'test/unit'
+require File.expand_path('../helper', __FILE__)
require 'rake/tasklib'
-
-class Rake::TestTaskLib < Test::Unit::TestCase
+class TestRakeTaskLib < Rake::TestCase
def test_paste
tl = Rake::TaskLib.new
assert_equal :ab, tl.paste(:a, :b)
diff --git a/test/rake/test_task_manager.rb b/test/rake/test_rake_task_manager.rb
index 3ab039ca85..847f784fa8 100644
--- a/test/rake/test_task_manager.rb
+++ b/test/rake/test_rake_task_manager.rb
@@ -1,28 +1,15 @@
-require 'test/unit'
-require 'fileutils'
-require 'tmpdir'
-require 'rake'
-
-class Rake::TestTaskManager < Test::Unit::TestCase
- class TaskManager
- include Rake::TaskManager
- end
+require File.expand_path('../helper', __FILE__)
+
+class TestRakeTaskManager < Rake::TestCase
def setup
- @oldpwd = Dir.pwd
- @tmpdir = Dir.mktmpdir("rake")
- Dir.chdir(@tmpdir)
- @tm = TaskManager.new
- open("README", "wb") {}
- end
+ super
- def teardown
- Dir.chdir(@oldpwd)
- FileUtils.rm_rf(@tmpdir)
+ @tm = Rake::TestCase::TaskManager.new
end
def test_create_task_manager
- assert_not_nil @tm
+ refute_nil @tm
assert_equal [], @tm.tasks
end
@@ -59,6 +46,7 @@ class Rake::TestTaskManager < Test::Unit::TestCase
t = @tm.define_task(Rake::FileTask, "fn")
assert_equal "fn", t.name
end
+
assert_equal ["fn"], @tm.tasks.collect { |t| t.name }
end
@@ -71,14 +59,17 @@ class Rake::TestTaskManager < Test::Unit::TestCase
end
def test_name_lookup_with_implicit_file_tasks
- t = @tm["README"]
- assert_equal "README", t.name
+ FileUtils.touch 'README.rdoc'
+
+ t = @tm["README.rdoc"]
+
+ assert_equal "README.rdoc", t.name
assert Rake::FileTask === t
end
def test_name_lookup_with_nonexistent_task
- assert_raise(RuntimeError) {
- t = @tm["DOES NOT EXIST"]
+ assert_raises(RuntimeError) {
+ @tm["DOES NOT EXIST"]
}
end
@@ -156,26 +147,3 @@ class Rake::TestTaskManager < Test::Unit::TestCase
end
-class Rake::TestTaskManagerArgumentResolution < Test::Unit::TestCase
- TaskManager = Rake::TestTaskManager::TaskManager
-
- def test_good_arg_patterns
- assert_equal [:t, [], []], task(:t)
- assert_equal [:t, [], [:x]], task(:t => :x)
- assert_equal [:t, [], [:x, :y]], task(:t => [:x, :y])
-
- assert_equal [:t, [:a, :b], []], task(:t, :a, :b)
- assert_equal [:t, [], [:x]], task(:t, :needs => :x)
- assert_equal [:t, [:a, :b], [:x]], task(:t, :a, :b, :needs => :x)
- assert_equal [:t, [:a, :b], [:x, :y]], task(:t, :a, :b, :needs => [:x, :y])
-
- assert_equal [:t, [:a, :b], []], task(:t, [:a, :b])
- assert_equal [:t, [:a, :b], [:x]], task(:t, [:a, :b] => :x)
- assert_equal [:t, [:a, :b], [:x, :y]], task(:t, [:a, :b] => [:x, :y])
- end
-
- def task(*args)
- tm = TaskManager.new
- tm.resolve_args(args)
- end
-end
diff --git a/test/rake/test_rake_task_manager_argument_resolution.rb b/test/rake/test_rake_task_manager_argument_resolution.rb
new file mode 100644
index 0000000000..35e0862ef7
--- /dev/null
+++ b/test/rake/test_rake_task_manager_argument_resolution.rb
@@ -0,0 +1,36 @@
+require File.expand_path('../helper', __FILE__)
+
+class TestRakeTaskManagerArgumentResolution < Rake::TestCase
+
+ def setup
+ super
+
+ Rake.application.options.ignore_deprecate = true
+ end
+
+ def teardown
+ Rake.application.options.ignore_deprecate = false
+
+ super
+ end
+
+ def test_good_arg_patterns
+ assert_equal [:t, [], []], task(:t)
+ assert_equal [:t, [], [:x]], task(:t => :x)
+ assert_equal [:t, [], [:x, :y]], task(:t => [:x, :y])
+
+ assert_equal [:t, [:a, :b], []], task(:t, :a, :b)
+ assert_equal [:t, [], [:x]], task(:t, :needs => :x)
+ assert_equal [:t, [:a, :b], [:x]], task(:t, :a, :b, :needs => :x)
+ assert_equal [:t, [:a, :b], [:x, :y]], task(:t, :a, :b, :needs => [:x, :y])
+
+ assert_equal [:t, [:a, :b], []], task(:t, [:a, :b])
+ assert_equal [:t, [:a, :b], [:x]], task(:t, [:a, :b] => :x)
+ assert_equal [:t, [:a, :b], [:x, :y]], task(:t, [:a, :b] => [:x, :y])
+ end
+
+ def task(*args)
+ tm = Rake::TestCase::TaskManager.new
+ tm.resolve_args(args)
+ end
+end
diff --git a/test/rake/test_rake_task_with_arguments.rb b/test/rake/test_rake_task_with_arguments.rb
new file mode 100644
index 0000000000..bbbc82f99f
--- /dev/null
+++ b/test/rake/test_rake_task_with_arguments.rb
@@ -0,0 +1,162 @@
+require File.expand_path('../helper', __FILE__)
+
+class TestRakeTaskWithArguments < Rake::TestCase
+ include Rake
+
+ def setup
+ super
+
+ Task.clear
+ Rake::TaskManager.record_task_metadata = true
+ end
+
+ def teardown
+ Rake::TaskManager.record_task_metadata = false
+
+ super
+ end
+
+ def test_no_args_given
+ t = task :t
+ assert_equal [], t.arg_names
+ end
+
+ def test_args_given
+ t = task :t, :a, :b
+ assert_equal [:a, :b], t.arg_names
+ end
+
+ def test_name_and_needs
+ t = task(:t => [:pre])
+ assert_equal "t", t.name
+ assert_equal [], t.arg_names
+ assert_equal ["pre"], t.prerequisites
+ end
+
+ def test_name_args_and_explicit_needs
+ ignore_deprecations do
+ t = task(:t, :x, :y, :needs => [:pre])
+ assert_equal "t", t.name
+ assert_equal [:x, :y], t.arg_names
+ assert_equal ["pre"], t.prerequisites
+ end
+ end
+
+ def test_illegal_keys_in_task_name_hash
+ ignore_deprecations do
+ assert_raises RuntimeError do
+ t = task(:t, :x, :y => 1, :needs => [:pre])
+ end
+ end
+ end
+
+ def test_arg_list_is_empty_if_no_args_given
+ t = task(:t) { |tt, args| assert_equal({}, args.to_hash) }
+ t.invoke(1, 2, 3)
+ end
+
+ def test_tasks_can_access_arguments_as_hash
+ t = task :t, :a, :b, :c do |tt, args|
+ assert_equal({:a => 1, :b => 2, :c => 3}, args.to_hash)
+ assert_equal 1, args[:a]
+ assert_equal 2, args[:b]
+ assert_equal 3, args[:c]
+ assert_equal 1, args.a
+ assert_equal 2, args.b
+ assert_equal 3, args.c
+ end
+ t.invoke(1, 2, 3)
+ end
+
+ def test_actions_of_various_arity_are_ok_with_args
+ notes = []
+ t = task(:t, :x) do
+ notes << :a
+ end
+ t.enhance do | |
+ notes << :b
+ end
+ t.enhance do |task|
+ notes << :c
+ assert_kind_of Task, task
+ end
+ t.enhance do |t2, args|
+ notes << :d
+ assert_equal t, t2
+ assert_equal({:x => 1}, args.to_hash)
+ end
+ t.invoke(1)
+ assert_equal [:a, :b, :c, :d], notes
+ end
+
+ def test_arguments_are_passed_to_block
+ t = task(:t, :a, :b) { |tt, args|
+ assert_equal( { :a => 1, :b => 2 }, args.to_hash )
+ }
+ t.invoke(1, 2)
+ end
+
+ def test_extra_parameters_are_ignored
+ t = task(:t, :a) { |tt, args|
+ assert_equal 1, args.a
+ assert_nil args.b
+ }
+ t.invoke(1, 2)
+ end
+
+ def test_arguments_are_passed_to_all_blocks
+ counter = 0
+ t = task :t, :a
+ task :t do |tt, args|
+ assert_equal 1, args.a
+ counter += 1
+ end
+ task :t do |tt, args|
+ assert_equal 1, args.a
+ counter += 1
+ end
+ t.invoke(1)
+ assert_equal 2, counter
+ end
+
+ def test_block_with_no_parameters_is_ok
+ t = task(:t) { }
+ t.invoke(1, 2)
+ end
+
+ def test_name_with_args
+ desc "T"
+ t = task(:tt, :a, :b)
+ assert_equal "tt", t.name
+ assert_equal "T", t.comment
+ assert_equal "[a,b]", t.arg_description
+ assert_equal "tt[a,b]", t.name_with_args
+ assert_equal [:a, :b],t.arg_names
+ end
+
+ def test_named_args_are_passed_to_prereqs
+ value = nil
+ pre = task(:pre, :rev) { |t, args| value = args.rev }
+ t = task(:t, [:name, :rev] => [:pre])
+ t.invoke("bill", "1.2")
+ assert_equal "1.2", value
+ end
+
+ def test_args_not_passed_if_no_prereq_names
+ pre = task(:pre) { |t, args|
+ assert_equal({}, args.to_hash)
+ assert_equal "bill", args.name
+ }
+ t = task(:t, [:name, :rev] => [:pre])
+ t.invoke("bill", "1.2")
+ end
+
+ def test_args_not_passed_if_no_arg_names
+ pre = task(:pre, :rev) { |t, args|
+ assert_equal({}, args.to_hash)
+ }
+ t = task(:t => [:pre])
+ t.invoke("bill", "1.2")
+ end
+end
+
diff --git a/test/rake/test_rake_test_task.rb b/test/rake/test_rake_test_task.rb
new file mode 100644
index 0000000000..81b4df3cd5
--- /dev/null
+++ b/test/rake/test_rake_test_task.rb
@@ -0,0 +1,116 @@
+require File.expand_path('../helper', __FILE__)
+require 'rake/testtask'
+
+class TestRakeTestTask < Rake::TestCase
+ include Rake
+
+ def setup
+ super
+
+ Task.clear
+ ENV.delete('TEST')
+ end
+
+ def test_no_task
+ assert ! Task.task_defined?(:test)
+ end
+
+ def test_defaults
+ tt = Rake::TestTask.new do |t| end
+ refute_nil tt
+ assert_equal :test, tt.name
+ assert_equal ['lib'], tt.libs
+ assert_equal 'test/test*.rb', tt.pattern
+ assert_equal false, tt.verbose
+ assert Task.task_defined?(:test)
+ end
+
+ def test_non_defaults
+ tt = Rake::TestTask.new(:example) do |t|
+ t.libs = ['src', 'ext']
+ t.pattern = 'test/tc_*.rb'
+ t.verbose = true
+ end
+ refute_nil tt
+ assert_equal :example, tt.name
+ assert_equal ['src', 'ext'], tt.libs
+ assert_equal 'test/tc_*.rb', tt.pattern
+ assert_equal true, tt.verbose
+ assert Task.task_defined?(:example)
+ end
+
+ def test_pattern
+ tt = Rake::TestTask.new do |t|
+ t.pattern = '*.rb'
+ end
+ assert_equal ['*.rb'], tt.file_list.to_a
+ end
+
+ def test_env_test
+ ENV['TEST'] = 'testfile.rb'
+ tt = Rake::TestTask.new do |t|
+ t.pattern = '*'
+ end
+ assert_equal ["testfile.rb"], tt.file_list.to_a
+ end
+
+ def test_test_files
+ tt = Rake::TestTask.new do |t|
+ t.test_files = FileList['a.rb', 'b.rb']
+ end
+ assert_equal ["a.rb", 'b.rb'], tt.file_list.to_a
+ end
+
+ def test_both_pattern_and_test_files
+ tt = Rake::TestTask.new do |t|
+ t.test_files = FileList['a.rb', 'b.rb']
+ t.pattern = '*.rb'
+ end
+ assert_equal ['a.rb', 'b.rb', '*.rb'], tt.file_list.to_a
+ end
+
+ def test_direct_run_has_quoted_paths
+ test_task = Rake::TestTask.new(:tx) do |t|
+ t.loader = :direct
+ end
+ assert_match(/-e ".*"/, test_task.run_code)
+ end
+
+ def test_testrb_run_has_quoted_paths_on_ruby_182
+ test_task = Rake::TestTask.new(:tx) do |t|
+ t.loader = :testrb
+ end
+ flexmock(test_task).should_receive(:ruby_version).and_return('1.8.2')
+ assert_match(/^-S testrb +".*"$/, test_task.run_code)
+ end
+
+ def test_testrb_run_has_quoted_paths_on_ruby_186
+ test_task = Rake::TestTask.new(:tx) do |t|
+ t.loader = :testrb
+ end
+ flexmock(test_task).should_receive(:ruby_version).and_return('1.8.6')
+ assert_match(/^-S testrb +$/, test_task.run_code)
+ end
+
+ def test_rake_run_has_quoted_paths
+ test_task = Rake::TestTask.new(:tx) do |t|
+ t.loader = :rake
+ end
+ assert_match(/".*"/, test_task.run_code)
+ end
+
+ def test_nested_libs_will_be_flattened
+ test_task = Rake::TestTask.new(:tx) do |t|
+ t.libs << ["A", "B"]
+ end
+ sep = File::PATH_SEPARATOR
+ assert_match(/lib#{sep}A#{sep}B/, test_task.ruby_opts_string)
+ end
+
+ def test_empty_lib_path_implies_no_dash_I_option
+ test_task = Rake::TestTask.new(:tx) do |t|
+ t.libs = []
+ end
+ refute_match(/-I/, test_task.ruby_opts_string)
+ end
+end
diff --git a/test/rake/test_rake_top_level_functions.rb b/test/rake/test_rake_top_level_functions.rb
new file mode 100644
index 0000000000..69ef8691fb
--- /dev/null
+++ b/test/rake/test_rake_top_level_functions.rb
@@ -0,0 +1,76 @@
+require File.expand_path('../helper', __FILE__)
+
+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
+
+ def teardown
+ Rake.application = @app
+
+ super
+ end
+
+ def test_namespace
+ Rake.application.should_receive(:in_namespace).with("xyz", any).once
+ namespace "xyz" do end
+ 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')
+ end
+
+ def test_when_writing
+ out, = capture_io do
+ when_writing("NOTWRITING") do
+ puts "WRITING"
+ end
+ end
+ assert_equal "WRITING\n", out
+ end
+
+ def test_when_not_writing
+ Rake::FileUtilsExt.nowrite_flag = true
+ _, err = capture_io do
+ when_writing("NOTWRITING") do
+ puts "WRITING"
+ end
+ end
+ assert_equal "DRYRUN: NOTWRITING\n", err
+ ensure
+ Rake::FileUtilsExt.nowrite_flag = false
+ end
+
+ def test_missing_constants_task
+ Rake.application.should_receive(:const_warning).with(:Task).once
+ Object.const_missing(:Task)
+ end
+
+ def test_missing_constants_file_task
+ Rake.application.should_receive(:const_warning).with(:FileTask).once
+ Object.const_missing(:FileTask)
+ end
+
+ def test_missing_constants_file_creation_task
+ Rake.application.should_receive(:const_warning).with(:FileCreationTask).once
+ Object.const_missing(:FileCreationTask)
+ end
+
+ def test_missing_constants_rake_app
+ Rake.application.should_receive(:const_warning).with(:RakeApp).once
+ Object.const_missing(:RakeApp)
+ end
+
+ def test_missing_other_constant
+ assert_raises(NameError) do Object.const_missing(:Xyz) end
+ end
+end
diff --git a/test/rake/test_rake_win32.rb b/test/rake/test_rake_win32.rb
new file mode 100644
index 0000000000..fc2746a0a1
--- /dev/null
+++ b/test/rake/test_rake_win32.rb
@@ -0,0 +1,72 @@
+require File.expand_path('../helper', __FILE__)
+
+class TestRakeWin32 < Rake::TestCase
+
+ Win32 = Rake::Win32
+
+ def test_win32_system_dir_uses_home_if_defined
+ ENV['HOME'] = 'C:\\HP'
+
+ assert_equal "C:/HP/Rake", Win32.win32_system_dir
+ end
+
+ def test_win32_system_dir_uses_homedrive_homepath_when_no_home_defined
+ ENV['HOME'] = nil
+ ENV['HOMEDRIVE'] = 'C:'
+ ENV['HOMEPATH'] = '\\HP'
+
+ assert_equal "C:/HP/Rake", Win32.win32_system_dir
+ end
+
+ def test_win32_system_dir_uses_appdata_when_no_home_or_home_combo
+ ENV['APPDATA'] = "C:\\Documents and Settings\\HP\\Application Data"
+ ENV['HOME'] = nil
+ ENV['HOMEDRIVE'] = nil
+ ENV['HOMEPATH'] = nil
+
+ assert_equal "C:/Documents and Settings/HP/Application Data/Rake",
+ Win32.win32_system_dir
+ end
+
+ def test_win32_system_dir_fallback_to_userprofile_otherwise
+ ENV['HOME'] = nil
+ ENV['HOMEDRIVE'] = nil
+ ENV['HOMEPATH'] = nil
+ ENV['APPDATA'] = nil
+ ENV['USERPROFILE'] = "C:\\Documents and Settings\\HP"
+
+ assert_equal "C:/Documents and Settings/HP/Rake", Win32.win32_system_dir
+ end
+
+ def test_win32_system_dir_nil_of_no_env_vars
+ ENV['APPDATA'] = nil
+ ENV['HOME'] = nil
+ ENV['HOMEDRIVE'] = nil
+ ENV['HOMEPATH'] = nil
+ ENV['RAKE_SYSTEM'] = nil
+ ENV['USERPROFILE'] = nil
+
+ assert_raises(Rake::Win32::Win32HomeError) do
+ Win32.win32_system_dir
+ end
+ end
+
+ def test_win32_backtrace_with_different_case
+ ex = nil
+ begin
+ raise 'test exception'
+ rescue => ex
+ end
+
+ ex.set_backtrace ['abc', 'rakefile']
+
+ rake = Rake::Application.new
+ rake.options.trace = true
+ rake.instance_variable_set(:@rakefile, 'Rakefile')
+
+ _, err = capture_io { rake.display_error_message(ex) }
+
+ assert_match(/rakefile/, err)
+ end
+
+end
diff --git a/test/rake/test_require.rb b/test/rake/test_require.rb
deleted file mode 100644
index 8e6e2e9d5b..0000000000
--- a/test/rake/test_require.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-require 'test/unit'
-require 'rake'
-
-# ====================================================================
-class Rake::TestRequire < Test::Unit::TestCase
- RakeLibDir = File.dirname(__FILE__) + '/data/rakelib'
-
- def test_can_load_rake_library
- app = Rake::Application.new
- assert app.instance_eval {
- rake_require("test1", [RakeLibDir], [])
- }
- end
-
- def test_wont_reload_rake_library
- app = Rake::Application.new
- assert ! app.instance_eval {
- rake_require("test2", [RakeLibDir], ['test2'])
- }
- end
-
- def test_throws_error_if_library_not_found
- app = Rake::Application.new
- ex = assert_raise(LoadError) {
- assert app.instance_eval {
- rake_require("testx", [RakeLibDir], [])
- }
- }
- assert_match(/x/, ex.message)
- end
-end
-
diff --git a/test/rake/test_sys.rb b/test/rake/test_sys.rb
new file mode 100644
index 0000000000..21f7e2c708
--- /dev/null
+++ b/test/rake/test_sys.rb
@@ -0,0 +1,20 @@
+require File.expand_path('../helper', __FILE__)
+begin
+ old_verbose = $VERBOSE
+ $VERBOSE = nil
+ require 'rake/contrib/sys'
+ensure
+ $VERBOSE = old_verbose
+end
+
+class TestSys < Rake::TestCase
+
+ def test_split_all
+ assert_equal ['a'], Sys.split_all('a')
+ assert_equal ['..'], Sys.split_all('..')
+ assert_equal ['/'], Sys.split_all('/')
+ assert_equal ['a', 'b'], Sys.split_all('a/b')
+ assert_equal ['/', 'a', 'b'], Sys.split_all('/a/b')
+ assert_equal ['..', 'a', 'b'], Sys.split_all('../a/b')
+ end
+end
diff --git a/test/rake/test_test_task.rb b/test/rake/test_test_task.rb
deleted file mode 100644
index 0b7dbc625b..0000000000
--- a/test/rake/test_test_task.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-require 'tmpdir'
-require 'test/unit'
-require 'rake/testtask'
-
-class Rake::TestTestTask < Test::Unit::TestCase
- include Rake
-
- def setup
- @oldwd = Dir.pwd
- @tmpwd = Dir.mktmpdir
- Dir.chdir(@tmpwd)
- Task.clear
- ENV.delete('TEST')
- open('install.rb', 'w') {}
- end
-
- def teardown
- FileUtils.rm_rf("testdata")
- Dir.chdir(@oldwd)
- FileUtils.rm_rf(@tmpwd)
- end
-
- def test_no_task
- assert ! Task.task_defined?(:test)
- end
-
- def test_defaults
- tt = Rake::TestTask.new do |t| end
- assert_not_nil tt
- assert_equal :test, tt.name
- assert_equal ['lib'], tt.libs
- assert_equal 'test/test*.rb', tt.pattern
- assert_equal false, tt.verbose
- assert Task.task_defined?(:test)
- end
-
- def test_non_defaults
- tt = Rake::TestTask.new(:example) do |t|
- t.libs = ['src', 'ext']
- t.pattern = 'test/tc_*.rb'
- t.verbose = true
- end
- assert_not_nil tt
- assert_equal :example, tt.name
- assert_equal ['src', 'ext'], tt.libs
- assert_equal 'test/tc_*.rb', tt.pattern
- assert_equal true, tt.verbose
- assert Task.task_defined?(:example)
- end
-
- def test_pattern
- tt = Rake::TestTask.new do |t|
- t.pattern = '*.rb'
- end
- assert_equal ['install.rb'], tt.file_list.to_a
- end
-
- def test_env_test
- ENV['TEST'] = 'testfile.rb'
- tt = Rake::TestTask.new do |t|
- t.pattern = '*'
- end
- assert_equal ["testfile.rb"], tt.file_list.to_a
- end
-
- def test_test_files
- tt = Rake::TestTask.new do |t|
- t.test_files = FileList['a.rb', 'b.rb']
- end
- assert_equal ["a.rb", 'b.rb'], tt.file_list.to_a
- end
-
- def test_both_pattern_and_test_files
- tt = Rake::TestTask.new do |t|
- t.test_files = FileList['a.rb', 'b.rb']
- t.pattern = '*.rb'
- end
- assert_equal ['a.rb', 'b.rb', 'install.rb'], tt.file_list.to_a
- end
-
-end
diff --git a/test/rake/test_top_level_functions.rb b/test/rake/test_top_level_functions.rb
deleted file mode 100644
index 12a8cd1e36..0000000000
--- a/test/rake/test_top_level_functions.rb
+++ /dev/null
@@ -1,91 +0,0 @@
-require 'test/unit'
-require_relative 'capture_stdout'
-require 'rake'
-
-class Rake::TestTopLevelFunctions < Test::Unit::TestCase
- include CaptureStdout
-
- def setup
- super
- @app = Rake.application
- Rake.application = @mock = Object.new
- end
-
- def teardown
- Rake.application = @app
- super
- end
-
- def defmock(sym, &block)
- class << @mock; self; end.class_eval do
- define_method(sym, block)
- end
- end
-
- def test_namespace
- args = []
- defmock(:in_namespace) {|a, *| args << a}
- namespace "xyz" do end
- assert_equal(["xyz"], args)
- end
-
- def test_import
- args = []
- defmock(:add_import) {|a| args << a}
- import('x', 'y', 'z')
- assert_equal(['x', 'y', 'z'], args)
- end
-
- def test_when_writing
- out = capture_stdout do
- when_writing("NOTWRITING") do
- puts "WRITING"
- end
- end
- assert_equal "WRITING\n", out
- end
-
- def test_when_not_writing
- RakeFileUtils.nowrite_flag = true
- out = capture_stdout do
- when_writing("NOTWRITING") do
- puts "WRITING"
- end
- end
- assert_equal "DRYRUN: NOTWRITING\n", out
- ensure
- RakeFileUtils.nowrite_flag = false
- end
-
- def test_missing_constants_task
- args = []
- defmock(:const_warning) {|a| args << a}
- Object.const_missing(:Task)
- assert_equal([:Task], args)
- end
-
- def test_missing_constants_file_task
- args = []
- defmock(:const_warning) {|a| args << a}
- Object.const_missing(:FileTask)
- assert_equal([:FileTask], args)
- end
-
- def test_missing_constants_file_creation_task
- args = []
- defmock(:const_warning) {|a| args << a}
- Object.const_missing(:FileCreationTask)
- assert_equal([:FileCreationTask], args)
- end
-
- def test_missing_constants_rake_app
- args = []
- defmock(:const_warning) {|a| args << a}
- Object.const_missing(:RakeApp)
- assert_equal([:RakeApp], args)
- end
-
- def test_missing_other_constant
- assert_raise(NameError) do Object.const_missing(:Xyz) end
- end
-end
diff --git a/test/rake/test_win32.rb b/test/rake/test_win32.rb
deleted file mode 100644
index dade540629..0000000000
--- a/test/rake/test_win32.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-require 'test/unit'
-require_relative 'in_environment'
-
-require 'rake'
-
-class Rake::TestWin32 < Test::Unit::TestCase
- include InEnvironment
-
- Win32 = Rake::Win32
-
- def test_win32_system_dir_uses_home_if_defined
- in_environment('RAKE_SYSTEM' => nil,
- 'HOME' => "C:\\HP",
- 'APPDATA' => nil
- ) do
- assert_equal "C:/HP/Rake", Win32.win32_system_dir
- end
- end
-
- def test_win32_system_dir_uses_appdata_if_defined
- in_environment(
- 'RAKE_SYSTEM' => nil,
- 'HOME' => "C:\\HP",
- 'APPDATA' => "C:\\Documents and Settings\\HP\\Application Data"
- ) do
- assert_equal "C:/Documents and Settings/HP/Application Data/Rake", Win32.win32_system_dir
- end
- end
-
- def test_win32_system_dir_nil_of_no_env_vars
- in_environment(
- 'RAKE_SYSTEM' => nil,
- 'HOME' => nil,
- 'HOMEDRIVE' => nil,
- "HOMEPATH" => nil,
- 'APPDATA' => nil,
- 'USERPROFILE' => "C:\\Documents and Settings\\HP"
- ) do
- assert_raise(ArgumentError) do
- Win32.win32_system_dir
- end
- end
- end
-
-end if Rake::Win32.windows?