craigmarksmith-rake 0.8.3.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +427 -0
- data/MIT-LICENSE +21 -0
- data/README +196 -0
- data/Rakefile +416 -0
- data/TODO +20 -0
- data/bin/rake +31 -0
- data/doc/command_line_usage.rdoc +102 -0
- data/doc/example/Rakefile1 +38 -0
- data/doc/example/Rakefile2 +35 -0
- data/doc/example/a.c +6 -0
- data/doc/example/b.c +6 -0
- data/doc/example/main.c +11 -0
- data/doc/glossary.rdoc +51 -0
- data/doc/jamis.rb +591 -0
- data/doc/proto_rake.rdoc +127 -0
- data/doc/rake.1.gz +0 -0
- data/doc/rakefile.rdoc +534 -0
- data/doc/rational.rdoc +151 -0
- data/doc/release_notes/rake-0.4.14.rdoc +23 -0
- data/doc/release_notes/rake-0.4.15.rdoc +35 -0
- data/doc/release_notes/rake-0.5.0.rdoc +53 -0
- data/doc/release_notes/rake-0.5.3.rdoc +78 -0
- data/doc/release_notes/rake-0.5.4.rdoc +46 -0
- data/doc/release_notes/rake-0.6.0.rdoc +141 -0
- data/doc/release_notes/rake-0.7.0.rdoc +119 -0
- data/doc/release_notes/rake-0.7.1.rdoc +59 -0
- data/doc/release_notes/rake-0.7.2.rdoc +121 -0
- data/doc/release_notes/rake-0.7.3.rdoc +47 -0
- data/doc/release_notes/rake-0.8.0.rdoc +114 -0
- data/doc/release_notes/rake-0.8.2.rdoc +165 -0
- data/doc/release_notes/rake-0.8.3.rdoc +112 -0
- data/doc/release_notes/rake-0.8.4.rdoc +147 -0
- data/install.rb +88 -0
- data/lib/rake/classic_namespace.rb +8 -0
- data/lib/rake/clean.rb +33 -0
- data/lib/rake/contrib/compositepublisher.rb +24 -0
- data/lib/rake/contrib/ftptools.rb +153 -0
- data/lib/rake/contrib/publisher.rb +75 -0
- data/lib/rake/contrib/rubyforgepublisher.rb +18 -0
- data/lib/rake/contrib/sshpublisher.rb +47 -0
- data/lib/rake/contrib/sys.rb +209 -0
- data/lib/rake/gempackagetask.rb +97 -0
- data/lib/rake/loaders/makefile.rb +42 -0
- data/lib/rake/packagetask.rb +184 -0
- data/lib/rake/rake_test_loader.rb +5 -0
- data/lib/rake/rdoctask.rb +209 -0
- data/lib/rake/ruby182_test_unit_fix.rb +23 -0
- data/lib/rake/runtest.rb +23 -0
- data/lib/rake/tasklib.rb +23 -0
- data/lib/rake/testtask.rb +161 -0
- data/lib/rake/win32.rb +55 -0
- data/lib/rake.rb +2519 -0
- data/test/capture_stdout.rb +26 -0
- data/test/check_expansion.rb +5 -0
- data/test/contrib/test_sys.rb +47 -0
- data/test/data/chains/Rakefile +15 -0
- data/test/data/default/Rakefile +19 -0
- data/test/data/dryrun/Rakefile +22 -0
- data/test/data/file_creation_task/Rakefile +33 -0
- data/test/data/imports/Rakefile +19 -0
- data/test/data/imports/deps.mf +1 -0
- data/test/data/multidesc/Rakefile +17 -0
- data/test/data/namespace/Rakefile +57 -0
- data/test/data/rakelib/test1.rb +3 -0
- data/test/data/rbext/rakefile.rb +3 -0
- data/test/data/sample.mf +14 -0
- data/test/data/statusreturn/Rakefile +8 -0
- data/test/data/unittest/Rakefile +1 -0
- data/test/filecreation.rb +32 -0
- data/test/functional.rb +15 -0
- data/test/in_environment.rb +30 -0
- data/test/rake_test_setup.rb +24 -0
- data/test/reqfile.rb +3 -0
- data/test/reqfile2.rb +3 -0
- data/test/session_functional.rb +339 -0
- data/test/shellcommand.rb +3 -0
- data/test/test_application.rb +690 -0
- data/test/test_clean.rb +14 -0
- data/test/test_definitions.rb +85 -0
- data/test/test_earlytime.rb +35 -0
- data/test/test_extension.rb +63 -0
- data/test/test_file_creation_task.rb +62 -0
- data/test/test_file_task.rb +143 -0
- data/test/test_filelist.rb +623 -0
- data/test/test_fileutils.rb +251 -0
- data/test/test_ftp.rb +59 -0
- data/test/test_invocation_chain.rb +81 -0
- data/test/test_makefile_loader.rb +26 -0
- data/test/test_multitask.rb +45 -0
- data/test/test_namespace.rb +55 -0
- data/test/test_package_task.rb +118 -0
- data/test/test_pathmap.rb +210 -0
- data/test/test_rake.rb +41 -0
- data/test/test_rdoc_task.rb +88 -0
- data/test/test_require.rb +35 -0
- data/test/test_rules.rb +349 -0
- data/test/test_task_arguments.rb +89 -0
- data/test/test_task_manager.rb +173 -0
- data/test/test_tasklib.rb +12 -0
- data/test/test_tasks.rb +374 -0
- data/test/test_test_task.rb +77 -0
- data/test/test_top_level_functions.rb +86 -0
- data/test/test_win32.rb +72 -0
- metadata +186 -0
@@ -0,0 +1,251 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rake'
|
4
|
+
require 'test/unit'
|
5
|
+
require 'test/filecreation'
|
6
|
+
require 'fileutils'
|
7
|
+
require 'stringio'
|
8
|
+
require 'test/rake_test_setup'
|
9
|
+
|
10
|
+
class TestFileUtils < Test::Unit::TestCase
|
11
|
+
include FileCreation
|
12
|
+
include TestMethods
|
13
|
+
|
14
|
+
def setup
|
15
|
+
File.chmod(0750,"test/shellcommand.rb")
|
16
|
+
end
|
17
|
+
|
18
|
+
def teardown
|
19
|
+
FileUtils.rm_rf("testdata")
|
20
|
+
FileUtils::LN_SUPPORTED[0] = true
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_rm_one_file
|
24
|
+
create_file("testdata/a")
|
25
|
+
FileUtils.rm_rf "testdata/a"
|
26
|
+
assert ! File.exist?("testdata/a")
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_rm_two_files
|
30
|
+
create_file("testdata/a")
|
31
|
+
create_file("testdata/b")
|
32
|
+
FileUtils.rm_rf ["testdata/a", "testdata/b"]
|
33
|
+
assert ! File.exist?("testdata/a")
|
34
|
+
assert ! File.exist?("testdata/b")
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_rm_filelist
|
38
|
+
list = Rake::FileList.new << "testdata/a" << "testdata/b"
|
39
|
+
list.each { |fn| create_file(fn) }
|
40
|
+
FileUtils.rm_r list
|
41
|
+
assert ! File.exist?("testdata/a")
|
42
|
+
assert ! File.exist?("testdata/b")
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_ln
|
46
|
+
create_dir("testdata")
|
47
|
+
open("testdata/a", "w") { |f| f.puts "TEST_LN" }
|
48
|
+
RakeFileUtils.safe_ln("testdata/a", "testdata/b", :verbose => false)
|
49
|
+
assert_equal "TEST_LN\n", open("testdata/b") { |f| f.read }
|
50
|
+
end
|
51
|
+
|
52
|
+
class BadLink
|
53
|
+
include RakeFileUtils
|
54
|
+
attr_reader :cp_args
|
55
|
+
def initialize(klass)
|
56
|
+
@failure_class = klass
|
57
|
+
end
|
58
|
+
def cp(*args)
|
59
|
+
@cp_args = args
|
60
|
+
end
|
61
|
+
def ln(*args)
|
62
|
+
fail @failure_class, "ln not supported"
|
63
|
+
end
|
64
|
+
public :safe_ln
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_safe_ln_failover_to_cp_on_standard_error
|
68
|
+
FileUtils::LN_SUPPORTED[0] = true
|
69
|
+
c = BadLink.new(StandardError)
|
70
|
+
c.safe_ln "a", "b"
|
71
|
+
assert_equal ['a', 'b'], c.cp_args
|
72
|
+
c.safe_ln "x", "y"
|
73
|
+
assert_equal ['x', 'y'], c.cp_args
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_safe_ln_failover_to_cp_on_not_implemented_error
|
77
|
+
FileUtils::LN_SUPPORTED[0] = true
|
78
|
+
c = BadLink.new(NotImplementedError)
|
79
|
+
c.safe_ln "a", "b"
|
80
|
+
assert_equal ['a', 'b'], c.cp_args
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_safe_ln_fails_on_script_error
|
84
|
+
FileUtils::LN_SUPPORTED[0] = true
|
85
|
+
c = BadLink.new(ScriptError)
|
86
|
+
assert_exception(ScriptError) do c.safe_ln "a", "b" end
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_verbose
|
90
|
+
verbose true
|
91
|
+
assert_equal true, verbose
|
92
|
+
verbose false
|
93
|
+
assert_equal false, verbose
|
94
|
+
verbose(true) {
|
95
|
+
assert_equal true, verbose
|
96
|
+
}
|
97
|
+
assert_equal false, verbose
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_nowrite
|
101
|
+
nowrite true
|
102
|
+
assert_equal true, nowrite
|
103
|
+
nowrite false
|
104
|
+
assert_equal false, nowrite
|
105
|
+
nowrite(true){
|
106
|
+
assert_equal true, nowrite
|
107
|
+
}
|
108
|
+
assert_equal false, nowrite
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_file_utils_methods_are_available_at_top_level
|
112
|
+
create_file("testdata/a")
|
113
|
+
rm_rf "testdata/a"
|
114
|
+
assert ! File.exist?("testdata/a")
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_fileutils_methods_dont_leak
|
118
|
+
obj = Object.new
|
119
|
+
assert_exception(NoMethodError) { obj.copy } # from FileUtils
|
120
|
+
assert_exception(NoMethodError) { obj.ruby } # from RubyFileUtils
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_sh
|
124
|
+
verbose(false) { sh %{ruby test/shellcommand.rb} }
|
125
|
+
assert true, "should not fail"
|
126
|
+
end
|
127
|
+
|
128
|
+
# If the :sh method is invoked directly from a test unit instance
|
129
|
+
# (under mini/test), the mini/test version of fail is invoked rather
|
130
|
+
# than the kernel version of fail. So we run :sh from within a
|
131
|
+
# non-test class to avoid the problem.
|
132
|
+
class Sh
|
133
|
+
include FileUtils
|
134
|
+
def run(*args)
|
135
|
+
sh(*args)
|
136
|
+
end
|
137
|
+
def self.run(*args)
|
138
|
+
new.run(*args)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_sh_with_a_single_string_argument
|
143
|
+
ENV['RAKE_TEST_SH'] = 'someval'
|
144
|
+
verbose(false) {
|
145
|
+
sh %{ruby test/check_expansion.rb #{env_var} someval}
|
146
|
+
}
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_sh_with_multiple_arguments
|
150
|
+
ENV['RAKE_TEST_SH'] = 'someval'
|
151
|
+
verbose(false) {
|
152
|
+
Sh.run 'ruby', 'test/check_no_expansion.rb', env_var, 'someval'
|
153
|
+
}
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_sh_failure
|
157
|
+
assert_exception(RuntimeError) {
|
158
|
+
verbose(false) { Sh.run %{ruby test/shellcommand.rb 1} }
|
159
|
+
}
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_sh_special_handling
|
163
|
+
count = 0
|
164
|
+
verbose(false) {
|
165
|
+
sh(%{ruby test/shellcommand.rb}) do |ok, res|
|
166
|
+
assert(ok)
|
167
|
+
assert_equal 0, res.exitstatus
|
168
|
+
count += 1
|
169
|
+
end
|
170
|
+
sh(%{ruby test/shellcommand.rb 1}) do |ok, res|
|
171
|
+
assert(!ok)
|
172
|
+
assert_equal 1, res.exitstatus
|
173
|
+
count += 1
|
174
|
+
end
|
175
|
+
}
|
176
|
+
assert_equal 2, count, "Block count should be 2"
|
177
|
+
end
|
178
|
+
|
179
|
+
def test_sh_noop
|
180
|
+
verbose(false) { sh %{test/shellcommand.rb 1}, :noop=>true }
|
181
|
+
assert true, "should not fail"
|
182
|
+
end
|
183
|
+
|
184
|
+
def test_sh_bad_option
|
185
|
+
ex = assert_exception(ArgumentError) {
|
186
|
+
verbose(false) { sh %{test/shellcommand.rb}, :bad_option=>true }
|
187
|
+
}
|
188
|
+
assert_match(/bad_option/, ex.message)
|
189
|
+
end
|
190
|
+
|
191
|
+
def test_sh_verbose
|
192
|
+
out = redirect_stderr {
|
193
|
+
verbose(true) {
|
194
|
+
sh %{test/shellcommand.rb}, :noop=>true
|
195
|
+
}
|
196
|
+
}
|
197
|
+
assert_match(/^test\/shellcommand\.rb$/, out)
|
198
|
+
end
|
199
|
+
|
200
|
+
def test_sh_no_verbose
|
201
|
+
out = redirect_stderr {
|
202
|
+
verbose(false) {
|
203
|
+
sh %{test/shellcommand.rb}, :noop=>true
|
204
|
+
}
|
205
|
+
}
|
206
|
+
assert_equal '', out
|
207
|
+
end
|
208
|
+
|
209
|
+
def test_ruby_with_a_single_string_argument
|
210
|
+
ENV['RAKE_TEST_SH'] = 'someval'
|
211
|
+
verbose(false) {
|
212
|
+
ruby %{test/check_expansion.rb #{env_var} someval}
|
213
|
+
}
|
214
|
+
end
|
215
|
+
|
216
|
+
def test_ruby_with_multiple_arguments
|
217
|
+
ENV['RAKE_TEST_SH'] = 'someval'
|
218
|
+
verbose(false) {
|
219
|
+
ruby 'test/check_no_expansion.rb', env_var, 'someval'
|
220
|
+
}
|
221
|
+
end
|
222
|
+
|
223
|
+
def test_split_all
|
224
|
+
assert_equal ['a'], RakeFileUtils.split_all('a')
|
225
|
+
assert_equal ['..'], RakeFileUtils.split_all('..')
|
226
|
+
assert_equal ['/'], RakeFileUtils.split_all('/')
|
227
|
+
assert_equal ['a', 'b'], RakeFileUtils.split_all('a/b')
|
228
|
+
assert_equal ['/', 'a', 'b'], RakeFileUtils.split_all('/a/b')
|
229
|
+
assert_equal ['..', 'a', 'b'], RakeFileUtils.split_all('../a/b')
|
230
|
+
end
|
231
|
+
|
232
|
+
private
|
233
|
+
|
234
|
+
def redirect_stderr
|
235
|
+
old_err = $stderr
|
236
|
+
$stderr = StringIO.new
|
237
|
+
yield
|
238
|
+
$stderr.string
|
239
|
+
ensure
|
240
|
+
$stderr = old_err
|
241
|
+
end
|
242
|
+
|
243
|
+
def windows?
|
244
|
+
! File::ALT_SEPARATOR.nil?
|
245
|
+
end
|
246
|
+
|
247
|
+
def env_var
|
248
|
+
windows? ? '%RAKE_TEST_SH%' : '$RAKE_TEST_SH'
|
249
|
+
end
|
250
|
+
|
251
|
+
end
|
data/test/test_ftp.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'date'
|
4
|
+
require 'time'
|
5
|
+
require 'test/unit'
|
6
|
+
require 'rake/contrib/ftptools'
|
7
|
+
|
8
|
+
class FakeDate
|
9
|
+
def self.today
|
10
|
+
Date.new(2003,10,3)
|
11
|
+
end
|
12
|
+
def self.now
|
13
|
+
Time.local(2003,10,3,12,00,00)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
class TestFtpFile < Test::Unit::TestCase
|
19
|
+
|
20
|
+
def setup
|
21
|
+
Rake::FtpFile.class_eval { @date_class = FakeDate; @time_class = FakeDate }
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_general
|
25
|
+
file = Rake::FtpFile.new("here", "-rw-r--r-- 1 a279376 develop 121770 Mar 6 14:50 wiki.pl")
|
26
|
+
assert_equal "wiki.pl", file.name
|
27
|
+
assert_equal "here/wiki.pl", file.path
|
28
|
+
assert_equal "a279376", file.owner
|
29
|
+
assert_equal "develop", file.group
|
30
|
+
assert_equal 0644, file.mode
|
31
|
+
assert_equal 121770, file.size
|
32
|
+
assert_equal Time.mktime(2003,3,6,14,50,0,0), file.time
|
33
|
+
assert ! file.directory?
|
34
|
+
assert ! file.symlink?
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_far_date
|
38
|
+
file = Rake::FtpFile.new(".", "drwxr-xr-x 3 a279376 develop 4096 Nov 26 2001 vss")
|
39
|
+
assert_equal Time.mktime(2001,11,26,0,0,0,0), file.time
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_close_date
|
43
|
+
file = Rake::FtpFile.new(".", "drwxr-xr-x 3 a279376 develop 4096 Nov 26 15:35 vss")
|
44
|
+
assert_equal Time.mktime(2002,11,26,15,35,0,0), file.time
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_directory
|
48
|
+
file = Rake::FtpFile.new(".", "drwxrwxr-x 9 a279376 develop 4096 Mar 13 14:32 working")
|
49
|
+
assert file.directory?
|
50
|
+
assert !file.symlink?
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_symlink
|
54
|
+
file = Rake::FtpFile.new(".", "lrwxrwxrwx 1 a279376 develop 64 Mar 26 2002 xtrac -> /home/a279376/working/ics/development/java/com/fmr/fwp/ics/xtrac")
|
55
|
+
assert_equal 'xtrac', file.name
|
56
|
+
assert file.symlink?
|
57
|
+
assert !file.directory?
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rake'
|
5
|
+
require 'test/rake_test_setup'
|
6
|
+
|
7
|
+
######################################################################
|
8
|
+
class TestAnEmptyInvocationChain < Test::Unit::TestCase
|
9
|
+
include TestMethods
|
10
|
+
|
11
|
+
def setup
|
12
|
+
@empty = Rake::InvocationChain::EMPTY
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_should_be_able_to_add_members
|
16
|
+
assert_nothing_raised do
|
17
|
+
@empty.append("A")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_to_s
|
22
|
+
assert_equal "TOP", @empty.to_s
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
######################################################################
|
27
|
+
class TestAnInvocationChainWithOneMember < Test::Unit::TestCase
|
28
|
+
include TestMethods
|
29
|
+
|
30
|
+
def setup
|
31
|
+
@empty = Rake::InvocationChain::EMPTY
|
32
|
+
@first_member = "A"
|
33
|
+
@chain = @empty.append(@first_member)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_should_report_first_member_as_a_member
|
37
|
+
assert @chain.member?(@first_member)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_should_fail_when_adding_original_member
|
41
|
+
ex = assert_exception RuntimeError do
|
42
|
+
@chain.append(@first_member)
|
43
|
+
end
|
44
|
+
assert_match(/circular +dependency/i, ex.message)
|
45
|
+
assert_match(/A.*=>.*A/, ex.message)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_to_s
|
49
|
+
assert_equal "TOP => A", @chain.to_s
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
######################################################################
|
55
|
+
class TestAnInvocationChainWithMultipleMember < Test::Unit::TestCase
|
56
|
+
include TestMethods
|
57
|
+
|
58
|
+
def setup
|
59
|
+
@first_member = "A"
|
60
|
+
@second_member = "B"
|
61
|
+
ch = Rake::InvocationChain::EMPTY.append(@first_member)
|
62
|
+
@chain = ch.append(@second_member)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_should_report_first_member_as_a_member
|
66
|
+
assert @chain.member?(@first_member)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_should_report_second_member_as_a_member
|
70
|
+
assert @chain.member?(@second_member)
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_should_fail_when_adding_original_member
|
74
|
+
ex = assert_exception RuntimeError do
|
75
|
+
@chain.append(@first_member)
|
76
|
+
end
|
77
|
+
assert_match(/A.*=>.*B.*=>.*A/, ex.message)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rake'
|
5
|
+
require 'rake/loaders/makefile'
|
6
|
+
|
7
|
+
class TestMakefileLoader < Test::Unit::TestCase
|
8
|
+
include Rake
|
9
|
+
|
10
|
+
def test_parse
|
11
|
+
Task.clear
|
12
|
+
loader = Rake::MakefileLoader.new
|
13
|
+
loader.load("test/data/sample.mf")
|
14
|
+
%w(a b c d).each do |t|
|
15
|
+
assert Task.task_defined?(t), "#{t} should be a defined task"
|
16
|
+
end
|
17
|
+
assert_equal %w(a1 a2 a3 a4 a5 a6 a7).sort, Task['a'].prerequisites.sort
|
18
|
+
assert_equal %w(b1 b2 b3 b4 b5 b6 b7).sort, Task['b'].prerequisites.sort
|
19
|
+
assert_equal %w(c1).sort, Task['c'].prerequisites.sort
|
20
|
+
assert_equal %w(d1 d2).sort, Task['d'].prerequisites.sort
|
21
|
+
assert_equal %w(e1 f1).sort, Task['e'].prerequisites.sort
|
22
|
+
assert_equal %w(e1 f1).sort, Task['f'].prerequisites.sort
|
23
|
+
assert_equal ["g1", "g 2", "g 3", "g4"].sort, Task['g 0'].prerequisites.sort
|
24
|
+
assert_equal 7, Task.tasks.size
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'rake'
|
5
|
+
|
6
|
+
######################################################################
|
7
|
+
class TestMultiTask < Test::Unit::TestCase
|
8
|
+
include Rake
|
9
|
+
|
10
|
+
def setup
|
11
|
+
Task.clear
|
12
|
+
@runs = Array.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_running_multitasks
|
16
|
+
task :a do 3.times do |i| @runs << "A#{i}"; sleep 0.01; end end
|
17
|
+
task :b do 3.times do |i| @runs << "B#{i}"; sleep 0.01; end end
|
18
|
+
multitask :both => [:a, :b]
|
19
|
+
Task[:both].invoke
|
20
|
+
assert_equal 6, @runs.size
|
21
|
+
assert @runs.index("A0") < @runs.index("A1")
|
22
|
+
assert @runs.index("A1") < @runs.index("A2")
|
23
|
+
assert @runs.index("B0") < @runs.index("B1")
|
24
|
+
assert @runs.index("B1") < @runs.index("B2")
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_all_multitasks_wait_on_slow_prerequisites
|
28
|
+
task :slow do 3.times do |i| @runs << "S#{i}"; sleep 0.05 end end
|
29
|
+
task :a => [:slow] do 3.times do |i| @runs << "A#{i}"; sleep 0.01 end end
|
30
|
+
task :b => [:slow] do 3.times do |i| @runs << "B#{i}"; sleep 0.01 end end
|
31
|
+
multitask :both => [:a, :b]
|
32
|
+
Task[:both].invoke
|
33
|
+
assert_equal 9, @runs.size
|
34
|
+
assert @runs.index("S0") < @runs.index("S1")
|
35
|
+
assert @runs.index("S1") < @runs.index("S2")
|
36
|
+
assert @runs.index("S2") < @runs.index("A0")
|
37
|
+
assert @runs.index("S2") < @runs.index("B0")
|
38
|
+
assert @runs.index("A0") < @runs.index("A1")
|
39
|
+
assert @runs.index("A1") < @runs.index("A2")
|
40
|
+
assert @runs.index("B0") < @runs.index("B1")
|
41
|
+
assert @runs.index("B1") < @runs.index("B2")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
|