diff options
Diffstat (limited to 'test/rubygems/test_gem_resolver_installer_set.rb')
-rw-r--r-- | test/rubygems/test_gem_resolver_installer_set.rb | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/test/rubygems/test_gem_resolver_installer_set.rb b/test/rubygems/test_gem_resolver_installer_set.rb index 258f9bc803..3096a23011 100644 --- a/test/rubygems/test_gem_resolver_installer_set.rb +++ b/test/rubygems/test_gem_resolver_installer_set.rb @@ -2,6 +2,101 @@ require 'rubygems/test_case' class TestGemResolverInstallerSet < Gem::TestCase + def test_add_always_install + spec_fetcher do |fetcher| + fetcher.spec 'a', 1 + fetcher.spec 'a', 2 + fetcher.clear + end + + util_gem 'a', 1 + + set = Gem::Resolver::InstallerSet.new :both + + set.add_always_install dep('a') + + assert_equal %w[a-2], set.always_install.map { |s| s.full_name } + + e = assert_raises Gem::UnsatisfiableDependencyError do + set.add_always_install dep('b') + end + + assert_equal dep('b'), e.dependency.dependency + end + + def test_add_always_install_errors + @fetcher = Gem::FakeFetcher.new + Gem::RemoteFetcher.fetcher = @fetcher + + set = Gem::Resolver::InstallerSet.new :both + + e = assert_raises Gem::UnsatisfiableDependencyError do + set.add_always_install dep 'a' + end + + refute_empty e.errors + end + + def test_add_always_install_platform + spec_fetcher do |fetcher| + fetcher.spec 'a', 1 + fetcher.spec 'a', 2 do |s| + s.platform = Gem::Platform.new 'x86-freebsd-9' + end + fetcher.clear + end + + set = Gem::Resolver::InstallerSet.new :both + + set.add_always_install dep('a') + + assert_equal %w[a-1], set.always_install.map { |s| s.full_name } + end + + def test_add_always_install_prerelease + spec_fetcher do |fetcher| + fetcher.gem 'a', 1 + fetcher.gem 'a', '3.a' + end + + set = Gem::Resolver::InstallerSet.new :both + + set.add_always_install dep('a') + + assert_equal %w[a-1], set.always_install.map { |s| s.full_name } + end + + def test_add_always_install_prerelease_only + spec_fetcher do |fetcher| + fetcher.gem 'a', '3.a' + end + + set = Gem::Resolver::InstallerSet.new :both + + assert_raises Gem::UnsatisfiableDependencyError do + set.add_always_install dep('a') + end + end + + def test_add_local + a_1, a_1_gem = util_gem 'a', 1 + + a_1_source = Gem::Source::SpecificFile.new a_1_gem + + set = Gem::Resolver::InstallerSet.new :both + + set.add_local File.basename(a_1_gem), a_1, a_1_source + + assert set.local? File.basename(a_1_gem) + + FileUtils.rm a_1_gem + util_clear_gems + + req = Gem::Resolver::DependencyRequest.new dep('a'), nil + + assert_equal %w[a-1], set.find_all(req).map { |spec| spec.full_name } + end + def test_consider_local_eh set = Gem::Resolver::InstallerSet.new :remote @@ -30,6 +125,54 @@ class TestGemResolverInstallerSet < Gem::TestCase refute set.consider_remote? end + def test_errors + set = Gem::Resolver::InstallerSet.new :both + + set.instance_variable_get(:@errors) << :a + + req = Gem::Resolver::DependencyRequest.new dep('a'), nil + + set.find_all req + + assert_equal [:a, set.remote_set.errors.first], set.errors + end + + def test_find_all_always_install + spec_fetcher do |fetcher| + fetcher.spec 'a', 2 + fetcher.clear + end + + util_gem 'a', 1 + + set = Gem::Resolver::InstallerSet.new :both + + set.add_always_install dep 'a' + + req = Gem::Resolver::DependencyRequest.new dep('a'), nil + + assert_equal %w[a-2], set.find_all(req).map { |spec| spec.full_name } + end + + def test_find_all_prerelease + spec_fetcher do |fetcher| + fetcher.spec 'a', '1' + fetcher.spec 'a', '1.a' + fetcher.clear + end + + set = Gem::Resolver::InstallerSet.new :both + + req = Gem::Resolver::DependencyRequest.new dep('a'), nil + + assert_equal %w[a-1], set.find_all(req).map { |spec| spec.full_name } + + req = Gem::Resolver::DependencyRequest.new dep('a', '>= 0.a'), nil + + assert_equal %w[a-1 a-1.a], + set.find_all(req).map { |spec| spec.full_name }.sort + end + def test_load_spec specs = spec_fetcher do |fetcher| fetcher.spec 'a', 2 @@ -46,6 +189,18 @@ class TestGemResolverInstallerSet < Gem::TestCase assert_equal specs["a-2-#{Gem::Platform.local}"].full_name, spec.full_name end + def test_prerelease_equals + set = Gem::Resolver::InstallerSet.new :remote + + refute set.prerelease + refute set.remote_set.prerelease + + set.prerelease = true + + assert set.prerelease + assert set.remote_set.prerelease + end + def test_remote_equals_both set = Gem::Resolver::InstallerSet.new :both set.remote = true |