1require File.expand_path('../helper', __FILE__)
2require 'fileutils'
3
4######################################################################
5class TestRakeFileCreationTask < Rake::TestCase
6  include Rake
7  include Rake::DSL
8
9  DUMMY_DIR = 'dummy_dir'
10
11  def setup
12    super
13
14    Task.clear
15  end
16
17  def test_file_needed
18    create_dir DUMMY_DIR
19    fc_task = Task[DUMMY_DIR]
20    assert_equal DUMMY_DIR, fc_task.name
21    FileUtils.rm_rf fc_task.name
22    assert fc_task.needed?, "file should be needed"
23    FileUtils.mkdir fc_task.name
24    assert_equal nil, fc_task.prerequisites.collect{|n| Task[n].timestamp}.max
25    assert ! fc_task.needed?, "file should not be needed"
26  end
27
28  def test_directory
29    directory DUMMY_DIR
30    fc_task = Task[DUMMY_DIR]
31    assert_equal DUMMY_DIR, fc_task.name
32    assert FileCreationTask === fc_task
33  end
34
35  def test_no_retriggers_on_filecreate_task
36    create_timed_files(OLDFILE, NEWFILE)
37    t1 = Rake.application.intern(FileCreationTask, OLDFILE).enhance([NEWFILE])
38    t2 = Rake.application.intern(FileCreationTask, NEWFILE)
39    assert ! t2.needed?, "Should not need to build new file"
40    assert ! t1.needed?, "Should not need to rebuild old file because of new"
41  end
42
43  def test_no_retriggers_on_file_task
44    create_timed_files(OLDFILE, NEWFILE)
45    t1 = Rake.application.intern(FileCreationTask, OLDFILE).enhance([NEWFILE])
46    t2 = Rake.application.intern(FileCreationTask, NEWFILE)
47    assert ! t2.needed?, "Should not need to build new file"
48    assert ! t1.needed?, "Should not need to rebuild old file because of new"
49  end
50
51  def test_very_early_timestamp
52    t1 = Rake.application.intern(FileCreationTask, OLDFILE)
53    assert t1.timestamp < Time.now
54    assert t1.timestamp < Time.now - 1000000
55  end
56end
57