rant 0.3.0 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/NEWS +21 -0
  2. data/README +8 -0
  3. data/Rantfile +30 -16
  4. data/TODO +3 -4
  5. data/devel-notes +16 -0
  6. data/doc/csharp.rdoc +2 -3
  7. data/doc/examples/myprog/README +2 -0
  8. data/doc/examples/myprog/Rantfile +13 -0
  9. data/doc/examples/myprog/src/Rantfile +15 -0
  10. data/doc/examples/myprog/src/lib.c +6 -0
  11. data/doc/examples/myprog/src/lib.h +4 -0
  12. data/doc/examples/myprog/src/main.c +7 -0
  13. data/doc/rantfile.rdoc +108 -3
  14. data/lib/rant/cs_compiler.rb +6 -4
  15. data/lib/rant/import.rb +13 -0
  16. data/lib/rant/import/rubypackage.rb +43 -20
  17. data/lib/rant/plugin/configure.rb +21 -7
  18. data/lib/rant/plugin/csharp.rb +8 -9
  19. data/lib/rant/rantenv.rb +3 -0
  20. data/lib/rant/rantfile.rb +66 -33
  21. data/lib/rant/rantlib.rb +133 -27
  22. data/lib/rant/rantsys.rb +197 -42
  23. data/rantmethods.rb +46 -0
  24. data/setup.rb +18 -4
  25. data/test/plugin/configure/Rantfile +0 -6
  26. data/test/plugin/configure/test_configure.rb +2 -2
  27. data/test/plugin/csharp/test_csharp.rb +7 -2
  28. data/test/plugin/rantfile +45 -0
  29. data/test/plugin/test_conf_csharp.rb +53 -0
  30. data/test/project1/Rantfile +4 -0
  31. data/test/project1/test_project.rb +33 -8
  32. data/test/project2/buildfile +3 -3
  33. data/test/project2/sub1/Rantfile +3 -3
  34. data/test/project2/test_project.rb +6 -4
  35. data/test/project_rb1/test_project_rb1.rb +2 -2
  36. data/test/standalone.rf +10 -0
  37. data/test/subdirs/Rantfile +26 -0
  38. data/test/subdirs/sub1/Rantfile +15 -0
  39. data/test/subdirs/sub2/rantfile.rb +14 -0
  40. data/test/subdirs/sub2/sub/rantfile +15 -0
  41. data/test/subdirs/test_subdirs.rb +96 -0
  42. data/test/test_env.rb +3 -3
  43. data/test/test_filelist.rb +143 -0
  44. data/test/test_lighttask.rb +21 -0
  45. data/test/test_metatask.rb +1 -1
  46. data/test/test_rant_interface.rb +5 -5
  47. data/test/test_sys.rb +7 -1
  48. data/test/test_task.rb +25 -0
  49. data/test/toplevel.rf +0 -1
  50. data/test/tutil.rb +26 -1
  51. metadata +39 -14
@@ -0,0 +1,10 @@
1
+
2
+ require 'rant'
3
+
4
+ task :t_standalone do |t|
5
+ puts t.name
6
+ end
7
+
8
+ if $0 == __FILE__
9
+ exit Rant.run
10
+ end
@@ -0,0 +1,26 @@
1
+
2
+ file "t" => "sub1/t" do |t|
3
+ sys.touch t.name
4
+ end
5
+
6
+ file "2t" => "sub2/t" do |t|
7
+ sys.touch t.name
8
+ end
9
+
10
+ file "subdep.t" do |t|
11
+ sys.touch t.name
12
+ end
13
+
14
+ task :sub_sub => "sub2/sub/rootref.t" do |t|
15
+ test(?f, "sub2/sub/rootref.t") or t.fail
16
+ sys.touch "sub_sub.t"
17
+ end
18
+
19
+ #task :clean => ["sub1/clean", "sub2/clean"] do
20
+ task :clean => ["sub2/clean", "sub1/clean", "sub2/sub/clean"] do
21
+ sys.rm_f Dir["*t"]
22
+ end
23
+
24
+ subdirs FileList["sub*"].exclude("*.*")
25
+
26
+ # vim:ft=ruby
@@ -0,0 +1,15 @@
1
+
2
+ file "t" do |t|
3
+ sys.touch t.name
4
+ end
5
+
6
+ file "rootdep.t" => "#subdep.t" do |t|
7
+ test(?f, "../subdep.t") || t.fail
8
+ sys.touch t.name
9
+ end
10
+
11
+ task :clean do
12
+ sys.rm_f Dir["*t"]
13
+ end
14
+
15
+ # vim:ft=ruby
@@ -0,0 +1,14 @@
1
+
2
+ subdirs "sub"
3
+
4
+ file "t" do |t|
5
+ sys.touch t.name
6
+ end
7
+
8
+ file "subdep.t" => "sub/rootdep.t" do |t|
9
+ sys.touch t.name
10
+ end
11
+
12
+ task :clean do
13
+ sys.rm_f Dir["*t"]
14
+ end
@@ -0,0 +1,15 @@
1
+
2
+ file "rootdep.t" do |t|
3
+ sys.touch t.name
4
+ end
5
+
6
+ file "rootref.t" => "#t" do |t|
7
+ test(?f, "../../t") || t.fail
8
+ sys.touch t.name
9
+ end
10
+
11
+ task :clean do
12
+ sys.rm_f Dir["*t"]
13
+ end
14
+
15
+ # vim:ft=ruby
@@ -0,0 +1,96 @@
1
+
2
+ require 'test/unit'
3
+ require 'rant/rantlib'
4
+ require 'tutil'
5
+
6
+ # Ensure we run in testproject directory.
7
+ $testSubdirsDir = File.expand_path(File.dirname(__FILE__))
8
+
9
+ class TestSubdirs < Test::Unit::TestCase
10
+ def setup
11
+ Dir.chdir($testSubdirsDir) unless Dir.pwd == $testSubdirsDir
12
+ Rant.reset
13
+ end
14
+ def teardown
15
+ capture_std do
16
+ assert_equal(Rant.run("clean"), 0)
17
+ end
18
+ created = Dir["**/*t"]
19
+ assert(created.empty?)
20
+ end
21
+ def test_load
22
+ capture_std do
23
+ assert_equal(0, Rant.run("-T"))
24
+ end
25
+ end
26
+ def test_sub_dep
27
+ capture_std do
28
+ assert_equal(0, Rant.run("t"))
29
+ end
30
+ assert(test(?f, "sub1/t"),
31
+ "t depends on sub1/t")
32
+ assert(test(?f, "t"))
33
+ end
34
+ def test_sub_dep2
35
+ capture_std do
36
+ assert_equal(0, Rant.run("2t"))
37
+ end
38
+ assert(test(?f, "sub2/t"))
39
+ assert(test(?f, "2t"))
40
+ assert(!test(?e, "sub1/t"))
41
+ end
42
+ def test_sub_task_from_commandline
43
+ capture_std do
44
+ assert_equal(0, Rant.run("sub1/t"))
45
+ end
46
+ assert(test(?f, "sub1/t"))
47
+ assert(!test(?e, "t"))
48
+ capture_std do
49
+ assert_equal(0, Rant.run("sub1/clean"))
50
+ end
51
+ assert(!test(?f, "sub1/t"))
52
+ end
53
+ def test_root_dep
54
+ capture_std do
55
+ assert_equal(0, Rant.run("sub1/rootdep.t"))
56
+ end
57
+ assert(test(?f, "subdep.t"))
58
+ assert(test(?f, "sub1/rootdep.t"))
59
+ end
60
+ def test_sub_sub_dep
61
+ capture_std do
62
+ assert_equal(0, Rant.run("sub2/subdep.t"))
63
+ end
64
+ assert(test(?f, "sub2/subdep.t"))
65
+ assert(test(?f, "sub2/sub/rootdep.t"))
66
+ end
67
+ def test_sub_sub_rootref
68
+ capture_std do
69
+ assert_equal(0, Rant.run("sub2/sub/rootref.t"))
70
+ end
71
+ assert(test(?f, "t"))
72
+ assert(test(?f, "sub2/sub/rootref.t"))
73
+ end
74
+ def test_root_sub_sub_rootref
75
+ capture_std do
76
+ assert_equal(0, Rant.run("sub_sub"))
77
+ end
78
+ assert(test(?f, "sub_sub.t"))
79
+ assert(test(?f, "sub2/sub/rootref.t"))
80
+ assert(test(?f, "t"))
81
+ end
82
+ def test_import
83
+ run_import %w(--auto ant)
84
+ assert_equal($?, 0)
85
+ capture_std do
86
+ assert_nothing_raised {
87
+ Rant::Sys.ruby("ant", "-q", "sub_sub")
88
+ }
89
+ end
90
+ assert(test(?f, "sub_sub.t"))
91
+ assert(test(?f, "sub2/sub/rootref.t"))
92
+ assert(test(?f, "t"))
93
+ ensure
94
+ File.delete "ant" if File.exist? "ant"
95
+ end
96
+ end
@@ -30,15 +30,15 @@ class TestRantEnv < Test::Unit::TestCase
30
30
  have_echo = `echo hello` =~ /hello/
31
31
  rescue Exception
32
32
  end
33
- if have_echo
34
- =begin
33
+ if have_echo
34
+ =begin
35
35
  # seems to be not so on windows...
36
36
  echo_bin = Rant::Env.find_bin("echo")
37
37
  assert(echo_bin,
38
38
  "echo can be invoked, so find_bin should find it")
39
39
  assert(echo_bin =~ /echo/i)
40
40
  assert(`#{echo_bin} hello` =~ /hello/,
41
- "echo should be invokable through `#{echo_bin}'")
41
+ "echo should be invokable through `#{echo_bin}'")
42
42
  =end
43
43
  else
44
44
  puts "*** echo not available, will not search with find_bin ***"
@@ -0,0 +1,143 @@
1
+
2
+ require 'test/unit'
3
+ require 'rant/rantlib'
4
+ require 'fileutils'
5
+ require 'tutil'
6
+
7
+ $testDir ||= File.expand_path(File.dirname(__FILE__))
8
+
9
+ class TestFileList < Test::Unit::TestCase
10
+ def fl(*args, &block)
11
+ Rant::FileList.new(*args, &block)
12
+ end
13
+ def touch_temp(*args)
14
+ files = args.flatten
15
+ files.each { |f| FileUtils.touch f }
16
+ yield if block_given?
17
+ ensure
18
+ files.each { |f|
19
+ File.delete f if File.exist? f
20
+ }
21
+ end
22
+ def setup
23
+ # Ensure we run in test directory.
24
+ Dir.chdir($testDir) unless Dir.pwd == $testDir
25
+ end
26
+ def teardown
27
+ end
28
+ def test_in_flatten
29
+ touch_temp %w(1.t 2.t) do
30
+ assert(test(?f, "1.t")) # test touch_temp...
31
+ assert(test(?f, "2.t"))
32
+ assert_equal(2, fl("*.t").size)
33
+ # see comments in FileList implementation to understand
34
+ # the necessity of this test...
35
+ assert_equal(2, [fl("*.t")].flatten.size)
36
+ end
37
+ end
38
+ def test_exclude_all
39
+ l = fl
40
+ inc_list = %w(
41
+ CVS_ a/b a
42
+ ).map! { |f| f.tr "/", File::SEPARATOR }
43
+ not_inc_list = %w(
44
+ CVS a/CVS a/CVS/b CVS/CVS //CVS /CVS/ /a/b/CVS/c
45
+ ).map! { |f| f.tr "/", File::SEPARATOR }
46
+ l.concat(not_inc_list + inc_list)
47
+ l.exclude_all "CVS"
48
+ inc_list.each { |f|
49
+ assert(l.include?(f))
50
+ }
51
+ not_inc_list.each { |f|
52
+ assert(!l.include?(f))
53
+ }
54
+ end
55
+ def test_initialize
56
+ touch_temp %w(1.t 2.tt) do
57
+ assert(fl("*.t").include?("1.t"),
58
+ 'FileList["*.t"] should include 1.t')
59
+ l = fl("*.t", "*.tt")
60
+ assert(l.include?("1.t"))
61
+ assert(l.include?("2.tt"))
62
+ end
63
+ end
64
+ def test_initialize_with_yield
65
+ touch_temp %w(a.t b.t a.tt b.tt) do
66
+ list = fl { |l|
67
+ l.include "*.t", "*.tt"
68
+ l.exclude "a*"
69
+ }
70
+ %w(b.t b.tt).each { |f|
71
+ assert(list.include?(f), "`#{f}' should be included")
72
+ }
73
+ %w(a.t a.tt).each { |f|
74
+ assert(!list.include?(f), "`#{f}' shouln't be included")
75
+ }
76
+ end
77
+ end
78
+ def test_mix_include_exclude
79
+ touch_temp %w(a.t b.t c.t d.t) do
80
+ list = fl "a*"
81
+ list.exclude("a*", "b*").include(*%w(b* c* d*))
82
+ assert(list.exclude_all("d.t").equal?(list))
83
+ assert(list.include?("b.t"))
84
+ assert(list.include?("c.t"))
85
+ assert(!list.include?("a.t"))
86
+ assert(!list.include?("d.t"))
87
+ end
88
+ end
89
+ def test_exclude_regexp
90
+ touch_temp %w(aa.t a.t a+.t) do
91
+ list = fl "*.t"
92
+ list.exclude(/a+\.t/)
93
+ assert(list.include?("a+.t"))
94
+ assert(!list.include?("a.t"))
95
+ assert(!list.include?("aa.t"))
96
+ assert_equal(1, list.size)
97
+
98
+ list = fl "*.t"
99
+ list.exclude("a+.t")
100
+ assert(!list.include?("a+.t"))
101
+ assert(list.include?("a.t"))
102
+ assert(list.include?("aa.t"))
103
+ assert_equal(2, list.size)
104
+ end
105
+ end
106
+ def test_addition
107
+ touch_temp %w(t.t1 t.t2 t.t3) do
108
+ l = (fl("*.t1") << "a") + fl("*.t2", "*.t3")
109
+ assert_equal(4, l.size)
110
+ %w(t.t1 t.t2 t.t3 a).each { |f|
111
+ assert(l.include?(f),
112
+ "`#{f}' should be included")
113
+ }
114
+ end
115
+ end
116
+ def test_2addition
117
+ touch_temp %w(1.ta 1.tb 2.t) do
118
+ l1 = fl "*.ta", "*.t"
119
+ l2 = fl "1*"
120
+ l2.exclude "*.ta"
121
+ l = l1 + l2
122
+ assert(l.include?("1.ta"))
123
+ assert_equal(3, l.size)
124
+ end
125
+ end
126
+ def test_glob
127
+ touch_temp %w(t.t1 t.t2) do
128
+ l = fl "*.t1"
129
+ l.glob "*.t2"
130
+ assert_equal(2, l.size)
131
+ assert(l.include?("t.t1"))
132
+ assert(l.include?("t.t2"))
133
+ end
134
+ end
135
+ def test_shun
136
+ touch_temp %w(t.t1 t.t2) do
137
+ l = fl "t.*"
138
+ l.shun "t.t1"
139
+ assert_equal(1, l.size)
140
+ assert(l.include?("t.t2"))
141
+ end
142
+ end
143
+ end
@@ -46,4 +46,25 @@ class TestLightTask < Test::Unit::TestCase
46
46
  assert(!t.needed?,
47
47
  "task shouldn't be needed? after first run")
48
48
  end
49
+ def test_task_with_lighttask_pre
50
+ lt_run = false
51
+ lt_nr = false
52
+ t_run = false
53
+ @app.args.replace %w(t)
54
+ t1 = @app.gen Rant::LightTask, :t1 do |t|
55
+ t.needed { lt_nr = true }
56
+ t.act { lt_run = true }
57
+ end
58
+ t = @app.task :t => :t1 do
59
+ assert(lt_run,
60
+ "LightTask prerequisite should run first.")
61
+ t_run = true
62
+ end
63
+ assert(t.needed?)
64
+ assert(lt_nr)
65
+ assert(!lt_run,
66
+ "LightTask#needed? shouldn't run 'act' block")
67
+ assert_equal(0, @app.run)
68
+ assert(t_run)
69
+ end
49
70
  end
@@ -12,7 +12,7 @@ class TestMetaTask < Test::Unit::TestCase
12
12
  def test_with_single_task
13
13
  run = false
14
14
  t = @app.task :t do run = true end
15
- mt = MetaTask.for_task t
15
+ mt = Rant::MetaTask.for_task t
16
16
  assert_equal(t.name, mt.name,
17
17
  "MetaTask should have name of contained task(s).")
18
18
  if t.needed?
@@ -1,6 +1,6 @@
1
1
 
2
2
  require 'test/unit'
3
- require 'rant'
3
+ require 'rant/rantlib'
4
4
  require 'tutil'
5
5
 
6
6
  $testDir ||= File.expand_path(File.dirname(__FILE__))
@@ -13,7 +13,7 @@ class TestRantInterface < Test::Unit::TestCase
13
13
  def teardown
14
14
  end
15
15
  def test_cmd_targets
16
- @app = RantApp.new("-f non_existent", "target", "-aforced_target")
16
+ @app = Rant::RantApp.new("-f non_existent", "target", "-aforced_target")
17
17
  op = capture_stderr {
18
18
  assert_equal(@app.run, 1,
19
19
  "Rant should fail because there is no such Rantfile.")
@@ -28,19 +28,19 @@ class TestRantInterface < Test::Unit::TestCase
28
28
  "forced_target should run first")
29
29
  end
30
30
  def test_envvar_on_cmdline
31
- @app = RantApp.new("VAR=VAL")
31
+ @app = Rant::RantApp.new("VAR=VAL")
32
32
  assert_equal(@app.run, 0)
33
33
  assert_equal(ENV["VAR"], "VAL",
34
34
  "rant should set arguments of form VAR=VAL in ENV")
35
35
  end
36
36
  def test_envvar_on_cmdline_lc
37
- @app = RantApp.new("var2=val2")
37
+ @app = Rant::RantApp.new("var2=val2")
38
38
  assert_equal(@app.run, 0)
39
39
  assert_equal(ENV["var2"], "val2",
40
40
  "rant should set arguments of form var2=val2 in ENV")
41
41
  end
42
42
  def test_opt_targets
43
- @app = RantApp.new("--tasks")
43
+ @app = Rant::RantApp.new("--tasks")
44
44
  @app.desc 'This is a "public" target.'
45
45
  @app.task :public_task
46
46
  @app.task :private_task
@@ -5,7 +5,7 @@ require 'tutil'
5
5
 
6
6
  $testDir ||= File.expand_path(File.dirname(__FILE__))
7
7
 
8
- class TestFileUtils < Test::Unit::TestCase
8
+ class TestSys < Test::Unit::TestCase
9
9
  include Rant::Sys
10
10
 
11
11
  def setup
@@ -58,4 +58,10 @@ class TestFileUtils < Test::Unit::TestCase
58
58
  ensure
59
59
  File.delete "name_error.rf" if File.exist? "name_error.rf"
60
60
  end
61
+ # ...
62
+ def test_standalone
63
+ out = `#{Rant::Sys.sp(Rant::Env::RUBY)} -I#{Rant::Sys.sp(RANT_DEV_LIB_DIR)} standalone.rf`
64
+ assert(0, $?)
65
+ assert_match(/^t_standalone/, out)
66
+ end
61
67
  end
@@ -112,4 +112,29 @@ class TestTask < Test::Unit::TestCase
112
112
  assert_equal(rl, %w(t1 t2 t3),
113
113
  "t3 was run and depends on [t1, t2] => run order: t1 t2 t3")
114
114
  end
115
+ def test_enhance_gen_task
116
+ app = Rant::RantApp.new
117
+ enhance_run = false
118
+ t_run = false
119
+ t2_run = false
120
+ app.gen Rant::Task, :t do |t|
121
+ t.needed { true }
122
+ t.act {
123
+ assert(t2_run,
124
+ "enhance added `t2' as prerequisite")
125
+ t_run = true
126
+ }
127
+ end
128
+ app.gen Rant::Task, :t2 do |t|
129
+ t.needed { true }
130
+ t.act { t2_run = true }
131
+ end
132
+ assert_nothing_raised("generated Task should be enhanceable") {
133
+ app.enhance :t => :t2 do
134
+ enhance_run = true
135
+ end
136
+ }
137
+ assert_equal(0, app.run)
138
+ assert(t_run)
139
+ end
115
140
  end