rant 0.4.0 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/NEWS +16 -0
  2. data/README +3 -2
  3. data/Rantfile +3 -4
  4. data/doc/advanced.rdoc +18 -13
  5. data/doc/examples/c_cpp_examples/Rantfile +37 -0
  6. data/doc/examples/c_cpp_examples/c/problem_1_1/another_test.c +6 -0
  7. data/doc/examples/c_cpp_examples/c/problem_1_1/another_test.h +7 -0
  8. data/doc/examples/c_cpp_examples/c/problem_1_1/main.c +12 -0
  9. data/doc/examples/c_cpp_examples/c/problem_1_1/test.c +6 -0
  10. data/doc/examples/c_cpp_examples/c/problem_1_1/test.h +7 -0
  11. data/doc/examples/c_cpp_examples/c/template.rf +21 -0
  12. data/doc/examples/c_cpp_examples/c++/problem_1_1/another_test.cpp +6 -0
  13. data/doc/examples/c_cpp_examples/c++/problem_1_1/another_test.h +5 -0
  14. data/doc/examples/c_cpp_examples/c++/problem_1_1/main.cpp +12 -0
  15. data/doc/examples/c_cpp_examples/c++/problem_1_1/test.cpp +6 -0
  16. data/doc/examples/c_cpp_examples/c++/problem_1_1/test.h +5 -0
  17. data/doc/examples/c_cpp_examples/c++/template.rf +21 -0
  18. data/doc/examples/c_cpp_examples/rule.rf +7 -0
  19. data/doc/rantfile.rdoc +1 -0
  20. data/lib/rant/archive/rubyzip/tempfile_bugfixed.rb +10 -8
  21. data/lib/rant/archive/rubyzip.rb +3 -8
  22. data/lib/rant/import/archive.rb +8 -4
  23. data/lib/rant/import/rubydoc.rb +1 -1
  24. data/lib/rant/import/rubytest.rb +12 -17
  25. data/lib/rant/import.rb +3 -2
  26. data/lib/rant/rantenv.rb +7 -4
  27. data/lib/rant/rantfile.rb +41 -21
  28. data/lib/rant/rantlib.rb +166 -113
  29. data/lib/rant/rantsys.rb +32 -17
  30. data/lib/rant/rantvar.rb +15 -15
  31. data/lib/rant/tempfile.rb +12 -0
  32. data/test/Rantfile +33 -0
  33. data/test/import/directedrule/test_directedrule.rb +29 -0
  34. data/test/import/package/Rantfile +2 -0
  35. data/test/import/package/test_package.rb +10 -0
  36. data/test/import/subfile/test_subfile.rb +21 -0
  37. data/test/project1/test_project.rb +10 -30
  38. data/test/project2/test_project.rb +1 -1
  39. data/test/project_rb1/test_project_rb1.rb +2 -1
  40. data/test/rant-import/test_rant-import.rb +35 -1
  41. data/test/subdirs/test_subdirs.rb +1 -2
  42. data/test/test_dirtask.rb +42 -0
  43. data/test/test_examples.rb +67 -0
  44. data/test/test_filelist.rb +52 -0
  45. data/test/test_rantfile_api.rb +59 -0
  46. data/test/ts_all.rb +1 -0
  47. metadata +25 -3
data/lib/rant/rantsys.rb CHANGED
@@ -51,7 +51,7 @@ module Rant
51
51
  public
52
52
  ### Methods having an equivalent in the Array class. #########
53
53
 
54
- def each &block
54
+ def each(&block)
55
55
  resolve if @pending
56
56
  @files.each(&block)
57
57
  end
@@ -217,17 +217,31 @@ module Rant
217
217
  end
218
218
  private :mk_all_rx
219
219
 
220
- def select &block
220
+ def select(&block)
221
221
  d = dup
222
- d.actions << [:apply_select, block]
222
+ d.actions << [:apply_select, block]
223
+ d.pending = true
223
224
  d
224
225
  end
226
+ alias find_all select
225
227
 
226
228
  def apply_select blk
227
229
  @files = @files.select(&blk)
228
230
  end
229
231
  private :apply_select
230
232
 
233
+ def map(&block)
234
+ d = dup
235
+ d.actions << [:apply_ary_method, :map!, block]
236
+ d.pending = true
237
+ d
238
+ end
239
+ alias collect map
240
+
241
+ def sub_ext(ext, new_ext=nil)
242
+ map { |f| f.sub_ext ext, new_ext }
243
+ end
244
+
231
245
  # Remove all entries which contain a directory with the
232
246
  # given name.
233
247
  # If no argument or +nil+ given, remove all directories.
@@ -268,18 +282,12 @@ module Rant
268
282
 
269
283
  # Remove all files which have the given name.
270
284
  def no_file(name)
271
- @actions << [:apply_no_file, name]
285
+ @actions << [:apply_ary_method, :reject!,
286
+ lambda { |entry| entry == name and test(?f, entry) }]
272
287
  @pending = true
273
288
  self
274
289
  end
275
290
 
276
- def apply_no_file(name)
277
- @files.reject! { |entry|
278
- entry == name and test(?f, entry)
279
- }
280
- end
281
- private :apply_no_file
282
-
283
291
  # Remove all entries which contain an element
284
292
  # with the given suffix.
285
293
  def no_suffix(suffix)
@@ -330,6 +338,7 @@ module Rant
330
338
  def arglist
331
339
  to_ary.arglist
332
340
  end
341
+ alias to_s arglist
333
342
 
334
343
  # Same as #uniq! but evaluation is delayed until the next read
335
344
  # access (e.g. by calling #each). Always returns self.
@@ -347,12 +356,18 @@ module Rant
347
356
  self
348
357
  end
349
358
 
359
+ def lazy_map!(&block)
360
+ @actions << [:apply_ary_method, :map!, block]
361
+ @pending = true
362
+ self
363
+ end
364
+
350
365
  private
351
- def apply_ary_method(meth)
352
- @files.send meth
366
+ def apply_ary_method(meth, block=nil)
367
+ @files.send meth, &block
353
368
  end
354
- def apply_ary_method_1(meth, arg1)
355
- @files.send meth, arg1
369
+ def apply_ary_method_1(meth, arg1, block=nil)
370
+ @files.send meth, arg1, &block
356
371
  end
357
372
  end # class FileList
358
373
 
@@ -395,7 +410,7 @@ module Rant
395
410
  Dir.chdir(@basedir) { filelist_resolve }
396
411
  end
397
412
 
398
- def each &block
413
+ def each(&block)
399
414
  old_pwd = Dir.pwd
400
415
  resolve if @pending
401
416
  Dir.chdir(@basedir)
@@ -427,7 +442,7 @@ module Rant
427
442
  @lists = [@cur_list]
428
443
  end
429
444
 
430
- def each_entry &block
445
+ def each_entry(&block)
431
446
  @lists.each { |list|
432
447
  list.each(&block)
433
448
  }
data/lib/rant/rantvar.rb CHANGED
@@ -16,7 +16,7 @@
16
16
  # If you're looking for general info about Rant, read the
17
17
  # README[link:files/README.html].
18
18
  module Rant
19
- VERSION = '0.4.0'
19
+ VERSION = '0.4.2'
20
20
 
21
21
  # Those are the filenames for rantfiles.
22
22
  # Case matters!
@@ -259,7 +259,7 @@ module Rant
259
259
 
260
260
  # Use ENV instead of internal store for given vars.
261
261
  # Probably useful for vars like CC, CFLAGS, etc.
262
- def env *vars
262
+ def env(*vars)
263
263
  vars.flatten.each { |var|
264
264
  vid = RantVar.valid_vid(var)
265
265
  cur_val = @store[vid]
@@ -360,19 +360,6 @@ module Rant
360
360
  end
361
361
  end
362
362
 
363
- class ::Range
364
- def rant_constraint
365
- case first
366
- when ::Integer
367
- IntegerInRange.new(self)
368
- when ::Float
369
- FloatInRange.new(self)
370
- else
371
- raise NotAConstraintFactoryError.new(self)
372
- end
373
- end
374
- end
375
-
376
363
  class Integer
377
364
  include Constraint
378
365
 
@@ -599,3 +586,16 @@ module Rant
599
586
  module_function :valid_constraint?, :valid_vid
600
587
  end # module RantVar
601
588
  end # module Rant
589
+
590
+ class Range
591
+ def rant_constraint
592
+ case first
593
+ when ::Integer
594
+ Rant::RantVar::Constraints::IntegerInRange.new(self)
595
+ when ::Float
596
+ Rant::RantVar::Constraints::FloatInRange.new(self)
597
+ else
598
+ raise NotAConstraintFactoryError.new(self)
599
+ end
600
+ end
601
+ end
@@ -0,0 +1,12 @@
1
+
2
+ # tempfile.rb
3
+ #
4
+ # Copyright (C) 2005 Stefan Lang <langstefan@gmx.at>
5
+
6
+ require 'tempfile'
7
+ if Tempfile.superclass == SimpleDelegator
8
+ require 'rant/archive/rubyzip/tempfile_bugfixed'
9
+ Rant::Tempfile = Rant::BugFix::Tempfile
10
+ else
11
+ Rant::Tempfile = Tempfile
12
+ end
data/test/Rantfile CHANGED
@@ -54,4 +54,37 @@ end
54
54
  desc "Make some path (basedir.t/a/b)."
55
55
  gen Directory, "basedir.t", "a/b"
56
56
 
57
+ gen Action do
58
+ if var[:make_path]
59
+ make Directory, "basedir.t"
60
+ make "basedir.t/a/b"
61
+ end
62
+ end
63
+
64
+ task :make_file do |t|
65
+ make "make_file.t" do |t|
66
+ sys.touch t.name
67
+ end
68
+ end
69
+
70
+ file "make_files_dep.t" do |t|
71
+ sys.touch t.name
72
+ end
73
+
74
+ gen Action do
75
+ if var[:make_files]
76
+ make "make_files.t" => "make_files_dep.t" do |t|
77
+ sys.touch t.name
78
+ end
79
+ end
80
+ if var[:make_gen_with_block]
81
+ import "subfile"
82
+ make SubFile, "a.t/a.t" do |t|
83
+ sys.touch t.name
84
+ end
85
+ end
86
+ end
87
+
88
+ task :dep_on_make_files => ["make_files.t"]
89
+
57
90
  # vim: ft=ruby
@@ -34,4 +34,33 @@ class TestDirectedRule < Test::Unit::TestCase
34
34
  assert(test(?d, "build2.t"))
35
35
  assert(test(?f, "build2.t/1.2a"))
36
36
  end
37
+ =begin
38
+ # This would currently be to complex to implement cleanly.
39
+ def test_invoke_rule_in_subdir
40
+ FileUtils.mkdir "sub.t"
41
+ Dir.chdir "sub.t"
42
+ FileUtils.mkdir "sub.t"
43
+ open "Rantfile", "w" do |f|
44
+ f << <<-EOF
45
+ import "directedrule", "autoclean"
46
+ gen Directory, "build.t"
47
+ gen DirectedRule, "build.t" => ["src.t"], :a => :b do |t|
48
+ sys.touch t.name
49
+ end
50
+ gen AutoClean
51
+ subdirs "sub.t"
52
+ EOF
53
+ end
54
+ open "sub.t/Rantfile", "w" do |f|
55
+ f << <<-EOF
56
+ task :a => "build.t/file.a"
57
+ EOF
58
+ end
59
+ assert_rant(:v, "sub.t/a")
60
+ assert(test(?f, "sub.t/build.t/file.a"))
61
+ ensure
62
+ Dir.chdir $testImportDrDir
63
+ FileUtils.rm_rf "sub.t"
64
+ end
65
+ =end
37
66
  end
@@ -46,4 +46,6 @@ gen Archive::Zip, "t7", :files => %w(sub7.t)
46
46
  gen Archive::Tgz, "sym", :files => sys["subs.t/**/*"]
47
47
  gen Archive::Zip, "sym", :files => sys["subs.t/**/*"]
48
48
 
49
+ gen Package::Tgz, "pkg.t/double", :files => %w(./Rantfile Rantfile)
50
+
49
51
  gen AutoClean
@@ -274,6 +274,16 @@ class TestImportPackage < Test::Unit::TestCase
274
274
  ensure
275
275
  FileUtils.rm_rf %w(subs.t sub6.t)
276
276
  end
277
+ def test_tgz_package_double
278
+ assert_rant("pkg.t/double.tgz")
279
+ out, err = assert_rant("pkg.t/double.tgz")
280
+ assert(out.empty?)
281
+ assert(err.empty?)
282
+ mf = %w(Rantfile)
283
+ dirs = %w()
284
+ @pkg_dir = "double"
285
+ check_contents(:tgz, "pkg.t/double.tgz", mf, dirs)
286
+ end
277
287
  def test_zip_follow_symlink
278
288
  have_symlinks = true
279
289
  FileUtils.mkdir "subs.t"
@@ -100,4 +100,25 @@ class TestSubFile < Test::Unit::TestCase
100
100
  "#{f} should have been unlinked by AutoClean")
101
101
  }
102
102
  end
103
+ def test_with_slash
104
+ open "with_slash.t", "w" do |f|
105
+ f << <<-EOF
106
+ import "subfile", "autoclean"
107
+ gen SubFile, "base.t/", "a" do |t|
108
+ sys.touch t.name
109
+ end
110
+ gen AutoClean
111
+ EOF
112
+ end
113
+ assert_rant(:fail, "-fwith_slash.t")
114
+ FileUtils.mkdir "base.t"
115
+ assert_rant("-fwith_slash.t")
116
+ assert(test(?f, "base.t/a"))
117
+ out, err = assert_rant("-fwith_slash.t")
118
+ assert(out.empty?)
119
+ assert(err.empty?)
120
+ assert_rant("-fwith_slash.t", "autoclean")
121
+ assert(test(?d, "base.t"))
122
+ assert(!test(?e, "base.t/a"))
123
+ end
103
124
  end
@@ -8,63 +8,43 @@ $testProject1Dir = File.expand_path(File.dirname(__FILE__))
8
8
 
9
9
  class TestProject1 < Test::Unit::TestCase
10
10
  def setup
11
- Dir.chdir($testProject1Dir) unless Dir.pwd == $testProject1Dir
12
- Rant.reset
11
+ Dir.chdir($testProject1Dir)
13
12
  end
14
13
  def teardown
15
- capture_std do
16
- assert_equal(Rant.run("force_clean"), 0)
17
- end
14
+ assert_rant("force_clean")
18
15
  end
19
16
  def test_run
20
- out, err = capture_std do
21
- assert_equal(Rant.run("test_touch"), 0,
22
- "Exit code of rant should be 0.")
23
- end
17
+ out, err = assert_rant("test_touch")
18
+ #"Exit code of rant should be 0.")
24
19
  assert(err =~ /\[WARNING\]/,
25
20
  "rant should print a warning because of enhance on non-existing task")
26
- Rant.reset
27
21
  assert(File.exist?("test_touch"),
28
22
  "file test_touch should have been created")
29
- capture_std do
30
- assert_equal(Rant.run("clean"), 0)
31
- end
23
+ assert_rant("clean")
32
24
  assert(!File.exist?("test_touch"))
33
25
  end
34
26
  def test_timedep
35
- capture_std do
36
- assert_equal(Rant.run("create_target"), 0)
37
- end
27
+ assert_rant("create_target")
38
28
  assert(File.exist?("target"))
39
- Rant.reset
40
29
  timeout
41
- capture_std do
42
- assert_equal(Rant.run("create_dep"), 0)
43
- end
30
+ assert_rant("create_dep")
44
31
  assert(File.exist?("dep"))
45
32
  assert(Rant::Sys.uptodate?("dep", "target"),
46
33
  "`create_target' was run before `create_dep'")
47
34
  timeout
48
- capture_std do
49
- assert_equal(Rant.run("target"), 0)
50
- end
35
+ assert_rant("target")
51
36
  assert(File.exist?("target"))
52
37
  assert(File.exist?("dep"))
53
38
  assert(Rant::Sys.uptodate?("target", "dep"),
54
39
  "`target' should be newer than `dep'")
55
40
  t1 = File.mtime "target"
56
- Rant.reset
57
41
  timeout
58
- capture_std do
59
- assert_equal(Rant.run("target"), 0)
60
- end
42
+ assert_rant("target")
61
43
  assert_equal(t1, File.mtime("target"),
62
44
  "`target' was already up to date")
63
45
  end
64
46
  def test_two_deps
65
- capture_std do
66
- assert_equal(Rant.run("t2"), 0)
67
- end
47
+ assert_rant("t2")
68
48
  assert(File.exist?("t2"),
69
49
  "file `t2' should have been built")
70
50
  assert(File.exist?("dep1"),
@@ -14,7 +14,7 @@ class TestProject2 < Test::Unit::TestCase
14
14
  include Rant
15
15
  include ::Rant::Sys
16
16
 
17
- def app *args
17
+ def app(*args)
18
18
  @app = ::Rant::RantApp.new
19
19
  @app.args.concat(args.flatten)
20
20
  @app
@@ -19,7 +19,8 @@ class TestProjectRb1 < Test::Unit::TestCase
19
19
  end
20
20
  def check_manifest(msg_prefix = "")
21
21
  manifest = @manifest.dup
22
- Dir["**/*"].each { |e|
22
+ #Dir["**/*"].each { |e|
23
+ Rant::FileList["**/*"].shun(".svn").each { |e|
23
24
  assert(manifest.reject! { |mf| mf == e } ,
24
25
  "#{msg_prefix}#{e} shouldn't exist according to manifest")
25
26
  }
@@ -9,7 +9,7 @@ $testRantImportDir ||= File.expand_path(File.dirname(__FILE__))
9
9
  class TestRantImport < Test::Unit::TestCase
10
10
  def setup
11
11
  # Ensure we run in test directory.
12
- Dir.chdir($testRantImportDir) unless Dir.pwd == $testRantImportDir
12
+ Dir.chdir($testRantImportDir)
13
13
  end
14
14
  def teardown
15
15
  Dir.chdir($testRantImportDir)
@@ -165,4 +165,38 @@ class TestRantImport < Test::Unit::TestCase
165
165
  assert_equal(1, files.size)
166
166
  assert(files.include?("b.t/b.s.t"))
167
167
  end
168
+ def test_loaded_features
169
+ FileUtils.mkdir "features.t"
170
+ Dir.chdir "features.t"
171
+ FileUtils.mkpath "rant/import"
172
+ open "rant/import/foo.rb", "w" do |f|
173
+ f << <<-EOF
174
+ def foo
175
+ puts "foo"
176
+ end
177
+ EOF
178
+ end
179
+ open "Rantfile", "w" do |f|
180
+ f << <<-EOF
181
+ import "foo"
182
+ require 'rant/import/foo'
183
+ task :default do
184
+ foo
185
+ end
186
+ EOF
187
+ end
188
+ out, err = assert_rant
189
+ assert_match(/foo/, out)
190
+ assert(err.empty?)
191
+ run_import("-q", "--auto", "make.rb")
192
+ assert_exit
193
+ assert(test(?f, "make.rb"))
194
+ out = run_ruby("make.rb")
195
+ assert_exit
196
+ assert_match(/foo/, out)
197
+ FileUtils.rm_rf "rant"
198
+ out = run_ruby("make.rb")
199
+ assert_exit
200
+ assert_match(/foo/, out)
201
+ end
168
202
  end
@@ -9,13 +9,12 @@ $testSubdirsDir = File.expand_path(File.dirname(__FILE__))
9
9
  class TestSubdirs < Test::Unit::TestCase
10
10
  def setup
11
11
  Dir.chdir($testSubdirsDir) unless Dir.pwd == $testSubdirsDir
12
- Rant.reset
13
12
  end
14
13
  def teardown
15
14
  capture_std do
16
15
  assert_equal(0, Rant.run("clean"))
17
16
  end
18
- created = Dir["**/*t"]
17
+ created = Rant::FileList["**/*t"].shun(".svn")#Dir["**/*t"]
19
18
  assert(created.empty?)
20
19
  end
21
20
  def test_load
data/test/test_dirtask.rb CHANGED
@@ -74,4 +74,46 @@ class TestDirTask < Test::Unit::TestCase
74
74
  assert_match(%r{basedir.t/a/b\s*#.*Make some path}, out)
75
75
  assert_rant("clean")
76
76
  end
77
+ def test_basedir_with_slash
78
+ open "dir_with_slash.t", "w" do |f|
79
+ f << <<-EOF
80
+ import "autoclean"
81
+ file "a.t/b/c" => "a.t/b" do |t|
82
+ sys.touch t.name
83
+ end
84
+ gen Directory, "a.t/", "b"
85
+ gen AutoClean
86
+ EOF
87
+ end
88
+ assert_rant(:fail, "-fdir_with_slash.t")
89
+ assert(!test(?e, "a.t"))
90
+ FileUtils.mkdir "a.t"
91
+ assert_rant("-fdir_with_slash.t")
92
+ assert(test(?f, "a.t/b/c"))
93
+ out, err = assert_rant("-fdir_with_slash.t")
94
+ assert(out.empty?)
95
+ assert(err.empty?)
96
+ assert_rant("-fdir_with_slash.t", "autoclean")
97
+ assert(test(?d, "a.t"))
98
+ assert(!test(?e, "a.t/b"))
99
+ end
100
+ def test_with_slash
101
+ open "dir_with_slash.t", "w" do |f|
102
+ f << <<-EOF
103
+ import "autoclean"
104
+ file "a.t/b" => "a.t" do |t|
105
+ sys.touch t.name
106
+ end
107
+ gen Directory, "a.t/"
108
+ gen AutoClean
109
+ EOF
110
+ end
111
+ assert_rant("-fdir_with_slash.t")
112
+ assert(test(?f, "a.t/b"))
113
+ out, err = assert_rant("-fdir_with_slash.t")
114
+ assert(out.empty?)
115
+ assert(err.empty?)
116
+ assert_rant("-fdir_with_slash.t", "autoclean")
117
+ assert(!test(?e, "a.t"))
118
+ end
77
119
  end
@@ -66,4 +66,71 @@ class TestExamples < Test::Unit::TestCase
66
66
  assert(!test(?f, "c_dependencies"))
67
67
  assert(!test(?f, "hello"))
68
68
  end
69
+ def test_c_cpp_examples
70
+ Dir.chdir "c_cpp_examples"
71
+ proj_pwd = Dir.pwd
72
+ out, err = assert_rant("--tasks")
73
+ # TODO: replace with a not-so-strict regex
74
+ op = <<EOF
75
+ rant run # Run all C and C++ tests.
76
+ rant build # Build all.
77
+ rant autoclean # Remove all autogenerated files.
78
+ rant pkg/c_cpp_exercises.tgz # Create source package.
79
+ EOF
80
+ assert_equal(op, out)
81
+ assert(err.empty?)
82
+ gen_files = %w(
83
+ c/problem_1_1/Rantfile
84
+ c++/problem_1_1/Rantfile
85
+ c/problem_1_1/c_dependencies
86
+ c++/problem_1_1/c_dependencies
87
+ c/problem_1_1/test
88
+ c++/problem_1_1/test
89
+ c/problem_1_1/main.o
90
+ c++/problem_1_1/main.o
91
+ c/problem_1_1/test.o
92
+ c++/problem_1_1/test.o
93
+ c/problem_1_1/another_test.o
94
+ c++/problem_1_1/another_test.o
95
+ pkg
96
+ )
97
+ if Rant::Env.find_bin("gcc") && Rant::Env.find_bin("g++")
98
+ out = run_rant
99
+ assert_exit
100
+ assert_equal(2, out.scan("Hello, world!").size)
101
+ out, err = assert_rant("build")
102
+ assert(out.empty?)
103
+ assert(err.empty?)
104
+ else
105
+ STDERR.puts "*** gcc and/or g++ not available, less example testing ***"
106
+ end
107
+ assert_rant("pkg/c_cpp_exercises.tgz")
108
+ # TODO: check archive contents
109
+ assert(test(?f, "pkg/c_cpp_exercises.tgz"))
110
+ out, err = assert_rant("pkg/c_cpp_exercises.tgz")
111
+ assert(out.empty?)
112
+ assert(err.empty?)
113
+ assert_rant("autoclean")
114
+ gen_files.each { |f|
115
+ assert(!test(?e, f),
116
+ "#{f} should have been removed by autoclean")
117
+ }
118
+ if Rant::Env.find_bin("gcc")
119
+ FileUtils.cp "c/template.rf", "c/problem_1_1/Rantfile"
120
+ Dir.chdir "c/problem_1_1"
121
+ out = run_rant
122
+ assert(out.include?("Hello, world!"))
123
+ assert_rant("autoclean")
124
+ FileUtils.rm_f "Rantfile"
125
+ Dir.chdir proj_pwd
126
+ gen_files.each { |f|
127
+ assert(!test(?e, f),
128
+ "#{f} should have been removed by autoclean")
129
+ }
130
+ end
131
+ ensure
132
+ Dir.chdir proj_pwd
133
+ FileUtils.rm_f "c/problem_1_1/Rantfile"
134
+ FileUtils.rm_f "c++/problem_1_1/Rantfile"
135
+ end
69
136
  end
@@ -288,6 +288,19 @@ class TestFileList < Test::Unit::TestCase
288
288
  assert(l1.include("b.t"))
289
289
  end
290
290
  end
291
+ def test_sys_find_all_resolve
292
+ cx = Rant::RantApp.new.cx
293
+ touch_temp %w(a.t b.t) do
294
+ l1 = cx.sys["*.t"]
295
+ l1.resolve
296
+ l2 = l1.find_all { |f| f =~ /^b/ }
297
+ assert_equal(2, l1.size)
298
+ assert(l1.include("a.t"))
299
+ assert(l1.include("b.t"))
300
+ assert_equal(1, l2.size)
301
+ assert(l1.include("b.t"))
302
+ end
303
+ end
291
304
  def test_sys_glob_flags
292
305
  cx = Rant::RantApp.new.cx
293
306
  touch_temp %w(a.t .a.t b.t .b.t) do
@@ -328,4 +341,43 @@ class TestFileList < Test::Unit::TestCase
328
341
  assert(fl.include?("a.t"))
329
342
  end
330
343
  end
344
+ def test_map
345
+ cx = Rant::RantApp.new.cx
346
+ touch_temp %w(a.t b.t) do
347
+ fl = cx.sys["*.t"]
348
+ l2 = fl.map { |f| f + "t" }
349
+ assert(Rant::FileList === l2)
350
+ assert_equal(2, l2.size)
351
+ assert(l2.include?("a.tt"))
352
+ assert(l2.include?("b.tt"))
353
+ assert_equal(2, fl.size)
354
+ assert(fl.include?("a.t"))
355
+ assert(fl.include?("b.t"))
356
+ end
357
+ end
358
+ def test_no_file
359
+ cx = Rant::RantApp.new.cx
360
+ touch_temp %w(a.t b.t) do
361
+ fl = cx.sys["*.t"]
362
+ fl.no_file "a.t"
363
+ assert_equal(1, fl.size)
364
+ assert(fl.include?("b.t"))
365
+ end
366
+ end
367
+ def test_to_s
368
+ cx = Rant::RantApp.new.cx
369
+ assert_equal("a b", cx.sys[].concat(%w(a b)).to_s)
370
+ assert_equal("", "#{cx.sys[]}")
371
+ end
372
+ if Rant::Env.on_windows?
373
+ def test_to_s_quoting_spaces_win
374
+ cx = Rant::RantApp.new.cx
375
+ assert_equal('"a a" b', "#{cx.sys[].concat(["a a", "b"])}")
376
+ end
377
+ else
378
+ def test_to_s_quoting_spaces
379
+ cx = Rant::RantApp.new.cx
380
+ assert_equal("'a a' b", "#{cx.sys[].concat(["a a", "b"])}")
381
+ end
382
+ end
331
383
  end