summaryrefslogtreecommitdiff
path: root/test/rake/test_file_task.rb
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-02 19:07:55 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-02 19:07:55 +0000
commit719b0f8e3037e1033726b6487d7b0d9fc1412e7d (patch)
treec5a08c8c9abae9b7f0514f680f56553a7a03656a /test/rake/test_file_task.rb
parenta0f667c33e24928374d494c9c33d0082355785e1 (diff)
* lib/rake: updated to rake code to rake-0.8.7 source code base.
* lib/rake/loaders/makefile.rb (Rake::MakefileLoader#process_line): respace dependencies too. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25199 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/rake/test_file_task.rb')
-rw-r--r--test/rake/test_file_task.rb139
1 files changed, 139 insertions, 0 deletions
diff --git a/test/rake/test_file_task.rb b/test/rake/test_file_task.rb
new file mode 100644
index 0000000000..203597b789
--- /dev/null
+++ b/test/rake/test_file_task.rb
@@ -0,0 +1,139 @@
+require 'test/unit'
+require 'fileutils'
+require 'rake'
+require_relative 'filecreation'
+
+######################################################################
+class TestFileTask < Test::Unit::TestCase
+ include Rake
+ include FileCreation
+
+ def setup
+ Task.clear
+ @runs = Array.new
+ FileUtils.rm_f NEWFILE
+ FileUtils.rm_f OLDFILE
+ end
+
+ def test_file_need
+ name = "testdata/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"
+ File.delete(ftask.name) rescue nil
+ end
+
+ def test_file_times_new_depends_on_old
+ create_timed_files(OLDFILE, NEWFILE)
+
+ t1 = Rake.application.intern(FileTask, NEWFILE).enhance([OLDFILE])
+ t2 = Rake.application.intern(FileTask, OLDFILE)
+ assert ! t2.needed?, "Should not need to build old file"
+ assert ! t1.needed?, "Should not need to rebuild new file because of old"
+ end
+
+ def test_file_times_old_depends_on_new
+ create_timed_files(OLDFILE, NEWFILE)
+
+ t1 = Rake.application.intern(FileTask,OLDFILE).enhance([NEWFILE])
+ t2 = Rake.application.intern(FileTask, NEWFILE)
+ assert ! t2.needed?, "Should not need to build new file"
+ preq_stamp = t1.prerequisites.collect{|t| Task[t].timestamp}.max
+ assert_equal t2.timestamp, preq_stamp
+ assert t1.timestamp < preq_stamp, "T1 should be older"
+ assert t1.needed?, "Should need to rebuild old file because of new"
+ end
+
+ def test_file_depends_on_task_depend_on_file
+ create_timed_files(OLDFILE, NEWFILE)
+
+ file NEWFILE => [:obj] do |t| @runs << t.name end
+ task :obj => [OLDFILE] do |t| @runs << t.name end
+ file OLDFILE do |t| @runs << t.name end
+
+ Task[:obj].invoke
+ Task[NEWFILE].invoke
+ assert ! @runs.include?(NEWFILE)
+ end
+
+ def test_existing_file_depends_on_non_existing_file
+ create_file(OLDFILE)
+ delete_file(NEWFILE)
+ file NEWFILE
+ file OLDFILE => NEWFILE
+ assert_nothing_raised do Task[OLDFILE].invoke end
+ end
+
+ # I have currently disabled this test. I'm not convinced that
+ # deleting the file target on failure is always the proper thing to
+ # do. I'm willing to hear input on this topic.
+ def ztest_file_deletes_on_failure
+ task :obj
+ file NEWFILE => [:obj] do |t|
+ FileUtils.touch NEWFILE
+ fail "Ooops"
+ end
+ assert Task[NEWFILE]
+ begin
+ Task[NEWFILE].invoke
+ rescue Exception
+ end
+ assert( ! File.exist?(NEWFILE), "NEWFILE should be deleted")
+ end
+
+end
+
+######################################################################
+class TestDirectoryTask < Test::Unit::TestCase
+ include Rake
+
+ def setup
+ rm_rf "testdata", :verbose=>false
+ end
+
+ def teardown
+ rm_rf "testdata", :verbose=>false
+ end
+
+ def test_directory
+ desc "DESC"
+ directory "testdata/a/b/c"
+ assert_equal FileCreationTask, Task["testdata"].class
+ assert_equal FileCreationTask, Task["testdata/a"].class
+ assert_equal FileCreationTask, Task["testdata/a/b/c"].class
+ assert_nil Task["testdata"].comment
+ assert_equal "DESC", Task["testdata/a/b/c"].comment
+ assert_nil Task["testdata/a/b"].comment
+ verbose(false) {
+ Task['testdata/a/b'].invoke
+ }
+ assert File.exist?("testdata/a/b")
+ assert ! File.exist?("testdata/a/b/c")
+ end
+
+ if Rake::Win32.windows?
+ def test_directory_win32
+ desc "WIN32 DESC"
+ FileUtils.mkdir_p("testdata")
+ Dir.chdir("testdata") do
+ directory 'c:/testdata/a/b/c'
+ assert_equal FileCreationTask, Task['c:/testdata'].class
+ assert_equal FileCreationTask, Task['c:/testdata/a'].class
+ assert_equal FileCreationTask, Task['c:/testdata/a/b/c'].class
+ assert_nil Task['c:/testdata'].comment
+ assert_equal "WIN32 DESC", Task['c:/testdata/a/b/c'].comment
+ assert_nil Task['c:/testdata/a/b'].comment
+ verbose(false) {
+ Task['c:/testdata/a/b'].invoke
+ }
+ assert File.exist?('c:/testdata/a/b')
+ assert ! File.exist?('c:/testdata/a/b/c')
+ end
+ end
+ end
+end