rubygems-test 0.3.12 → 0.4.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +8 -0
- data/Rakefile +1 -1
- data/lib/rubygems/commands/test_command.rb +78 -32
- data/lib/rubygems/on_install_test.rb +7 -8
- data/test/test_execute.rb +6 -3
- metadata +4 -4
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== 0.4.0.rc1 / 2011-04-17
|
2
|
+
|
3
|
+
* Pretty much nailed the reader problem to the wall.
|
4
|
+
* Now able to test .gem files directly on the commandline.
|
5
|
+
* Use the new hooks to uninstall gems if they fail testing. Bump the rubygems
|
6
|
+
requirement to 1.5 to reflect above changes.
|
7
|
+
* Specify the exec_name for Gem.bin_path. [Postmodern]
|
8
|
+
|
1
9
|
=== 0.3.11 / 2011-03-13
|
2
10
|
|
3
11
|
* Now sending :rubygems_test_version which is the version of rubygems-test used for the upload.
|
data/Rakefile
CHANGED
@@ -9,12 +9,13 @@ require 'rbconfig'
|
|
9
9
|
autoload(:YAML, 'yaml')
|
10
10
|
require 'net/http'
|
11
11
|
require 'uri'
|
12
|
+
require 'tempfile'
|
12
13
|
|
13
14
|
class Gem::Commands::TestCommand < Gem::Command
|
14
15
|
include Gem::VersionOption
|
15
16
|
include Gem::DefaultUserInteraction
|
16
17
|
|
17
|
-
VERSION = "0.
|
18
|
+
VERSION = "0.4.0.rc1"
|
18
19
|
|
19
20
|
# taken straight out of rake
|
20
21
|
DEFAULT_RAKEFILES = ['rakefile', 'Rakefile', 'rakefile.rb', 'Rakefile.rb']
|
@@ -82,9 +83,9 @@ class Gem::Commands::TestCommand < Gem::Command
|
|
82
83
|
#
|
83
84
|
# Locate the rakefile for a gem name and version
|
84
85
|
#
|
85
|
-
def find_rakefile(spec)
|
86
|
+
def find_rakefile(path, spec)
|
86
87
|
rakefile = DEFAULT_RAKEFILES.
|
87
|
-
map { |x| File.join(
|
88
|
+
map { |x| File.join(path, x) }.
|
88
89
|
find { |x| File.exist?(x) }
|
89
90
|
|
90
91
|
unless(File.exist?(rakefile) rescue nil)
|
@@ -297,39 +298,60 @@ class Gem::Commands::TestCommand < Gem::Command
|
|
297
298
|
def read_output(stdout, stderr)
|
298
299
|
require 'thread'
|
299
300
|
|
300
|
-
STDOUT.sync = true
|
301
|
-
STDERR.sync = true
|
302
|
-
stdout.sync = true
|
303
|
-
stderr.sync = true
|
301
|
+
[STDERR, $stderr, stderr, STDOUT, $stdout, stdout].map { |x| x.sync = true }
|
304
302
|
|
303
|
+
reads = Queue.new
|
305
304
|
output = ""
|
306
|
-
mutex = Mutex.new
|
307
305
|
|
308
306
|
err_t = Thread.new do
|
309
307
|
while !stderr.eof?
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
print tmp
|
314
|
-
end
|
308
|
+
ary = [:stderr, nil, stderr.readline]
|
309
|
+
ary[1] = Time.now.to_f
|
310
|
+
reads << ary
|
315
311
|
end
|
316
312
|
end
|
317
313
|
|
318
314
|
out_t = Thread.new do
|
319
315
|
while !stdout.eof?
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
316
|
+
ary = [:stdout, nil, stdout.read(1)]
|
317
|
+
ary[1] = Time.now.to_f
|
318
|
+
reads << ary
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
tty_t = Thread.new do
|
323
|
+
next_time = nil
|
324
|
+
while true
|
325
|
+
while reads.length > 0
|
326
|
+
cur_reads = [next_time || reads.shift]
|
327
|
+
|
328
|
+
time = cur_reads[0][1]
|
329
|
+
|
330
|
+
while next_time = reads.shift
|
331
|
+
break if next_time[1] != time
|
332
|
+
cur_reads << next_time
|
333
|
+
end
|
334
|
+
|
335
|
+
stderr_reads, stdout_reads = cur_reads.partition { |x| x[0] == :stderr }
|
336
|
+
|
337
|
+
# stderr wins
|
338
|
+
(stderr_reads + stdout_reads).each do |rec|
|
339
|
+
output << rec[2]
|
340
|
+
print rec[2]
|
341
|
+
end
|
324
342
|
end
|
325
343
|
end
|
326
344
|
end
|
327
345
|
|
328
|
-
while !stderr.eof? or !stdout.eof?
|
346
|
+
while !stderr.eof? or !stdout.eof? or !reads.empty?
|
329
347
|
Thread.pass
|
330
348
|
end
|
331
349
|
|
332
|
-
|
350
|
+
sleep 1
|
351
|
+
tty_t.kill
|
352
|
+
puts
|
353
|
+
|
354
|
+
return output + "\n"
|
333
355
|
end
|
334
356
|
|
335
357
|
#
|
@@ -403,8 +425,8 @@ class Gem::Commands::TestCommand < Gem::Command
|
|
403
425
|
# Run the tests with the appropriate spec and rake_path, and capture all
|
404
426
|
# output.
|
405
427
|
#
|
406
|
-
def run_tests(spec, rake_path)
|
407
|
-
Dir.chdir(
|
428
|
+
def run_tests(path, spec, rake_path)
|
429
|
+
Dir.chdir(path) do
|
408
430
|
rake_args = get_rake_args(rake_path, 'test')
|
409
431
|
|
410
432
|
@trapped = false
|
@@ -460,22 +482,42 @@ class Gem::Commands::TestCommand < Gem::Command
|
|
460
482
|
terminate_interaction 1
|
461
483
|
end
|
462
484
|
|
463
|
-
spec =
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
485
|
+
path, spec = if name =~ /\.gem$/
|
486
|
+
unless File.exist?(name)
|
487
|
+
say "unable to find gem #{name}"
|
488
|
+
next
|
489
|
+
end
|
490
|
+
|
491
|
+
inst = Gem::Installer.new(name)
|
492
|
+
tmpdir = Dir.mktmpdir
|
493
|
+
@created_tmpdir = true
|
494
|
+
inst.unpack(tmpdir)
|
495
|
+
unless inst.spec.extensions.empty?
|
496
|
+
say "gem #{name} has extensions. Due to limitations in rubygems,"
|
497
|
+
say "the gem must be installed before it can be tested."
|
498
|
+
next
|
499
|
+
end
|
500
|
+
[tmpdir, inst.spec]
|
501
|
+
else
|
502
|
+
spec = find_gem(name, version)
|
503
|
+
|
504
|
+
unless spec
|
505
|
+
say "unable to find gem #{name} #{version}"
|
506
|
+
next
|
507
|
+
end
|
508
|
+
|
509
|
+
[spec.full_gem_path, spec]
|
510
|
+
end
|
511
|
+
|
512
|
+
if File.exist?(File.join(path, '.gemtest')) or options[:force]
|
471
513
|
# we find rake and the rakefile first to eliminate needlessly installing
|
472
514
|
# dependencies.
|
473
|
-
find_rakefile(spec)
|
515
|
+
find_rakefile(path, spec)
|
474
516
|
rake_path = find_rake
|
475
517
|
|
476
518
|
unless $RG_T_INSTALLING_DEPENDENCIES and !config["test_development_dependencies"]
|
477
519
|
install_dependencies(spec)
|
478
|
-
run_tests(spec, rake_path)
|
520
|
+
run_tests(path, spec, rake_path)
|
479
521
|
end
|
480
522
|
else
|
481
523
|
say "Gem '#{name}' (version #{version}) needs to opt-in for testing."
|
@@ -492,8 +534,12 @@ class Gem::Commands::TestCommand < Gem::Command
|
|
492
534
|
say "For more information, please see the rubygems-test README:"
|
493
535
|
say "https://github.com/rubygems/rubygems-test/blob/master/README.txt"
|
494
536
|
end
|
537
|
+
|
538
|
+
if @created_tmpdir
|
539
|
+
FileUtils.rm_rf path
|
540
|
+
end
|
495
541
|
end
|
496
|
-
rescue Gem::TestError
|
542
|
+
rescue Gem::TestError => e
|
497
543
|
raise if @on_install
|
498
544
|
terminate_interaction 1
|
499
545
|
end
|
@@ -3,7 +3,7 @@ Gem::Commands.autoload(:TestCommand, 'rubygems/commands/test_command')
|
|
3
3
|
Gem.autoload(:RakeNotFoundError, 'exceptions')
|
4
4
|
Gem.autoload(:TestError, 'exceptions')
|
5
5
|
|
6
|
-
Gem.
|
6
|
+
Gem.post_build do |gem|
|
7
7
|
options = Gem.configuration["test_options"] || { }
|
8
8
|
|
9
9
|
if options["auto_test_on_install"] or options["test_on_install"]
|
@@ -12,14 +12,13 @@ Gem.post_install do |gem|
|
|
12
12
|
|
13
13
|
begin
|
14
14
|
Gem::Commands::TestCommand.new(gem.spec, true).execute
|
15
|
+
true
|
15
16
|
rescue Gem::RakeNotFoundError, Gem::TestError
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
at_exit { Gem::Uninstaller.new(gem.spec.name, :version => gem.spec.version).uninstall }
|
22
|
-
end
|
17
|
+
!(
|
18
|
+
(options.has_key?("force_install") && !options["force_install"]) ||
|
19
|
+
options["force_uninstall_on_failure"] ||
|
20
|
+
gem.ui.ask_yes_no("Testing #{gem.spec.name} (#{gem.spec.version}) failed. Uninstall?", false)
|
21
|
+
)
|
23
22
|
end
|
24
23
|
end
|
25
24
|
end
|
data/test/test_execute.rb
CHANGED
@@ -36,12 +36,16 @@ class TestExecute < Test::Unit::TestCase
|
|
36
36
|
def test_05_find_rakefile
|
37
37
|
install_stub_gem({ :files => ["Rakefile"] })
|
38
38
|
|
39
|
-
|
39
|
+
spec = @test.find_gem('test-gem', '0.0.0')
|
40
|
+
|
41
|
+
assert_nothing_raised { @test.find_rakefile(spec.full_gem_path, spec) }
|
40
42
|
|
41
43
|
uninstall_stub_gem
|
42
44
|
install_stub_gem({ :files => "" })
|
43
45
|
|
44
|
-
|
46
|
+
spec = @test.find_gem('test-gem', '0.0.0')
|
47
|
+
|
48
|
+
assert_raises(Gem::RakeNotFoundError) { @test.find_rakefile(spec.full_gem_path, spec) }
|
45
49
|
|
46
50
|
uninstall_stub_gem
|
47
51
|
end
|
@@ -81,5 +85,4 @@ class TestExecute < Test::Unit::TestCase
|
|
81
85
|
ensure
|
82
86
|
Gem.configuration.verbose = old_verbose
|
83
87
|
end
|
84
|
-
|
85
88
|
end
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubygems-test
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
version: 0.
|
4
|
+
prerelease: 6
|
5
|
+
version: 0.4.0.rc1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Erik Hollensbe
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2011-04-
|
14
|
+
date: 2011-04-17 00:00:00 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rake
|
@@ -85,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
85
|
requirements:
|
86
86
|
- - ">="
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: 1.
|
88
|
+
version: 1.5.0
|
89
89
|
requirements: []
|
90
90
|
|
91
91
|
rubyforge_project:
|