diff options
Diffstat (limited to 'jni/ruby/test/rubygems/test_gem_doctor.rb')
-rw-r--r-- | jni/ruby/test/rubygems/test_gem_doctor.rb | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/jni/ruby/test/rubygems/test_gem_doctor.rb b/jni/ruby/test/rubygems/test_gem_doctor.rb new file mode 100644 index 0000000..f4d4659 --- /dev/null +++ b/jni/ruby/test/rubygems/test_gem_doctor.rb @@ -0,0 +1,168 @@ +require 'rubygems/test_case' +require 'rubygems/doctor' + +class TestGemDoctor < Gem::TestCase + + def gem name + spec = quick_gem name do |gem| + gem.files = %W[lib/#{name}.rb Rakefile] + end + + write_file File.join(*%W[gems #{spec.full_name} lib #{name}.rb]) + write_file File.join(*%W[gems #{spec.full_name} Rakefile]) + + spec + end + + def test_doctor + a = gem 'a' + b = gem 'b' + c = gem 'c' + + Gem.use_paths @userhome, @gemhome + + FileUtils.rm b.spec_file + + open c.spec_file, 'w' do |io| + io.write 'this will raise an exception when evaluated.' + end + + assert_path_exists File.join(a.gem_dir, 'Rakefile') + assert_path_exists File.join(a.gem_dir, 'lib', 'a.rb') + + assert_path_exists b.gem_dir + refute_path_exists b.spec_file + + assert_path_exists c.gem_dir + assert_path_exists c.spec_file + + doctor = Gem::Doctor.new @gemhome + + capture_io do + use_ui @ui do + doctor.doctor + end + end + + assert_path_exists File.join(a.gem_dir, 'Rakefile') + assert_path_exists File.join(a.gem_dir, 'lib', 'a.rb') + + refute_path_exists b.gem_dir + refute_path_exists b.spec_file + + refute_path_exists c.gem_dir + refute_path_exists c.spec_file + + expected = <<-OUTPUT +Checking #{@gemhome} +Removed file specifications/c-2.gemspec +Removed directory gems/b-2 +Removed directory gems/c-2 + + OUTPUT + + assert_equal expected, @ui.output + + assert_equal Gem.dir, @userhome + assert_equal Gem.path, [@gemhome, @userhome] + end + + def test_doctor_dry_run + a = gem 'a' + b = gem 'b' + c = gem 'c' + + Gem.use_paths @userhome, @gemhome + + FileUtils.rm b.spec_file + + open c.spec_file, 'w' do |io| + io.write 'this will raise an exception when evaluated.' + end + + assert_path_exists File.join(a.gem_dir, 'Rakefile') + assert_path_exists File.join(a.gem_dir, 'lib', 'a.rb') + + assert_path_exists b.gem_dir + refute_path_exists b.spec_file + + assert_path_exists c.gem_dir + assert_path_exists c.spec_file + + doctor = Gem::Doctor.new @gemhome, true + + capture_io do + use_ui @ui do + doctor.doctor + end + end + + assert_path_exists File.join(a.gem_dir, 'Rakefile') + assert_path_exists File.join(a.gem_dir, 'lib', 'a.rb') + + assert_path_exists b.gem_dir + refute_path_exists b.spec_file + + assert_path_exists c.gem_dir + assert_path_exists c.spec_file + + expected = <<-OUTPUT +Checking #{@gemhome} +Extra file specifications/c-2.gemspec +Extra directory gems/b-2 +Extra directory gems/c-2 + + OUTPUT + + assert_equal expected, @ui.output + + assert_equal Gem.dir, @userhome + assert_equal Gem.path, [@gemhome, @userhome] + end + + def test_doctor_non_gem_home + other_dir = File.join @tempdir, 'other', 'dir' + + FileUtils.mkdir_p other_dir + + doctor = Gem::Doctor.new @tempdir + + capture_io do + use_ui @ui do + doctor.doctor + end + end + + assert_path_exists other_dir + + expected = <<-OUTPUT +Checking #{@tempdir} +This directory does not appear to be a RubyGems repository, skipping + + OUTPUT + + assert_equal expected, @ui.output + end + + def test_doctor_child_missing + doctor = Gem::Doctor.new @gemhome + + doctor.doctor_child 'missing', '' + + assert true # count + end + + def test_gem_repository_eh + doctor = Gem::Doctor.new @gemhome + + refute doctor.gem_repository?, 'no gems installed' + + util_spec 'a' + + doctor = Gem::Doctor.new @gemhome + + assert doctor.gem_repository?, 'gems installed' + end + +end + |