4
require_relative 'filecreation'
6
######################################################################
7
class Rake::TestFileTask < Test::Unit::TestCase
14
FileUtils.rm_f NEWFILE
15
FileUtils.rm_f OLDFILE
19
name = "testdata/dummy"
22
assert_equal name.to_s, ftask.name
23
File.delete(ftask.name) rescue nil
24
assert ftask.needed?, "file should be needed"
25
open(ftask.name, "w") { |f| f.puts "HI" }
26
assert_equal nil, ftask.prerequisites.collect{|n| Task[n].timestamp}.max
27
assert ! ftask.needed?, "file should not be needed"
28
File.delete(ftask.name) rescue nil
31
def test_file_times_new_depends_on_old
32
create_timed_files(OLDFILE, NEWFILE)
34
t1 = Rake.application.intern(FileTask, NEWFILE).enhance([OLDFILE])
35
t2 = Rake.application.intern(FileTask, OLDFILE)
36
assert ! t2.needed?, "Should not need to build old file"
37
assert ! t1.needed?, "Should not need to rebuild new file because of old"
40
def test_file_times_old_depends_on_new
41
create_timed_files(OLDFILE, NEWFILE)
43
t1 = Rake.application.intern(FileTask,OLDFILE).enhance([NEWFILE])
44
t2 = Rake.application.intern(FileTask, NEWFILE)
45
assert ! t2.needed?, "Should not need to build new file"
46
preq_stamp = t1.prerequisites.collect{|t| Task[t].timestamp}.max
47
assert_equal t2.timestamp, preq_stamp
48
assert t1.timestamp < preq_stamp, "T1 should be older"
49
assert t1.needed?, "Should need to rebuild old file because of new"
52
def test_file_depends_on_task_depend_on_file
53
create_timed_files(OLDFILE, NEWFILE)
55
file NEWFILE => [:obj] do |t| @runs << t.name end
56
task :obj => [OLDFILE] do |t| @runs << t.name end
57
file OLDFILE do |t| @runs << t.name end
61
assert ! @runs.include?(NEWFILE)
64
def test_existing_file_depends_on_non_existing_file
68
file OLDFILE => NEWFILE
69
assert_nothing_raised do Task[OLDFILE].invoke end
72
# I have currently disabled this test. I'm not convinced that
73
# deleting the file target on failure is always the proper thing to
74
# do. I'm willing to hear input on this topic.
75
def ztest_file_deletes_on_failure
77
file NEWFILE => [:obj] do |t|
78
FileUtils.touch NEWFILE
86
assert( ! File.exist?(NEWFILE), "NEWFILE should be deleted")
91
######################################################################
92
class Rake::TestDirectoryTask < Test::Unit::TestCase
96
rm_rf "testdata", :verbose=>false
100
rm_rf "testdata", :verbose=>false
105
directory "testdata/a/b/c"
106
assert_equal FileCreationTask, Task["testdata"].class
107
assert_equal FileCreationTask, Task["testdata/a"].class
108
assert_equal FileCreationTask, Task["testdata/a/b/c"].class
109
assert_nil Task["testdata"].comment
110
assert_equal "DESC", Task["testdata/a/b/c"].comment
111
assert_nil Task["testdata/a/b"].comment
113
Task['testdata/a/b'].invoke
115
assert File.exist?("testdata/a/b")
116
assert ! File.exist?("testdata/a/b/c")
119
if Rake::Win32.windows?
120
def test_directory_win32
122
FileUtils.mkdir_p("testdata")
123
Dir.chdir("testdata") do
124
directory 'c:/testdata/a/b/c'
125
assert_equal FileCreationTask, Task['c:/testdata'].class
126
assert_equal FileCreationTask, Task['c:/testdata/a'].class
127
assert_equal FileCreationTask, Task['c:/testdata/a/b/c'].class
128
assert_nil Task['c:/testdata'].comment
129
assert_equal "WIN32 DESC", Task['c:/testdata/a/b/c'].comment
130
assert_nil Task['c:/testdata/a/b'].comment
132
Task['c:/testdata/a/b'].invoke
134
assert File.exist?('c:/testdata/a/b')
135
assert ! File.exist?('c:/testdata/a/b/c')