1require 'rubygems/test_case' 2require 'rubygems/request_set' 3 4class TestGemRequestSet < Gem::TestCase 5 def setup 6 super 7 8 Gem::RemoteFetcher.fetcher = @fetcher = Gem::FakeFetcher.new 9 end 10 11 def test_gem 12 util_spec "a", "2" 13 14 rs = Gem::RequestSet.new 15 rs.gem "a", "= 2" 16 17 assert_equal [Gem::Dependency.new("a", "=2")], rs.dependencies 18 end 19 20 def test_resolve 21 a = util_spec "a", "2", "b" => ">= 2" 22 b = util_spec "b", "2" 23 24 rs = Gem::RequestSet.new 25 rs.gem "a" 26 27 res = rs.resolve StaticSet.new([a, b]) 28 assert_equal 2, res.size 29 30 names = res.map { |s| s.full_name }.sort 31 32 assert_equal ["a-2", "b-2"], names 33 end 34 35 def test_sorted_requests 36 a = util_spec "a", "2", "b" => ">= 2" 37 b = util_spec "b", "2", "c" => ">= 2" 38 c = util_spec "c", "2" 39 40 rs = Gem::RequestSet.new 41 rs.gem "a" 42 43 rs.resolve StaticSet.new([a, b, c]) 44 45 names = rs.sorted_requests.map { |s| s.full_name } 46 assert_equal %w!c-2 b-2 a-2!, names 47 end 48 49 def test_install_into 50 a, ad = util_gem "a", "1", "b" => "= 1" 51 b, bd = util_gem "b", "1" 52 53 util_setup_spec_fetcher a, b 54 55 @fetcher.data["http://gems.example.com/gems/#{a.file_name}"] = Gem.read_binary(ad) 56 @fetcher.data["http://gems.example.com/gems/#{b.file_name}"] = Gem.read_binary(bd) 57 58 rs = Gem::RequestSet.new 59 rs.gem "a" 60 61 rs.resolve 62 63 installed = rs.install_into @tempdir 64 65 assert File.exists?(File.join(@tempdir, "specifications", "a-1.gemspec")) 66 assert File.exists?(File.join(@tempdir, "specifications", "b-1.gemspec")) 67 68 assert_equal %w!b-1 a-1!, installed.map { |s| s.full_name } 69 end 70end 71