summaryrefslogtreecommitdiff
path: root/jni/ruby/test/rubygems/test_gem_dependency_list.rb
diff options
context:
space:
mode:
Diffstat (limited to 'jni/ruby/test/rubygems/test_gem_dependency_list.rb')
-rw-r--r--jni/ruby/test/rubygems/test_gem_dependency_list.rb259
1 files changed, 259 insertions, 0 deletions
diff --git a/jni/ruby/test/rubygems/test_gem_dependency_list.rb b/jni/ruby/test/rubygems/test_gem_dependency_list.rb
new file mode 100644
index 0000000..d25359e
--- /dev/null
+++ b/jni/ruby/test/rubygems/test_gem_dependency_list.rb
@@ -0,0 +1,259 @@
+require 'rubygems/test_case'
+require 'rubygems/dependency_list'
+
+class TestGemDependencyList < Gem::TestCase
+
+ def setup
+ super
+
+ util_clear_gems
+
+ @deplist = Gem::DependencyList.new
+
+ # TODO: switch to new_spec
+ @a1 = util_spec 'a', '1'
+ @a2 = util_spec 'a', '2'
+ @a3 = util_spec 'a', '3'
+
+ @b1 = util_spec 'b', '1' do |s| s.add_dependency 'a', '>= 1' end
+ @b2 = util_spec 'b', '2' do |s| s.add_dependency 'a', '>= 1' end
+
+ @c1 = util_spec 'c', '1' do |s| s.add_dependency 'b', '>= 1' end
+ @c2 = util_spec 'c', '2'
+
+ @d1 = util_spec 'd', '1' do |s| s.add_dependency 'c', '>= 1' end
+ end
+
+ def test_active_count
+ assert_equal 0, @deplist.send(:active_count, [], {})
+ assert_equal 1, @deplist.send(:active_count, [@a1], {})
+ assert_equal 0, @deplist.send(:active_count, [@a1],
+ { @a1.full_name => true })
+ end
+
+ def test_add
+ assert_equal [], @deplist.dependency_order
+
+ @deplist.add @a1, @b2
+
+ assert_equal [@b2, @a1], @deplist.dependency_order
+ end
+
+ def test_dependency_order
+ @deplist.add @a1, @b1, @c1, @d1
+
+ order = @deplist.dependency_order
+
+ assert_equal %w[d-1 c-1 b-1 a-1], order.map { |s| s.full_name }
+ end
+
+ def test_dependency_order_circle
+ @a1.add_dependency 'c', '>= 1'
+ @deplist.add @a1, @b1, @c1
+
+ order = @deplist.dependency_order
+
+ assert_equal %w[b-1 c-1 a-1], order.map { |s| s.full_name }
+ end
+
+ def test_dependency_order_development
+ e1 = util_spec 'e', '1'
+ f1 = util_spec 'f', '1'
+ g1 = util_spec 'g', '1'
+
+ @a1.add_dependency 'e'
+ @a1.add_dependency 'f'
+ @a1.add_dependency 'g'
+ g1.add_development_dependency 'a'
+
+ deplist = Gem::DependencyList.new true
+ deplist.add @a1, e1, f1, g1
+
+ order = deplist.dependency_order
+
+ assert_equal %w[g-1 a-1 f-1 e-1], order.map { |s| s.full_name },
+ 'development on'
+
+ deplist2 = Gem::DependencyList.new
+ deplist2.add @a1, e1, f1, g1
+
+ order = deplist2.dependency_order
+
+ assert_equal %w[a-1 g-1 f-1 e-1], order.map { |s| s.full_name },
+ 'development off'
+ end
+
+ def test_dependency_order_diamond
+ util_diamond
+ e1 = util_spec 'e', '1'
+ @deplist.add e1
+ @a1.add_dependency 'e', '>= 1'
+
+ order = @deplist.dependency_order
+
+ assert_equal %w[d-1 c-2 b-1 a-2 e-1], order.map { |s| s.full_name },
+ 'deps of trimmed specs not included'
+ end
+
+ def test_dependency_order_no_dependencies
+ @deplist.add @a1, @c2
+
+ order = @deplist.dependency_order
+
+ assert_equal %w[c-2 a-1], order.map { |s| s.full_name }
+ end
+
+ def test_find_name
+ @deplist.add @a1, @b2
+
+ assert_equal "a-1", @deplist.find_name("a-1").full_name
+ assert_equal "b-2", @deplist.find_name("b-2").full_name
+
+ assert_nil @deplist.find_name("c-2")
+ end
+
+ def test_ok_eh
+ util_clear_gems
+
+ assert @deplist.ok?, 'no dependencies'
+
+ @deplist.add @b2
+
+ refute @deplist.ok?, 'unsatisfied dependency'
+
+ @deplist.add @a1
+
+ assert @deplist.ok?, 'satisfied dependency'
+ end
+
+ def test_why_not_ok_eh
+ util_clear_gems
+
+ assert_equal({}, @deplist.why_not_ok?)
+
+ @deplist.add @b2
+
+ exp = {
+ "b" => [
+ Gem::Dependency.new("a", ">= 1")
+ ]
+ }
+
+ assert_equal exp, @deplist.why_not_ok?
+ end
+
+ def test_why_not_ok_eh_old_dependency
+ a = new_spec 'a', '1',
+ 'b' => '~> 1.0'
+
+ b0 = new_spec 'b', '1.0',
+ 'd' => '>= 0'
+
+ b1 = new_spec 'b', '1.1'
+
+ util_clear_gems
+
+ @deplist.clear
+
+ @deplist.add a, b0, b1
+
+ assert_equal({}, @deplist.why_not_ok?)
+ end
+
+ def test_ok_eh_mismatch
+ a1 = util_spec 'a', '1'
+ a2 = util_spec 'a', '2'
+
+ b = util_spec 'b', '1' do |s| s.add_dependency 'a', '= 1' end
+ c = util_spec 'c', '1' do |s| s.add_dependency 'a', '= 2' end
+
+ d = util_spec 'd', '1' do |s|
+ s.add_dependency 'b'
+ s.add_dependency 'c'
+ end
+
+ @deplist.add a1, a2, b, c, d
+
+ assert @deplist.ok?, 'this will break on require'
+ end
+
+ def test_ok_eh_redundant
+ @deplist.add @a1, @a3, @b2
+
+ @deplist.remove_by_name("a-1")
+
+ assert @deplist.ok?
+ end
+
+ def test_ok_to_remove_eh
+ @deplist.add @a1
+
+ assert @deplist.ok_to_remove?("a-1")
+
+ @deplist.add @b2
+
+ refute @deplist.ok_to_remove?("a-1")
+
+ @deplist.add @a2
+
+ assert @deplist.ok_to_remove?("a-1")
+ assert @deplist.ok_to_remove?("a-2")
+ assert @deplist.ok_to_remove?("b-2")
+ end
+
+ def test_ok_to_remove_eh_after_sibling_removed
+ @deplist.add @a1, @a2, @b2
+
+ assert @deplist.ok_to_remove?("a-1")
+ assert @deplist.ok_to_remove?("a-2")
+
+ @deplist.remove_by_name("a-1")
+
+ refute @deplist.ok_to_remove?("a-2")
+ end
+
+ def test_remove_by_name
+ util_clear_gems
+
+ @deplist.add @a1, @b2
+
+ @deplist.remove_by_name "a-1"
+
+ refute @deplist.ok?
+ end
+
+ def test_tsort_each_node
+ util_diamond
+
+ order = %w[a-1 a-2 b-1 c-2 d-1]
+
+ @deplist.tsort_each_node do |node|
+ assert_equal order.shift, node.full_name
+ end
+
+ assert_empty order
+ end
+
+ def test_tsort_each_child
+ util_diamond
+
+ order = %w[a-2]
+
+ @deplist.tsort_each_child(@b1) do |node|
+ assert_equal order.shift, node.full_name
+ end
+
+ assert_empty order
+ end
+
+ # d1 -> b1 -> a1
+ # d1 -> c2 -> a2
+ def util_diamond
+ @c2.add_dependency 'a', '>= 2'
+ @d1.add_dependency 'b'
+
+ @deplist.add @a1, @a2, @b1, @c2, @d1
+ end
+
+end
+