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,35 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'rake'
5
+ require 'test/rake_test_setup'
6
+
7
+ # ====================================================================
8
+ class TestRequire < Test::Unit::TestCase
9
+ include TestMethods
10
+
11
+ def test_can_load_rake_library
12
+ app = Rake::Application.new
13
+ assert app.instance_eval {
14
+ rake_require("test2", ['test/data/rakelib'], [])
15
+ }
16
+ end
17
+
18
+ def test_wont_reload_rake_library
19
+ app = Rake::Application.new
20
+ assert ! app.instance_eval {
21
+ rake_require("test2", ['test/data/rakelib'], ['test2'])
22
+ }
23
+ end
24
+
25
+ def test_throws_error_if_library_not_found
26
+ app = Rake::Application.new
27
+ ex = assert_exception(LoadError) {
28
+ assert app.instance_eval {
29
+ rake_require("testx", ['test/data/rakelib'], [])
30
+ }
31
+ }
32
+ assert_match(/x/, ex.message)
33
+ end
34
+ end
35
+
@@ -0,0 +1,349 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'fileutils'
5
+ require 'rake'
6
+ require 'test/filecreation'
7
+ require 'test/rake_test_setup'
8
+
9
+ ######################################################################
10
+ class TestRules < Test::Unit::TestCase
11
+ include Rake
12
+ include FileCreation
13
+ include TestMethods
14
+
15
+ SRCFILE = "testdata/abc.c"
16
+ SRCFILE2 = "testdata/xyz.c"
17
+ FTNFILE = "testdata/abc.f"
18
+ OBJFILE = "testdata/abc.o"
19
+ FOOFILE = "testdata/foo"
20
+ DOTFOOFILE = "testdata/.foo"
21
+
22
+ def setup
23
+ Task.clear
24
+ @runs = []
25
+ end
26
+
27
+ def teardown
28
+ FileList['testdata/*'].uniq.each do |f| rm_r(f, :verbose=>false) end
29
+ end
30
+
31
+ def test_multiple_rules1
32
+ create_file(FTNFILE)
33
+ delete_file(SRCFILE)
34
+ delete_file(OBJFILE)
35
+ rule(/\.o$/ => ['.c']) do @runs << :C end
36
+ rule(/\.o$/ => ['.f']) do @runs << :F end
37
+ t = Task[OBJFILE]
38
+ t.invoke
39
+ Task[OBJFILE].invoke
40
+ assert_equal [:F], @runs
41
+ end
42
+
43
+ def test_multiple_rules2
44
+ create_file(FTNFILE)
45
+ delete_file(SRCFILE)
46
+ delete_file(OBJFILE)
47
+ rule(/\.o$/ => ['.f']) do @runs << :F end
48
+ rule(/\.o$/ => ['.c']) do @runs << :C end
49
+ Task[OBJFILE].invoke
50
+ assert_equal [:F], @runs
51
+ end
52
+
53
+ def test_create_with_source
54
+ create_file(SRCFILE)
55
+ rule(/\.o$/ => ['.c']) do |t|
56
+ @runs << t.name
57
+ assert_equal OBJFILE, t.name
58
+ assert_equal SRCFILE, t.source
59
+ end
60
+ Task[OBJFILE].invoke
61
+ assert_equal [OBJFILE], @runs
62
+ end
63
+
64
+ def test_single_dependent
65
+ create_file(SRCFILE)
66
+ rule(/\.o$/ => '.c') do |t|
67
+ @runs << t.name
68
+ end
69
+ Task[OBJFILE].invoke
70
+ assert_equal [OBJFILE], @runs
71
+ end
72
+
73
+ def test_rule_can_be_created_by_string
74
+ create_file(SRCFILE)
75
+ rule '.o' => ['.c'] do |t|
76
+ @runs << t.name
77
+ end
78
+ Task[OBJFILE].invoke
79
+ assert_equal [OBJFILE], @runs
80
+ end
81
+
82
+ def test_rule_prereqs_can_be_created_by_string
83
+ create_file(SRCFILE)
84
+ rule '.o' => '.c' do |t|
85
+ @runs << t.name
86
+ end
87
+ Task[OBJFILE].invoke
88
+ assert_equal [OBJFILE], @runs
89
+ end
90
+
91
+ def test_plain_strings_as_dependents_refer_to_files
92
+ create_file(SRCFILE)
93
+ rule '.o' => SRCFILE do |t|
94
+ @runs << t.name
95
+ end
96
+ Task[OBJFILE].invoke
97
+ assert_equal [OBJFILE], @runs
98
+ end
99
+
100
+ def test_file_names_beginning_with_dot_can_be_tricked_into_refering_to_file
101
+ verbose(false) do
102
+ chdir("testdata") do
103
+ create_file('.foo')
104
+ rule '.o' => "./.foo" do |t|
105
+ @runs << t.name
106
+ end
107
+ Task[OBJFILE].invoke
108
+ assert_equal [OBJFILE], @runs
109
+ end
110
+ end
111
+ end
112
+
113
+ def test_file_names_beginning_with_dot_can_be_wrapped_in_lambda
114
+ verbose(false) do
115
+ chdir("testdata") do
116
+ create_file(".foo")
117
+ rule '.o' => lambda{".foo"} do |t|
118
+ @runs << "#{t.name} - #{t.source}"
119
+ end
120
+ Task[OBJFILE].invoke
121
+ assert_equal ["#{OBJFILE} - .foo"], @runs
122
+ end
123
+ end
124
+ end
125
+
126
+ def test_file_names_containing_percent_can_be_wrapped_in_lambda
127
+ verbose(false) do
128
+ chdir("testdata") do
129
+ create_file("foo%x")
130
+ rule '.o' => lambda{"foo%x"} do |t|
131
+ @runs << "#{t.name} - #{t.source}"
132
+ end
133
+ Task[OBJFILE].invoke
134
+ assert_equal ["#{OBJFILE} - foo%x"], @runs
135
+ end
136
+ end
137
+ end
138
+
139
+ def test_non_extension_rule_name_refers_to_file
140
+ verbose(false) do
141
+ chdir("testdata") do
142
+ create_file("abc.c")
143
+ rule "abc" => '.c' do |t|
144
+ @runs << t.name
145
+ end
146
+ Task["abc"].invoke
147
+ assert_equal ["abc"], @runs
148
+ end
149
+ end
150
+ end
151
+
152
+ def test_pathmap_automatically_applies_to_name
153
+ verbose(false) do
154
+ chdir("testdata") do
155
+ create_file("zzabc.c")
156
+ rule ".o" => 'zz%{x,a}n.c' do |t|
157
+ @runs << "#{t.name} - #{t.source}"
158
+ end
159
+ Task["xbc.o"].invoke
160
+ assert_equal ["xbc.o - zzabc.c"], @runs
161
+ end
162
+ end
163
+ end
164
+
165
+ def test_plain_strings_are_just_filenames
166
+ verbose(false) do
167
+ chdir("testdata") do
168
+ create_file("plainname")
169
+ rule ".o" => 'plainname' do |t|
170
+ @runs << "#{t.name} - #{t.source}"
171
+ end
172
+ Task["xbc.o"].invoke
173
+ assert_equal ["xbc.o - plainname"], @runs
174
+ end
175
+ end
176
+ end
177
+
178
+ def test_rule_runs_when_explicit_task_has_no_actions
179
+ create_file(SRCFILE)
180
+ create_file(SRCFILE2)
181
+ delete_file(OBJFILE)
182
+ rule '.o' => '.c' do |t|
183
+ @runs << t.source
184
+ end
185
+ file OBJFILE => [SRCFILE2]
186
+ Task[OBJFILE].invoke
187
+ assert_equal [SRCFILE], @runs
188
+ end
189
+
190
+ def test_close_matches_on_name_do_not_trigger_rule
191
+ create_file("testdata/x.c")
192
+ rule '.o' => ['.c'] do |t|
193
+ @runs << t.name
194
+ end
195
+ assert_exception(RuntimeError) { Task['testdata/x.obj'].invoke }
196
+ assert_exception(RuntimeError) { Task['testdata/x.xyo'].invoke }
197
+ end
198
+
199
+ def test_rule_rebuilds_obj_when_source_is_newer
200
+ create_timed_files(OBJFILE, SRCFILE)
201
+ rule(/\.o$/ => ['.c']) do
202
+ @runs << :RULE
203
+ end
204
+ Task[OBJFILE].invoke
205
+ assert_equal [:RULE], @runs
206
+ end
207
+
208
+ def test_rule_with_two_sources_runs_if_both_sources_are_present
209
+ create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
210
+ rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
211
+ @runs << :RULE
212
+ end
213
+ Task[OBJFILE].invoke
214
+ assert_equal [:RULE], @runs
215
+ end
216
+
217
+ def test_rule_with_two_sources_but_one_missing_does_not_run
218
+ create_timed_files(OBJFILE, SRCFILE)
219
+ delete_file(SRCFILE2)
220
+ rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
221
+ @runs << :RULE
222
+ end
223
+ Task[OBJFILE].invoke
224
+ assert_equal [], @runs
225
+ end
226
+
227
+ def test_rule_with_two_sources_builds_both_sources
228
+ task 'x.aa'
229
+ task 'x.bb'
230
+ rule '.a' => '.aa' do
231
+ @runs << "A"
232
+ end
233
+ rule '.b' => '.bb' do
234
+ @runs << "B"
235
+ end
236
+ rule ".c" => ['.a', '.b'] do
237
+ @runs << "C"
238
+ end
239
+ Task["x.c"].invoke
240
+ assert_equal ["A", "B", "C"], @runs.sort
241
+ end
242
+
243
+ def test_second_rule_runs_when_first_rule_doesnt
244
+ create_timed_files(OBJFILE, SRCFILE)
245
+ delete_file(SRCFILE2)
246
+ rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
247
+ @runs << :RULE1
248
+ end
249
+ rule OBJFILE => [lambda{SRCFILE}] do
250
+ @runs << :RULE2
251
+ end
252
+ Task[OBJFILE].invoke
253
+ assert_equal [:RULE2], @runs
254
+ end
255
+
256
+ def test_second_rule_doest_run_if_first_triggers
257
+ create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
258
+ rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
259
+ @runs << :RULE1
260
+ end
261
+ rule OBJFILE => [lambda{SRCFILE}] do
262
+ @runs << :RULE2
263
+ end
264
+ Task[OBJFILE].invoke
265
+ assert_equal [:RULE1], @runs
266
+ end
267
+
268
+ def test_second_rule_doest_run_if_first_triggers_with_reversed_rules
269
+ create_timed_files(OBJFILE, SRCFILE, SRCFILE2)
270
+ rule OBJFILE => [lambda{SRCFILE}] do
271
+ @runs << :RULE1
272
+ end
273
+ rule OBJFILE => [lambda{SRCFILE}, lambda{SRCFILE2}] do
274
+ @runs << :RULE2
275
+ end
276
+ Task[OBJFILE].invoke
277
+ assert_equal [:RULE1], @runs
278
+ end
279
+
280
+ def test_rule_with_proc_dependent_will_trigger
281
+ ran = false
282
+ mkdir_p("testdata/src/jw")
283
+ create_file("testdata/src/jw/X.java")
284
+ rule %r(classes/.*\.class) => [
285
+ proc { |fn| fn.pathmap("%{classes,testdata/src}d/%n.java") }
286
+ ] do |task|
287
+ assert_equal task.name, 'classes/jw/X.class'
288
+ assert_equal task.source, 'testdata/src/jw/X.java'
289
+ @runs << :RULE
290
+ end
291
+ Task['classes/jw/X.class'].invoke
292
+ assert_equal [:RULE], @runs
293
+ ensure
294
+ rm_r("testdata/src", :verbose=>false) rescue nil
295
+ end
296
+
297
+ def test_proc_returning_lists_are_flattened_into_prereqs
298
+ ran = false
299
+ mkdir_p("testdata/flatten")
300
+ create_file("testdata/flatten/a.txt")
301
+ task 'testdata/flatten/b.data' do |t|
302
+ ran = true
303
+ touch t.name, :verbose => false
304
+ end
305
+ rule '.html' =>
306
+ proc { |fn|
307
+ [
308
+ fn.ext("txt"),
309
+ "testdata/flatten/b.data"
310
+ ]
311
+ } do |task|
312
+ end
313
+ Task['testdata/flatten/a.html'].invoke
314
+ assert ran, "Should have triggered flattened dependency"
315
+ ensure
316
+ rm_r("testdata/flatten", :verbose=>false) rescue nil
317
+ end
318
+
319
+ def test_recursive_rules_will_work_as_long_as_they_terminate
320
+ actions = []
321
+ create_file("testdata/abc.xml")
322
+ rule '.y' => '.xml' do actions << 'y' end
323
+ rule '.c' => '.y' do actions << 'c'end
324
+ rule '.o' => '.c' do actions << 'o'end
325
+ rule '.exe' => '.o' do actions << 'exe'end
326
+ Task["testdata/abc.exe"].invoke
327
+ assert_equal ['y', 'c', 'o', 'exe'], actions
328
+ end
329
+
330
+ def test_recursive_rules_that_dont_terminate_will_overflow
331
+ create_file("testdata/a.a")
332
+ prev = 'a'
333
+ ('b'..'z').each do |letter|
334
+ rule ".#{letter}" => ".#{prev}" do |t| puts "#{t.name}" end
335
+ prev = letter
336
+ end
337
+ ex = assert_exception(Rake::RuleRecursionOverflowError) {
338
+ Task["testdata/a.z"].invoke
339
+ }
340
+ assert_match(/a\.z => testdata\/a.y/, ex.message)
341
+ end
342
+
343
+ def test_rules_with_bad_dependents_will_fail
344
+ rule "a" => [ 1 ] do |t| puts t.name end
345
+ assert_exception(RuntimeError) do Task['a'].invoke end
346
+ end
347
+
348
+ end
349
+
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'rake'
5
+
6
+ ######################################################################
7
+ class TestTaskArguments < Test::Unit::TestCase
8
+ def teardown
9
+ ENV.delete('rev')
10
+ ENV.delete('VER')
11
+ end
12
+
13
+ def test_empty_arg_list_is_empty
14
+ ta = Rake::TaskArguments.new([], [])
15
+ assert_equal({}, ta.to_hash)
16
+ end
17
+
18
+ def test_multiple_values_in_args
19
+ ta = Rake::TaskArguments.new([:a, :b, :c], [:one, :two, :three])
20
+ assert_equal({:a => :one, :b => :two, :c => :three}, ta.to_hash)
21
+ end
22
+
23
+ def test_to_s
24
+ ta = Rake::TaskArguments.new([:a, :b, :c], [1, 2, 3])
25
+ assert_equal ta.to_hash.inspect, ta.to_s
26
+ assert_equal ta.to_hash.inspect, ta.inspect
27
+ end
28
+
29
+ def test_enumerable_behavior
30
+ ta = Rake::TaskArguments.new([:a, :b, :c], [1, 2 ,3])
31
+ assert_equal [10, 20, 30], ta.collect { |k,v| v * 10 }.sort
32
+ end
33
+
34
+ def test_named_args
35
+ ta = Rake::TaskArguments.new(["aa", "bb"], [1, 2])
36
+ assert_equal 1, ta.aa
37
+ assert_equal 1, ta[:aa]
38
+ assert_equal 1, ta["aa"]
39
+ assert_equal 2, ta.bb
40
+ assert_nil ta.cc
41
+ end
42
+
43
+ def test_args_knows_its_names
44
+ ta = Rake::TaskArguments.new(["aa", "bb"], [1, 2])
45
+ assert_equal ["aa", "bb"], ta.names
46
+ end
47
+
48
+ def test_extra_names_are_nil
49
+ ta = Rake::TaskArguments.new(["aa", "bb", "cc"], [1, 2])
50
+ assert_nil ta.cc
51
+ end
52
+
53
+ def test_args_can_reference_env_values
54
+ ta = Rake::TaskArguments.new(["aa"], [1])
55
+ ENV['rev'] = "1.2"
56
+ ENV['VER'] = "2.3"
57
+ assert_equal "1.2", ta.rev
58
+ assert_equal "2.3", ta.ver
59
+ end
60
+
61
+ def test_creating_new_argument_scopes
62
+ parent = Rake::TaskArguments.new(['p'], [1])
63
+ child = parent.new_scope(['c', 'p'])
64
+ assert_equal({:p=>1}, child.to_hash)
65
+ assert_equal 1, child.p
66
+ assert_equal 1, child["p"]
67
+ assert_equal 1, child[:p]
68
+ assert_nil child.c
69
+ end
70
+
71
+ def test_child_hides_parent_arg_names
72
+ parent = Rake::TaskArguments.new(['aa'], [1])
73
+ child = Rake::TaskArguments.new(['aa'], [2], parent)
74
+ assert_equal 2, child.aa
75
+ end
76
+
77
+ def test_default_arguments_values_can_be_merged
78
+ ta = Rake::TaskArguments.new(["aa", "bb"], [nil, "original_val"])
79
+ ta.with_defaults({ :aa => 'default_val' })
80
+ assert_equal 'default_val', ta[:aa]
81
+ assert_equal 'original_val', ta[:bb]
82
+ end
83
+
84
+ def test_default_arguements_that_dont_match_names_are_ignored
85
+ ta = Rake::TaskArguments.new(["aa", "bb"], [nil, "original_val"])
86
+ ta.with_defaults({ "cc" => "default_val" })
87
+ assert_nil ta[:cc]
88
+ end
89
+ end