~ubuntu-branches/ubuntu/quantal/ruby1.9.1/quantal

« back to all changes in this revision

Viewing changes to test/rake/test_rake_file_task.rb

  • Committer: Bazaar Package Importer
  • Author(s): Lucas Nussbaum
  • Date: 2011-09-24 19:16:17 UTC
  • mfrom: (1.1.8 upstream) (13.1.7 experimental)
  • Revision ID: james.westby@ubuntu.com-20110924191617-o1qz4rcmqjot8zuy
Tags: 1.9.3~rc1-1
* New upstream release: 1.9.3 RC1.
  + Includes load.c fixes. Closes: #639959.
* Upload to unstable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
require File.expand_path('../helper', __FILE__)
 
2
require 'fileutils'
 
3
 
 
4
class TestRakeFileTask < Rake::TestCase
 
5
  include Rake
 
6
 
 
7
  def setup
 
8
    super
 
9
 
 
10
    Task.clear
 
11
    @runs = Array.new
 
12
    FileUtils.rm_f NEWFILE
 
13
    FileUtils.rm_f OLDFILE
 
14
  end
 
15
 
 
16
  def test_file_need
 
17
    name = "dummy"
 
18
    file name
 
19
 
 
20
    ftask = Task[name]
 
21
 
 
22
    assert_equal name.to_s, ftask.name
 
23
    File.delete(ftask.name) rescue nil
 
24
 
 
25
    assert ftask.needed?, "file should be needed"
 
26
 
 
27
    open(ftask.name, "w") { |f| f.puts "HI" }
 
28
 
 
29
    assert_equal nil, ftask.prerequisites.collect{|n| Task[n].timestamp}.max
 
30
    assert ! ftask.needed?, "file should not be needed"
 
31
  ensure
 
32
    File.delete(ftask.name) rescue nil
 
33
  end
 
34
 
 
35
  def test_file_times_new_depends_on_old
 
36
    create_timed_files(OLDFILE, NEWFILE)
 
37
 
 
38
    t1 = Rake.application.intern(FileTask, NEWFILE).enhance([OLDFILE])
 
39
    t2 = Rake.application.intern(FileTask, OLDFILE)
 
40
    assert ! t2.needed?, "Should not need to build old file"
 
41
    assert ! t1.needed?, "Should not need to rebuild new file because of old"
 
42
  end
 
43
 
 
44
  def test_file_times_old_depends_on_new
 
45
    create_timed_files(OLDFILE, NEWFILE)
 
46
 
 
47
    t1 = Rake.application.intern(FileTask,OLDFILE).enhance([NEWFILE])
 
48
    t2 = Rake.application.intern(FileTask, NEWFILE)
 
49
    assert ! t2.needed?, "Should not need to build new file"
 
50
    preq_stamp = t1.prerequisites.collect{|t| Task[t].timestamp}.max
 
51
    assert_equal t2.timestamp, preq_stamp
 
52
    assert t1.timestamp < preq_stamp, "T1 should be older"
 
53
    assert t1.needed?, "Should need to rebuild old file because of new"
 
54
  end
 
55
 
 
56
  def test_file_depends_on_task_depend_on_file
 
57
    create_timed_files(OLDFILE, NEWFILE)
 
58
 
 
59
    file NEWFILE => [:obj] do |t| @runs << t.name end
 
60
    task :obj => [OLDFILE] do |t| @runs << t.name end
 
61
    file OLDFILE           do |t| @runs << t.name end
 
62
 
 
63
    Task[:obj].invoke
 
64
    Task[NEWFILE].invoke
 
65
    assert ! @runs.include?(NEWFILE)
 
66
  end
 
67
 
 
68
  def test_existing_file_depends_on_non_existing_file
 
69
    @ran = false
 
70
 
 
71
    create_file(OLDFILE)
 
72
    delete_file(NEWFILE)
 
73
    file NEWFILE do
 
74
      @ran = true
 
75
    end
 
76
 
 
77
    file OLDFILE => NEWFILE
 
78
 
 
79
    Task[OLDFILE].invoke
 
80
 
 
81
    assert @ran
 
82
  end
 
83
 
 
84
  # I have currently disabled this test.  I'm not convinced that
 
85
  # deleting the file target on failure is always the proper thing to
 
86
  # do.  I'm willing to hear input on this topic.
 
87
  def ztest_file_deletes_on_failure
 
88
    task :obj
 
89
    file NEWFILE => [:obj] do |t|
 
90
      FileUtils.touch NEWFILE
 
91
      fail "Ooops"
 
92
    end
 
93
    assert Task[NEWFILE]
 
94
    begin
 
95
      Task[NEWFILE].invoke
 
96
    rescue Exception
 
97
    end
 
98
    assert( ! File.exist?(NEWFILE), "NEWFILE should be deleted")
 
99
  end
 
100
 
 
101
end
 
102