diff options
author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:02:05 +0000 |
---|---|---|
committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:02:05 +0000 |
commit | 0dc342de848a642ecce8db697b8fecd83a63e117 (patch) | |
tree | 2b7ed4724aff1f86073e4740134bda9c4aac1a39 /trunk/test/rubygems/test_gem_indexer.rb | |
parent | ef70cf7138ab8034b5b806f466e4b484b24f0f88 (diff) |
added tag v1_9_0_4
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_9_0_4@18845 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'trunk/test/rubygems/test_gem_indexer.rb')
-rw-r--r-- | trunk/test/rubygems/test_gem_indexer.rb | 263 |
1 files changed, 263 insertions, 0 deletions
diff --git a/trunk/test/rubygems/test_gem_indexer.rb b/trunk/test/rubygems/test_gem_indexer.rb new file mode 100644 index 0000000000..9d68a7f34d --- /dev/null +++ b/trunk/test/rubygems/test_gem_indexer.rb @@ -0,0 +1,263 @@ +#-- +# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others. +# All rights reserved. +# See LICENSE.txt for permissions. +#++ + +require 'test/unit' +require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities') + +require 'rubygems/indexer' + +unless ''.respond_to? :to_xs then + warn "Gem::Indexer tests are being skipped. Install builder gem." +end + +class TestGemIndexer < RubyGemTestCase + + def setup + super + + util_make_gems + + @d2_0 = quick_gem 'd', '2.0' + util_build_gem @d2_0 + + gems = File.join(@tempdir, 'gems') + FileUtils.mkdir_p gems + cache_gems = File.join @gemhome, 'cache', '*.gem' + FileUtils.mv Dir[cache_gems], gems + + @indexer = Gem::Indexer.new @tempdir + end + + def test_initialize + assert_equal @tempdir, @indexer.dest_directory + assert_equal File.join(Dir.tmpdir, "gem_generate_index_#{$$}"), + @indexer.directory + end + + def test_build_indicies + spec = quick_gem 'd', '2.0' + spec.instance_variable_set :@original_platform, '' + + @indexer.make_temp_directories + + index = Gem::SourceIndex.new + index.add_spec spec + + use_ui @ui do + @indexer.build_indicies index + end + + specs_path = File.join @indexer.directory, "specs.#{@marshal_version}" + specs_dump = Gem.read_binary specs_path + specs = Marshal.load specs_dump + + expected = [ + ['d', Gem::Version.new('2.0'), 'ruby'], + ] + + assert_equal expected, specs, 'specs' + + latest_specs_path = File.join @indexer.directory, + "latest_specs.#{@marshal_version}" + latest_specs_dump = Gem.read_binary latest_specs_path + latest_specs = Marshal.load latest_specs_dump + + expected = [ + ['d', Gem::Version.new('2.0'), 'ruby'], + ] + + assert_equal expected, latest_specs, 'latest_specs' + end + + def test_generate_index + use_ui @ui do + @indexer.generate_index + end + + assert_indexed @tempdir, 'yaml' + assert_indexed @tempdir, 'yaml.Z' + assert_indexed @tempdir, "Marshal.#{@marshal_version}" + assert_indexed @tempdir, "Marshal.#{@marshal_version}.Z" + + quickdir = File.join @tempdir, 'quick' + marshal_quickdir = File.join quickdir, "Marshal.#{@marshal_version}" + + assert File.directory?(quickdir) + assert File.directory?(marshal_quickdir) + + assert_indexed quickdir, "index" + assert_indexed quickdir, "index.rz" + + quick_index = File.read File.join(quickdir, 'index') + expected = <<-EOF +a-1 +a-2 +a_evil-9 +b-2 +c-1.2 +d-2.0 +pl-1-i386-linux + EOF + + assert_equal expected, quick_index + + assert_indexed quickdir, "latest_index" + assert_indexed quickdir, "latest_index.rz" + + latest_quick_index = File.read File.join(quickdir, 'latest_index') + expected = <<-EOF +a-2 +a_evil-9 +b-2 +c-1.2 +d-2.0 +pl-1-i386-linux + EOF + + assert_equal expected, latest_quick_index + + assert_indexed quickdir, "#{@a1.full_name}.gemspec.rz" + assert_indexed quickdir, "#{@a2.full_name}.gemspec.rz" + assert_indexed quickdir, "#{@b2.full_name}.gemspec.rz" + assert_indexed quickdir, "#{@c1_2.full_name}.gemspec.rz" + + assert_indexed quickdir, "#{@pl1.original_name}.gemspec.rz" + refute_indexed quickdir, "#{@pl1.full_name}.gemspec.rz" + + assert_indexed marshal_quickdir, "#{@a1.full_name}.gemspec.rz" + assert_indexed marshal_quickdir, "#{@a2.full_name}.gemspec.rz" + + refute_indexed quickdir, "#{@c1_2.full_name}.gemspec" + refute_indexed marshal_quickdir, "#{@c1_2.full_name}.gemspec" + + assert_indexed @tempdir, "specs.#{@marshal_version}" + assert_indexed @tempdir, "specs.#{@marshal_version}.gz" + + assert_indexed @tempdir, "latest_specs.#{@marshal_version}" + assert_indexed @tempdir, "latest_specs.#{@marshal_version}.gz" + end + + def test_generate_index_ui + use_ui @ui do + @indexer.generate_index + end + + expected = <<-EOF +Loading 7 gems from #{@tempdir} +....... +Loaded all gems +Generating quick index gemspecs for 7 gems +....... +Complete +Generating specs index +Generating latest specs index +Generating quick index +Generating latest index +Generating Marshal master index +Generating YAML master index for 7 gems (this may take a while) +....... +Complete +Compressing indicies + EOF + + assert_equal expected, @ui.output + assert_equal '', @ui.error + end + + def test_generate_index_master + use_ui @ui do + @indexer.generate_index + end + + yaml_path = File.join @tempdir, 'yaml' + dump_path = File.join @tempdir, "Marshal.#{@marshal_version}" + + yaml_index = YAML.load_file yaml_path + dump_index = Marshal.load Gem.read_binary(dump_path) + + dump_index.each do |_,gem| + gem.send :remove_instance_variable, :@loaded + end + + assert_equal yaml_index, dump_index, + "expected YAML and Marshal to produce identical results" + end + + def test_generate_index_specs + use_ui @ui do + @indexer.generate_index + end + + specs_path = File.join @tempdir, "specs.#{@marshal_version}" + + specs_dump = Gem.read_binary specs_path + specs = Marshal.load specs_dump + + expected = [ + ['a', Gem::Version.new(1), 'ruby'], + ['a', Gem::Version.new(2), 'ruby'], + ['a_evil', Gem::Version.new(9), 'ruby'], + ['b', Gem::Version.new(2), 'ruby'], + ['c', Gem::Version.new('1.2'), 'ruby'], + ['d', Gem::Version.new('2.0'), 'ruby'], + ['pl', Gem::Version.new(1), 'i386-linux'], + ] + + assert_equal expected, specs + + assert_same specs[0].first, specs[1].first, + 'identical names not identical' + + assert_same specs[0][1], specs[-1][1], + 'identical versions not identical' + + assert_same specs[0].last, specs[1].last, + 'identical platforms not identical' + + assert_not_same specs[1][1], specs[5][1], + 'different versions not different' + end + + def test_generate_index_latest_specs + use_ui @ui do + @indexer.generate_index + end + + latest_specs_path = File.join @tempdir, "latest_specs.#{@marshal_version}" + + latest_specs_dump = Gem.read_binary latest_specs_path + latest_specs = Marshal.load latest_specs_dump + + expected = [ + ['a', Gem::Version.new(2), 'ruby'], + ['a_evil', Gem::Version.new(9), 'ruby'], + ['b', Gem::Version.new(2), 'ruby'], + ['c', Gem::Version.new('1.2'), 'ruby'], + ['d', Gem::Version.new('2.0'), 'ruby'], + ['pl', Gem::Version.new(1), 'i386-linux'], + ] + + assert_equal expected, latest_specs + + assert_same latest_specs[0][1], latest_specs[2][1], + 'identical versions not identical' + + assert_same latest_specs[0].last, latest_specs[1].last, + 'identical platforms not identical' + end + + def assert_indexed(dir, name) + file = File.join dir, name + assert File.exist?(file), "#{file} does not exist" + end + + def refute_indexed(dir, name) + file = File.join dir, name + assert !File.exist?(file), "#{file} exists" + end + +end if ''.respond_to? :to_xs + |