rake 0.4.8 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. data/CHANGES +183 -0
  2. data/README +47 -14
  3. data/Rakefile +212 -44
  4. data/bin/rake +2 -3
  5. data/doc/jamis.rb +591 -0
  6. data/doc/rake.1.gz +0 -0
  7. data/doc/rakefile.rdoc +180 -3
  8. data/doc/release_notes/rake-0.4.14.rdoc +23 -0
  9. data/doc/release_notes/rake-0.4.15.rdoc +35 -0
  10. data/doc/release_notes/rake-0.5.0.rdoc +53 -0
  11. data/doc/release_notes/rake-0.5.3.rdoc +78 -0
  12. data/doc/release_notes/rake-0.5.4.rdoc +46 -0
  13. data/doc/release_notes/rake-0.6.0.rdoc +141 -0
  14. data/doc/release_notes/rake-0.7.0.rdoc +119 -0
  15. data/doc/release_notes/rake-0.7.1.rdoc +59 -0
  16. data/doc/release_notes/rake-0.7.2.rdoc +121 -0
  17. data/doc/release_notes/rake-0.7.3.rdoc +47 -0
  18. data/lib/rake/classic_namespace.rb +8 -0
  19. data/lib/rake/clean.rb +3 -1
  20. data/lib/rake/contrib/ftptools.rb +21 -21
  21. data/lib/rake/contrib/rubyforgepublisher.rb +3 -3
  22. data/lib/rake/contrib/sshpublisher.rb +1 -1
  23. data/lib/rake/contrib/sys.rb +20 -21
  24. data/lib/rake/gempackagetask.rb +12 -9
  25. data/lib/rake/loaders/makefile.rb +40 -0
  26. data/lib/rake/packagetask.rb +65 -33
  27. data/lib/rake/rake_test_loader.rb +5 -0
  28. data/lib/rake/rdoctask.rb +34 -15
  29. data/lib/rake/ruby182_test_unit_fix.rb +23 -0
  30. data/lib/rake/runtest.rb +4 -4
  31. data/lib/rake/tasklib.rb +3 -9
  32. data/lib/rake/testtask.rb +67 -24
  33. data/lib/rake.rb +1600 -552
  34. data/test/capture_stdout.rb +26 -0
  35. data/test/data/chains/Rakefile +15 -0
  36. data/test/data/default/Rakefile +19 -0
  37. data/test/data/dryrun/Rakefile +22 -0
  38. data/test/data/file_creation_task/Rakefile +30 -0
  39. data/test/data/imports/Rakefile +19 -0
  40. data/test/data/imports/deps.mf +1 -0
  41. data/test/data/multidesc/Rakefile +14 -0
  42. data/test/data/namespace/Rakefile +57 -0
  43. data/test/data/rakelib/test1.rb +3 -0
  44. data/test/data/sample.mf +9 -0
  45. data/test/data/unittest/Rakefile +1 -0
  46. data/test/filecreation.rb +18 -10
  47. data/test/functional.rb +3 -72
  48. data/test/reqfile.rb +3 -0
  49. data/test/reqfile2.rb +3 -0
  50. data/test/session_functional.rb +218 -0
  51. data/test/shellcommand.rb +3 -0
  52. data/test/test_application.rb +425 -0
  53. data/test/{testclean.rb → test_clean.rb} +1 -0
  54. data/test/test_definitions.rb +82 -0
  55. data/test/test_earlytime.rb +35 -0
  56. data/test/test_file_creation_task.rb +62 -0
  57. data/test/test_file_task.rb +139 -0
  58. data/test/test_filelist.rb +574 -0
  59. data/test/test_fileutils.rb +230 -0
  60. data/test/test_makefile_loader.rb +23 -0
  61. data/test/test_multitask.rb +45 -0
  62. data/test/test_namespace.rb +32 -0
  63. data/test/test_package_task.rb +130 -0
  64. data/test/test_pathmap.rb +188 -0
  65. data/test/test_rake.rb +34 -0
  66. data/test/test_require.rb +33 -0
  67. data/test/test_rules.rb +305 -0
  68. data/test/test_task_manager.rb +148 -0
  69. data/test/test_tasks.rb +146 -0
  70. data/test/{testtesttask.rb → test_test_task.rb} +5 -0
  71. data/test/test_top_level_functions.rb +79 -0
  72. metadata +134 -68
  73. data/test/testfilelist.rb +0 -255
  74. data/test/testfileutils.rb +0 -55
  75. data/test/testpackagetask.rb +0 -81
  76. data/test/testtasks.rb +0 -371
  77. /data/test/{testftp.rb → test_ftp.rb} +0 -0
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'rake'
5
+
6
+ # ====================================================================
7
+ class TestRequire < Test::Unit::TestCase
8
+
9
+ def test_can_load_rake_library
10
+ app = Rake::Application.new
11
+ assert app.instance_eval {
12
+ rake_require("test2", ['test/data/rakelib'], [])
13
+ }
14
+ end
15
+
16
+ def test_wont_reload_rake_library
17
+ app = Rake::Application.new
18
+ assert ! app.instance_eval {
19
+ rake_require("test2", ['test/data/rakelib'], ['test2'])
20
+ }
21
+ end
22
+
23
+ def test_throws_error_if_library_not_found
24
+ app = Rake::Application.new
25
+ ex = assert_raise(LoadError) {
26
+ assert app.instance_eval {
27
+ rake_require("testx", ['test/data/rakelib'], [])
28
+ }
29
+ }
30
+ assert_match(/x/, ex.message)
31
+ end
32
+ end
33
+
@@ -0,0 +1,305 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'fileutils'
5
+ require 'rake'
6
+ require 'test/filecreation'
7
+
8
+ ######################################################################
9
+ class TestRules < Test::Unit::TestCase
10
+ include Rake
11
+ include FileCreation
12
+
13
+ SRCFILE = "testdata/abc.c"
14
+ SRCFILE2 = "testdata/xyz.c"
15
+ FTNFILE = "testdata/abc.f"
16
+ OBJFILE = "testdata/abc.o"
17
+ FOOFILE = "testdata/foo"
18
+ DOTFOOFILE = "testdata/.foo"
19
+
20
+ def setup
21
+ Task.clear
22
+ @runs = []
23
+ end
24
+
25
+ def teardown
26
+ FileList['testdata/*'].each do |f| rm_r(f, :verbose=>false) end
27
+ end
28
+
29
+ def test_multiple_rules1
30
+ create_file(FTNFILE)
31
+ delete_file(SRCFILE)
32
+ delete_file(OBJFILE)
33
+ rule(/\.o$/ => ['.c']) do @runs << :C end
34
+ rule(/\.o$/ => ['.f']) do @runs << :F end
35
+ t = Task[OBJFILE]
36
+ t.invoke
37
+ Task[OBJFILE].invoke
38
+ assert_equal [:F], @runs
39
+ end
40
+
41
+ def test_multiple_rules2
42
+ create_file(FTNFILE)
43
+ delete_file(SRCFILE)
44
+ delete_file(OBJFILE)
45
+ rule(/\.o$/ => ['.f']) do @runs << :F end
46
+ rule(/\.o$/ => ['.c']) do @runs << :C end
47
+ Task[OBJFILE].invoke
48
+ assert_equal [:F], @runs
49
+ end
50
+
51
+ def test_create_with_source
52
+ create_file(SRCFILE)
53
+ rule(/\.o$/ => ['.c']) do |t|
54
+ @runs << t.name
55
+ assert_equal OBJFILE, t.name
56
+ assert_equal SRCFILE, t.source
57
+ end
58
+ Task[OBJFILE].invoke
59
+ assert_equal [OBJFILE], @runs
60
+ end
61
+
62
+ def test_single_dependent
63
+ create_file(SRCFILE)
64
+ rule(/\.o$/ => '.c') do |t|
65
+ @runs << t.name
66
+ end
67
+ Task[OBJFILE].invoke
68
+ assert_equal [OBJFILE], @runs
69
+ end
70
+
71
+ def test_rule_can_be_created_by_string
72
+ create_file(SRCFILE)
73
+ rule '.o' => ['.c'] do |t|
74
+ @runs << t.name
75
+ end
76
+ Task[OBJFILE].invoke
77
+ assert_equal [OBJFILE], @runs
78
+ end
79
+
80
+ def test_rule_prereqs_can_be_created_by_string
81
+ create_file(SRCFILE)
82
+ rule '.o' => '.c' do |t|
83
+ @runs << t.name
84
+ end
85
+ Task[OBJFILE].invoke
86
+ assert_equal [OBJFILE], @runs
87
+ end
88
+
89
+ def test_plain_strings_as_dependents_refer_to_files
90
+ create_file(SRCFILE)
91
+ rule '.o' => SRCFILE do |t|
92
+ @runs << t.name
93
+ end
94
+ Task[OBJFILE].invoke
95
+ assert_equal [OBJFILE], @runs
96
+ end
97
+
98
+ def test_file_names_beginning_with_dot_can_be_tricked_into_refering_to_file
99
+ verbose(false) do
100
+ chdir("testdata") do
101
+ create_file('.foo')
102
+ rule '.o' => "./.foo" do |t|
103
+ @runs << t.name
104
+ end
105
+ Task[OBJFILE].invoke
106
+ assert_equal [OBJFILE], @runs
107
+ end
108
+ end
109
+ end
110
+
111
+ def test_file_names_beginning_with_dot_can_be_wrapped_in_lambda
112
+ verbose(false) do
113
+ chdir("testdata") do
114
+ create_file(".foo")
115
+ rule '.o' => lambda{".foo"} do |t|
116
+ @runs << t.name
117
+ end
118
+ Task[OBJFILE].invoke
119
+ assert_equal [OBJFILE], @runs
120
+ end
121
+ end
122
+ end
123
+
124
+ def test_non_extension_rule_name_refers_to_file
125
+ verbose(false) do
126
+ chdir("testdata") do
127
+ create_file("abc.c")
128
+ rule "abc" => '.c' do |t|
129
+ @runs << t.name
130
+ end
131
+ Task["abc"].invoke
132
+ assert_equal ["abc"], @runs
133
+ end
134
+ end
135
+ end
136
+
137
+ def test_pathmap_automatically_applies_to_name
138
+ verbose(false) do
139
+ chdir("testdata") do
140
+ create_file("abc.c")
141
+ rule ".o" => '%{x,a}n.c' do |t|
142
+ @runs << "#{t.name} - #{t.source}"
143
+ end
144
+ Task["xbc.o"].invoke
145
+ assert_equal ["xbc.o - abc.c"], @runs
146
+ end
147
+ end
148
+ end
149
+
150
+ def test_rule_runs_when_explicit_task_has_no_actions
151
+ create_file(SRCFILE)
152
+ create_file(SRCFILE2)
153
+ delete_file(OBJFILE)
154
+ rule '.o' => '.c' do |t|
155
+ @runs << t.source
156
+ end
157
+ file OBJFILE => [SRCFILE2]
158
+ Task[OBJFILE].invoke
159
+ assert_equal [SRCFILE], @runs
160
+ end
161
+
162
+ def test_close_matches_on_name_do_not_trigger_rule
163
+ create_file("testdata/x.c")
164
+ rule '.o' => ['.c'] do |t|
165
+ @runs << t.name
166
+ end
167
+ assert_raises(RuntimeError) { Task['testdata/x.obj'].invoke }
168
+ assert_raises(RuntimeError) { Task['testdata/x.xyo'].invoke }
169
+ end
170
+
171
+ def test_rule_rebuilds_obj_when_source_is_newer
172
+ create_timed_files(OBJFILE, SRCFILE)
173
+ rule(/\.o$/ => ['.c']) do
174
+ @runs << :RULE
175
+ end
176
+ Task[OBJFILE].invoke
177
+ assert_equal [:RULE], @runs
178
+ end
179
+
180
+ def test_rule_with_two_sources_runs_if_both_sources_are_present
181
+ create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
182
+ rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
183
+ @runs << :RULE
184
+ end
185
+ Task[OBJFILE].invoke
186
+ assert_equal [:RULE], @runs
187
+ end
188
+
189
+ def test_rule_with_two_sources_but_one_missing_does_not_run
190
+ create_timed_files(OBJFILE, SRCFILE)
191
+ delete_file(SRCFILE2)
192
+ rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
193
+ @runs << :RULE
194
+ end
195
+ Task[OBJFILE].invoke
196
+ assert_equal [], @runs
197
+ end
198
+
199
+ def test_second_rule_runs_when_first_rule_doesnt
200
+ create_timed_files(OBJFILE, SRCFILE)
201
+ delete_file(SRCFILE2)
202
+ rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
203
+ @runs << :RULE1
204
+ end
205
+ rule OBJFILE => [lambda{SRCFILE}] do
206
+ @runs << :RULE2
207
+ end
208
+ Task[OBJFILE].invoke
209
+ assert_equal [:RULE2], @runs
210
+ end
211
+
212
+ def test_second_rule_doest_run_if_first_triggers
213
+ create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
214
+ rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
215
+ @runs << :RULE1
216
+ end
217
+ rule OBJFILE => [lambda{SRCFILE}] do
218
+ @runs << :RULE2
219
+ end
220
+ Task[OBJFILE].invoke
221
+ assert_equal [:RULE1], @runs
222
+ end
223
+
224
+ def test_second_rule_doest_run_if_first_triggers_with_reversed_rules
225
+ create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
226
+ rule OBJFILE => [lambda{SRCFILE}] do
227
+ @runs << :RULE1
228
+ end
229
+ rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
230
+ @runs << :RULE2
231
+ end
232
+ Task[OBJFILE].invoke
233
+ assert_equal [:RULE1], @runs
234
+ end
235
+
236
+ def test_rule_with_proc_dependent_will_trigger
237
+ ran = false
238
+ File.makedirs("testdata/src/jw")
239
+ create_file("testdata/src/jw/X.java")
240
+ rule %r(classes/.*\.class) => [
241
+ proc { |fn| fn.pathmap("%{classes,testdata/src}d/%n.java") }
242
+ ] do |task|
243
+ assert_equal task.name, 'classes/jw/X.class'
244
+ assert_equal task.source, 'testdata/src/jw/X.java'
245
+ @runs << :RULE
246
+ end
247
+ Task['classes/jw/X.class'].invoke
248
+ assert_equal [:RULE], @runs
249
+ ensure
250
+ rm_r("testdata/src", :verbose=>false) rescue nil
251
+ end
252
+
253
+ def test_proc_returning_lists_are_flattened_into_prereqs
254
+ ran = false
255
+ File.makedirs("testdata/flatten")
256
+ create_file("testdata/flatten/a.txt")
257
+ task 'testdata/flatten/b.data' do |t|
258
+ ran = true
259
+ touch t.name, :verbose => false
260
+ end
261
+ rule '.html' =>
262
+ proc { |fn|
263
+ [
264
+ fn.ext("txt"),
265
+ "testdata/flatten/b.data"
266
+ ]
267
+ } do |task|
268
+ end
269
+ Task['testdata/flatten/a.html'].invoke
270
+ assert ran, "Should have triggered flattened dependency"
271
+ ensure
272
+ rm_r("testdata/flatten", :verbose=>false) rescue nil
273
+ end
274
+
275
+ def test_recursive_rules_will_work_as_long_as_they_terminate
276
+ actions = []
277
+ create_file("testdata/abc.xml")
278
+ rule '.y' => '.xml' do actions << 'y' end
279
+ rule '.c' => '.y' do actions << 'c'end
280
+ rule '.o' => '.c' do actions << 'o'end
281
+ rule '.exe' => '.o' do actions << 'exe'end
282
+ Task["testdata/abc.exe"].invoke
283
+ assert_equal ['y', 'c', 'o', 'exe'], actions
284
+ end
285
+
286
+ def test_recursive_rules_that_dont_terminate_will_overflow
287
+ create_file("testdata/a.a")
288
+ prev = 'a'
289
+ ('b'..'z').each do |letter|
290
+ rule ".#{letter}" => ".#{prev}" do |t| puts "#{t.name}" end
291
+ prev = letter
292
+ end
293
+ ex = assert_raises(Rake::RuleRecursionOverflowError) {
294
+ Task["testdata/a.z"].invoke
295
+ }
296
+ assert_match(/a\.z => testdata\/a.y/, ex.message)
297
+ end
298
+
299
+ def test_rules_with_bad_dependents_will_fail
300
+ rule "a" => [ 1 ] do |t| puts t.name end
301
+ assert_raise(RuntimeError) do Task['a'].invoke end
302
+ end
303
+
304
+ end
305
+
@@ -0,0 +1,148 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'rake'
5
+
6
+ class TaskManager
7
+ include Rake::TaskManager
8
+ end
9
+
10
+ class TestTaskManager < Test::Unit::TestCase
11
+ def setup
12
+ @tm = TaskManager.new
13
+ end
14
+
15
+ def test_create_task_manager
16
+ assert_not_nil @tm
17
+ assert_equal [], @tm.tasks
18
+ end
19
+
20
+ def test_define_task
21
+ t = @tm.define_task(Rake::Task, :t)
22
+ assert_equal "t", t.name
23
+ assert_equal @tm, t.application
24
+ end
25
+
26
+ def test_name_lookup
27
+ t = @tm.define_task(Rake::Task, :t)
28
+ assert_equal t, @tm[:t]
29
+ end
30
+
31
+ def test_namespace_task_create
32
+ @tm.in_namespace("x") do
33
+ t = @tm.define_task(Rake::Task, :t)
34
+ assert_equal "x:t", t.name
35
+ end
36
+ assert_equal ["x:t"], @tm.tasks.collect { |t| t.name }
37
+ end
38
+
39
+ def test_anonymous_namespace
40
+ anon_ns = @tm.in_namespace(nil) do
41
+ t = @tm.define_task(Rake::Task, :t)
42
+ assert_equal "_anon_1:t", t.name
43
+ end
44
+ task = anon_ns[:t]
45
+ assert_equal "_anon_1:t", task.name
46
+ end
47
+
48
+ def test_create_filetask_in_namespace
49
+ @tm.in_namespace("x") do
50
+ t = @tm.define_task(Rake::FileTask, "fn")
51
+ assert_equal "fn", t.name
52
+ end
53
+ assert_equal ["fn"], @tm.tasks.collect { |t| t.name }
54
+ end
55
+
56
+ def testS_namespace_yields_same_namespace_as_returned
57
+ yielded_namespace = nil
58
+ returned_namespace = @tm.in_namespace("x") do |ns|
59
+ yielded_namespace = ns
60
+ end
61
+ assert_equal returned_namespace, yielded_namespace
62
+ end
63
+
64
+ def test_name_lookup_with_implicit_file_tasks
65
+ t = @tm["README"]
66
+ assert_equal "README", t.name
67
+ assert Rake::FileTask === t
68
+ end
69
+
70
+ def test_name_lookup_with_nonexistent_task
71
+ assert_raise(RuntimeError) {
72
+ t = @tm["DOES NOT EXIST"]
73
+ }
74
+ end
75
+
76
+ def test_name_lookup_in_multiple_scopes
77
+ aa = nil
78
+ bb = nil
79
+ xx = @tm.define_task(Rake::Task, :xx)
80
+ top_z = @tm.define_task(Rake::Task, :z)
81
+ @tm.in_namespace("a") do
82
+ aa = @tm.define_task(Rake::Task, :aa)
83
+ mid_z = @tm.define_task(Rake::Task, :z)
84
+ @tm.in_namespace("b") do
85
+ bb = @tm.define_task(Rake::Task, :bb)
86
+ bot_z = @tm.define_task(Rake::Task, :z)
87
+
88
+ assert_equal ["a", "b"], @tm.current_scope
89
+
90
+ assert_equal bb, @tm["a:b:bb"]
91
+ assert_equal aa, @tm["a:aa"]
92
+ assert_equal xx, @tm["xx"]
93
+ assert_equal bot_z, @tm["z"]
94
+ assert_equal mid_z, @tm["^z"]
95
+ assert_equal top_z, @tm["^^z"]
96
+ assert_equal top_z, @tm["rake:z"]
97
+ end
98
+
99
+ assert_equal ["a"], @tm.current_scope
100
+
101
+ assert_equal bb, @tm["a:b:bb"]
102
+ assert_equal aa, @tm["a:aa"]
103
+ assert_equal xx, @tm["xx"]
104
+ assert_equal bb, @tm["b:bb"]
105
+ assert_equal aa, @tm["aa"]
106
+ assert_equal mid_z, @tm["z"]
107
+ assert_equal top_z, @tm["^z"]
108
+ assert_equal top_z, @tm["rake:z"]
109
+ end
110
+
111
+ assert_equal [], @tm.current_scope
112
+
113
+ assert_equal [], xx.scope
114
+ assert_equal ['a'], aa.scope
115
+ assert_equal ['a', 'b'], bb.scope
116
+ end
117
+
118
+ def test_lookup_with_explicit_scopes
119
+ t1, t2, t3, s = (0...4).collect { nil }
120
+ t1 = @tm.define_task(Rake::Task, :t)
121
+ @tm.in_namespace("a") do
122
+ t2 = @tm.define_task(Rake::Task, :t)
123
+ s = @tm.define_task(Rake::Task, :s)
124
+ @tm.in_namespace("b") do
125
+ t3 = @tm.define_task(Rake::Task, :t)
126
+ end
127
+ end
128
+ assert_equal t1, @tm[:t, []]
129
+ assert_equal t2, @tm[:t, ["a"]]
130
+ assert_equal t3, @tm[:t, ["a", "b"]]
131
+ assert_equal s, @tm[:s, ["a", "b"]]
132
+ assert_equal s, @tm[:s, ["a"]]
133
+ end
134
+
135
+ def test_correctly_scoped_prerequisites_are_invoked
136
+ values = []
137
+ @tm = Rake::Application.new
138
+ @tm.define_task(Rake::Task, :z) do values << "top z" end
139
+ @tm.in_namespace("a") do
140
+ @tm.define_task(Rake::Task, :z) do values << "next z" end
141
+ @tm.define_task(Rake::Task, :x => :z)
142
+ end
143
+
144
+ @tm["a:x"].invoke
145
+ assert_equal ["next z"], values
146
+ end
147
+
148
+ end
@@ -0,0 +1,146 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'fileutils'
5
+ require 'rake'
6
+ require 'test/filecreation'
7
+ require 'test/capture_stdout'
8
+
9
+ ######################################################################
10
+ class TestTask < Test::Unit::TestCase
11
+ include CaptureStdout
12
+ include Rake
13
+
14
+ def setup
15
+ Task.clear
16
+ end
17
+
18
+ def test_create
19
+ arg = nil
20
+ t = intern(:name).enhance { |task| arg = task; 1234 }
21
+ assert_equal "name", t.name
22
+ assert_equal [], t.prerequisites
23
+ assert t.prerequisites.is_a?(FileList)
24
+ assert t.needed?
25
+ t.execute
26
+ assert_equal t, arg
27
+ assert_nil t.source
28
+ assert_equal [], t.sources
29
+ end
30
+
31
+ def test_invoke
32
+ runlist = []
33
+ t1 = intern(:t1).enhance([:t2, :t3]) { |t| runlist << t.name; 3321 }
34
+ t2 = intern(:t2).enhance { |t| runlist << t.name }
35
+ t3 = intern(:t3).enhance { |t| runlist << t.name }
36
+ assert_equal [:t2, :t3], t1.prerequisites
37
+ t1.invoke
38
+ assert_equal ["t2", "t3", "t1"], runlist
39
+ end
40
+
41
+ def test_dry_run_prevents_actions
42
+ Rake.application.options.dryrun = true
43
+ runlist = []
44
+ t1 = intern(:t1).enhance { |t| runlist << t.name; 3321 }
45
+ out = capture_stdout { t1.invoke }
46
+ assert_match(/execute .*t1/i, out)
47
+ assert_match(/dry run/i, out)
48
+ assert_no_match(/invoke/i, out)
49
+ assert_equal [], runlist
50
+ ensure
51
+ Rake.application.options.dryrun = false
52
+ end
53
+
54
+ def test_tasks_can_be_traced
55
+ Rake.application.options.trace = true
56
+ t1 = intern(:t1) { |t| runlist << t.name; 3321 }
57
+ out = capture_stdout {
58
+ t1.invoke
59
+ }
60
+ assert_match(/invoke t1/i, out)
61
+ assert_match(/execute t1/i, out)
62
+ ensure
63
+ Rake.application.options.trace = false
64
+ end
65
+
66
+ def test_no_double_invoke
67
+ runlist = []
68
+ t1 = intern(:t1).enhance([:t2, :t3]) { |t| runlist << t.name; 3321 }
69
+ t2 = intern(:t2).enhance([:t3]) { |t| runlist << t.name }
70
+ t3 = intern(:t3).enhance { |t| runlist << t.name }
71
+ t1.invoke
72
+ assert_equal ["t3", "t2", "t1"], runlist
73
+ end
74
+
75
+ def test_find
76
+ task :tfind
77
+ assert_equal "tfind", Task[:tfind].name
78
+ ex = assert_raises(RuntimeError) { Task[:leaves] }
79
+ assert_equal "Don't know how to build task 'leaves'", ex.message
80
+ end
81
+
82
+ def test_defined
83
+ assert ! Task.task_defined?(:a)
84
+ task :a
85
+ assert Task.task_defined?(:a)
86
+ end
87
+
88
+ def test_multi_invocations
89
+ runs = []
90
+ p = proc do |t| runs << t.name end
91
+ task({:t1=>[:t2,:t3]}, &p)
92
+ task({:t2=>[:t3]}, &p)
93
+ task(:t3, &p)
94
+ Task[:t1].invoke
95
+ assert_equal ["t1", "t2", "t3"], runs.sort
96
+ end
97
+
98
+ def test_task_list
99
+ task :t2
100
+ task :t1 => [:t2]
101
+ assert_equal ["t1", "t2"], Task.tasks.collect {|t| t.name}
102
+ end
103
+
104
+ def test_task_gives_name_on_to_s
105
+ task :abc
106
+ assert_equal "abc", Task[:abc].to_s
107
+ end
108
+
109
+ def test_symbols_can_be_prerequisites
110
+ task :a => :b
111
+ assert_equal ["b"], Task[:a].prerequisites
112
+ end
113
+
114
+ def test_strings_can_be_prerequisites
115
+ task :a => "b"
116
+ assert_equal ["b"], Task[:a].prerequisites
117
+ end
118
+
119
+ def test_arrays_can_be_prerequisites
120
+ task :a => ["b", "c"]
121
+ assert_equal ["b", "c"], Task[:a].prerequisites
122
+ end
123
+
124
+ def test_filelists_can_be_prerequisites
125
+ task :a => FileList.new.include("b", "c")
126
+ assert_equal ["b", "c"], Task[:a].prerequisites
127
+ end
128
+
129
+ def test_investigation_output
130
+ t1 = intern(:t1).enhance([:t2, :t3]) { |t| runlist << t.name; 3321 }
131
+ intern(:t2)
132
+ intern(:t3)
133
+ out = t1.investigation
134
+ assert_match(/class:\s*Rake::Task/, out)
135
+ assert_match(/needed:\s*true/, out)
136
+ assert_match(/pre-requisites:\s*--t2/, out)
137
+ end
138
+
139
+ private
140
+
141
+ def intern(name)
142
+ Rake.application.define_task(Rake::Task,name)
143
+ end
144
+
145
+ end
146
+
@@ -4,11 +4,16 @@ require 'test/unit'
4
4
  require 'rake/testtask'
5
5
 
6
6
  class TestTestTask < Test::Unit::TestCase
7
+ include Rake
7
8
  def setup
8
9
  Task.clear
9
10
  ENV['TEST'] = nil
10
11
  end
11
12
 
13
+ def teardown
14
+ FileUtils.rm_rf("testdata")
15
+ end
16
+
12
17
  def test_no_task
13
18
  assert ! Task.task_defined?(:test)
14
19
  end