rant 0.4.6 → 0.4.8

Sign up to get free protection for your applications and to get access to all the features.
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