aboutsummaryrefslogtreecommitdiffstats
path: root/test/rubygems/test_gem_request_set_lockfile.rb
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-12-08 01:22:39 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-12-08 01:22:39 +0000
commit7ed9b794b4e3f3f9874f2ce19401461596d8a2c0 (patch)
tree5caaf13685de34b09d2949709a77b4c650b62741 /test/rubygems/test_gem_request_set_lockfile.rb
parent866b438c21ff05dfeabba8bc9aa9850e415be607 (diff)
downloadruby-7ed9b794b4e3f3f9874f2ce19401461596d8a2c0.tar.gz
* lib/rubygems: Update to RubyGems master 14749ce. This fixes bugs
handling of gem dependencies lockfiles (Gemfile.lock). * test/rubygems: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44054 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/rubygems/test_gem_request_set_lockfile.rb')
-rw-r--r--test/rubygems/test_gem_request_set_lockfile.rb429
1 files changed, 408 insertions, 21 deletions
diff --git a/test/rubygems/test_gem_request_set_lockfile.rb b/test/rubygems/test_gem_request_set_lockfile.rb
index 18c44144fa..6c933d4ba1 100644
--- a/test/rubygems/test_gem_request_set_lockfile.rb
+++ b/test/rubygems/test_gem_request_set_lockfile.rb
@@ -13,8 +13,10 @@ class TestGemRequestSetLockfile < Gem::TestCase
@set = Gem::RequestSet.new
+ @git_set = Gem::Resolver::GitSet.new
@vendor_set = Gem::Resolver::VendorSet.new
+ @set.instance_variable_set :@git_set, @git_set
@set.instance_variable_set :@vendor_set, @vendor_set
@gem_deps_file = 'gem.deps.rb'
@@ -49,15 +51,22 @@ class TestGemRequestSetLockfile < Gem::TestCase
@lockfile.get :text
end
- expected = 'unexpected token [:section, "x"], expected :text (at 5:1)'
+ expected =
+ 'unexpected token [:section, "x"], expected :text (at line 1 column 5)'
assert_equal expected, e.message
- assert_equal 5, e.line
- assert_equal 1, e.column
+ assert_equal 1, e.line
+ assert_equal 5, e.column
assert_equal File.expand_path("#{@gem_deps_file}.lock"), e.path
end
+ def test_get_type_multiple
+ @lockfile.instance_variable_set :@tokens, [[:section, 'x', 5, 1]]
+
+ assert @lockfile.get [:text, :section]
+ end
+
def test_get_type_value_mismatch
@lockfile.instance_variable_set :@tokens, [[:section, 'x', 5, 1]]
@@ -66,21 +75,117 @@ class TestGemRequestSetLockfile < Gem::TestCase
end
expected =
- 'unexpected token [:section, "x"], expected [:section, "y"] (at 5:1)'
+ 'unexpected token [:section, "x"], expected [:section, "y"] (at line 1 column 5)'
assert_equal expected, e.message
- assert_equal 5, e.line
- assert_equal 1, e.column
+ assert_equal 1, e.line
+ assert_equal 5, e.column
assert_equal File.expand_path("#{@gem_deps_file}.lock"), e.path
end
def test_parse
+ write_lockfile <<-LOCKFILE.strip
+GEM
+ remote: #{@gem_repo}
+ specs:
+ a (2)
+
+PLATFORMS
+ #{Gem::Platform::RUBY}
+
+DEPENDENCIES
+ a
+ LOCKFILE
+
+ @lockfile.parse
+
+ assert_equal [dep('a')], @set.dependencies
+
+ assert_equal [Gem::Platform::RUBY], @lockfile.platforms
+
+ lockfile_set = @set.sets.find do |set|
+ Gem::Resolver::LockSet === set
+ end
+
+ assert lockfile_set, 'could not find a LockSet'
+
+ assert_equal %w[a-2], lockfile_set.specs.map { |tuple| tuple.full_name }
+ end
+
+ def test_parse_dependencies
+ write_lockfile <<-LOCKFILE
+GEM
+ remote: #{@gem_repo}
+ specs:
+ a (2)
+
+PLATFORMS
+ #{Gem::Platform::RUBY}
+
+DEPENDENCIES
+ a (>= 1, <= 2)
+ LOCKFILE
+
+ @lockfile.parse
+
+ assert_equal [dep('a', '>= 1', '<= 2')], @set.dependencies
+
+ assert_equal [Gem::Platform::RUBY], @lockfile.platforms
+
+ lockfile_set = @set.sets.find do |set|
+ Gem::Resolver::LockSet === set
+ end
+
+ assert lockfile_set, 'could not find a LockSet'
+
+ assert_equal %w[a-2], lockfile_set.specs.map { |tuple| tuple.full_name }
+ end
+
+ def test_parse_GIT
+ write_lockfile <<-LOCKFILE
+GIT
+ remote: git://example/a.git
+ revision: master
+ specs:
+ a (2)
+ b (>= 3)
+
+DEPENDENCIES
+ a!
+ LOCKFILE
+
+ @lockfile.parse
+
+ assert_equal [dep('a', '= 2')], @set.dependencies
+
+ lockfile_set = @set.sets.find do |set|
+ Gem::Resolver::LockSet === set
+ end
+
+ refute lockfile_set, 'fount a LockSet'
+
+ git_set = @set.sets.find do |set|
+ Gem::Resolver::GitSet === set
+ end
+
+ assert git_set, 'could not find a GitSet'
+
+ assert_equal %w[a-2], git_set.specs.values.map { |s| s.full_name }
+
+ assert_equal [dep('b', '>= 3')], git_set.specs.values.first.dependencies
+ end
+
+ def test_parse_gem_specs_dependency
write_lockfile <<-LOCKFILE
GEM
remote: #{@gem_repo}
specs:
a (2)
+ b (= 3)
+ c (~> 4)
+ d
+ e (~> 5.0, >= 5.0.1)
PLATFORMS
#{Gem::Platform::RUBY}
@@ -102,6 +207,17 @@ DEPENDENCIES
assert lockfile_set, 'could not find a LockSet'
assert_equal %w[a-2], lockfile_set.specs.map { |tuple| tuple.full_name }
+
+ spec = lockfile_set.specs.first
+
+ expected = [
+ dep('b', '= 3'),
+ dep('c', '~> 4'),
+ dep('d'),
+ dep('e', '~> 5.0', '>= 5.0.1'),
+ ]
+
+ assert_equal expected, spec.dependencies
end
def test_parse_missing
@@ -120,6 +236,8 @@ DEPENDENCIES
assert_equal :token, @lockfile.peek
assert_equal :token, @lockfile.get
+
+ assert_equal :EOF, @lockfile.peek
end
def test_skip
@@ -147,6 +265,13 @@ GEM
remote: #{@gem_repo}
specs:
a (2)
+ b (= 2)
+ c (!= 3)
+ d (> 4)
+ e (< 5)
+ f (>= 6)
+ g (<= 7)
+ h (~> 8)
PLATFORMS
#{Gem::Platform::RUBY}
@@ -156,6 +281,106 @@ DEPENDENCIES
LOCKFILE
expected = [
+ [:section, 'GEM', 0, 0],
+ [:newline, nil, 3, 0],
+
+ [:entry, 'remote', 2, 1],
+ [:text, @gem_repo, 10, 1],
+ [:newline, nil, 34, 1],
+
+ [:entry, 'specs', 2, 2],
+ [:newline, nil, 8, 2],
+
+ [:text, 'a', 4, 3],
+ [:l_paren, nil, 6, 3],
+ [:text, '2', 7, 3],
+ [:r_paren, nil, 8, 3],
+ [:newline, nil, 9, 3],
+
+ [:text, 'b', 6, 4],
+ [:l_paren, nil, 8, 4],
+ [:requirement, '=', 9, 4],
+ [:text, '2', 11, 4],
+ [:r_paren, nil, 12, 4],
+ [:newline, nil, 13, 4],
+
+ [:text, 'c', 6, 5],
+ [:l_paren, nil, 8, 5],
+ [:requirement, '!=', 9, 5],
+ [:text, '3', 12, 5],
+ [:r_paren, nil, 13, 5],
+ [:newline, nil, 14, 5],
+
+ [:text, 'd', 6, 6],
+ [:l_paren, nil, 8, 6],
+ [:requirement, '>', 9, 6],
+ [:text, '4', 11, 6],
+ [:r_paren, nil, 12, 6],
+ [:newline, nil, 13, 6],
+
+ [:text, 'e', 6, 7],
+ [:l_paren, nil, 8, 7],
+ [:requirement, '<', 9, 7],
+ [:text, '5', 11, 7],
+ [:r_paren, nil, 12, 7],
+ [:newline, nil, 13, 7],
+
+ [:text, 'f', 6, 8],
+ [:l_paren, nil, 8, 8],
+ [:requirement, '>=', 9, 8],
+ [:text, '6', 12, 8],
+ [:r_paren, nil, 13, 8],
+ [:newline, nil, 14, 8],
+
+ [:text, 'g', 6, 9],
+ [:l_paren, nil, 8, 9],
+ [:requirement, '<=', 9, 9],
+ [:text, '7', 12, 9],
+ [:r_paren, nil, 13, 9],
+ [:newline, nil, 14, 9],
+
+ [:text, 'h', 6, 10],
+ [:l_paren, nil, 8, 10],
+ [:requirement, '~>', 9, 10],
+ [:text, '8', 12, 10],
+ [:r_paren, nil, 13, 10],
+ [:newline, nil, 14, 10],
+
+ [:newline, nil, 0, 11],
+
+ [:section, 'PLATFORMS', 0, 12],
+ [:newline, nil, 9, 12],
+
+ [:text, Gem::Platform::RUBY, 2, 13],
+ [:newline, nil, 6, 13],
+
+ [:newline, nil, 0, 14],
+
+ [:section, 'DEPENDENCIES', 0, 15],
+ [:newline, nil, 12, 15],
+
+ [:text, 'a', 2, 16],
+ [:newline, nil, 3, 16],
+ ]
+
+ assert_equal expected, @lockfile.tokenize
+ end
+
+ def test_tokenize_capitals
+ write_lockfile <<-LOCKFILE
+GEM
+ remote: #{@gem_repo}
+ specs:
+ Ab (2)
+
+PLATFORMS
+ #{Gem::Platform::RUBY}
+
+DEPENDENCIES
+ Ab
+ LOCKFILE
+
+ expected = [
[:section, 'GEM', 0, 0],
[:newline, nil, 3, 0],
[:entry, 'remote', 2, 1],
@@ -163,11 +388,11 @@ DEPENDENCIES
[:newline, nil, 34, 1],
[:entry, 'specs', 2, 2],
[:newline, nil, 8, 2],
- [:text, 'a', 4, 3],
- [:l_paren, nil, 6, 3],
- [:text, '2', 7, 3],
- [:r_paren, nil, 8, 3],
- [:newline, nil, 9, 3],
+ [:text, 'Ab', 4, 3],
+ [:l_paren, nil, 7, 3],
+ [:text, '2', 8, 3],
+ [:r_paren, nil, 9, 3],
+ [:newline, nil, 10, 3],
[:newline, nil, 0, 4],
[:section, 'PLATFORMS', 0, 5],
[:newline, nil, 9, 5],
@@ -176,8 +401,8 @@ DEPENDENCIES
[:newline, nil, 0, 7],
[:section, 'DEPENDENCIES', 0, 8],
[:newline, nil, 12, 8],
- [:text, 'a', 2, 9],
- [:newline, nil, 3, 9],
+ [:text, 'Ab', 2, 9],
+ [:newline, nil, 4, 9],
]
assert_equal expected, @lockfile.tokenize
@@ -190,7 +415,7 @@ DEPENDENCIES
@lockfile.tokenize
end
- assert_equal "your #{@lock_file} contains merge conflict markers (at 0:0)",
+ assert_equal "your #{@lock_file} contains merge conflict markers (at line 0 column 0)",
e.message
write_lockfile '|||||||'
@@ -199,7 +424,7 @@ DEPENDENCIES
@lockfile.tokenize
end
- assert_equal "your #{@lock_file} contains merge conflict markers (at 0:0)",
+ assert_equal "your #{@lock_file} contains merge conflict markers (at line 0 column 0)",
e.message
write_lockfile '======='
@@ -208,7 +433,7 @@ DEPENDENCIES
@lockfile.tokenize
end
- assert_equal "your #{@lock_file} contains merge conflict markers (at 0:0)",
+ assert_equal "your #{@lock_file} contains merge conflict markers (at line 0 column 0)",
e.message
write_lockfile '>>>>>>>'
@@ -217,16 +442,74 @@ DEPENDENCIES
@lockfile.tokenize
end
- assert_equal "your #{@lock_file} contains merge conflict markers (at 0:0)",
+ assert_equal "your #{@lock_file} contains merge conflict markers (at line 0 column 0)",
e.message
end
+ def test_tokenize_git
+ write_lockfile <<-LOCKFILE
+DEPENDENCIES
+ a!
+ LOCKFILE
+
+ expected = [
+ [:section, 'DEPENDENCIES', 0, 0],
+ [:newline, nil, 12, 0],
+
+ [:text, 'a', 2, 1],
+ [:bang, nil, 3, 1],
+ [:newline, nil, 4, 1],
+ ]
+
+ assert_equal expected, @lockfile.tokenize
+ end
+
def test_tokenize_missing
tokens = @lockfile.tokenize
assert_empty tokens
end
+ def test_tokenize_multiple
+ write_lockfile <<-LOCKFILE
+GEM
+ remote: #{@gem_repo}
+ specs:
+ a (2)
+ b (~> 3.0, >= 3.0.1)
+ LOCKFILE
+
+ expected = [
+ [:section, 'GEM', 0, 0],
+ [:newline, nil, 3, 0],
+
+ [:entry, 'remote', 2, 1],
+ [:text, @gem_repo, 10, 1],
+ [:newline, nil, 34, 1],
+
+ [:entry, 'specs', 2, 2],
+ [:newline, nil, 8, 2],
+
+ [:text, 'a', 4, 3],
+ [:l_paren, nil, 6, 3],
+ [:text, '2', 7, 3],
+ [:r_paren, nil, 8, 3],
+ [:newline, nil, 9, 3],
+
+ [:text, 'b', 6, 4],
+ [:l_paren, nil, 8, 4],
+ [:requirement, '~>', 9, 4],
+ [:text, '3.0', 12, 4],
+ [:comma, nil, 15, 4],
+ [:requirement, '>=', 17, 4],
+ [:text, '3.0.1', 20, 4],
+ [:r_paren, nil, 25, 4],
+ [:newline, nil, 26, 4],
+ ]
+
+ assert_equal expected, @lockfile.tokenize
+ end
+
def test_to_s_gem
spec_fetcher do |fetcher|
fetcher.spec 'a', 2
@@ -274,6 +557,8 @@ PLATFORMS
DEPENDENCIES
a
+ b
+ c
LOCKFILE
assert_equal expected, @lockfile.to_s
@@ -328,6 +613,7 @@ PLATFORMS
DEPENDENCIES
a (>= 1)
+ b
LOCKFILE
assert_equal expected, @lockfile.to_s
@@ -346,8 +632,6 @@ PATH
specs:
#{name} (#{version})
-GEM
-
PLATFORMS
#{Gem::Platform::RUBY}
@@ -371,8 +655,6 @@ PATH
specs:
#{name} (#{version})
-GEM
-
PLATFORMS
#{Gem::Platform::RUBY}
@@ -408,6 +690,111 @@ DEPENDENCIES
assert_equal expected, @lockfile.to_s
end
+ def test_to_s_gem_source
+ spec_fetcher do |fetcher|
+ fetcher.spec 'a', 2
+ fetcher.clear
+ end
+
+ spec_fetcher 'http://other.example/' do |fetcher|
+ fetcher.spec 'b', 2
+ fetcher.clear
+ end
+
+ Gem.sources << 'http://other.example/'
+
+ @set.gem 'a'
+ @set.gem 'b'
+
+ expected = <<-LOCKFILE
+GEM
+ remote: #{@gem_repo}
+ specs:
+ a (2)
+
+GEM
+ remote: http://other.example/
+ specs:
+ b (2)
+
+PLATFORMS
+ #{Gem::Platform::RUBY}
+
+DEPENDENCIES
+ a
+ b
+ LOCKFILE
+
+ assert_equal expected, @lockfile.to_s
+ end
+
+ def test_to_s_git
+ _, _, repository, = git_gem
+
+ head = nil
+
+ Dir.chdir repository do
+ FileUtils.mkdir 'b'
+
+ Dir.chdir 'b' do
+ b = Gem::Specification.new 'b', 1 do |s|
+ s.add_dependency 'a', '~> 1.0'
+ s.add_dependency 'c', '~> 1.0'
+ end
+
+ open 'b.gemspec', 'w' do |io|
+ io.write b.to_ruby
+ end
+
+ system @git, 'add', 'b.gemspec'
+ system @git, 'commit', '--quiet', '-m', 'add b/b.gemspec'
+ end
+
+ FileUtils.mkdir 'c'
+
+ Dir.chdir 'c' do
+ c = Gem::Specification.new 'c', 1
+
+ open 'c.gemspec', 'w' do |io|
+ io.write c.to_ruby
+ end
+
+ system @git, 'add', 'c.gemspec'
+ system @git, 'commit', '--quiet', '-m', 'add c/c.gemspec'
+ end
+
+ head = `#{@git} rev-parse HEAD`.strip
+ end
+
+ @git_set.add_git_gem 'a', repository, 'HEAD', true
+ @git_set.add_git_gem 'b', repository, 'HEAD', true
+ @git_set.add_git_gem 'c', repository, 'HEAD', true
+
+ @set.gem 'b'
+
+ expected = <<-LOCKFILE
+GIT
+ remote: #{repository}
+ revision: #{head}
+ specs:
+ a (1)
+ b (1)
+ a (~> 1.0)
+ c (~> 1.0)
+ c (1)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ a!
+ b!
+ c!
+ LOCKFILE
+
+ assert_equal expected, @lockfile.to_s
+ end
+
def test_unget
@lockfile.instance_variable_set :@current_token, :token