rubygems-test 0.3.12 → 0.4.0.rc1
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/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:
|