rant 0.4.4 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. data/NEWS +38 -0
  2. data/README +4 -2
  3. data/Rantfile +50 -12
  4. data/doc/examples/c_cpp/c++/problem_1_1/another_test.cpp +6 -0
  5. data/doc/examples/c_cpp/c++/problem_1_1/another_test.h +5 -0
  6. data/doc/examples/c_cpp/c++/problem_1_1/main.cpp +12 -0
  7. data/doc/examples/c_cpp/c++/problem_1_1/test.cpp +6 -0
  8. data/doc/examples/c_cpp/c++/problem_1_1/test.h +5 -0
  9. data/doc/examples/c_cpp/c++/template.rf +15 -0
  10. data/doc/examples/c_cpp/c/problem_1_1/another_test.c +6 -0
  11. data/doc/examples/c_cpp/c/problem_1_1/another_test.h +7 -0
  12. data/doc/examples/c_cpp/c/problem_1_1/main.c +12 -0
  13. data/doc/examples/c_cpp/c/problem_1_1/test.c +6 -0
  14. data/doc/examples/c_cpp/c/problem_1_1/test.h +7 -0
  15. data/doc/examples/c_cpp/c/template.rf +15 -0
  16. data/doc/examples/c_cpp/root.rant +46 -0
  17. data/doc/homepage/index.html +115 -0
  18. data/doc/homepage/rant_home.css +98 -0
  19. data/doc/rant.1 +129 -0
  20. data/doc/rant.rdoc +5 -6
  21. data/doc/rantfile.rdoc +55 -32
  22. data/doc/subdirs.rdoc +147 -0
  23. data/lib/rant.rb +47 -49
  24. data/lib/rant/coregen.rb +20 -20
  25. data/lib/rant/import.rb +63 -11
  26. data/lib/rant/import/archive.rb +47 -15
  27. data/lib/rant/import/archive/tgz.rb +1 -1
  28. data/lib/rant/import/autoclean.rb +28 -26
  29. data/lib/rant/import/c/dependencies.rb +1 -1
  30. data/lib/rant/import/directedrule.rb +1 -4
  31. data/lib/rant/import/metadata.rb +30 -7
  32. data/lib/rant/import/nodes/default.rb +67 -13
  33. data/lib/rant/import/rubypackage.rb +1 -1
  34. data/lib/rant/import/rubytest.rb +25 -19
  35. data/lib/rant/import/signedfile.rb +14 -8
  36. data/lib/rant/import/sys/more.rb +22 -0
  37. data/lib/rant/import/sys/tgz.rb +43 -0
  38. data/lib/rant/import/sys/zip.rb +42 -0
  39. data/lib/rant/node.rb +19 -13
  40. data/lib/rant/plugin/configure.rb +1 -1
  41. data/lib/rant/progress.rb +33 -0
  42. data/lib/rant/rantenv.rb +7 -7
  43. data/lib/rant/rantlib.rb +246 -256
  44. data/lib/rant/rantsys.rb +61 -22
  45. data/lib/rant/rantvar.rb +7 -9
  46. data/misc/TODO +18 -0
  47. data/misc/devel-notes +4 -1
  48. data/test/Rantfile +17 -3
  49. data/test/deprecated/README +6 -0
  50. data/test/deprecated/test_0_4_8.rb +41 -0
  51. data/test/deprecated/test_0_5_2.rb +33 -0
  52. data/test/import/md5/root.rant +9 -0
  53. data/test/import/md5/test_md5.rb +45 -0
  54. data/test/import/metadata/Rantfile +2 -2
  55. data/test/import/metadata/test_metadata.rb +2 -2
  56. data/test/import/package/test_package.rb +40 -1
  57. data/test/import/signedfile/sub1/Rantfile +1 -1
  58. data/test/import/sys/data/pkg.tgz +0 -0
  59. data/test/import/sys/data/pkg.zip +0 -0
  60. data/test/import/sys/data/pkg/bin/test +0 -0
  61. data/test/import/sys/data/pkg/bin/test.o +0 -0
  62. data/test/import/sys/data/pkg/test.c +6 -0
  63. data/test/import/sys/data/pkg/test.h +7 -0
  64. data/test/import/sys/data/pkg2.zip +0 -0
  65. data/test/import/sys/test_tgz.rb +38 -0
  66. data/test/import/sys/test_zip.rb +68 -0
  67. data/test/import/sys/tgz.rf +6 -0
  68. data/test/import/sys/zip.rf +15 -0
  69. data/test/project2/{rantfile.rb → root.rant} +0 -0
  70. data/test/project2/test_project.rb +3 -8
  71. data/test/project_rb1/{rantfile.rb → rantfile} +1 -1
  72. data/test/project_rb1/test_project_rb1.rb +3 -5
  73. data/test/rant-import/test_rant-import.rb +22 -10
  74. data/test/subdirs/sub1/Rantfile +1 -1
  75. data/test/subdirs/sub2/{rantfile.rb → rantfile} +0 -0
  76. data/test/subdirs/sub2/sub/rantfile +1 -1
  77. data/test/subdirs2/root.rant +36 -0
  78. data/test/subdirs2/sub00/sub.rant +8 -0
  79. data/test/subdirs2/sub1/sub.rant +13 -0
  80. data/test/subdirs2/test_subdirs2.rb +239 -0
  81. data/test/test_examples.rb +91 -0
  82. data/test/test_filetask.rb +51 -11
  83. data/test/test_rant_interface.rb +24 -0
  84. data/test/test_rantfile_api.rb +54 -2
  85. data/test/test_sourcenode.rb +30 -0
  86. data/test/test_sys.rb +143 -15
  87. data/test/test_task.rb +16 -22
  88. data/test/tutil.rb +22 -38
  89. metadata +67 -9
@@ -0,0 +1,8 @@
1
+
2
+ define_print_task :a
3
+
4
+ file "a.t" => "@a.t" do |t|
5
+ sys.cp "../a.t", t.name
6
+ end
7
+
8
+ task :default => "a.t"
@@ -0,0 +1,13 @@
1
+
2
+ task :a do |t|
3
+ puts t.full_name
4
+ end
5
+
6
+ desc "noop"
7
+ task :b
8
+
9
+ file "sub.t" => "@a.t" do |t|
10
+ sys.cp sys.expand_path(t.source), t.name
11
+ end
12
+
13
+ gen Directory, "dir.t"
@@ -0,0 +1,239 @@
1
+
2
+ require 'test/unit'
3
+ require 'tutil'
4
+
5
+ $test_subdirs2_dir ||= File.expand_path(File.dirname(__FILE__))
6
+
7
+ class TestSubdirs2 < Test::Unit::TestCase
8
+ include Rant::TestUtil
9
+
10
+ def rootdir_rx(subdir=@subdir)
11
+ /^\(root is #$test_subdirs2_dir, in #{subdir}\)$/
12
+ end
13
+ def setup
14
+ # Ensure we run in test directory.
15
+ Dir.chdir($test_subdirs2_dir)
16
+ end
17
+ def teardown
18
+ Dir.chdir($test_subdirs2_dir)
19
+ assert_rant "autoclean"
20
+ assert Rant::FileList["**/*.t*"].shun(".svn").empty?
21
+ assert Rant::FileList["**/.rant.meta"].shun(".svn").empty?
22
+ end
23
+ def test_first
24
+ out, err = assert_rant
25
+ assert err.empty?
26
+ assert_equal "a\n", out
27
+ end
28
+ def test_subdir_task_from_commandline
29
+ out, err = assert_rant "sub1/a"
30
+ assert err.empty?
31
+ assert_equal "(in sub1)\nsub1/a\n", out
32
+ end
33
+ def test_first_in_subdir
34
+ Dir.chdir "sub1"
35
+ out, err = assert_rant
36
+ assert err.empty?
37
+ assert_equal "(root is #$test_subdirs2_dir, in sub1)\nsub1/a\n", out
38
+ end
39
+ def test_directory_in_subdir
40
+ Dir.chdir "sub1"
41
+ out, err = assert_rant "dir.t"
42
+ assert err.empty?
43
+ assert out.include?("mkdir")
44
+ assert test(?d, "dir.t")
45
+ out, err = assert_rant "dir.t"
46
+ assert err.empty?
47
+ assert !out.include?("mkdir")
48
+ end
49
+ def test_root_dir_task_in_subdir_from_commandline
50
+ Dir.chdir "sub1"
51
+ out, err = assert_rant "@a"
52
+ assert err.empty?
53
+ lines = out.split(/\n/)
54
+ assert_match(/^\(root is .*\)$/, lines[0])
55
+ assert lines.size < 4
56
+ assert_equal "a", lines.last
57
+ end
58
+ def test_root_dir_task_from_commandline
59
+ out, err = assert_rant "@a"
60
+ assert err.empty?
61
+ assert_equal "a\n", out
62
+ end
63
+ def test_fail_no_subdir_task
64
+ out, err = assert_rant :fail, "sub00/a.t"
65
+ assert out.empty?
66
+ assert_match(/\[ERROR\]/, err)
67
+ assert_match(/\bsub00\/a\.t\b/, err)
68
+ end
69
+ def test_ensure_read_sub_rant
70
+ Dir.chdir "sub00"
71
+ out, err = assert_rant
72
+ assert test(?f, "a.t")
73
+ assert test(?f, "../a.t")
74
+
75
+ out, err = assert_rant :fail, "autoclean"
76
+ assert_equal "(root is #$test_subdirs2_dir, in sub00)\n", out
77
+ assert_rant "@autoclean"
78
+ assert Dir["*.t"].empty?
79
+ end
80
+ def test_show_descriptions
81
+ out, err = assert_rant "-T"
82
+ assert err.empty?
83
+ assert_equal <<EOF, out
84
+ rant a # show full task name
85
+ rant sub1/b # noop
86
+ EOF
87
+ end
88
+ def test_show_descriptions_in_subdir
89
+ Dir.chdir "sub1"
90
+ out, err = assert_rant "-T"
91
+ assert err.empty?
92
+ lines = out.split(/\n/)
93
+ assert_equal 4, lines.size
94
+ assert_match(rootdir_rx("sub1"), lines[0])
95
+ assert_match(/^rant\s+#\s+=>\s+a$/, lines[1])
96
+ assert_match(/^rant b\s+#\s+noop$/, lines[2])
97
+ assert_match(/^rant @a\s+#\s+show full task name$/, lines[3])
98
+ end
99
+ def test_opt_look_up
100
+ in_local_temp_dir "t" do
101
+ out, err = assert_rant :fail
102
+ assert out.empty?
103
+ assert_match(/\[ERROR\].*no rantfile/i, err)
104
+ out, err = assert_rant "--look-up"
105
+ assert err.empty?
106
+ assert_equal "a", out.split(/\n/)[2]
107
+ in_local_temp_dir "t" do
108
+ out, err = assert_rant "--look-up", "a.t"
109
+ assert err.empty?
110
+ lines = out.split(/\n/)
111
+ assert_equal 4, lines.size
112
+ assert_match(rootdir_rx("t/t"), lines[0])
113
+ assert_equal "(in #$test_subdirs2_dir)", lines[1]
114
+ assert_equal "writing to b.t", lines[2]
115
+ assert_equal "writing to t/t/a.t", lines[3]
116
+ assert !test(?e, "../../a.t")
117
+ assert test(?f, "a.t")
118
+ assert test(?f, "../../b.t")
119
+ out, err = assert_rant "--look-up", "a.t"
120
+ assert err.empty?
121
+ lines = out.split(/\n/)
122
+ assert_equal 1, lines.size
123
+ assert_match rootdir_rx("t/t"), lines.first
124
+ out, err = assert_rant "-u", "@autoclean"
125
+ assert !test(?e, "../../b.t")
126
+ assert !test(?e, "a.t")
127
+ end
128
+ end
129
+ end
130
+ def test_opt_look_up_from_subdir
131
+ Dir.chdir "sub1"
132
+ out, err = assert_rant "-u", "dir.t"
133
+ assert err.empty?
134
+ assert out.include?("mkdir")
135
+ assert test(?d, "dir.t")
136
+ out, err = assert_rant "-u", "dir.t"
137
+ assert err.empty?
138
+ assert !out.include?("mkdir")
139
+ end
140
+ def test_opt_cd_parent
141
+ in_local_temp_dir "with space.t" do
142
+ out, err = assert_rant "--cd-parent"
143
+ assert err.empty?
144
+ lines = out.split(/\n/)
145
+ assert_equal 2, lines.size
146
+ assert_equal "(in #$test_subdirs2_dir)", lines[0]
147
+ assert_equal "a", lines[1]
148
+ in_local_temp_dir "a" do
149
+ orig_pwd = Dir.pwd
150
+ out, err = assert_rant "-c", "a.t"
151
+ assert_equal orig_pwd, Dir.pwd
152
+ assert err.empty?
153
+ lines = out.split(/\n/)
154
+ assert_equal 2, lines.size
155
+ assert_equal "(in #$test_subdirs2_dir)", lines[0]
156
+ assert_equal "writing to a.t", lines[1]
157
+ assert test(?f, "../../a.t")
158
+ assert_equal "a.t\n", File.read("../../a.t")
159
+ end
160
+ end
161
+ end
162
+ def test_opt_cd_parent_from_dir_with_rantfile
163
+ out, err = assert_rant "-c"
164
+ assert err.empty?
165
+ assert_equal "a\n", out
166
+ end
167
+ def test_opt_cd_parent_from_subdir
168
+ Dir.chdir "sub1"
169
+ out, err = assert_rant "-c"
170
+ assert err.empty?
171
+ lines = out.split(/\n/)
172
+ assert_equal 2, lines.size
173
+ assert_equal "(in #$test_subdirs2_dir)", lines[0]
174
+ assert_equal "a", lines[1]
175
+ end
176
+ def test_opt_cd_parent_from_subdir_sub
177
+ Dir.chdir "sub1"
178
+ in_local_temp_dir do
179
+ out, err = assert_rant "-c"
180
+ assert err.empty?
181
+ lines = out.split(/\n/)
182
+ assert_equal 2, lines.size
183
+ assert_equal "(in #$test_subdirs2_dir)", lines[0]
184
+ assert_equal "a", lines[1]
185
+ end
186
+ end
187
+ def test_rant_import
188
+ run_import("-q", "--auto", "rant.t")
189
+ assert_exit
190
+ out = run_ruby("rant.t", "a.t")
191
+ assert_exit
192
+ assert test(?f, "a.t")
193
+ out = run_ruby("rant.t", "a.t")
194
+ assert_exit
195
+ assert out.empty?
196
+ Rant::Sys.safe_ln "rant.t", "sub1"
197
+ Dir.chdir "sub1"
198
+ out = run_ruby("rant.t", "dir.t")
199
+ assert_exit
200
+ assert test(?d, "dir.t")
201
+ out = run_ruby("rant.t", "@autoclean")
202
+ assert !test(?e, "dir.t")
203
+ ensure
204
+ Dir.chdir $test_subdirs2_dir
205
+ Rant::Sys.rm_f Dir["**/rant.t"]
206
+ end
207
+ def test_expand_path_md5_in_sub1
208
+ Dir.chdir "sub1"
209
+ out, err = assert_rant "-imd5", "sub.t"
210
+ assert err.empty?
211
+ assert !out.empty?
212
+ assert test(?f, "sub.t")
213
+ assert_equal "a.t\n", File.read("sub.t")
214
+ out, err = assert_rant "-imd5", "sub.t"
215
+ assert err.empty?
216
+ assert out !~ /writing to/
217
+ assert out !~ /\bcp\b/
218
+ Dir.chdir ".."
219
+ out, err = assert_rant "-imd5", "sub1/sub.t"
220
+ assert err.empty?
221
+ assert out.empty?
222
+ assert_rant "-imd5", "autoclean"
223
+ end
224
+ def test_expand_path
225
+ out, err = assert_rant "sub1/sub.t"
226
+ assert err.empty?
227
+ assert test(?f, "sub1/sub.t")
228
+ assert_equal "a.t\n", File.read("sub1/sub.t")
229
+ out, err = assert_rant "sub1/sub.t"
230
+ assert err.empty?
231
+ assert out.empty?
232
+ end
233
+ def test_define_in_current_subdir
234
+ Dir.chdir "sub00"
235
+ out, err = assert_rant "a"
236
+ assert err.empty?
237
+ assert_equal "sub00/a", out.split(/\n/).last
238
+ end
239
+ end
@@ -261,4 +261,95 @@ EOF
261
261
  FileUtils.rm_f "c/problem_1_1/Rantfile"
262
262
  FileUtils.rm_f "c++/problem_1_1/Rantfile"
263
263
  end
264
+ def test_c_cpp
265
+ Dir.chdir "c_cpp"
266
+ proj_pwd = Dir.pwd
267
+ out, err = assert_rant("--tasks")
268
+ # TODO: replace with a not-so-strict regex
269
+ op = <<EOF
270
+ rant run # Run all C and C++ tests.
271
+ rant build # Build all.
272
+ rant autoclean # Remove all autogenerated files.
273
+ rant pkg/c_cpp.tgz # Create source package.
274
+ EOF
275
+ assert_equal(op, out)
276
+ assert(err.empty?)
277
+ gen_files = %w(
278
+ .rant.meta
279
+ c/problem_1_1/.rant.meta
280
+ c++/problem_1_1/.rant.meta
281
+ c/problem_1_1/sub.rant
282
+ c++/problem_1_1/sub.rant
283
+ c/problem_1_1/c_dependencies
284
+ c++/problem_1_1/c_dependencies
285
+ c/problem_1_1/test
286
+ c++/problem_1_1/test
287
+ c/problem_1_1/main.o
288
+ c++/problem_1_1/main.o
289
+ c/problem_1_1/test.o
290
+ c++/problem_1_1/test.o
291
+ c/problem_1_1/another_test.o
292
+ c++/problem_1_1/another_test.o
293
+ pkg
294
+ )
295
+ if Rant::Env.find_bin("gcc") && Rant::Env.find_bin("g++")
296
+ out = run_rant
297
+ assert_exit
298
+ assert_equal(2, out.scan(/Hello\, world\!/).size)
299
+ out, err = assert_rant("build")
300
+ assert(out.empty?)
301
+ assert(err.empty?)
302
+ else
303
+ STDERR.puts "*** gcc and/or g++ not available, less example testing ***"
304
+ end
305
+ assert_rant("pkg/c_cpp.tgz")
306
+ assert(test(?f, "pkg/c_cpp.tgz"))
307
+ # checking archive contents
308
+ sources = Rant::FileList["root.rant", "**/*.{c,cpp,h,rf}"]
309
+ sources.no_dir("pkg").resolve
310
+ assert sources.size > 10
311
+ Rant::Sys.unpack_tgz "pkg/c_cpp.tgz"
312
+ assert test(?d, "c_cpp")
313
+ sources.each { |fn|
314
+ pkg_fn = File.join("c_cpp", fn)
315
+ if test ?d, fn
316
+ assert test(?d, pkg_fn)
317
+ else
318
+ assert Rant::Sys.compare_file(fn, pkg_fn)
319
+ end
320
+ }
321
+ Rant::Sys.rm_rf "c_cpp"
322
+ out, err = assert_rant("pkg/c_cpp.tgz")
323
+ assert(out.empty?)
324
+ assert(err.empty?)
325
+ assert_rant("autoclean")
326
+ gen_files.each { |f|
327
+ assert(!test(?e, f),
328
+ "#{f} should have been removed by autoclean")
329
+ }
330
+ if Rant::Env.find_bin("gcc")
331
+ FileUtils.cp "c/template.rf", "c/problem_1_1/sub.rant"
332
+ Dir.chdir "c/problem_1_1"
333
+ out = run_rant
334
+ assert(out.include?("Hello, world!"))
335
+
336
+ # TODO
337
+ #assert_rant("autoclean")
338
+
339
+ FileUtils.rm_f "sub.rant"
340
+ Dir.chdir proj_pwd
341
+
342
+ # TODO: remove next line if TODO above is fixed
343
+ assert_rant("autoclean")
344
+
345
+ gen_files.each { |f|
346
+ assert(!test(?e, f),
347
+ "#{f} should have been removed by autoclean")
348
+ }
349
+ end
350
+ ensure
351
+ Dir.chdir proj_pwd
352
+ FileUtils.rm_f "c/problem_1_1/sub.rant"
353
+ FileUtils.rm_f "c++/problem_1_1/sub.rant"
354
+ end
264
355
  end
@@ -1,18 +1,20 @@
1
1
 
2
2
  require 'test/unit'
3
- require 'rant/rantlib'
3
+ require 'tutil'
4
4
 
5
5
  $test_filetask_file = File.expand_path(__FILE__)
6
+ $test_dir ||= File.dirname($test_filetask_file)
6
7
 
7
8
  class TestFileTask < Test::Unit::TestCase
9
+ include Rant::TestUtil
10
+
8
11
  def setup
12
+ Dir.chdir $test_dir
13
+ @rant = Rant::RantApp.new
9
14
  end
10
- def teardown
11
- end
12
-
13
15
  def test_needed_non_existent
14
16
  run = false
15
- t = Rant::FileTask.new(nil, "non_existent") { run = true }
17
+ t = Rant::FileTask.new(@rant, "non_existent") { run = true }
16
18
  assert(t.needed?,
17
19
  "`non_existent' doesn't exist, so filetask is needed")
18
20
  assert(!run,
@@ -20,38 +22,76 @@ class TestFileTask < Test::Unit::TestCase
20
22
  end
21
23
  def test_needed_no_dep
22
24
  run = false
23
- t = Rant.rac.file $test_filetask_file do
25
+ t = @rant.file $test_filetask_file do
24
26
  run = true
25
27
  end
26
28
  assert(!t.needed?,
27
29
  "file exists and has no prerequisite, so needed? should return false")
28
30
  assert(!run)
29
31
  end
32
+ =begin
33
+ commented out due to a semantics change in 0.4.5
30
34
  def test_single_dep
31
35
  tr = false
32
- t = Rant.rac.task :t do
36
+ t = @rant.task :t do
33
37
  tr = true
34
38
  end
35
39
  run = false
36
- f = Rant.rac.file "testfile" => :t do
40
+ f = @rant.file "testfile" => :t do
37
41
  run = true
38
42
  end
39
43
  f.invoke
40
44
  assert(tr)
41
45
  assert(run)
42
46
  end
47
+ =end
43
48
  def test_prerequisites
44
- Rant.rac.file "a" do
49
+ @rant.file "a" do
45
50
  true
46
51
  end
47
- Rant.rac.file "b" do
52
+ @rant.file "b" do
48
53
  true
49
54
  end
50
- f = Rant.rac.file "c" => %w(a b) do |t|
55
+ f = @rant.file "c" => %w(a b) do |t|
51
56
  assert_equal(t.prerequisites, %w(a b),
52
57
  "prerequisites should always be an array of _strings_")
53
58
  true
54
59
  end
55
60
  f.invoke
56
61
  end
62
+ def test_no_invoke_task_dep
63
+ write_to_file "print_name.t", "b\n"
64
+ out, err = assert_rant "depends_name.t"
65
+ assert err.empty?
66
+ assert test(?f, "depends_name.t")
67
+ assert_equal "b\na\n", File.read("depends_name.t")
68
+ assert_match(/writing.*depends_name\.t/, out)
69
+ assert !out.include?("print_name.t"),
70
+ "file task mustn't invoke task as prerequisite"
71
+ out, err = assert_rant "depends_name.t"
72
+ assert err.empty?
73
+ assert out.empty?
74
+ assert test(?f, "depends_name.t")
75
+ assert_equal "b\na\n", File.read("depends_name.t")
76
+ ensure
77
+ Rant::Sys.rm_f %w(print_name.t depends_name.t)
78
+ end
79
+ def test_no_invoke_task_dep_md5
80
+ write_to_file "print_name.t", "b\n"
81
+ out, err = assert_rant "-imd5", "depends_name.t"
82
+ assert err.empty?
83
+ assert test(?f, "depends_name.t")
84
+ assert_equal "b\na\n", File.read("depends_name.t")
85
+ assert_match(/writing.*depends_name\.t/, out)
86
+ assert !out.include?("print_name.t"),
87
+ "file task mustn't invoke task as prerequisite"
88
+ out, err = assert_rant "-imd5", "depends_name.t"
89
+ assert err.empty?
90
+ assert out.empty?
91
+ assert test(?f, "depends_name.t")
92
+ assert_equal "b\na\n", File.read("depends_name.t")
93
+ ensure
94
+ Rant::Sys.rm_f %w(auto.rf .rant.meta print_name.t depends_name.t)
95
+ Rant::Sys.rm_f Dir["*.t"]
96
+ end
57
97
  end