Removed obsolete bin scripts.
[rbx.git] / test / rubygems / test_gem_dependency_list.rb
blob5fdc227f05fd89756082bb41f6b2090600884e98
1 #!/usr/bin/env ruby
2 #--
3 # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
4 # All rights reserved.
5 # See LICENSE.txt for permissions.
6 #++
9 require 'test/unit'
10 require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
11 require 'rubygems/dependency_list'
13 class TestGemDependencyList < RubyGemTestCase
15   def setup
16     super
18     @deplist = Gem::DependencyList.new
20     @a1 = quick_gem 'a', '1'
21     @a2 = quick_gem 'a', '2'
22     @a3 = quick_gem 'a', '3'
24     @b1 = quick_gem 'b', '1' do |s| s.add_dependency 'a', '>= 1' end
25     @b2 = quick_gem 'b', '2' do |s| s.add_dependency 'a', '>= 1' end
27     @c1 = quick_gem 'c', '1' do |s| s.add_dependency 'b', '>= 1' end
28     @c2 = quick_gem 'c', '2'
30     @d1 = quick_gem 'd', '1' do |s| s.add_dependency 'c', '>= 1' end
31   end
33   def test_self_from_source_index
34     hash = {
35       'a-1' => @a1,
36       'b-2' => @b2,
37     }
39     si = Gem::SourceIndex.new hash
40     deps = Gem::DependencyList.from_source_index si
42     assert_equal %w[b-2 a-1], deps.dependency_order.map { |s| s.full_name }
43   end
45   def test_active_count
46     assert_equal 0, @deplist.send(:active_count, [], {})
47     assert_equal 1, @deplist.send(:active_count, [@a1], {})
48     assert_equal 0, @deplist.send(:active_count, [@a1],
49                                   { @a1.full_name => true })
50   end
52   def test_add
53     assert_equal [], @deplist.dependency_order
55     @deplist.add @a1, @b2
57     assert_equal [@b2, @a1], @deplist.dependency_order
58   end
60   def test_dependency_order
61     @deplist.add @a1, @b1, @c1, @d1
63     order = @deplist.dependency_order
65     assert_equal %w[d-1 c-1 b-1 a-1], order.map { |s| s.full_name }
66   end
68   def test_dependency_order_circle
69     @a1.add_dependency 'c', '>= 1'
70     @deplist.add @a1, @b1, @c1
72     order = @deplist.dependency_order
74     assert_equal %w[b-1 c-1 a-1], order.map { |s| s.full_name }
75   end
77   def test_dependency_order_diamond
78     util_diamond
79     e1 = quick_gem 'e', '1'
80     @deplist.add e1
81     @a1.add_dependency 'e', '>= 1'
83     order = @deplist.dependency_order
85     assert_equal %w[d-1 c-2 b-1 a-2 e-1], order.map { |s| s.full_name },
86                  'deps of trimmed specs not included'
87   end
89   def test_dependency_order_no_dependendencies
90     @deplist.add @a1, @c2
92     order = @deplist.dependency_order
94     assert_equal %w[c-2 a-1], order.map { |s| s.full_name }
95   end
97   def test_find_name
98     @deplist.add @a1, @b2
100     assert_equal "a-1", @deplist.find_name("a-1").full_name
101     assert_equal "b-2", @deplist.find_name("b-2").full_name
103     assert_nil @deplist.find_name("c-2")
104   end
106   def test_ok_eh
107     assert @deplist.ok?, 'no dependencies'
109     @deplist.add @b2
111     assert ! @deplist.ok?, 'unsatisfied dependency'
113     @deplist.add @a1
115     assert @deplist.ok?, 'satisfied dependency'
116   end
118   def test_ok_eh_mismatch
119     a1 = quick_gem 'a', '1'
120     a2 = quick_gem 'a', '2'
122     b = quick_gem 'b', '1' do |s| s.add_dependency 'a', '= 1' end
123     c = quick_gem 'c', '1' do |s| s.add_dependency 'a', '= 2' end
125     d = quick_gem 'd', '1' do |s|
126       s.add_dependency 'b'
127       s.add_dependency 'c'
128     end
130     @deplist.add a1, a2, b, c, d
132     assert @deplist.ok?, 'this will break on require'
133   end
135   def test_ok_eh_redundant
136     @deplist.add @a1, @a3, @b2
138     @deplist.remove_by_name("a-1")
140     assert @deplist.ok?
141   end
143   def test_ok_to_remove_eh
144     @deplist.add @a1
146     assert @deplist.ok_to_remove?("a-1")
148     @deplist.add @b2
150     assert ! @deplist.ok_to_remove?("a-1")
152     @deplist.add @a2
154     assert @deplist.ok_to_remove?("a-1")
155     assert @deplist.ok_to_remove?("a-2")
156     assert @deplist.ok_to_remove?("b-2")
157   end
159   def test_ok_to_remove_eh_after_sibling_removed
160     @deplist.add @a1, @a2, @b2
162     assert @deplist.ok_to_remove?("a-1")
163     assert @deplist.ok_to_remove?("a-2")
165     @deplist.remove_by_name("a-1")
167     assert ! @deplist.ok_to_remove?("a-2")
168   end
170   def test_remove_by_name
171     @deplist.add @a1, @b2
173     @deplist.remove_by_name "a-1"
175     assert ! @deplist.ok?
176   end
178   def test_tsort_each_node
179     util_diamond
181     order = %w[a-1 a-2 b-1 c-2 d-1]
183     @deplist.tsort_each_node do |node|
184       assert_equal order.shift, node.full_name
185     end
187     assert order.empty?
188   end
190   def test_tsort_each_child
191     util_diamond
193     order = %w[a-2]
195     @deplist.tsort_each_child(@b1) do |node|
196       assert_equal order.shift, node.full_name
197     end
199     assert order.empty?
200   end
202   # d1 -> b1 -> a1
203   # d1 -> c2 -> a2
204   def util_diamond
205     @c2.add_dependency 'a', '>= 2'
206     @d1.add_dependency 'b'
208     @deplist.add @a1, @a2, @b1, @c2, @d1
209   end