rant 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +504 -0
- data/README +203 -0
- data/Rantfile +104 -0
- data/TODO +19 -0
- data/bin/rant +12 -0
- data/bin/rant-import +12 -0
- data/devel-notes +50 -0
- data/doc/configure.rdoc +40 -0
- data/doc/csharp.rdoc +74 -0
- data/doc/rant-import.rdoc +32 -0
- data/doc/rant.rdoc +24 -0
- data/doc/rantfile.rdoc +227 -0
- data/doc/rubyproject.rdoc +210 -0
- data/lib/rant.rb +9 -0
- data/lib/rant/cs_compiler.rb +334 -0
- data/lib/rant/import.rb +291 -0
- data/lib/rant/import/rubydoc.rb +125 -0
- data/lib/rant/import/rubypackage.rb +417 -0
- data/lib/rant/import/rubytest.rb +97 -0
- data/lib/rant/plugin/README +50 -0
- data/lib/rant/plugin/configure.rb +345 -0
- data/lib/rant/plugin/csharp.rb +275 -0
- data/lib/rant/plugin_methods.rb +41 -0
- data/lib/rant/rantenv.rb +217 -0
- data/lib/rant/rantfile.rb +664 -0
- data/lib/rant/rantlib.rb +1118 -0
- data/lib/rant/rantsys.rb +258 -0
- data/lib/rant/rantvar.rb +82 -0
- data/rantmethods.rb +79 -0
- data/run_import +7 -0
- data/run_rant +7 -0
- data/setup.rb +1360 -0
- data/test/Rantfile +2 -0
- data/test/plugin/configure/Rantfile +47 -0
- data/test/plugin/configure/test_configure.rb +58 -0
- data/test/plugin/csharp/Hello.cs +10 -0
- data/test/plugin/csharp/Rantfile +30 -0
- data/test/plugin/csharp/src/A.cs +8 -0
- data/test/plugin/csharp/src/B.cs +8 -0
- data/test/plugin/csharp/test_csharp.rb +99 -0
- data/test/project1/Rantfile +127 -0
- data/test/project1/test_project.rb +203 -0
- data/test/project2/buildfile +14 -0
- data/test/project2/rantfile.rb +20 -0
- data/test/project2/sub1/Rantfile +12 -0
- data/test/project2/test_project.rb +87 -0
- data/test/project_rb1/README +14 -0
- data/test/project_rb1/bin/wgrep +5 -0
- data/test/project_rb1/lib/wgrep.rb +56 -0
- data/test/project_rb1/rantfile.rb +30 -0
- data/test/project_rb1/test/tc_wgrep.rb +21 -0
- data/test/project_rb1/test/text +3 -0
- data/test/project_rb1/test_project_rb1.rb +153 -0
- data/test/test_env.rb +47 -0
- data/test/test_filetask.rb +57 -0
- data/test/test_lighttask.rb +49 -0
- data/test/test_metatask.rb +29 -0
- data/test/test_rant_interface.rb +65 -0
- data/test/test_sys.rb +61 -0
- data/test/test_task.rb +115 -0
- data/test/toplevel.rf +11 -0
- data/test/ts_all.rb +4 -0
- data/test/tutil.rb +95 -0
- metadata +133 -0
@@ -0,0 +1,57 @@
|
|
1
|
+
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rant/rantlib'
|
4
|
+
|
5
|
+
$test_filetask_file = File.expand_path(__FILE__)
|
6
|
+
|
7
|
+
class TestFileTask < Test::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
end
|
10
|
+
def teardown
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_needed_non_existent
|
14
|
+
run = false
|
15
|
+
t = Rant::FileTask.new(nil, "non_existent") { run = true }
|
16
|
+
assert(t.needed?,
|
17
|
+
"`non_existent' doesn't exist, so filetask is needed")
|
18
|
+
assert(!run,
|
19
|
+
"only FileTask#needed? was called, which shouldn't run task block")
|
20
|
+
end
|
21
|
+
def test_needed_no_dep
|
22
|
+
run = false
|
23
|
+
t = Rant.file $test_filetask_file do
|
24
|
+
run = true
|
25
|
+
end
|
26
|
+
assert(!t.needed?,
|
27
|
+
"file exists and has no prerequisite, so needed? should return false")
|
28
|
+
assert(!run)
|
29
|
+
end
|
30
|
+
def test_single_dep
|
31
|
+
tr = false
|
32
|
+
t = Rant.task :t do
|
33
|
+
tr = true
|
34
|
+
end
|
35
|
+
run = false
|
36
|
+
f = Rant.file "testfile" => :t do
|
37
|
+
run = true
|
38
|
+
end
|
39
|
+
f.invoke
|
40
|
+
assert(tr)
|
41
|
+
assert(run)
|
42
|
+
end
|
43
|
+
def test_prerequisites
|
44
|
+
Rant.file "a" do
|
45
|
+
true
|
46
|
+
end
|
47
|
+
Rant.file "b" do
|
48
|
+
true
|
49
|
+
end
|
50
|
+
f = Rant.file "c" => %w(a b) do |t|
|
51
|
+
assert_equal(t.prerequisites, %w(a b),
|
52
|
+
"prerequisites should always be an array of _strings_")
|
53
|
+
true
|
54
|
+
end
|
55
|
+
f.invoke
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rant/rantlib'
|
4
|
+
|
5
|
+
|
6
|
+
class TestLightTask < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@app = Rant::RantApp.new %w()
|
9
|
+
end
|
10
|
+
def teardown
|
11
|
+
end
|
12
|
+
# shortcut for Rant::LightTask.new
|
13
|
+
def lt(*args, &block)
|
14
|
+
Rant::LightTask.new(*[@app, args].flatten, &block)
|
15
|
+
end
|
16
|
+
def test_init
|
17
|
+
t = lt :tinit
|
18
|
+
assert(t.needed?,
|
19
|
+
"needed? should be true after creation without " +
|
20
|
+
"`needed' block")
|
21
|
+
assert(!t.done?)
|
22
|
+
assert_equal(t.name, "tinit",
|
23
|
+
"task name should always be a string, despite creation with symbol")
|
24
|
+
end
|
25
|
+
def test_with_blocks
|
26
|
+
run = false
|
27
|
+
nr = false
|
28
|
+
t = lt :with_blocks do |a|
|
29
|
+
a.needed {
|
30
|
+
nr = true
|
31
|
+
}
|
32
|
+
a.act do |l|
|
33
|
+
assert_equal(l, t,
|
34
|
+
"act block should get the LightTask as argument")
|
35
|
+
run = true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
assert(t.needed?,
|
39
|
+
"needed block returns true")
|
40
|
+
assert(nr,
|
41
|
+
"`needed' block should have been run")
|
42
|
+
assert(t.invoke,
|
43
|
+
"invoke should return true because task was needed")
|
44
|
+
assert(run,
|
45
|
+
"task should have been run")
|
46
|
+
assert(!t.needed?,
|
47
|
+
"task shouldn't be needed? after first run")
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rant/rantlib'
|
4
|
+
require 'tutil'
|
5
|
+
|
6
|
+
class TestMetaTask < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@app = Rant::RantApp.new %w()
|
9
|
+
end
|
10
|
+
def teardown
|
11
|
+
end
|
12
|
+
def test_with_single_task
|
13
|
+
run = false
|
14
|
+
t = @app.task :t do run = true end
|
15
|
+
mt = MetaTask.for_task t
|
16
|
+
assert_equal(t.name, mt.name,
|
17
|
+
"MetaTask should have name of contained task(s).")
|
18
|
+
if t.needed?
|
19
|
+
assert(mt.needed?,
|
20
|
+
"MetaTask should be needed? if only contained task is needed?")
|
21
|
+
mt.invoke
|
22
|
+
assert(run,
|
23
|
+
"only contained task was needed?, so it should get invoked")
|
24
|
+
else
|
25
|
+
assert(!mt.needed?,
|
26
|
+
"MetaTask should return false from needed? because the only contained task does also.")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rant'
|
4
|
+
require 'tutil'
|
5
|
+
|
6
|
+
$testDir ||= File.expand_path(File.dirname(__FILE__))
|
7
|
+
|
8
|
+
class TestRantInterface < Test::Unit::TestCase
|
9
|
+
def setup
|
10
|
+
# Ensure we run in test directory.
|
11
|
+
Dir.chdir($testDir) unless Dir.pwd == $testDir
|
12
|
+
end
|
13
|
+
def teardown
|
14
|
+
end
|
15
|
+
def test_cmd_targets
|
16
|
+
@app = RantApp.new("-f non_existent", "target", "-aforced_target")
|
17
|
+
op = capture_stderr {
|
18
|
+
assert_equal(@app.run, 1,
|
19
|
+
"Rant should fail because there is no such Rantfile.")
|
20
|
+
}
|
21
|
+
assert(op =~ /\[ERROR\]/,
|
22
|
+
"rant should print error message if -f RANTFILE not found")
|
23
|
+
assert_equal(@app.cmd_targets.size, 2,
|
24
|
+
"there were to targets given on commandline")
|
25
|
+
assert(@app.cmd_targets.include?("target"))
|
26
|
+
assert(@app.cmd_targets.include?("forced_target"))
|
27
|
+
assert(@app.cmd_targets.first == "forced_target",
|
28
|
+
"forced_target should run first")
|
29
|
+
end
|
30
|
+
def test_envvar_on_cmdline
|
31
|
+
@app = RantApp.new("VAR=VAL")
|
32
|
+
assert_equal(@app.run, 0)
|
33
|
+
assert_equal(ENV["VAR"], "VAL",
|
34
|
+
"rant should set arguments of form VAR=VAL in ENV")
|
35
|
+
end
|
36
|
+
def test_envvar_on_cmdline_lc
|
37
|
+
@app = RantApp.new("var2=val2")
|
38
|
+
assert_equal(@app.run, 0)
|
39
|
+
assert_equal(ENV["var2"], "val2",
|
40
|
+
"rant should set arguments of form var2=val2 in ENV")
|
41
|
+
end
|
42
|
+
def test_opt_targets
|
43
|
+
@app = RantApp.new("--tasks")
|
44
|
+
@app.desc 'This is a "public" target.'
|
45
|
+
@app.task :public_task
|
46
|
+
@app.task :private_task
|
47
|
+
op = capture_stdout {
|
48
|
+
assert_equal(@app.run, 0)
|
49
|
+
}
|
50
|
+
assert(op =~ /\bpublic_task\b/,
|
51
|
+
"rant -T output should contain name of described task")
|
52
|
+
assert(op !~ /private_task/,
|
53
|
+
"rant -T output shouldn't contain name of not-described task")
|
54
|
+
end
|
55
|
+
def test_opt_help
|
56
|
+
op = capture_stdout {
|
57
|
+
assert_equal(Rant.run("--help"), 0,
|
58
|
+
"rant --help should return 0")
|
59
|
+
}
|
60
|
+
assert(!op.empty?,
|
61
|
+
"rant --help should write to STDOUT")
|
62
|
+
assert(op.split("\n").size > 15,
|
63
|
+
"rant --help should print at least 16 lines to STDOUT")
|
64
|
+
end
|
65
|
+
end
|
data/test/test_sys.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rant/rantlib'
|
4
|
+
require 'tutil'
|
5
|
+
|
6
|
+
$testDir ||= File.expand_path(File.dirname(__FILE__))
|
7
|
+
|
8
|
+
class TestFileUtils < Test::Unit::TestCase
|
9
|
+
include Rant::Sys
|
10
|
+
|
11
|
+
def setup
|
12
|
+
# Ensure we run in test directory.
|
13
|
+
Dir.chdir($testDir) unless Dir.pwd == $testDir
|
14
|
+
end
|
15
|
+
def teardown
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_ruby
|
19
|
+
op = capture_stdout do
|
20
|
+
ruby('-e ""') { |succ, stat|
|
21
|
+
assert(succ)
|
22
|
+
assert_equal(stat, 0)
|
23
|
+
}
|
24
|
+
end
|
25
|
+
assert(op =~ /\-e/i,
|
26
|
+
"Sys should print command with arguments to $stdout")
|
27
|
+
end
|
28
|
+
def test_split_path
|
29
|
+
pl = split_path("/home/stefan")
|
30
|
+
assert_equal(pl.size, 3,
|
31
|
+
"/home/stefan should get split into 3 parts")
|
32
|
+
assert_equal(pl[0], "/")
|
33
|
+
assert_equal(pl[1], "home")
|
34
|
+
assert_equal(pl[2], "stefan")
|
35
|
+
pl = split_path("../")
|
36
|
+
assert_equal(pl.size, 1,
|
37
|
+
'../ should be "split" into one element')
|
38
|
+
assert_equal(pl[0], "..")
|
39
|
+
end
|
40
|
+
# perhaps this test should go into a seperate file
|
41
|
+
def test_toplevel
|
42
|
+
assert_match(/\btd\b/, run_rant("-ftoplevel.rf"),
|
43
|
+
"Sys module should print commands to stdout")
|
44
|
+
assert_equal(0, $?,
|
45
|
+
"rant -ftoplevel.rf in test/ should be successfull")
|
46
|
+
ensure
|
47
|
+
File.delete "td" if File.exist? "td"
|
48
|
+
end
|
49
|
+
# ...ditto
|
50
|
+
def test_name_error
|
51
|
+
File.open("name_error.rf", "w") { |f|
|
52
|
+
f << "no_var_no_method\n"
|
53
|
+
}
|
54
|
+
out, err = capture_std do
|
55
|
+
assert_equal(1, Rant.run("-fname_error.rf"))
|
56
|
+
end
|
57
|
+
assert_match(/Name\s*Error/i, err.split("\n").first)
|
58
|
+
ensure
|
59
|
+
File.delete "name_error.rf" if File.exist? "name_error.rf"
|
60
|
+
end
|
61
|
+
end
|
data/test/test_task.rb
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rant/rantlib'
|
4
|
+
|
5
|
+
$-w = true
|
6
|
+
|
7
|
+
class TestTask < Test::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
end
|
10
|
+
def teardown
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_version
|
14
|
+
assert(Rant::VERSION.length >= 5)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_needed
|
18
|
+
run = false
|
19
|
+
t = Rant::Task.new(nil, :non_existent) { run = true }
|
20
|
+
assert(t.needed?,
|
21
|
+
"Rant::Task should always be 'needed?' before first invocation")
|
22
|
+
assert(!run,
|
23
|
+
"Rant::Task shouldn't get run when 'needed?' is called")
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_invoke
|
27
|
+
run = false
|
28
|
+
block = lambda { run = true }
|
29
|
+
task = Rant::Task.new(nil, :test_run, &block)
|
30
|
+
task.invoke
|
31
|
+
assert(run, "block should have been executed")
|
32
|
+
assert(task.done?, "task is done")
|
33
|
+
assert(!task.needed?,
|
34
|
+
"task is done, so 'needed?' should return false")
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_fail
|
38
|
+
block = lambda { |t| t.fail "this task abortet itself" }
|
39
|
+
task = Rant::Task.new(nil, :test_fail, &block)
|
40
|
+
assert_raise(Rant::TaskFail,
|
41
|
+
"run should throw Rant::TaskFail if block raises Exception") {
|
42
|
+
task.invoke
|
43
|
+
}
|
44
|
+
assert(task.fail?)
|
45
|
+
assert(task.run?, "although task failed, it was ran")
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_dependant
|
49
|
+
r1 = r2 = false
|
50
|
+
t1 = Rant::Task.new(nil, :t1) { r1 = true }
|
51
|
+
t2 = Rant::Task.new(nil, :t2) { r2 = true }
|
52
|
+
t1 << t2
|
53
|
+
t1.invoke
|
54
|
+
assert(r1)
|
55
|
+
assert(r2, "t1 depends on t2, so t2 should have been run")
|
56
|
+
assert(t1.done?)
|
57
|
+
assert(t2.done?)
|
58
|
+
assert(!t1.needed?)
|
59
|
+
assert(!t2.needed?)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_dependance_fails
|
63
|
+
t1 = Rant::Task.new(nil, :t1) { true }
|
64
|
+
t2 = Rant::Task.new(nil, :t2) { |t| t.fail }
|
65
|
+
t1 << t2
|
66
|
+
assert_raise(Rant::TaskFail,
|
67
|
+
"dependency t2 failed, so t1 should fail too") {
|
68
|
+
t1.invoke
|
69
|
+
}
|
70
|
+
assert(t1.fail?,
|
71
|
+
"fail flag should be set for task if dependency fails")
|
72
|
+
assert(t2.fail?,
|
73
|
+
"fail flag should be set for task if it fails")
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_task
|
77
|
+
run = false
|
78
|
+
t = Rant.task :t do |t|
|
79
|
+
run = true
|
80
|
+
end
|
81
|
+
t.invoke
|
82
|
+
assert(run)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_dep_on_self
|
86
|
+
run = false
|
87
|
+
t = Rant.task :t => "t" do |t|
|
88
|
+
run = true
|
89
|
+
end
|
90
|
+
th = Thread.new { t.invoke }
|
91
|
+
# shouldn't take half a second...
|
92
|
+
assert_equal(th.join(0.5), th,
|
93
|
+
"task should remove dependency on itself")
|
94
|
+
assert(run,
|
95
|
+
"task should get run despite dependency on itself")
|
96
|
+
end
|
97
|
+
def test_dep_on_self_in_deplist
|
98
|
+
rl = []
|
99
|
+
t1 = Rant.task :t1 do |t|
|
100
|
+
rl << t.name
|
101
|
+
end
|
102
|
+
t2 = Rant.task :t2 do |t|
|
103
|
+
rl << t.name
|
104
|
+
end
|
105
|
+
t3 = Rant.task :t3 => [:t1, :t3, :t2] do |t|
|
106
|
+
rl << t.name
|
107
|
+
end
|
108
|
+
th = Thread.new { t3.invoke }
|
109
|
+
# shouldn't take half a second...
|
110
|
+
assert_equal(th.join(0.5), th,
|
111
|
+
"task should remove dependency on itself from dependency list")
|
112
|
+
assert_equal(rl, %w(t1 t2 t3),
|
113
|
+
"t3 was run and depends on [t1, t2] => run order: t1 t2 t3")
|
114
|
+
end
|
115
|
+
end
|
data/test/toplevel.rf
ADDED
data/test/ts_all.rb
ADDED
data/test/tutil.rb
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
|
2
|
+
# This file contains methods that aid in testing Rant.
|
3
|
+
|
4
|
+
RANT_BIN = File.expand_path(
|
5
|
+
File.join(File.dirname(__FILE__), "..", "run_rant"))
|
6
|
+
|
7
|
+
# Everything written to $stdout during +yield+ will be returned. No
|
8
|
+
# output to $stdout.
|
9
|
+
def capture_stdout
|
10
|
+
tfn = "._ranttestcstdout.tmp"
|
11
|
+
if File.exist? tfn
|
12
|
+
raise <<-EOD
|
13
|
+
When testing Rant: `#{Dir.pwd + "/" + tfn}' exists.
|
14
|
+
The testing process temporarily needs this file. Ensure that the
|
15
|
+
file doesn't contain data useful for you and try to remove it.
|
16
|
+
(Perhaps this file was left by an earlier testrun.)
|
17
|
+
EOD
|
18
|
+
end
|
19
|
+
begin
|
20
|
+
stdout = $stdout
|
21
|
+
File.open(tfn, "w") { |tf|
|
22
|
+
$stdout = tf
|
23
|
+
yield
|
24
|
+
}
|
25
|
+
o = File.read tfn
|
26
|
+
ensure
|
27
|
+
$stdout = stdout
|
28
|
+
File.delete tfn if File.exist? tfn
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def capture_stderr
|
33
|
+
tfn = "._ranttestcstderr.tmp"
|
34
|
+
if File.exist? tfn
|
35
|
+
raise <<-EOD
|
36
|
+
When testing Rant: `#{Dir.pwd + "/" + tfn}' exists.
|
37
|
+
The testing process temporarily needs this file. Ensure that the
|
38
|
+
file doesn't contain data useful for you and try to remove it.
|
39
|
+
(Perhaps this file was left by an earlier testrun.)
|
40
|
+
EOD
|
41
|
+
end
|
42
|
+
begin
|
43
|
+
stderr = $stderr
|
44
|
+
File.open(tfn, "w") { |tf|
|
45
|
+
$stderr = tf
|
46
|
+
yield
|
47
|
+
}
|
48
|
+
o = File.read tfn
|
49
|
+
ensure
|
50
|
+
$stderr = stderr
|
51
|
+
File.delete tfn if File.exist? tfn
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def capture_std
|
56
|
+
outfn = "._ranttestcstdout.tmp"
|
57
|
+
errfn = "._ranttestcstderr.tmp"
|
58
|
+
if File.exist? outfn
|
59
|
+
raise <<-EOD
|
60
|
+
When testing Rant: `#{Dir.pwd + "/" + outfn}' exists.
|
61
|
+
The testing process temporarily needs this file. Ensure that the
|
62
|
+
file doesn't contain data useful for you and try to remove it.
|
63
|
+
(Perhaps this file was left by an earlier testrun.)
|
64
|
+
EOD
|
65
|
+
end
|
66
|
+
if File.exist? errfn
|
67
|
+
raise <<-EOD
|
68
|
+
When testing Rant: `#{Dir.pwd + "/" + errfn}' exists.
|
69
|
+
The testing process temporarily needs this file. Ensure that the
|
70
|
+
file doesn't contain data useful for you and try to remove it.
|
71
|
+
(Perhaps this file was left by an earlier testrun.)
|
72
|
+
EOD
|
73
|
+
end
|
74
|
+
begin
|
75
|
+
stdout = $stdout
|
76
|
+
stderr = $stderr
|
77
|
+
File.open(outfn, "w") { |of|
|
78
|
+
$stdout = of
|
79
|
+
File.open(errfn, "w") { |ef|
|
80
|
+
$stderr = ef
|
81
|
+
yield
|
82
|
+
}
|
83
|
+
}
|
84
|
+
[File.read(outfn), File.read(errfn)]
|
85
|
+
ensure
|
86
|
+
$stderr = stderr
|
87
|
+
$stdout = stdout
|
88
|
+
File.delete outfn if File.exist? outfn
|
89
|
+
File.delete errfn if File.exist? errfn
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def run_rant(*args)
|
94
|
+
`#{Rant::Env::RUBY} #{RANT_BIN} #{args.join(' ')}`
|
95
|
+
end
|