1require 'rubygems/test_case'
2require 'rubygems/available_set'
3require 'rubygems/security'
4
5class TestGemAvailableSet < Gem::TestCase
6  def setup
7    super
8
9    @source = Gem::Source.new(@gem_repo)
10  end
11
12  def test_add_and_empty
13    a1, _ = util_gem 'a', '1'
14
15    set = Gem::AvailableSet.new
16    assert set.empty?
17
18    set.add a1, @source
19
20    refute set.empty?
21
22    assert_equal [a1], set.all_specs
23  end
24
25  def test_match_platform
26    a1, _ = util_gem 'a', '1' do |g|
27      g.platform = "something-weird-yep"
28    end
29
30    a1c, _ = util_gem 'a', '2' do |g|
31      g.platform = Gem::Platform.local
32    end
33
34    a2, _ = util_gem 'a', '2'
35
36    set = Gem::AvailableSet.new
37    set.add a1, @source
38    set.add a1c, @source
39    set.add a2, @source
40
41    set.match_platform!
42
43    assert_equal [a1c, a2], set.all_specs
44  end
45
46  def test_best
47    a1, _ = util_gem 'a', '1'
48    a2, _  = util_gem 'a', '2'
49
50    set = Gem::AvailableSet.new
51    set.add a1, @source
52    set.add a2, @source
53
54    set.pick_best!
55
56    assert_equal [a2], set.all_specs
57  end
58
59  def test_remove_installed_bang
60    a1, _ = util_gem 'a', '1'
61
62    a1.activate
63
64    set = Gem::AvailableSet.new
65    set.add a1, @source
66
67    dep = Gem::Dependency.new "a", ">= 0"
68
69    set.remove_installed! dep
70
71    assert set.empty?
72  end
73
74  def test_sorted_normal_versions
75    a1, _ = util_gem 'a', '1'
76    a2, _  = util_gem 'a', '2'
77
78    set = Gem::AvailableSet.new
79    set.add a1, @source
80    set.add a2, @source
81
82    g = set.sorted
83
84    assert_equal a2, g[0].spec
85    assert_equal a1, g[1].spec
86  end
87
88  def test_sorted_respect_pre
89    a1a, _ = util_gem 'a', '1.a'
90    a1,  _ = util_gem 'a', '1'
91    a2a, _ = util_gem 'a', '2.a'
92    a2,  _ = util_gem 'a', '2'
93    a3a, _ = util_gem 'a', '3.a'
94
95    set = Gem::AvailableSet.new
96    set.add a1, @source
97    set.add a1a, @source
98    set.add a3a, @source
99    set.add a2a, @source
100    set.add a2, @source
101
102    g = set.sorted.map { |t| t.spec }
103
104    assert_equal [a3a, a2, a2a, a1, a1a], g
105  end
106end
107