rant 0.4.6 → 0.4.8

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 (45) hide show
  1. data/INSTALL +44 -0
  2. data/NEWS +30 -0
  3. data/README +6 -46
  4. data/Rantfile +38 -7
  5. data/doc/c.rdoc +2 -0
  6. data/doc/command.rdoc +210 -0
  7. data/doc/examples/c_dependencies/Rantfile +1 -1
  8. data/doc/examples/directedrule/Rantfile +1 -1
  9. data/doc/homepage/index.html +12 -1
  10. data/doc/rant-import.rdoc +5 -0
  11. data/doc/rant_vs_rake.rdoc +107 -0
  12. data/doc/rantfile.rdoc +17 -17
  13. data/doc/rubyproject.rdoc +45 -45
  14. data/doc/subdirs.rdoc +1 -1
  15. data/lib/rant/coregen.rb +62 -22
  16. data/lib/rant/import/archive.rb +1 -0
  17. data/lib/rant/import/command.rb +206 -0
  18. data/lib/rant/import/nodes/default.rb +12 -6
  19. data/lib/rant/import/nodes/signed.rb +3 -3
  20. data/lib/rant/import/signedfile.rb +14 -15
  21. data/lib/rant/import/win32/rubycmdwrapper.rb +1 -0
  22. data/lib/rant/import.rb +52 -4
  23. data/lib/rant/metautils.rb +119 -0
  24. data/lib/rant/node.rb +11 -2
  25. data/lib/rant/rantenv.rb +5 -2
  26. data/lib/rant/rantlib.rb +30 -46
  27. data/lib/rant/rantsys.rb +81 -13
  28. data/lib/rant/rantvar.rb +1 -76
  29. data/lib/rant.rb +2 -2
  30. data/misc/TODO +21 -0
  31. data/test/deprecated/test_0_5_2.rb +28 -0
  32. data/test/deprecated/test_0_6_0.rb +24 -0
  33. data/test/dyn_dependencies.rf +25 -0
  34. data/test/import/command/Rantfile +102 -0
  35. data/test/import/command/test_command.rb +597 -0
  36. data/test/rant-import/test_rant-import.rb +23 -1
  37. data/test/rule.rf +2 -0
  38. data/test/test_dyn_dependencies.rb +45 -0
  39. data/test/test_env.rb +5 -4
  40. data/test/test_filelist.rb +60 -3
  41. data/test/test_rant_interface.rb +5 -0
  42. data/test/test_sys.rb +53 -2
  43. data/test/tutil.rb +14 -6
  44. metadata +17 -6
  45. data/test/deprecated/test_0_4_8.rb +0 -41
@@ -0,0 +1,597 @@
1
+
2
+ require 'test/unit'
3
+ require 'tutil'
4
+
5
+ $testImportCommandDir ||= File.expand_path(File.dirname(__FILE__))
6
+
7
+ class TestImportCommand < Test::Unit::TestCase
8
+ include Rant::TestUtil
9
+ def setup
10
+ # Ensure we run in test directory.
11
+ Dir.chdir($testImportCommandDir)
12
+ end
13
+ def teardown
14
+ Dir.chdir($testImportCommandDir)
15
+ assert_rant "autoclean"
16
+ assert Rant::FileList["*.t"].empty?
17
+ assert Rant::FileList[".rant.meta"].empty?
18
+ end
19
+ def test_plain_syntax_no_deps
20
+ out, err = assert_rant "b.t"
21
+ assert err.empty?
22
+ assert !out.empty?
23
+ assert test(?f, "b.t")
24
+ assert_equal "b", File.read("b.t").strip
25
+ out, err = assert_rant "b.t"
26
+ assert err.empty?
27
+ assert out.empty?
28
+ out, err = assert_rant "b.t", "btxt=x"
29
+ assert err.empty?
30
+ assert !out.empty?
31
+ assert test(?f, "b.t")
32
+ assert_equal "x", File.read("b.t").strip
33
+ out, err = assert_rant "b.t", "btxt=x"
34
+ assert err.empty?
35
+ assert out.empty?
36
+ end
37
+ def test_plain_syntax_no_deps_md5
38
+ out, err = assert_rant "-imd5", "b.t"
39
+ assert err.empty?
40
+ assert !out.empty?
41
+ assert test(?f, "b.t")
42
+ assert_equal "b", File.read("b.t").strip
43
+ out, err = assert_rant "-imd5", "b.t"
44
+ assert err.empty?
45
+ assert out.empty?
46
+ out, err = assert_rant "-imd5", "b.t", "btxt=x"
47
+ assert err.empty?
48
+ assert !out.empty?
49
+ assert test(?f, "b.t")
50
+ assert_equal "x", File.read("b.t").strip
51
+ out, err = assert_rant "-imd5", "b.t", "btxt=x"
52
+ assert err.empty?
53
+ assert out.empty?
54
+ end
55
+ def test_opt_tasks
56
+ out, err = assert_rant "-T"
57
+ assert err.empty?
58
+ lines = out.split(/\n/)
59
+ assert_equal 1, lines.size
60
+ assert_match(/\ba\.t\b.*\bBuild a\.t\b/, lines.first)
61
+ end
62
+ def test_block_syntax
63
+ out, err = assert_rant
64
+ assert err.empty?
65
+ lines = out.split(/\n/)
66
+ assert_match(/b\.t/, lines[0])
67
+ assert_match(/c\.t/, lines[1])
68
+ assert_match(/a\.t/, lines[2])
69
+ assert_file_content "a.t", "b.t c.t", :strip
70
+ assert_file_content "b.t", "b", :strip
71
+ assert_file_content "c.t", "", :strip
72
+ out, err = assert_rant
73
+ assert err.empty?
74
+ assert out.empty?
75
+ end
76
+ def test_block_syntax_md5
77
+ out, err = assert_rant "-imd5"
78
+ assert err.empty?
79
+ lines = out.split(/\n/)
80
+ assert_match(/b\.t/, lines[0])
81
+ assert_match(/c\.t/, lines[1])
82
+ assert_match(/a\.t/, lines[2])
83
+ assert_file_content "a.t", "b.t c.t", :strip
84
+ assert_file_content "b.t", "b", :strip
85
+ assert_file_content "c.t", "", :strip
86
+ out, err = assert_rant "-imd5"
87
+ assert err.empty?
88
+ assert out.empty?
89
+ Rant::Sys.write_to_file "d .t", "abc"
90
+ out, err = assert_rant "-imd5"
91
+ assert err.empty?
92
+ lines = out.split(/\n/)
93
+ assert_match(/c\.t/, lines[0])
94
+ assert_match(/a\.t/, lines[1])
95
+ assert_file_content "a.t", "b.t c.t", :strip
96
+ assert_file_content "c.t", "d .t", :strip
97
+ out, err = assert_rant "-imd5"
98
+ assert err.empty?
99
+ assert out.empty?
100
+ ensure
101
+ Rant::Sys.rm_f "d .t"
102
+ end
103
+ def test_enhance
104
+ Rant::Sys.write_to_file "d.t", "d\n"
105
+ out, err = assert_rant "b.t", "be=on"
106
+ assert err.empty?
107
+ assert !out.empty?
108
+ assert_file_content "b.t", "b\nd\n"
109
+ out, err = assert_rant "b.t", "be=on"
110
+ assert err.empty?
111
+ assert out.empty?
112
+ ensure
113
+ Rant::Sys.rm_f "d.t"
114
+ end
115
+ def test_enhance_md5
116
+ Rant::Sys.write_to_file "d.t", "d\n"
117
+ out, err = assert_rant "-imd5", "b.t", "be=on"
118
+ assert err.empty?
119
+ assert !out.empty?
120
+ assert_file_content "b.t", "b\nd\n"
121
+ out, err = assert_rant "-imd5", "b.t", "be=on"
122
+ assert err.empty?
123
+ assert out.empty?
124
+ Rant::Sys.write_to_file "d.t", "e\n"
125
+ out, err = assert_rant "-imd5", "b.t", "be=on"
126
+ assert err.empty?
127
+ assert !out.empty?
128
+ assert_file_content "b.t", "b\ne\n"
129
+ out, err = assert_rant "-imd5", "b.t", "be=on"
130
+ assert err.empty?
131
+ assert out.empty?
132
+ Rant::Sys.write_to_file "b.t", "c\n"
133
+ out, err = assert_rant "-imd5", "b.t", "be=on"
134
+ assert err.empty?
135
+ assert !out.empty?
136
+ assert_file_content "b.t", "b\ne\n"
137
+ out, err = assert_rant "-imd5", "b.t", "be=on"
138
+ assert err.empty?
139
+ assert out.empty?
140
+ ensure
141
+ Rant::Sys.rm_f "d.t"
142
+ end
143
+ def test_rule
144
+ out, err = assert_rant :fail, "a.out"
145
+ assert out.empty?
146
+ lines = err.split(/\n/)
147
+ assert lines.size < 3
148
+ assert_match(/ERROR.*\ba\.out\b/, lines.first)
149
+ assert !test(?e, "a.out")
150
+ assert !test(?e, "a.in1")
151
+ Rant::Sys.write_to_file "a.in2", ""
152
+ assert test(?f, "a.in2")
153
+ out, err = assert_rant "a.out"
154
+ assert err.empty?
155
+ assert !out.empty?
156
+ assert_file_content "a.out", "a.in1 a.in2 a.in1", :strip
157
+ assert test(?d, "a.in1")
158
+ out, err = assert_rant "a.out", "rargs=$(prerequisites) $(source) > $(name)"
159
+ assert err.empty?
160
+ assert out.empty?
161
+ out, err = assert_rant "a.out", "rargs=$(source) > $(name)"
162
+ assert err.empty?
163
+ assert !out.empty?
164
+ assert_file_content "a.out", "a.in1", :strip
165
+ assert test(?d, "a.in1")
166
+ out, err = assert_rant "a.out", "rargs=$(source) > $(name)"
167
+ assert err.empty?
168
+ assert out.empty?
169
+ timeout
170
+ Rant::Sys.touch "a.in2"
171
+ out, err = assert_rant "a.out", "rargs= $(source) > $(>)"
172
+ assert err.empty?
173
+ assert !out.empty?
174
+ assert_file_content "a.out", "a.in1", :strip
175
+ out, err = assert_rant "a.out", "rargs=$(source) > $(>)"
176
+ assert err.empty?
177
+ assert out.empty?
178
+ ensure
179
+ Rant::Sys.rm_f "a.in2"
180
+ assert_rant "autoclean"
181
+ assert !(test(?e, "a.out"))
182
+ assert !(test(?e, "a.in1"))
183
+ end
184
+ def test_rule_md5
185
+ Rant::Sys.write_to_file "a.in2", ""
186
+ assert test(?f, "a.in2")
187
+ out, err = assert_rant "-imd5", "a.out"
188
+ assert err.empty?
189
+ assert !out.empty?
190
+ assert_file_content "a.out", "a.in1 a.in2 a.in1", :strip
191
+ assert test(?d, "a.in1")
192
+ out, err = assert_rant "-imd5", "a.out", "rargs=$(prerequisites) $(source) > $(name)"
193
+ assert err.empty?
194
+ assert out.empty?
195
+ out, err = assert_rant "-imd5", "a.out", "rargs=$(source) > $(>)"
196
+ assert err.empty?
197
+ assert !out.empty?
198
+ assert_file_content "a.out", "a.in1", :strip
199
+ assert test(?d, "a.in1")
200
+ out, err = assert_rant "-imd5", "a.out", "rargs= $(source) > $(>)"
201
+ assert err.empty?
202
+ assert out.empty?
203
+ Rant::Sys.write_to_file "a.in2", " "
204
+ out, err = assert_rant "-imd5", "a.out", "rargs= $(source) > $(>)"
205
+ assert err.empty?
206
+ assert !out.empty?
207
+ assert_file_content "a.out", "a.in1", :strip
208
+ out, err = assert_rant "-imd5", "a.out", "rargs=$(source) > $(>)"
209
+ assert err.empty?
210
+ assert out.empty?
211
+ ensure
212
+ Rant::Sys.rm_f "a.in2"
213
+ assert_rant "autoclean"
214
+ assert !(test(?e, "a.out"))
215
+ assert !(test(?e, "a.in1"))
216
+ end
217
+ def test_ignore_symbolic_node_var_changes
218
+ Rant::Sys.mkdir "sub.t"
219
+ Rant::Sys.touch ["sub.t/b.in1", "sub.t/b.in2"]
220
+ out, err = assert_rant "sub.t/b.out", "rargs=$(<) $(-) > $(>)"
221
+ assert err.empty?
222
+ assert !out.empty?
223
+ if Rant::Env.on_windows?
224
+ assert_file_content "sub.t/b.out", "sub.t\\b.in1 sub.t\\b.in2 sub.t\\b.in1", :strip
225
+ else
226
+ assert_file_content "sub.t/b.out", "sub.t/b.in1 sub.t/b.in2 sub.t/b.in1", :strip
227
+ end
228
+ out, err = assert_rant "sub.t/b.out", "rargs=$(<) $(-) > $(>)"
229
+ assert err.empty?
230
+ assert out.empty?
231
+ Dir.chdir "sub.t"
232
+ out, err = assert_rant "-u", "b.out", "rargs=$(<) $(-) > $(>)"
233
+ assert err.empty?
234
+ lines = out.split(/\n/)
235
+ assert_equal 1, lines.size
236
+ assert_match(/\(root\b.*\bsub\.t\)/, lines.first)
237
+ if Rant::Env.on_windows?
238
+ assert_file_content "b.out", "sub.t\\b.in1 sub.t\\b.in2 sub.t\\b.in1", :strip
239
+ else
240
+ assert_file_content "b.out", "sub.t/b.in1 sub.t/b.in2 sub.t/b.in1", :strip
241
+ end
242
+ ensure
243
+ Dir.chdir $testImportCommandDir
244
+ Rant::Sys.rm_rf "sub.t"
245
+ end
246
+ def test_do_not_ignore_non_symbolic_node_var_changes
247
+ Rant::Sys.mkdir "sub.t"
248
+ Rant::Sys.touch ["sub.t/b.in1", "sub.t/b.in2"]
249
+ out, err = assert_rant "sub.t/b.out"
250
+ assert err.empty?
251
+ assert !out.empty?
252
+ if Rant::Env.on_windows?
253
+ assert_file_content "sub.t/b.out", "sub.t\\b.in1 sub.t\\b.in2 sub.t\\b.in1", :strip
254
+ else
255
+ assert_file_content "sub.t/b.out", "sub.t/b.in1 sub.t/b.in2 sub.t/b.in1", :strip
256
+ end
257
+ out, err = assert_rant "sub.t/b.out"
258
+ assert err.empty?
259
+ assert out.empty?
260
+ Dir.chdir "sub.t"
261
+ out, err = assert_rant "-u", "b.out"
262
+ assert err.empty?
263
+ assert !out.empty?
264
+ lines = out.split(/\n/)
265
+ assert_equal 2, lines.size
266
+ assert_match(/\(root\b.*\bsub\.t\)/, lines.first)
267
+ assert_match(/\bb\.out\b/, lines[1])
268
+ assert_file_content "b.out", "b.in1 b.in2 b.in1", :strip
269
+ ensure
270
+ Dir.chdir $testImportCommandDir
271
+ Rant::Sys.rm_rf "sub.t"
272
+ end
273
+ def test_with_space
274
+ Rant::Sys.mkdir "with space"
275
+ Rant::Sys.write_to_file "with space/b.t", "content"
276
+ out, err = assert_rant "with space/a.t"
277
+ assert err.empty?
278
+ assert !out.empty?
279
+ content = Rant::Env.on_windows? ?
280
+ "b.t\nwith space\\b.t\n" :
281
+ "b.t\nwith space/b.t\n"
282
+ assert_file_content "with space/a.t", content
283
+ out, err = assert_rant "with space/a.t"
284
+ assert err.empty?
285
+ assert out.empty?
286
+ assert_rant "autoclean"
287
+ ["with space/a.t", "with space/a.t",
288
+ "with space/.rant.meta", "b.t"].each { |fn|
289
+ assert !test(?e, fn)
290
+ }
291
+ ensure
292
+ Rant::Sys.rm_rf "with space"
293
+ end
294
+ def test_sp_var_inline
295
+ out, err = assert_rant "f.t"
296
+ assert err.empty?
297
+ assert !out.empty?
298
+ assert_file_content "f.t", "/Ia bc\n"
299
+ out, err = assert_rant "f.t"
300
+ assert err.empty?
301
+ assert out.empty?
302
+ end
303
+ def test_sp_var_inline_path
304
+ out, err = assert_rant "e.t"
305
+ assert err.empty?
306
+ assert !out.empty?
307
+ content = Rant::Env.on_windows? ? "/Ia b\\c\\\n" : "/Ia b/c/\n"
308
+ assert_file_content "e.t", content
309
+ out, err = assert_rant "e.t"
310
+ assert err.empty?
311
+ assert out.empty?
312
+ end
313
+ def test_sp_var_inline_escaped
314
+ out, err = assert_rant "g.t"
315
+ assert err.empty?
316
+ assert !out.empty?
317
+ assert_file_content "g.t", "/Ia b/c/\n"
318
+ out, err = assert_rant "g.t"
319
+ assert err.empty?
320
+ assert out.empty?
321
+ end
322
+ def test_sp_var_inline_escaped_md5
323
+ out, err = assert_rant "-imd5", "g.t"
324
+ assert err.empty?
325
+ assert !out.empty?
326
+ assert_file_content "g.t", "/Ia b/c/\n"
327
+ out, err = assert_rant "-imd5", "g.t"
328
+ assert err.empty?
329
+ assert out.empty?
330
+ end
331
+ def test_rant_import
332
+ run_import("-q", "--auto", "-imd5", "ant.t")
333
+ assert_exit
334
+ out = run_ruby("ant.t", "-imd5", "e.t")
335
+ assert_exit
336
+ assert !out.empty?
337
+ content = Rant::Env.on_windows? ? "/Ia b\\c\\\n" : "/Ia b/c/\n"
338
+ assert_file_content "e.t", content
339
+ out = run_ruby("ant.t", "-imd5", "e.t")
340
+ assert out.empty?
341
+ ensure
342
+ Rant::Sys.rm_f "ant.t"
343
+ end
344
+ def test_multiple_commands
345
+ out, err = assert_rant "h.t"
346
+ assert err.empty?
347
+ assert !out.empty?
348
+ assert_file_content "h.t1", "1\n"
349
+ assert_file_content "h.t2", "2\n"
350
+ assert_file_content "h.t", "1\n2\n"
351
+ meta = File.read ".rant.meta"
352
+ out, err = assert_rant "h.t"
353
+ assert err.empty?
354
+ assert out.empty?
355
+ assert_equal meta, File.read(".rant.meta")
356
+ ensure
357
+ Rant::Sys.rm_f ["h.t1", "h.t2"]
358
+ end
359
+ def test_multiple_commands_md5
360
+ out, err = assert_rant "-imd5", "h.t"
361
+ assert err.empty?
362
+ assert !out.empty?
363
+ assert_file_content "h.t1", "1\n"
364
+ assert_file_content "h.t2", "2\n"
365
+ assert_file_content "h.t", "1\n2\n"
366
+ meta = File.read ".rant.meta"
367
+ out, err = assert_rant "-imd5", "h.t"
368
+ assert err.empty?
369
+ assert out.empty?
370
+ assert_equal meta, File.read(".rant.meta")
371
+ ensure
372
+ Rant::Sys.rm_f ["h.t1", "h.t2"]
373
+ end
374
+ def test_block_sys_instead_of_string
375
+ out, err = assert_rant :fail, "f_a.t"
376
+ lines = err.split(/\n/)
377
+ assert lines.size < 5
378
+ assert_match(/\[ERROR\]/, err)
379
+ rf_path = File.join($testImportCommandDir, "Rantfile")
380
+ assert_match(/#{Regexp.escape rf_path}\b.*\b13\b/, err)
381
+ assert_match(/block has to return command string/i, err)
382
+ assert_match(/\bf_a\.t\b/, err)
383
+ end
384
+ def test_only_one_arg
385
+ in_local_temp_dir do
386
+ Rant::Sys.write_to_file "root.rant", <<-EOF
387
+ import "command"
388
+ gen Command, "a"
389
+ EOF
390
+ out, err = assert_rant :fail
391
+ lines = err.split(/\n/)
392
+ assert lines.size < 4
393
+ assert_match(/\[ERROR\]/, err)
394
+ assert_match(/\broot\.rant\b.*\b2\b/, err)
395
+ assert_match(/argument/, err)
396
+ assert_match(/\bname\b.*\bcommand\b/, err)
397
+ old_out, old_err = out, err
398
+ out, err = assert_rant :fail, "-T"
399
+ assert_equal old_out, out
400
+ assert_equal old_err, err
401
+ end
402
+ end
403
+ def test_dep_rebuild_no_change_md5
404
+ out, err = assert_rant "-imd5", "t1.t", "t2.t"
405
+ assert err.empty?
406
+ assert !out.empty?
407
+ assert_file_content "dep1.t", "a\n"
408
+ assert_file_content "t1.t", "making t1\n"
409
+ assert_file_content "t2.t", "making t2\n"
410
+ out, err = assert_rant "-imd5", "t1.t", "t2.t"
411
+ assert err.empty?
412
+ assert out.empty?
413
+ out, err = assert_rant "-imd5", "rc_dep=print 'a'; puts", "t1.t", "t2.t"
414
+ assert err.empty?
415
+ assert out.include?("print")
416
+ assert !out.include?("making t2")
417
+ assert !out.include?("making t1")
418
+ end
419
+ def test_dep_rebuild_same_content_md5
420
+ out, err = assert_rant "-imd5", "t1.t", "t2.t"
421
+ assert err.empty?
422
+ assert !out.empty?
423
+ assert_file_content "dep1.t", "a\n"
424
+ assert_file_content "t1.t", "making t1\n"
425
+ assert_file_content "t2.t", "making t2\n"
426
+ out, err = assert_rant "-imd5", "t1.t", "t2.t"
427
+ assert err.empty?
428
+ assert out.empty?
429
+ out, err = assert_rant "-imd5", "rc_dep=print 'b'; puts", "dep1.t"
430
+ out, err = assert_rant "-imd5", "rc_dep=print 'a'; puts", "t1.t", "t2.t"
431
+ assert err.empty?
432
+ assert out.include?("print")
433
+ assert !out.include?("making t2")
434
+ assert !out.include?("making t1")
435
+ end
436
+ def test_in_subdir
437
+ out, err = assert_rant :fail, "sub1.t/a"
438
+ Rant::Sys.mkdir "sub1.t"
439
+ out, err = assert_rant "sub1.t/a"
440
+ assert err.empty?
441
+ assert !out.empty?
442
+ assert_file_content "sub1.t/a", "sub1.t/a\n"
443
+ out, err = assert_rant "sub1.t/a"
444
+ assert err.empty?
445
+ assert out.empty?
446
+ out, err = assert_rant "autoclean"
447
+ assert !test(?e, "sub1.t/a")
448
+ assert test(?d, "sub1.t")
449
+ ensure
450
+ Rant::Sys.rm_rf "sub1.t"
451
+ end
452
+ def test_in_subdir_with_dirtask
453
+ out, err = assert_rant "sub2.t/a"
454
+ assert err.empty?
455
+ assert !out.empty?
456
+ assert test(?d, "sub2.t")
457
+ assert_file_content "sub2.t/a", "sub2.t/a\n"
458
+ out, err = assert_rant "sub2.t/a"
459
+ assert err.empty?
460
+ assert out.empty?
461
+ assert_rant "autoclean"
462
+ assert !test(?e, "sub2.t")
463
+ end
464
+ def test_in_subdir_with_task
465
+ out, err = assert_rant :fail, "sub3/a"
466
+ assert out !~ /task sub3/
467
+ Rant::Sys.mkdir "sub3"
468
+ out, err = assert_rant "sub3/a"
469
+ assert err.empty?
470
+ assert !out.empty?
471
+ assert out !~ /task sub3/
472
+ assert_file_content "sub3/a", "sub3/a\n"
473
+ out, err = assert_rant "sub3/a"
474
+ assert err.empty?
475
+ assert out.empty?
476
+ out, err = assert_rant "autoclean"
477
+ assert !test(?e, "sub3/a")
478
+ assert test(?d, "sub3")
479
+ out, err = assert_rant "sub3"
480
+ assert err.empty?
481
+ assert_match(/task sub3/, out)
482
+ ensure
483
+ Rant::Sys.rm_rf "sub3"
484
+ end
485
+ def test_in_subdir_with_task_md5
486
+ out, err = assert_rant :fail, "-imd5", "sub3/a"
487
+ assert out !~ /task sub3/
488
+ Rant::Sys.mkdir "sub3"
489
+ out, err = assert_rant "-imd5", "sub3/a"
490
+ assert err.empty?
491
+ assert !out.empty?
492
+ assert out !~ /task sub3/
493
+ assert_file_content "sub3/a", "sub3/a\n"
494
+ out, err = assert_rant "-imd5", "sub3/a"
495
+ assert err.empty?
496
+ assert out.empty?
497
+ out, err = assert_rant "-imd5", "autoclean"
498
+ assert !test(?e, "sub3/a")
499
+ assert test(?d, "sub3")
500
+ out, err = assert_rant "-imd5", "sub3"
501
+ assert err.empty?
502
+ assert_match(/task sub3/, out)
503
+ ensure
504
+ Rant::Sys.rm_rf "sub3"
505
+ end
506
+ def test_ignore_for_sig
507
+ out, err = assert_rant "x.t", "a=1", "b=2"
508
+ assert err.empty?
509
+ assert !out.empty?
510
+ assert_file_content "x.t", "1\n2\n"
511
+ out, err = assert_rant "x.t", "a=1", "b=2"
512
+ assert err.empty?
513
+ assert out.empty?
514
+ out, err = assert_rant "x.t", "a=1", "b=3"
515
+ assert err.empty?
516
+ assert !out.empty?
517
+ assert_file_content "x.t", "1\n3\n"
518
+ out, err = assert_rant "x.t", "a=1", "b=3"
519
+ assert err.empty?
520
+ assert out.empty?
521
+ out, err = assert_rant "x.t", "a=3", "b=3"
522
+ assert err.empty?
523
+ assert out.empty?
524
+ assert_file_content "x.t", "1\n3\n"
525
+ end
526
+ def test_proc_var_with_arg
527
+ out, err = assert_rant "p1.t"
528
+ assert err.empty?
529
+ assert !out.empty?
530
+ assert_file_content "p1.t", "p1.t foo value\n"
531
+ out, err = assert_rant "p1.t"
532
+ assert err.empty?
533
+ assert out.empty?
534
+ end
535
+ def test_proc_var_with_arg_md5
536
+ out, err = assert_rant "-imd5", "p1.t"
537
+ assert err.empty?
538
+ assert !out.empty?
539
+ assert_file_content "p1.t", "p1.t foo value\n"
540
+ out, err = assert_rant "-imd5", "p1.t"
541
+ assert err.empty?
542
+ assert out.empty?
543
+ out, err = assert_rant "-imd5", "change_foo", "p1.t"
544
+ assert err.empty?
545
+ assert !out.empty?
546
+ assert_file_content "p1.t", "p1.t changed\n"
547
+ out, err = assert_rant "-imd5", "change_foo", "p1.t"
548
+ assert err.empty?
549
+ assert out.empty?
550
+ end
551
+ def test_proc_var_without_arg
552
+ out, err = assert_rant "p2.t", "p3.t"
553
+ assert err.empty?
554
+ assert !out.empty?
555
+ assert_file_content "p2.t", "foo value.\n"
556
+ assert_file_content "p3.t", "foo value..\n"
557
+ out, err = assert_rant "p2.t", "p3.t"
558
+ assert err.empty?
559
+ assert out.empty?
560
+ out, err = assert_rant "p2.t", "p3.t", "inc_foo=on"
561
+ assert err.empty?
562
+ assert !out.empty?
563
+ assert_file_content "p2.t", "foo value..\n"
564
+ assert_file_content "p3.t", "foo value...\n"
565
+ out, err = assert_rant "p2.t", "p3.t", "inc_foo=on"
566
+ assert err.empty?
567
+ assert out.empty?
568
+ end
569
+ def test_delayed_var_interpolation
570
+ out, err = assert_rant "delay.t"
571
+ assert err.empty?
572
+ assert !out.empty?
573
+ assert_file_content "delay.t", "foo value\n"
574
+ out, err = assert_rant "delay.t"
575
+ assert err.empty?
576
+ assert out.empty?
577
+ out, err = assert_rant "delay.t"
578
+ assert err.empty?
579
+ assert out.empty?
580
+ out, err = assert_rant "change_foo", "delay.t"
581
+ assert err.empty?
582
+ assert !out.empty?
583
+ assert_file_content "delay.t", "changed\n"
584
+ out, err = assert_rant "change_foo", "delay.t"
585
+ assert err.empty?
586
+ assert out.empty?
587
+ end
588
+ # will probably change
589
+ def test_warn_about_hash
590
+ out, err = assert_rant "hash.t"
591
+ assert !out.empty?
592
+ assert err.split(/\n/).size < 3
593
+ assert_match(/\[WARNING\].*`h'/, err)
594
+ assert_match(/\bhash(es)?\b/i, err)
595
+ assert_file_content "hash.t", "", :strip
596
+ end
597
+ end
@@ -27,6 +27,20 @@ class TestRantImport < Test::Unit::TestCase
27
27
  assert out.include?("Options are")
28
28
  assert out.include?("--help")
29
29
  end
30
+ def test_option_version_and_V
31
+ out, err = capture_std do
32
+ assert_equal(0, Rant::RantImport.new("--version").run)
33
+ end
34
+ assert err.empty?
35
+ lines = out.split(/\n/)
36
+ assert_equal 1, lines.size
37
+ assert_equal "rant-import #{Rant::VERSION}", lines.first
38
+ out2, err = capture_std do
39
+ assert_equal(0, Rant::RantImport.new("-V").run)
40
+ end
41
+ assert err.empty?
42
+ assert_equal out, out2
43
+ end
30
44
  def test_no_import
31
45
  run_import("--quiet", "make.rb")
32
46
  assert(test(?f, "make.rb"))
@@ -152,12 +166,20 @@ class TestRantImport < Test::Unit::TestCase
152
166
  gen Sub2::T, "hello", "test" do end
153
167
  EOF
154
168
  out, err = assert_rant
169
+ n_out = out.dup
170
+ n_err = err.dup
155
171
  assert_match(/hellotest/, out)
156
172
  run_import("--quiet", "--auto", "ant.rb")
173
+ run_import("--quiet", "--auto", "--zip", "make.rb")
157
174
  assert(test(?f, "ant.rb"))
158
175
  FileUtils.rm_r "lib.t"
159
176
  out = run_ruby("ant.rb")
160
- assert_match(/hellotest/, out)
177
+ assert_equal(n_out, out)
178
+ FileUtils.rm "ant.rb"
179
+ assert(test(?f, "make.rb"))
180
+ assert(test(?f, "make.rb.gz"))
181
+ out = run_ruby("make.rb")
182
+ assert_equal(n_out, out)
161
183
  ensure
162
184
  Dir.chdir old_pwd
163
185
  FileUtils.rm_rf "sub2.t"
data/test/rule.rf CHANGED
@@ -31,3 +31,5 @@ if var[:enhance_t]
31
31
  puts "eh.t created"
32
32
  end
33
33
  end
34
+
35
+ # vim:ft=ruby
@@ -0,0 +1,45 @@
1
+
2
+ require 'test/unit'
3
+ require 'tutil'
4
+
5
+ $testDir ||= File.expand_path(File.dirname(__FILE__))
6
+
7
+ class TestDynamicDependencies < Test::Unit::TestCase
8
+ #include Rant::TestUtil
9
+ def setup
10
+ # Ensure we run in test directory.
11
+ Dir.chdir($testDir)
12
+ end
13
+ def teardown
14
+ assert_rant "-fdyn_dependencies.rf", "autoclean"
15
+ assert Dir["*.t"].empty?
16
+ end
17
+ def test_task
18
+ out, err = assert_rant "-fdyn_dependencies.rf"
19
+ assert err.empty?
20
+ lines = out.split(/\n/)
21
+ assert_equal %w(B C D A), lines
22
+ end
23
+ def test_file
24
+ out, err = assert_rant "-fdyn_dependencies.rf", "a.t"
25
+ assert err.empty?
26
+ assert !out.empty?
27
+ assert test(?f, "a.t")
28
+ assert test(?f, "b.t")
29
+ assert test(?f, "c.t")
30
+ assert test(?f, "d.t")
31
+ out, err = assert_rant "-fdyn_dependencies.rf", "a.t"
32
+ assert err.empty?
33
+ assert out.empty?
34
+ end
35
+ def test_file_md5
36
+ out, err = assert_rant "-imd5", "-fdyn_dependencies.rf", "a.t"
37
+ assert err.empty?
38
+ assert !out.empty?
39
+ assert test(?f, "a.t")
40
+ assert test(?f, "b.t")
41
+ assert test(?f, "c.t")
42
+ assert test(?f, "d.t")
43
+ assert_rant "-imd5", "-fdyn_dependencies.rf", "autoclean"
44
+ end
45
+ end