rake 0.9.2.2 → 0.9.4
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 +4 -0
- data/README.rdoc +10 -20
- data/Rakefile +6 -1
- data/TODO +1 -0
- data/bin/rake +4 -0
- data/doc/command_line_usage.rdoc +61 -12
- data/doc/release_notes/rake-0.9.2.2.rdoc +55 -0
- data/doc/release_notes/rake-0.9.3.rdoc +102 -0
- data/install.rb +1 -1
- data/lib/rake/application.rb +245 -140
- data/lib/rake/backtrace.rb +18 -0
- data/lib/rake/clean.rb +1 -1
- data/lib/rake/cloneable.rb +7 -16
- data/lib/rake/contrib/ftptools.rb +2 -1
- data/lib/rake/contrib/sys.rb +7 -6
- data/lib/rake/dsl_definition.rb +13 -7
- data/lib/rake/ext/module.rb +1 -1
- data/lib/rake/ext/string.rb +2 -1
- data/lib/rake/ext/time.rb +2 -1
- data/lib/rake/file_list.rb +9 -2
- data/lib/rake/file_utils_ext.rb +4 -3
- data/lib/rake/multi_task.rb +2 -5
- data/lib/rake/phony.rb +15 -0
- data/lib/rake/private_reader.rb +20 -0
- data/lib/rake/promise.rb +99 -0
- data/lib/rake/rake_module.rb +8 -0
- data/lib/rake/rdoctask.rb +1 -1
- data/lib/rake/runtest.rb +2 -1
- data/lib/rake/task.rb +29 -7
- data/lib/rake/task_arguments.rb +1 -1
- data/lib/rake/task_manager.rb +1 -1
- data/lib/rake/testtask.rb +8 -1
- data/lib/rake/thread_history_display.rb +48 -0
- data/lib/rake/thread_pool.rb +155 -0
- data/lib/rake/version.rb +6 -4
- data/lib/rake.rb +1 -0
- data/test/helper.rb +57 -0
- data/test/test_private_reader.rb +42 -0
- data/test/test_rake_application.rb +12 -1
- data/test/test_rake_application_options.rb +114 -4
- data/test/test_rake_backtrace.rb +81 -0
- data/test/test_rake_directory_task.rb +16 -5
- data/test/test_rake_file_task.rb +21 -1
- data/test/test_rake_functional.rb +40 -1
- data/test/test_rake_multi_task.rb +8 -0
- data/test/test_rake_reduce_compat.rb +65 -0
- data/test/test_rake_task.rb +50 -1
- data/test/test_rake_thread_pool.rb +123 -0
- data/test/test_thread_history_display.rb +91 -0
- metadata +50 -34
data/test/helper.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'rubygems'
|
|
2
|
+
$:.unshift File.expand_path('../../lib', __FILE__)
|
|
2
3
|
|
|
3
4
|
begin
|
|
4
5
|
gem 'minitest'
|
|
@@ -488,5 +489,61 @@ end
|
|
|
488
489
|
VERBOSE
|
|
489
490
|
end
|
|
490
491
|
|
|
492
|
+
def rakefile_test_signal
|
|
493
|
+
rakefile <<-TEST_SIGNAL
|
|
494
|
+
require 'rake/testtask'
|
|
495
|
+
|
|
496
|
+
Rake::TestTask.new(:a) do |t|
|
|
497
|
+
t.test_files = ['a_test.rb']
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
Rake::TestTask.new(:b) do |t|
|
|
501
|
+
t.test_files = ['b_test.rb']
|
|
502
|
+
end
|
|
503
|
+
|
|
504
|
+
task :test do
|
|
505
|
+
Rake::Task[:a].invoke rescue nil
|
|
506
|
+
Rake::Task[:b].invoke rescue nil
|
|
507
|
+
end
|
|
508
|
+
|
|
509
|
+
task :default => :test
|
|
510
|
+
TEST_SIGNAL
|
|
511
|
+
open 'a_test.rb', 'w' do |io|
|
|
512
|
+
io << 'puts "ATEST"' << "\n"
|
|
513
|
+
io << '$stdout.flush' << "\n"
|
|
514
|
+
io << 'Process.kill("TERM", $$)' << "\n"
|
|
515
|
+
end
|
|
516
|
+
open 'b_test.rb', 'w' do |io|
|
|
517
|
+
io << 'puts "BTEST"' << "\n"
|
|
518
|
+
io << '$stdout.flush' << "\n"
|
|
519
|
+
end
|
|
520
|
+
end
|
|
521
|
+
|
|
522
|
+
def rakefile_failing_test_task
|
|
523
|
+
rakefile <<-TEST_TASK
|
|
524
|
+
require 'rake/testtask'
|
|
525
|
+
|
|
526
|
+
task :default => :test
|
|
527
|
+
Rake::TestTask.new(:test) do |t|
|
|
528
|
+
t.test_files = ['a_test.rb']
|
|
491
529
|
end
|
|
530
|
+
TEST_TASK
|
|
531
|
+
open 'a_test.rb', 'w' do |io|
|
|
532
|
+
io << "require 'minitest/autorun'\n"
|
|
533
|
+
io << "class ExitTaskTest < MiniTest::Unit::TestCase\n"
|
|
534
|
+
io << " def test_exit\n"
|
|
535
|
+
io << " assert false, 'this should fail'\n"
|
|
536
|
+
io << " end\n"
|
|
537
|
+
io << "end\n"
|
|
538
|
+
end
|
|
539
|
+
end
|
|
492
540
|
|
|
541
|
+
def rakefile_stand_alone_filelist
|
|
542
|
+
open 'stand_alone_filelist.rb', 'w' do |io|
|
|
543
|
+
io << "require 'rake/file_list'\n"
|
|
544
|
+
io << "FL = Rake::FileList['*.rb']\n"
|
|
545
|
+
io << "puts FL\n"
|
|
546
|
+
end
|
|
547
|
+
end
|
|
548
|
+
|
|
549
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
|
2
|
+
require 'rake/private_reader'
|
|
3
|
+
|
|
4
|
+
class TestPrivateAttrs < Rake::TestCase
|
|
5
|
+
|
|
6
|
+
class Sample
|
|
7
|
+
include Rake::PrivateReader
|
|
8
|
+
|
|
9
|
+
private_reader :reader, :a
|
|
10
|
+
|
|
11
|
+
def initialize
|
|
12
|
+
@reader = :RVALUE
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def get_reader
|
|
16
|
+
reader
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def setup
|
|
22
|
+
super
|
|
23
|
+
@sample = Sample.new
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_private_reader_is_private
|
|
27
|
+
assert_private do @sample.reader end
|
|
28
|
+
assert_private do @sample.a end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_private_reader_returns_data
|
|
32
|
+
assert_equal :RVALUE, @sample.get_reader
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def assert_private
|
|
38
|
+
ex = assert_raises(NoMethodError) do yield end
|
|
39
|
+
assert_match(/private/, ex.message)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
@@ -385,6 +385,18 @@ class TestRakeApplication < Rake::TestCase
|
|
|
385
385
|
ARGV.clear
|
|
386
386
|
end
|
|
387
387
|
|
|
388
|
+
def test_bad_run_with_backtrace
|
|
389
|
+
@app.intern(Rake::Task, "default").enhance { fail }
|
|
390
|
+
ARGV.clear
|
|
391
|
+
ARGV << '-f' << '-s' << '--backtrace'
|
|
392
|
+
assert_raises(SystemExit) {
|
|
393
|
+
_, err = capture_io { @app.run }
|
|
394
|
+
refute_match(/see full trace/, err)
|
|
395
|
+
}
|
|
396
|
+
ensure
|
|
397
|
+
ARGV.clear
|
|
398
|
+
end
|
|
399
|
+
|
|
388
400
|
def test_run_with_bad_options
|
|
389
401
|
@app.intern(Rake::Task, "default").enhance { fail }
|
|
390
402
|
ARGV.clear
|
|
@@ -486,4 +498,3 @@ class TestRakeApplication < Rake::TestCase
|
|
|
486
498
|
end
|
|
487
499
|
|
|
488
500
|
end
|
|
489
|
-
|
|
@@ -29,10 +29,12 @@ class TestRakeApplicationOptions < Rake::TestCase
|
|
|
29
29
|
|
|
30
30
|
def test_default_options
|
|
31
31
|
opts = command_line
|
|
32
|
+
assert_nil opts.backtrace
|
|
32
33
|
assert_nil opts.classic_namespace
|
|
33
34
|
assert_nil opts.dryrun
|
|
34
35
|
assert_nil opts.ignore_system
|
|
35
36
|
assert_nil opts.load_system
|
|
37
|
+
assert_nil opts.always_multitask
|
|
36
38
|
assert_nil opts.nosearch
|
|
37
39
|
assert_equal ['rakelib'], opts.rakelib
|
|
38
40
|
assert_nil opts.show_prereqs
|
|
@@ -40,6 +42,7 @@ class TestRakeApplicationOptions < Rake::TestCase
|
|
|
40
42
|
assert_nil opts.show_tasks
|
|
41
43
|
assert_nil opts.silent
|
|
42
44
|
assert_nil opts.trace
|
|
45
|
+
assert_nil opts.thread_pool_size
|
|
43
46
|
assert_equal ['rakelib'], opts.rakelib
|
|
44
47
|
assert ! Rake::FileUtilsExt.verbose_flag
|
|
45
48
|
assert ! Rake::FileUtilsExt.nowrite_flag
|
|
@@ -110,6 +113,18 @@ class TestRakeApplicationOptions < Rake::TestCase
|
|
|
110
113
|
assert_equal :exit, @exit
|
|
111
114
|
end
|
|
112
115
|
|
|
116
|
+
def test_jobs
|
|
117
|
+
flags(['--jobs', '4'], ['-j', '4']) do |opts|
|
|
118
|
+
assert_equal 4, opts.thread_pool_size
|
|
119
|
+
end
|
|
120
|
+
flags(['--jobs', 'asdas'], ['-j', 'asdas']) do |opts|
|
|
121
|
+
assert_equal 2, opts.thread_pool_size
|
|
122
|
+
end
|
|
123
|
+
flags('--jobs', '-j') do |opts|
|
|
124
|
+
assert_equal 2, opts.thread_pool_size
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
113
128
|
def test_libdir
|
|
114
129
|
flags(['--libdir', 'xx'], ['-I', 'xx'], ['-Ixx']) do |opts|
|
|
115
130
|
$:.include?('xx')
|
|
@@ -118,6 +133,12 @@ class TestRakeApplicationOptions < Rake::TestCase
|
|
|
118
133
|
$:.delete('xx')
|
|
119
134
|
end
|
|
120
135
|
|
|
136
|
+
def test_multitask
|
|
137
|
+
flags('--multitask', '-m') do |opts|
|
|
138
|
+
assert_equal opts.always_multitask, true
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
121
142
|
def test_rakefile
|
|
122
143
|
flags(['--rakefile', 'RF'], ['--rakefile=RF'], ['-f', 'RF'], ['-fRF']) do |opts|
|
|
123
144
|
assert_equal ['RF'], @app.instance_eval { @rakefiles }
|
|
@@ -125,7 +146,8 @@ class TestRakeApplicationOptions < Rake::TestCase
|
|
|
125
146
|
end
|
|
126
147
|
|
|
127
148
|
def test_rakelib
|
|
128
|
-
|
|
149
|
+
dirs = %w(A B C).join(File::PATH_SEPARATOR)
|
|
150
|
+
flags(['--rakelibdir', dirs], ["--rakelibdir=#{dirs}"], ['-R', dirs], ["-R#{dirs}"]) do |opts|
|
|
129
151
|
assert_equal ['A', 'B', 'C'], opts.rakelib
|
|
130
152
|
end
|
|
131
153
|
end
|
|
@@ -197,12 +219,76 @@ class TestRakeApplicationOptions < Rake::TestCase
|
|
|
197
219
|
|
|
198
220
|
def test_trace
|
|
199
221
|
flags('--trace', '-t') do |opts|
|
|
200
|
-
assert opts.trace
|
|
222
|
+
assert opts.trace, "should enable trace option"
|
|
223
|
+
assert opts.backtrace, "should enabled backtrace option"
|
|
224
|
+
assert_equal $stderr, opts.trace_output
|
|
225
|
+
assert Rake::FileUtilsExt.verbose_flag
|
|
226
|
+
assert ! Rake::FileUtilsExt.nowrite_flag
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def test_trace_with_stdout
|
|
231
|
+
flags('--trace=stdout', '-tstdout', '-t stdout') do |opts|
|
|
232
|
+
assert opts.trace, "should enable trace option"
|
|
233
|
+
assert opts.backtrace, "should enabled backtrace option"
|
|
234
|
+
assert_equal $stdout, opts.trace_output
|
|
201
235
|
assert Rake::FileUtilsExt.verbose_flag
|
|
202
236
|
assert ! Rake::FileUtilsExt.nowrite_flag
|
|
203
237
|
end
|
|
204
238
|
end
|
|
205
239
|
|
|
240
|
+
def test_trace_with_stderr
|
|
241
|
+
flags('--trace=stderr', '-tstderr', '-t stderr') do |opts|
|
|
242
|
+
assert opts.trace, "should enable trace option"
|
|
243
|
+
assert opts.backtrace, "should enabled backtrace option"
|
|
244
|
+
assert_equal $stderr, opts.trace_output
|
|
245
|
+
assert Rake::FileUtilsExt.verbose_flag
|
|
246
|
+
assert ! Rake::FileUtilsExt.nowrite_flag
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def test_trace_with_error
|
|
251
|
+
ex = assert_raises(Rake::CommandLineOptionError) do
|
|
252
|
+
flags('--trace=xyzzy') do |opts| end
|
|
253
|
+
end
|
|
254
|
+
assert_match(/un(known|recognized).*\btrace\b.*xyzzy/i, ex.message)
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
def test_backtrace
|
|
259
|
+
flags('--backtrace') do |opts|
|
|
260
|
+
assert opts.backtrace, "should enable backtrace option"
|
|
261
|
+
assert_equal $stderr, opts.trace_output
|
|
262
|
+
assert ! opts.trace, "should not enable trace option"
|
|
263
|
+
assert ! Rake::FileUtilsExt.verbose_flag
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def test_backtrace_with_stdout
|
|
268
|
+
flags('--backtrace=stdout') do |opts|
|
|
269
|
+
assert opts.backtrace, "should enable backtrace option"
|
|
270
|
+
assert_equal $stdout, opts.trace_output
|
|
271
|
+
assert ! opts.trace, "should not enable trace option"
|
|
272
|
+
assert ! Rake::FileUtilsExt.verbose_flag
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
def test_backtrace_with_stderr
|
|
277
|
+
flags('--backtrace=stderr') do |opts|
|
|
278
|
+
assert opts.backtrace, "should enable backtrace option"
|
|
279
|
+
assert_equal $stderr, opts.trace_output
|
|
280
|
+
assert ! opts.trace, "should not enable trace option"
|
|
281
|
+
assert ! Rake::FileUtilsExt.verbose_flag
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
def test_backtrace_with_error
|
|
286
|
+
ex = assert_raises(Rake::CommandLineOptionError) do
|
|
287
|
+
flags('--backtrace=xyzzy') do |opts| end
|
|
288
|
+
end
|
|
289
|
+
assert_match(/un(known|recognized).*\bbacktrace\b.*xyzzy/i, ex.message)
|
|
290
|
+
end
|
|
291
|
+
|
|
206
292
|
def test_trace_rules
|
|
207
293
|
flags('--rules') do |opts|
|
|
208
294
|
assert opts.trace_rules
|
|
@@ -213,10 +299,17 @@ class TestRakeApplicationOptions < Rake::TestCase
|
|
|
213
299
|
flags('--tasks', '-T') do |opts|
|
|
214
300
|
assert_equal :tasks, opts.show_tasks
|
|
215
301
|
assert_equal(//.to_s, opts.show_task_pattern.to_s)
|
|
302
|
+
assert_equal nil, opts.show_all_tasks
|
|
216
303
|
end
|
|
217
304
|
flags(['--tasks', 'xyz'], ['-Txyz']) do |opts|
|
|
218
305
|
assert_equal :tasks, opts.show_tasks
|
|
219
306
|
assert_equal(/xyz/.to_s, opts.show_task_pattern.to_s)
|
|
307
|
+
assert_equal nil, opts.show_all_tasks
|
|
308
|
+
end
|
|
309
|
+
flags(['--tasks', 'xyz', '--comments']) do |opts|
|
|
310
|
+
assert_equal :tasks, opts.show_tasks
|
|
311
|
+
assert_equal(/xyz/.to_s, opts.show_task_pattern.to_s)
|
|
312
|
+
assert_equal false, opts.show_all_tasks
|
|
220
313
|
end
|
|
221
314
|
end
|
|
222
315
|
|
|
@@ -224,10 +317,17 @@ class TestRakeApplicationOptions < Rake::TestCase
|
|
|
224
317
|
flags('--where', '-W') do |opts|
|
|
225
318
|
assert_equal :lines, opts.show_tasks
|
|
226
319
|
assert_equal(//.to_s, opts.show_task_pattern.to_s)
|
|
320
|
+
assert_equal true, opts.show_all_tasks
|
|
227
321
|
end
|
|
228
322
|
flags(['--where', 'xyz'], ['-Wxyz']) do |opts|
|
|
229
323
|
assert_equal :lines, opts.show_tasks
|
|
230
324
|
assert_equal(/xyz/.to_s, opts.show_task_pattern.to_s)
|
|
325
|
+
assert_equal true, opts.show_all_tasks
|
|
326
|
+
end
|
|
327
|
+
flags(['--where', 'xyz', '--comments'], ['-Wxyz', '--comments']) do |opts|
|
|
328
|
+
assert_equal :lines, opts.show_tasks
|
|
329
|
+
assert_equal(/xyz/.to_s, opts.show_task_pattern.to_s)
|
|
330
|
+
assert_equal false, opts.show_all_tasks
|
|
231
331
|
end
|
|
232
332
|
end
|
|
233
333
|
|
|
@@ -268,7 +368,7 @@ class TestRakeApplicationOptions < Rake::TestCase
|
|
|
268
368
|
assert_equal opts.trace, $trace
|
|
269
369
|
assert_equal opts.dryrun, $dryrun
|
|
270
370
|
assert_equal opts.silent, $silent
|
|
271
|
-
|
|
371
|
+
end
|
|
272
372
|
end
|
|
273
373
|
|
|
274
374
|
assert_match(/deprecated/, err)
|
|
@@ -308,6 +408,17 @@ class TestRakeApplicationOptions < Rake::TestCase
|
|
|
308
408
|
assert '12', ENV['TESTKEY']
|
|
309
409
|
end
|
|
310
410
|
|
|
411
|
+
def test_rake_explicit_task_library
|
|
412
|
+
Rake.add_rakelib 'app/task', 'other'
|
|
413
|
+
|
|
414
|
+
libs = Rake.application.options.rakelib
|
|
415
|
+
|
|
416
|
+
assert libs.include?("app/task")
|
|
417
|
+
assert libs.include?("other")
|
|
418
|
+
end
|
|
419
|
+
|
|
420
|
+
private
|
|
421
|
+
|
|
311
422
|
def flags(*sets)
|
|
312
423
|
sets.each do |set|
|
|
313
424
|
ARGV.clear
|
|
@@ -332,4 +443,3 @@ class TestRakeApplicationOptions < Rake::TestCase
|
|
|
332
443
|
@app.options
|
|
333
444
|
end
|
|
334
445
|
end
|
|
335
|
-
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
|
2
|
+
require 'open3'
|
|
3
|
+
|
|
4
|
+
class TestRakeBacktrace < Rake::TestCase
|
|
5
|
+
# TODO: factor out similar code in test_rake_functional.rb
|
|
6
|
+
def rake(*args)
|
|
7
|
+
lib = File.join(@orig_PWD, "lib")
|
|
8
|
+
bin_rake = File.join(@orig_PWD, "bin", "rake")
|
|
9
|
+
Open3.popen3(RUBY, "-I", lib, bin_rake, *args) { |_, _, err, _| err.read }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def invoke(task_name)
|
|
13
|
+
rake task_name.to_s
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_single_collapse
|
|
17
|
+
rakefile %q{
|
|
18
|
+
task :foo do
|
|
19
|
+
raise "foooo!"
|
|
20
|
+
end
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
lines = invoke(:foo).split("\n")
|
|
24
|
+
|
|
25
|
+
assert_equal "rake aborted!", lines[0]
|
|
26
|
+
assert_equal "foooo!", lines[1]
|
|
27
|
+
assert_something_matches %r!\A#{Regexp.quote Dir.pwd}/Rakefile:3!i, lines
|
|
28
|
+
assert_something_matches %r!\ATasks:!, lines
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_multi_collapse
|
|
32
|
+
rakefile %q{
|
|
33
|
+
task :foo do
|
|
34
|
+
Rake.application.invoke_task(:bar)
|
|
35
|
+
end
|
|
36
|
+
task :bar do
|
|
37
|
+
raise "barrr!"
|
|
38
|
+
end
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
lines = invoke(:foo).split("\n")
|
|
42
|
+
|
|
43
|
+
assert_equal "rake aborted!", lines[0]
|
|
44
|
+
assert_equal "barrr!", lines[1]
|
|
45
|
+
assert_something_matches %r!\A#{Regexp.quote Dir.pwd}/Rakefile:6!i, lines
|
|
46
|
+
assert_something_matches %r!\A#{Regexp.quote Dir.pwd}/Rakefile:3!i, lines
|
|
47
|
+
assert_something_matches %r!\ATasks:!, lines
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_suppress_option
|
|
51
|
+
rakefile %q{
|
|
52
|
+
task :baz do
|
|
53
|
+
raise "bazzz!"
|
|
54
|
+
end
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
lines = rake("baz").split("\n")
|
|
58
|
+
assert_equal "rake aborted!", lines[0]
|
|
59
|
+
assert_equal "bazzz!", lines[1]
|
|
60
|
+
assert_something_matches %r!Rakefile!i, lines
|
|
61
|
+
|
|
62
|
+
lines = rake("--suppress-backtrace", ".ak.file", "baz").split("\n")
|
|
63
|
+
assert_equal "rake aborted!", lines[0]
|
|
64
|
+
assert_equal "bazzz!", lines[1]
|
|
65
|
+
refute_match %r!Rakefile!i, lines[2]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
private
|
|
69
|
+
|
|
70
|
+
# Assert that the pattern matches at least one line in +lines+.
|
|
71
|
+
def assert_something_matches(pattern, lines)
|
|
72
|
+
lines.each do |ln|
|
|
73
|
+
if pattern =~ ln
|
|
74
|
+
assert_match pattern, ln
|
|
75
|
+
return
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
flunk "expected #{pattern.inspect} to match something in:\n #{lines.join("\n ")}"
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end
|
|
@@ -36,11 +36,22 @@ class TestRakeDirectoryTask < Rake::TestCase
|
|
|
36
36
|
assert_nil Task['c:/'].comment
|
|
37
37
|
assert_equal "WIN32 DESC", Task['c:/a/b/c'].comment
|
|
38
38
|
assert_nil Task['c:/a/b'].comment
|
|
39
|
-
verbose(false) {
|
|
40
|
-
Task['c:/a/b'].invoke
|
|
41
|
-
}
|
|
42
|
-
assert File.exist?('c:/a/b')
|
|
43
|
-
refute File.exist?('c:/a/b/c')
|
|
44
39
|
end
|
|
45
40
|
end
|
|
41
|
+
|
|
42
|
+
def test_can_use_blocks
|
|
43
|
+
runlist = []
|
|
44
|
+
|
|
45
|
+
t1 = directory("a/b/c" => :t2) { |t| runlist << t.name }
|
|
46
|
+
t2 = task(:t2) { |t| runlist << t.name }
|
|
47
|
+
|
|
48
|
+
verbose(false) {
|
|
49
|
+
t1.invoke
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
assert_equal Task["a/b/c"], t1
|
|
53
|
+
assert_equal FileCreationTask, Task["a/b/c"].class
|
|
54
|
+
assert_equal ["t2", "a/b/c"], runlist
|
|
55
|
+
assert File.directory?("a/b/c")
|
|
56
|
+
end
|
|
46
57
|
end
|
data/test/test_rake_file_task.rb
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
require File.expand_path('../helper', __FILE__)
|
|
2
2
|
require 'fileutils'
|
|
3
3
|
|
|
4
|
+
def load_phony
|
|
5
|
+
load File.dirname(__FILE__) + "/../lib/rake/phony.rb"
|
|
6
|
+
end
|
|
7
|
+
|
|
4
8
|
class TestRakeFileTask < Rake::TestCase
|
|
5
9
|
include Rake
|
|
6
10
|
|
|
@@ -41,6 +45,23 @@ class TestRakeFileTask < Rake::TestCase
|
|
|
41
45
|
assert ! t1.needed?, "Should not need to rebuild new file because of old"
|
|
42
46
|
end
|
|
43
47
|
|
|
48
|
+
def test_file_times_new_depend_on_regular_task_timestamps
|
|
49
|
+
load_phony
|
|
50
|
+
|
|
51
|
+
name = "dummy"
|
|
52
|
+
task name
|
|
53
|
+
|
|
54
|
+
create_timed_files(NEWFILE)
|
|
55
|
+
|
|
56
|
+
t1 = Rake.application.intern(FileTask, NEWFILE).enhance([name])
|
|
57
|
+
|
|
58
|
+
assert t1.needed?, "depending on non-file task uses Time.now"
|
|
59
|
+
|
|
60
|
+
task(name => :phony)
|
|
61
|
+
|
|
62
|
+
assert ! t1.needed?, "unless the non-file task has a timestamp"
|
|
63
|
+
end
|
|
64
|
+
|
|
44
65
|
def test_file_times_old_depends_on_new
|
|
45
66
|
create_timed_files(OLDFILE, NEWFILE)
|
|
46
67
|
|
|
@@ -99,4 +120,3 @@ class TestRakeFileTask < Rake::TestCase
|
|
|
99
120
|
end
|
|
100
121
|
|
|
101
122
|
end
|
|
102
|
-
|
|
@@ -417,6 +417,43 @@ class TestRakeFunctional < Rake::TestCase
|
|
|
417
417
|
assert_equal "1\n", @out
|
|
418
418
|
end
|
|
419
419
|
|
|
420
|
+
def can_detect_signals?
|
|
421
|
+
system "ruby -e 'Process.kill \"TERM\", $$'"
|
|
422
|
+
status = $?
|
|
423
|
+
if @verbose
|
|
424
|
+
puts " SIG status = #{$?.inspect}"
|
|
425
|
+
puts " SIG status.respond_to?(:signaled?) = #{$?.respond_to?(:signaled?).inspect}"
|
|
426
|
+
puts " SIG status.signaled? = #{status.signaled?}" if status.respond_to?(:signaled?)
|
|
427
|
+
end
|
|
428
|
+
status.respond_to?(:signaled?) && status.signaled?
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
def test_signal_propagation_in_tests
|
|
432
|
+
if can_detect_signals?
|
|
433
|
+
rakefile_test_signal
|
|
434
|
+
rake
|
|
435
|
+
assert_match(/ATEST/, @out)
|
|
436
|
+
refute_match(/BTEST/, @out)
|
|
437
|
+
else
|
|
438
|
+
skip "Signal detect seems broken on this system"
|
|
439
|
+
end
|
|
440
|
+
end
|
|
441
|
+
|
|
442
|
+
def test_failing_test_sets_exit_status
|
|
443
|
+
rakefile_failing_test_task
|
|
444
|
+
rake
|
|
445
|
+
assert_equal 1, @exit.exitstatus
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
def test_stand_alone_filelist
|
|
449
|
+
rakefile_stand_alone_filelist
|
|
450
|
+
|
|
451
|
+
run_ruby @ruby_options + ["stand_alone_filelist.rb"]
|
|
452
|
+
|
|
453
|
+
assert_match(/^stand_alone_filelist\.rb$/, @out)
|
|
454
|
+
assert_equal 0, @exit.exitstatus
|
|
455
|
+
end
|
|
456
|
+
|
|
420
457
|
private
|
|
421
458
|
|
|
422
459
|
# Run a shell Ruby command with command line options (using the
|
|
@@ -436,14 +473,16 @@ class TestRakeFunctional < Rake::TestCase
|
|
|
436
473
|
def run_ruby(option_list)
|
|
437
474
|
puts "COMMAND: [#{RUBY} #{option_list.join ' '}]" if @verbose
|
|
438
475
|
|
|
439
|
-
inn, out, err = Open3.popen3(Gem.ruby, *option_list)
|
|
476
|
+
inn, out, err, wait = Open3.popen3(Gem.ruby, *option_list)
|
|
440
477
|
inn.close
|
|
441
478
|
|
|
442
479
|
@out = out.read
|
|
443
480
|
@err = err.read
|
|
481
|
+
@exit = wait.value
|
|
444
482
|
|
|
445
483
|
puts "OUTPUT: [#{@out}]" if @verbose
|
|
446
484
|
puts "ERROR: [#{@err}]" if @verbose
|
|
485
|
+
puts "EXIT: [#{@exit.inspect}]" if @verbose
|
|
447
486
|
puts "PWD: [#{Dir.pwd}]" if @verbose
|
|
448
487
|
end
|
|
449
488
|
|
|
@@ -47,5 +47,13 @@ class TestRakeMultiTask < Rake::TestCase
|
|
|
47
47
|
assert @runs.index("B0") < @runs.index("B1")
|
|
48
48
|
assert @runs.index("B1") < @runs.index("B2")
|
|
49
49
|
end
|
|
50
|
+
|
|
51
|
+
def test_multitasks_with_parameters
|
|
52
|
+
task :a, [:arg] do |t,args| add_run(args[:arg]) end
|
|
53
|
+
multitask :b, [:arg] => [:a] do |t,args| add_run(args[:arg]+'mt') end
|
|
54
|
+
Task[:b].invoke "b"
|
|
55
|
+
assert @runs[0] == "b"
|
|
56
|
+
assert @runs[1] == "bmt"
|
|
57
|
+
end
|
|
50
58
|
end
|
|
51
59
|
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
|
2
|
+
require 'open3'
|
|
3
|
+
|
|
4
|
+
class TestRakeReduceCompat < Rake::TestCase
|
|
5
|
+
# TODO: factor out similar code in test_rake_functional.rb
|
|
6
|
+
def rake(*args)
|
|
7
|
+
lib = File.join(@orig_PWD, "lib")
|
|
8
|
+
bin_rake = File.join(@orig_PWD, "bin", "rake")
|
|
9
|
+
Open3.popen3(RUBY, "-I", lib, bin_rake, *args) { |_, out, _, _| out.read }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def invoke_normal(task_name)
|
|
13
|
+
rake task_name.to_s
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def invoke_reduce_compat(task_name)
|
|
17
|
+
rake "--reduce-compat", task_name.to_s
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_no_deprecated_dsl
|
|
21
|
+
rakefile %q{
|
|
22
|
+
task :check_task do
|
|
23
|
+
Module.new { p defined?(task) }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
task :check_file do
|
|
27
|
+
Module.new { p defined?(file) }
|
|
28
|
+
end
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
assert_equal %{"method"}, invoke_normal(:check_task).chomp
|
|
32
|
+
assert_equal %{"method"}, invoke_normal(:check_file).chomp
|
|
33
|
+
|
|
34
|
+
assert_equal "nil", invoke_reduce_compat(:check_task).chomp
|
|
35
|
+
assert_equal "nil", invoke_reduce_compat(:check_file).chomp
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_no_classic_namespace
|
|
39
|
+
rakefile %q{
|
|
40
|
+
task :check_task do
|
|
41
|
+
begin
|
|
42
|
+
Task
|
|
43
|
+
print "present"
|
|
44
|
+
rescue NameError
|
|
45
|
+
print "absent"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
task :check_file_task do
|
|
50
|
+
begin
|
|
51
|
+
FileTask
|
|
52
|
+
print "present"
|
|
53
|
+
rescue NameError
|
|
54
|
+
print "absent"
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
assert_equal "present", invoke_normal(:check_task)
|
|
60
|
+
assert_equal "present", invoke_normal(:check_file_task)
|
|
61
|
+
|
|
62
|
+
assert_equal "absent", invoke_reduce_compat(:check_task)
|
|
63
|
+
assert_equal "absent", invoke_reduce_compat(:check_file_task)
|
|
64
|
+
end
|
|
65
|
+
end
|