craigmarksmith-rake 0.8.3.100

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 (104) hide show
  1. data/CHANGES +427 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +196 -0
  4. data/Rakefile +416 -0
  5. data/TODO +20 -0
  6. data/bin/rake +31 -0
  7. data/doc/command_line_usage.rdoc +102 -0
  8. data/doc/example/Rakefile1 +38 -0
  9. data/doc/example/Rakefile2 +35 -0
  10. data/doc/example/a.c +6 -0
  11. data/doc/example/b.c +6 -0
  12. data/doc/example/main.c +11 -0
  13. data/doc/glossary.rdoc +51 -0
  14. data/doc/jamis.rb +591 -0
  15. data/doc/proto_rake.rdoc +127 -0
  16. data/doc/rake.1.gz +0 -0
  17. data/doc/rakefile.rdoc +534 -0
  18. data/doc/rational.rdoc +151 -0
  19. data/doc/release_notes/rake-0.4.14.rdoc +23 -0
  20. data/doc/release_notes/rake-0.4.15.rdoc +35 -0
  21. data/doc/release_notes/rake-0.5.0.rdoc +53 -0
  22. data/doc/release_notes/rake-0.5.3.rdoc +78 -0
  23. data/doc/release_notes/rake-0.5.4.rdoc +46 -0
  24. data/doc/release_notes/rake-0.6.0.rdoc +141 -0
  25. data/doc/release_notes/rake-0.7.0.rdoc +119 -0
  26. data/doc/release_notes/rake-0.7.1.rdoc +59 -0
  27. data/doc/release_notes/rake-0.7.2.rdoc +121 -0
  28. data/doc/release_notes/rake-0.7.3.rdoc +47 -0
  29. data/doc/release_notes/rake-0.8.0.rdoc +114 -0
  30. data/doc/release_notes/rake-0.8.2.rdoc +165 -0
  31. data/doc/release_notes/rake-0.8.3.rdoc +112 -0
  32. data/doc/release_notes/rake-0.8.4.rdoc +147 -0
  33. data/install.rb +88 -0
  34. data/lib/rake/classic_namespace.rb +8 -0
  35. data/lib/rake/clean.rb +33 -0
  36. data/lib/rake/contrib/compositepublisher.rb +24 -0
  37. data/lib/rake/contrib/ftptools.rb +153 -0
  38. data/lib/rake/contrib/publisher.rb +75 -0
  39. data/lib/rake/contrib/rubyforgepublisher.rb +18 -0
  40. data/lib/rake/contrib/sshpublisher.rb +47 -0
  41. data/lib/rake/contrib/sys.rb +209 -0
  42. data/lib/rake/gempackagetask.rb +97 -0
  43. data/lib/rake/loaders/makefile.rb +42 -0
  44. data/lib/rake/packagetask.rb +184 -0
  45. data/lib/rake/rake_test_loader.rb +5 -0
  46. data/lib/rake/rdoctask.rb +209 -0
  47. data/lib/rake/ruby182_test_unit_fix.rb +23 -0
  48. data/lib/rake/runtest.rb +23 -0
  49. data/lib/rake/tasklib.rb +23 -0
  50. data/lib/rake/testtask.rb +161 -0
  51. data/lib/rake/win32.rb +55 -0
  52. data/lib/rake.rb +2519 -0
  53. data/test/capture_stdout.rb +26 -0
  54. data/test/check_expansion.rb +5 -0
  55. data/test/contrib/test_sys.rb +47 -0
  56. data/test/data/chains/Rakefile +15 -0
  57. data/test/data/default/Rakefile +19 -0
  58. data/test/data/dryrun/Rakefile +22 -0
  59. data/test/data/file_creation_task/Rakefile +33 -0
  60. data/test/data/imports/Rakefile +19 -0
  61. data/test/data/imports/deps.mf +1 -0
  62. data/test/data/multidesc/Rakefile +17 -0
  63. data/test/data/namespace/Rakefile +57 -0
  64. data/test/data/rakelib/test1.rb +3 -0
  65. data/test/data/rbext/rakefile.rb +3 -0
  66. data/test/data/sample.mf +14 -0
  67. data/test/data/statusreturn/Rakefile +8 -0
  68. data/test/data/unittest/Rakefile +1 -0
  69. data/test/filecreation.rb +32 -0
  70. data/test/functional.rb +15 -0
  71. data/test/in_environment.rb +30 -0
  72. data/test/rake_test_setup.rb +24 -0
  73. data/test/reqfile.rb +3 -0
  74. data/test/reqfile2.rb +3 -0
  75. data/test/session_functional.rb +339 -0
  76. data/test/shellcommand.rb +3 -0
  77. data/test/test_application.rb +690 -0
  78. data/test/test_clean.rb +14 -0
  79. data/test/test_definitions.rb +85 -0
  80. data/test/test_earlytime.rb +35 -0
  81. data/test/test_extension.rb +63 -0
  82. data/test/test_file_creation_task.rb +62 -0
  83. data/test/test_file_task.rb +143 -0
  84. data/test/test_filelist.rb +623 -0
  85. data/test/test_fileutils.rb +251 -0
  86. data/test/test_ftp.rb +59 -0
  87. data/test/test_invocation_chain.rb +81 -0
  88. data/test/test_makefile_loader.rb +26 -0
  89. data/test/test_multitask.rb +45 -0
  90. data/test/test_namespace.rb +55 -0
  91. data/test/test_package_task.rb +118 -0
  92. data/test/test_pathmap.rb +210 -0
  93. data/test/test_rake.rb +41 -0
  94. data/test/test_rdoc_task.rb +88 -0
  95. data/test/test_require.rb +35 -0
  96. data/test/test_rules.rb +349 -0
  97. data/test/test_task_arguments.rb +89 -0
  98. data/test/test_task_manager.rb +173 -0
  99. data/test/test_tasklib.rb +12 -0
  100. data/test/test_tasks.rb +374 -0
  101. data/test/test_test_task.rb +77 -0
  102. data/test/test_top_level_functions.rb +86 -0
  103. data/test/test_win32.rb +72 -0
  104. metadata +186 -0
@@ -0,0 +1,173 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'rake'
5
+ require 'test/rake_test_setup'
6
+
7
+ class TaskManager
8
+ include Rake::TaskManager
9
+ end
10
+
11
+ class TestTaskManager < Test::Unit::TestCase
12
+ include TestMethods
13
+
14
+ def setup
15
+ @tm = TaskManager.new
16
+ end
17
+
18
+ def test_create_task_manager
19
+ assert_not_nil @tm
20
+ assert_equal [], @tm.tasks
21
+ end
22
+
23
+ def test_define_task
24
+ t = @tm.define_task(Rake::Task, :t)
25
+ assert_equal "t", t.name
26
+ assert_equal @tm, t.application
27
+ end
28
+
29
+ def test_name_lookup
30
+ t = @tm.define_task(Rake::Task, :t)
31
+ assert_equal t, @tm[:t]
32
+ end
33
+
34
+ def test_namespace_task_create
35
+ @tm.in_namespace("x") do
36
+ t = @tm.define_task(Rake::Task, :t)
37
+ assert_equal "x:t", t.name
38
+ end
39
+ assert_equal ["x:t"], @tm.tasks.collect { |t| t.name }
40
+ end
41
+
42
+ def test_anonymous_namespace
43
+ anon_ns = @tm.in_namespace(nil) do
44
+ t = @tm.define_task(Rake::Task, :t)
45
+ assert_equal "_anon_1:t", t.name
46
+ end
47
+ task = anon_ns[:t]
48
+ assert_equal "_anon_1:t", task.name
49
+ end
50
+
51
+ def test_create_filetask_in_namespace
52
+ @tm.in_namespace("x") do
53
+ t = @tm.define_task(Rake::FileTask, "fn")
54
+ assert_equal "fn", t.name
55
+ end
56
+ assert_equal ["fn"], @tm.tasks.collect { |t| t.name }
57
+ end
58
+
59
+ def test_namespace_yields_same_namespace_as_returned
60
+ yielded_namespace = nil
61
+ returned_namespace = @tm.in_namespace("x") do |ns|
62
+ yielded_namespace = ns
63
+ end
64
+ assert_equal returned_namespace, yielded_namespace
65
+ end
66
+
67
+ def test_name_lookup_with_implicit_file_tasks
68
+ t = @tm["README"]
69
+ assert_equal "README", t.name
70
+ assert Rake::FileTask === t
71
+ end
72
+
73
+ def test_name_lookup_with_nonexistent_task
74
+ assert_exception(RuntimeError) {
75
+ t = @tm["DOES NOT EXIST"]
76
+ }
77
+ end
78
+
79
+ def test_name_lookup_in_multiple_scopes
80
+ aa = nil
81
+ bb = nil
82
+ xx = @tm.define_task(Rake::Task, :xx)
83
+ top_z = @tm.define_task(Rake::Task, :z)
84
+ @tm.in_namespace("a") do
85
+ aa = @tm.define_task(Rake::Task, :aa)
86
+ mid_z = @tm.define_task(Rake::Task, :z)
87
+ @tm.in_namespace("b") do
88
+ bb = @tm.define_task(Rake::Task, :bb)
89
+ bot_z = @tm.define_task(Rake::Task, :z)
90
+
91
+ assert_equal ["a", "b"], @tm.current_scope
92
+
93
+ assert_equal bb, @tm["a:b:bb"]
94
+ assert_equal aa, @tm["a:aa"]
95
+ assert_equal xx, @tm["xx"]
96
+ assert_equal bot_z, @tm["z"]
97
+ assert_equal mid_z, @tm["^z"]
98
+ assert_equal top_z, @tm["^^z"]
99
+ assert_equal top_z, @tm["rake:z"]
100
+ end
101
+
102
+ assert_equal ["a"], @tm.current_scope
103
+
104
+ assert_equal bb, @tm["a:b:bb"]
105
+ assert_equal aa, @tm["a:aa"]
106
+ assert_equal xx, @tm["xx"]
107
+ assert_equal bb, @tm["b:bb"]
108
+ assert_equal aa, @tm["aa"]
109
+ assert_equal mid_z, @tm["z"]
110
+ assert_equal top_z, @tm["^z"]
111
+ assert_equal top_z, @tm["rake:z"]
112
+ end
113
+
114
+ assert_equal [], @tm.current_scope
115
+
116
+ assert_equal [], xx.scope
117
+ assert_equal ['a'], aa.scope
118
+ assert_equal ['a', 'b'], bb.scope
119
+ end
120
+
121
+ def test_lookup_with_explicit_scopes
122
+ t1, t2, t3, s = (0...4).collect { nil }
123
+ t1 = @tm.define_task(Rake::Task, :t)
124
+ @tm.in_namespace("a") do
125
+ t2 = @tm.define_task(Rake::Task, :t)
126
+ s = @tm.define_task(Rake::Task, :s)
127
+ @tm.in_namespace("b") do
128
+ t3 = @tm.define_task(Rake::Task, :t)
129
+ end
130
+ end
131
+ assert_equal t1, @tm[:t, []]
132
+ assert_equal t2, @tm[:t, ["a"]]
133
+ assert_equal t3, @tm[:t, ["a", "b"]]
134
+ assert_equal s, @tm[:s, ["a", "b"]]
135
+ assert_equal s, @tm[:s, ["a"]]
136
+ end
137
+
138
+ def test_correctly_scoped_prerequisites_are_invoked
139
+ values = []
140
+ @tm = Rake::Application.new
141
+ @tm.define_task(Rake::Task, :z) do values << "top z" end
142
+ @tm.in_namespace("a") do
143
+ @tm.define_task(Rake::Task, :z) do values << "next z" end
144
+ @tm.define_task(Rake::Task, :x => :z)
145
+ end
146
+
147
+ @tm["a:x"].invoke
148
+ assert_equal ["next z"], values
149
+ end
150
+
151
+ end
152
+
153
+ class TestTaskManagerArgumentResolution < Test::Unit::TestCase
154
+ def test_good_arg_patterns
155
+ assert_equal [:t, [], []], task(:t)
156
+ assert_equal [:t, [], [:x]], task(:t => :x)
157
+ assert_equal [:t, [], [:x, :y]], task(:t => [:x, :y])
158
+
159
+ assert_equal [:t, [:a, :b], []], task(:t, :a, :b)
160
+ assert_equal [:t, [], [:x]], task(:t, :needs => :x)
161
+ assert_equal [:t, [:a, :b], [:x]], task(:t, :a, :b, :needs => :x)
162
+ assert_equal [:t, [:a, :b], [:x, :y]], task(:t, :a, :b, :needs => [:x, :y])
163
+
164
+ assert_equal [:t, [:a, :b], []], task(:t, [:a, :b])
165
+ assert_equal [:t, [:a, :b], [:x]], task(:t, [:a, :b] => :x)
166
+ assert_equal [:t, [:a, :b], [:x, :y]], task(:t, [:a, :b] => [:x, :y])
167
+ end
168
+
169
+ def task(*args)
170
+ tm = TaskManager.new
171
+ tm.resolve_args(args)
172
+ end
173
+ end
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'rake/tasklib'
5
+
6
+
7
+ class TestTaskLib < Test::Unit::TestCase
8
+ def test_paste
9
+ tl = Rake::TaskLib.new
10
+ assert_equal :ab, tl.paste(:a, :b)
11
+ end
12
+ end
@@ -0,0 +1,374 @@
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
+ require 'test/rake_test_setup'
9
+
10
+ ######################################################################
11
+ class TestTask < Test::Unit::TestCase
12
+ include CaptureStdout
13
+ include Rake
14
+ include TestMethods
15
+
16
+ def setup
17
+ Task.clear
18
+ end
19
+
20
+ def test_create
21
+ arg = nil
22
+ t = task(:name) { |task| arg = task; 1234 }
23
+ assert_equal "name", t.name
24
+ assert_equal [], t.prerequisites
25
+ assert t.needed?
26
+ t.execute(0)
27
+ assert_equal t, arg
28
+ assert_nil t.source
29
+ assert_equal [], t.sources
30
+ end
31
+
32
+ def test_inspect
33
+ t = task(:foo, :needs => [:bar, :baz])
34
+ assert_equal "<Rake::Task foo => [bar, baz]>", t.inspect
35
+ end
36
+
37
+ def test_invoke
38
+ runlist = []
39
+ t1 = task(:t1 => [:t2, :t3]) { |t| runlist << t.name; 3321 }
40
+ t2 = task(:t2) { |t| runlist << t.name }
41
+ t3 = task(:t3) { |t| runlist << t.name }
42
+ assert_equal ["t2", "t3"], t1.prerequisites
43
+ t1.invoke
44
+ assert_equal ["t2", "t3", "t1"], runlist
45
+ end
46
+
47
+ def test_invoke_with_circular_dependencies
48
+ runlist = []
49
+ t1 = task(:t1 => [:t2]) { |t| runlist << t.name; 3321 }
50
+ t2 = task(:t2 => [:t1]) { |t| runlist << t.name }
51
+ assert_equal ["t2"], t1.prerequisites
52
+ assert_equal ["t1"], t2.prerequisites
53
+ ex = assert_exception RuntimeError do
54
+ t1.invoke
55
+ end
56
+ assert_match(/circular dependency/i, ex.message)
57
+ assert_match(/t1 => t2 => t1/, ex.message)
58
+ end
59
+
60
+ def test_dry_run_prevents_actions
61
+ Rake.application.options.dryrun = true
62
+ runlist = []
63
+ t1 = task(:t1) { |t| runlist << t.name; 3321 }
64
+ out = capture_stdout { t1.invoke }
65
+ assert_match(/execute .*t1/i, out)
66
+ assert_match(/dry run/i, out)
67
+ assert_no_match(/invoke/i, out)
68
+ assert_equal [], runlist
69
+ ensure
70
+ Rake.application.options.dryrun = false
71
+ end
72
+
73
+ def test_tasks_can_be_traced
74
+ Rake.application.options.trace = true
75
+ t1 = task(:t1)
76
+ out = capture_stdout {
77
+ t1.invoke
78
+ }
79
+ assert_match(/invoke t1/i, out)
80
+ assert_match(/execute t1/i, out)
81
+ ensure
82
+ Rake.application.options.trace = false
83
+ end
84
+
85
+ def test_no_double_invoke
86
+ runlist = []
87
+ t1 = task(:t1 => [:t2, :t3]) { |t| runlist << t.name; 3321 }
88
+ t2 = task(:t2 => [:t3]) { |t| runlist << t.name }
89
+ t3 = task(:t3) { |t| runlist << t.name }
90
+ t1.invoke
91
+ assert_equal ["t3", "t2", "t1"], runlist
92
+ end
93
+
94
+ def test_can_double_invoke_with_reenable
95
+ runlist = []
96
+ t1 = task(:t1) { |t| runlist << t.name }
97
+ t1.invoke
98
+ t1.reenable
99
+ t1.invoke
100
+ assert_equal ["t1", "t1"], runlist
101
+ end
102
+
103
+ def test_clear
104
+ t = task("t" => "a") { }
105
+ t.clear
106
+ assert t.prerequisites.empty?, "prerequisites should be empty"
107
+ assert t.actions.empty?, "actions should be empty"
108
+ end
109
+
110
+ def test_clear_prerequisites
111
+ t = task("t" => ["a", "b"])
112
+ assert_equal ['a', 'b'], t.prerequisites
113
+ t.clear_prerequisites
114
+ assert_equal [], t.prerequisites
115
+ end
116
+
117
+ def test_clear_actions
118
+ t = task("t") { }
119
+ t.clear_actions
120
+ assert t.actions.empty?, "actions should be empty"
121
+ end
122
+
123
+ def test_find
124
+ task :tfind
125
+ assert_equal "tfind", Task[:tfind].name
126
+ ex = assert_exception(RuntimeError) { Task[:leaves] }
127
+ assert_equal "Don't know how to build task 'leaves'", ex.message
128
+ end
129
+
130
+ def test_defined
131
+ assert ! Task.task_defined?(:a)
132
+ task :a
133
+ assert Task.task_defined?(:a)
134
+ end
135
+
136
+ def test_multi_invocations
137
+ runs = []
138
+ p = proc do |t| runs << t.name end
139
+ task({:t1=>[:t2,:t3]}, &p)
140
+ task({:t2=>[:t3]}, &p)
141
+ task(:t3, &p)
142
+ Task[:t1].invoke
143
+ assert_equal ["t1", "t2", "t3"], runs.sort
144
+ end
145
+
146
+ def test_task_list
147
+ task :t2
148
+ task :t1 => [:t2]
149
+ assert_equal ["t1", "t2"], Task.tasks.collect {|t| t.name}
150
+ end
151
+
152
+ def test_task_gives_name_on_to_s
153
+ task :abc
154
+ assert_equal "abc", Task[:abc].to_s
155
+ end
156
+
157
+ def test_symbols_can_be_prerequisites
158
+ task :a => :b
159
+ assert_equal ["b"], Task[:a].prerequisites
160
+ end
161
+
162
+ def test_strings_can_be_prerequisites
163
+ task :a => "b"
164
+ assert_equal ["b"], Task[:a].prerequisites
165
+ end
166
+
167
+ def test_arrays_can_be_prerequisites
168
+ task :a => ["b", "c"]
169
+ assert_equal ["b", "c"], Task[:a].prerequisites
170
+ end
171
+
172
+ def test_filelists_can_be_prerequisites
173
+ task :a => FileList.new.include("b", "c")
174
+ assert_equal ["b", "c"], Task[:a].prerequisites
175
+ end
176
+
177
+ def test_investigation_output
178
+ t1 = task(:t1 => [:t2, :t3]) { |t| runlist << t.name; 3321 }
179
+ task(:t2)
180
+ task(:t3)
181
+ out = t1.investigation
182
+ assert_match(/class:\s*Rake::Task/, out)
183
+ assert_match(/needed:\s*true/, out)
184
+ assert_match(/pre-requisites:\s*--t[23]/, out)
185
+ end
186
+
187
+
188
+ def test_extended_comments
189
+ desc %{
190
+ This is a comment.
191
+
192
+ And this is the extended comment.
193
+ name -- Name of task to execute.
194
+ rev -- Software revision to use.
195
+ }
196
+ t = task(:t, :name, :rev)
197
+ assert_equal "[name,rev]", t.arg_description
198
+ assert_equal "This is a comment.", t.comment
199
+ assert_match(/^\s*name -- Name/, t.full_comment)
200
+ assert_match(/^\s*rev -- Software/, t.full_comment)
201
+ assert_match(/\A\s*This is a comment\.$/, t.full_comment)
202
+ end
203
+
204
+ def test_multiple_comments
205
+ desc "line one"
206
+ t = task(:t)
207
+ desc "line two"
208
+ task(:t)
209
+ assert_equal "line one / line two", t.comment
210
+ end
211
+
212
+ def test_settable_comments
213
+ t = task(:t)
214
+ t.comment = "HI"
215
+ assert_equal "HI", t.comment
216
+ end
217
+ end
218
+
219
+ ######################################################################
220
+ class TestTaskWithArguments < Test::Unit::TestCase
221
+ include CaptureStdout
222
+ include Rake
223
+ include TestMethods
224
+
225
+ def setup
226
+ Task.clear
227
+ end
228
+
229
+ def test_no_args_given
230
+ t = task :t
231
+ assert_equal [], t.arg_names
232
+ end
233
+
234
+ def test_args_given
235
+ t = task :t, :a, :b
236
+ assert_equal [:a, :b], t.arg_names
237
+ end
238
+
239
+ def test_name_and_needs
240
+ t = task(:t => [:pre])
241
+ assert_equal "t", t.name
242
+ assert_equal [], t.arg_names
243
+ assert_equal ["pre"], t.prerequisites
244
+ end
245
+
246
+ def test_name_and_explicit_needs
247
+ t = task(:t, :needs => [:pre])
248
+ assert_equal "t", t.name
249
+ assert_equal [], t.arg_names
250
+ assert_equal ["pre"], t.prerequisites
251
+ end
252
+
253
+ def test_name_args_and_explicit_needs
254
+ t = task(:t, :x, :y, :needs => [:pre])
255
+ assert_equal "t", t.name
256
+ assert_equal [:x, :y], t.arg_names
257
+ assert_equal ["pre"], t.prerequisites
258
+ end
259
+
260
+ def test_illegal_keys_in_task_name_hash
261
+ assert_exception RuntimeError do
262
+ t = task(:t, :x, :y => 1, :needs => [:pre])
263
+ end
264
+ end
265
+
266
+ def test_arg_list_is_empty_if_no_args_given
267
+ t = task(:t) { |tt, args| assert_equal({}, args.to_hash) }
268
+ t.invoke(1, 2, 3)
269
+ end
270
+
271
+ def test_tasks_can_access_arguments_as_hash
272
+ t = task :t, :a, :b, :c do |tt, args|
273
+ assert_equal({:a => 1, :b => 2, :c => 3}, args.to_hash)
274
+ assert_equal 1, args[:a]
275
+ assert_equal 2, args[:b]
276
+ assert_equal 3, args[:c]
277
+ assert_equal 1, args.a
278
+ assert_equal 2, args.b
279
+ assert_equal 3, args.c
280
+ end
281
+ t.invoke(1, 2, 3)
282
+ end
283
+
284
+ def test_actions_of_various_arity_are_ok_with_args
285
+ notes = []
286
+ t = task(:t, :x) do
287
+ notes << :a
288
+ end
289
+ t.enhance do | |
290
+ notes << :b
291
+ end
292
+ t.enhance do |task|
293
+ notes << :c
294
+ assert_kind_of Task, task
295
+ end
296
+ t.enhance do |t2, args|
297
+ notes << :d
298
+ assert_equal t, t2
299
+ assert_equal({:x => 1}, args.to_hash)
300
+ end
301
+ assert_nothing_raised do t.invoke(1) end
302
+ assert_equal [:a, :b, :c, :d], notes
303
+ end
304
+
305
+ def test_arguments_are_passed_to_block
306
+ t = task(:t, :a, :b) { |tt, args|
307
+ assert_equal( { :a => 1, :b => 2 }, args.to_hash )
308
+ }
309
+ t.invoke(1, 2)
310
+ end
311
+
312
+ def test_extra_parameters_are_ignored
313
+ t = task(:t, :a) { |tt, args|
314
+ assert_equal 1, args.a
315
+ assert_nil args.b
316
+ }
317
+ t.invoke(1, 2)
318
+ end
319
+
320
+ def test_arguments_are_passed_to_all_blocks
321
+ counter = 0
322
+ t = task :t, :a
323
+ task :t do |tt, args|
324
+ assert_equal 1, args.a
325
+ counter += 1
326
+ end
327
+ task :t do |tt, args|
328
+ assert_equal 1, args.a
329
+ counter += 1
330
+ end
331
+ t.invoke(1)
332
+ assert_equal 2, counter
333
+ end
334
+
335
+ def test_block_with_no_parameters_is_ok
336
+ t = task(:t) { }
337
+ t.invoke(1, 2)
338
+ end
339
+
340
+ def test_name_with_args
341
+ desc "T"
342
+ t = task(:tt, :a, :b)
343
+ assert_equal "tt", t.name
344
+ assert_equal "T", t.comment
345
+ assert_equal "[a,b]", t.arg_description
346
+ assert_equal "tt[a,b]", t.name_with_args
347
+ assert_equal [:a, :b],t.arg_names
348
+ end
349
+
350
+ def test_named_args_are_passed_to_prereqs
351
+ value = nil
352
+ pre = task(:pre, :rev) { |t, args| value = args.rev }
353
+ t = task(:t, :name, :rev, :needs => [:pre])
354
+ t.invoke("bill", "1.2")
355
+ assert_equal "1.2", value
356
+ end
357
+
358
+ def test_args_not_passed_if_no_prereq_names
359
+ pre = task(:pre) { |t, args|
360
+ assert_equal({}, args.to_hash)
361
+ assert_equal "bill", args.name
362
+ }
363
+ t = task(:t, :name, :rev, :needs => [:pre])
364
+ t.invoke("bill", "1.2")
365
+ end
366
+
367
+ def test_args_not_passed_if_no_arg_names
368
+ pre = task(:pre, :rev) { |t, args|
369
+ assert_equal({}, args.to_hash)
370
+ }
371
+ t = task(:t, :needs => [:pre])
372
+ t.invoke("bill", "1.2")
373
+ end
374
+ end