summaryrefslogtreecommitdiff
path: root/jni/ruby/test/rubygems/test_gem_source_git.rb
diff options
context:
space:
mode:
authorJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-16 18:49:26 +0900
committerJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-30 00:39:06 +0900
commitfcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch)
tree64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/test/rubygems/test_gem_source_git.rb
Fresh start
Diffstat (limited to 'jni/ruby/test/rubygems/test_gem_source_git.rb')
-rw-r--r--jni/ruby/test/rubygems/test_gem_source_git.rb308
1 files changed, 308 insertions, 0 deletions
diff --git a/jni/ruby/test/rubygems/test_gem_source_git.rb b/jni/ruby/test/rubygems/test_gem_source_git.rb
new file mode 100644
index 0000000..7e5bcca
--- /dev/null
+++ b/jni/ruby/test/rubygems/test_gem_source_git.rb
@@ -0,0 +1,308 @@
+require 'rubygems/test_case'
+require 'rubygems/source'
+
+class TestGemSourceGit < Gem::TestCase
+
+ def setup
+ super
+
+ @name, @version, @repository, @head = git_gem
+
+ @hash = Digest::SHA1.hexdigest @repository
+
+ @source = Gem::Source::Git.new @name, @repository, 'master', false
+ end
+
+ def test_base_dir
+ assert_equal File.join(Gem.dir, 'bundler'), @source.base_dir
+
+ @source.root_dir = "#{@gemhome}2"
+
+ assert_equal File.join("#{@gemhome}2", 'bundler'), @source.base_dir
+ end
+
+ def test_checkout
+ @source.checkout
+
+ assert_path_exists File.join @source.install_dir, 'a.gemspec'
+ end
+
+ def test_checkout_master
+ Dir.chdir @repository do
+ system @git, 'checkout', '-q', '-b', 'other'
+ system @git, 'mv', 'a.gemspec', 'b.gemspec'
+ system @git, 'commit', '-q', '-a', '-m', 'rename gemspec'
+ system @git, 'checkout', '-q', 'master'
+ end
+
+ @source = Gem::Source::Git.new @name, @repository, 'other', false
+
+ @source.checkout
+
+ assert_path_exists File.join @source.install_dir, 'b.gemspec'
+ end
+
+ def test_checkout_local
+ @source.remote = false
+
+ @source.checkout
+
+ install_dir = File.join Gem.dir, 'bundler', 'gems', "a-#{@head[0..11]}"
+
+ refute_path_exists File.join install_dir, 'a.gemspec'
+ end
+
+ def test_checkout_local_cached
+ @source.cache
+
+ @source.remote = false
+
+ @source.checkout
+
+ assert_path_exists File.join @source.install_dir, 'a.gemspec'
+ end
+
+ def test_checkout_submodules
+ source = Gem::Source::Git.new @name, @repository, 'master', true
+
+ git_gem 'b'
+
+ Dir.chdir 'git/a' do
+ Gem::Util.silent_system @git, 'submodule', '--quiet',
+ 'add', File.expand_path('../b'), 'b'
+ system @git, 'commit', '--quiet', '-m', 'add submodule b'
+ end
+
+ source.checkout
+
+ assert_path_exists File.join source.install_dir, 'a.gemspec'
+ assert_path_exists File.join source.install_dir, 'b/b.gemspec'
+ end
+
+ def test_cache
+ assert @source.cache
+
+ assert_path_exists @source.repo_cache_dir
+
+ Dir.chdir @source.repo_cache_dir do
+ assert_equal @head, Gem::Util.popen(@git, 'rev-parse', 'master').strip
+ end
+ end
+
+ def test_cache_local
+ @source.remote = false
+
+ @source.cache
+
+ refute_path_exists @source.repo_cache_dir
+ end
+
+ def test_dir_shortref
+ @source.cache
+
+ assert_equal @head[0..11], @source.dir_shortref
+ end
+
+ def test_download
+ refute @source.download nil, nil
+ end
+
+ def test_equals2
+ assert_equal @source, @source
+
+ assert_equal @source, @source.dup
+
+ source =
+ Gem::Source::Git.new @source.name, @source.repository, 'other', false
+
+ refute_equal @source, source
+
+ source =
+ Gem::Source::Git.new @source.name, 'repo/other', @source.reference, false
+
+ refute_equal @source, source
+
+ source =
+ Gem::Source::Git.new 'b', @source.repository, @source.reference, false
+
+ refute_equal @source, source
+
+ source =
+ Gem::Source::Git.new @source.name, @source.repository, @source.reference,
+ true
+
+ refute_equal @source, source
+ end
+
+ def test_install_dir
+ @source.cache
+
+ expected = File.join Gem.dir, 'bundler', 'gems', "a-#{@head[0..11]}"
+
+ assert_equal expected, @source.install_dir
+ end
+
+ def test_install_dir_local
+ @source.remote = false
+
+ assert_nil @source.install_dir
+ end
+
+ def test_repo_cache_dir
+ expected =
+ File.join Gem.dir, 'cache', 'bundler', 'git', "a-#{@hash}"
+
+ assert_equal expected, @source.repo_cache_dir
+
+ @source.root_dir = "#{@gemhome}2"
+
+ expected =
+ File.join "#{@gemhome}2", 'cache', 'bundler', 'git', "a-#{@hash}"
+
+ assert_equal expected, @source.repo_cache_dir
+ end
+
+ def test_rev_parse
+ @source.cache
+
+ assert_equal @head, @source.rev_parse
+
+ Dir.chdir @repository do
+ system @git, 'checkout', '--quiet', '-b', 'other'
+ end
+
+ master_head = @head
+
+ git_gem 'a', 2
+
+ source = Gem::Source::Git.new @name, @repository, 'other', false
+
+ source.cache
+
+ refute_equal master_head, source.rev_parse
+
+ source = Gem::Source::Git.new @name, @repository, 'nonexistent', false
+
+ source.cache
+
+ e = assert_raises Gem::Exception do
+ capture_subprocess_io {source.rev_parse}
+ end
+
+ assert_equal "unable to find reference nonexistent in #{@repository}",
+ e.message
+ end
+
+ def test_root_dir
+ assert_equal Gem.dir, @source.root_dir
+
+ @source.root_dir = "#{@gemhome}2"
+
+ assert_equal "#{@gemhome}2", @source.root_dir
+ end
+
+ def test_spaceship
+ git = Gem::Source::Git.new 'a', 'git/a', 'master', false
+ remote = Gem::Source.new @gem_repo
+ installed = Gem::Source::Installed.new
+ vendor = Gem::Source::Vendor.new 'vendor/foo'
+
+ assert_equal( 0, git. <=>(git), 'git <=> git')
+
+ assert_equal( 1, git. <=>(remote), 'git <=> remote')
+ assert_equal(-1, remote. <=>(git), 'remote <=> git')
+
+ assert_equal( 1, git. <=>(installed), 'git <=> installed')
+ assert_equal(-1, installed.<=>(git), 'installed <=> git')
+
+ assert_equal(-1, git. <=>(vendor), 'git <=> vendor')
+ assert_equal( 1, vendor. <=>(git), 'vendor <=> git')
+ end
+
+ def test_specs
+ source = Gem::Source::Git.new @name, @repository, 'master', true
+
+ Dir.chdir 'git/a' do
+ FileUtils.mkdir 'b'
+
+ Dir.chdir 'b' do
+ b = Gem::Specification.new 'b', 1
+
+ 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.touch 'c.gemspec'
+
+ system @git, 'add', 'c.gemspec'
+ system @git, 'commit', '--quiet', '-m', 'add c.gemspec'
+ end
+
+ specs = nil
+
+ capture_io do
+ specs = source.specs
+ end
+
+ assert_equal %w[a-1 b-1], specs.map { |spec| spec.full_name }
+
+ a_spec = specs.shift
+
+ base_dir = File.dirname File.dirname source.install_dir
+
+ assert_equal source.install_dir, a_spec.full_gem_path
+ assert_equal File.join(source.install_dir, 'a.gemspec'), a_spec.loaded_from
+ assert_equal base_dir, a_spec.base_dir
+
+ extension_dir =
+ File.join Gem.dir, 'bundler', 'extensions',
+ Gem::Platform.local.to_s, Gem.extension_api_version,
+ "a-#{source.dir_shortref}"
+
+ assert_equal extension_dir, a_spec.extension_dir
+
+ b_spec = specs.shift
+
+ assert_equal File.join(source.install_dir, 'b'), b_spec.full_gem_path
+ assert_equal File.join(source.install_dir, 'b', 'b.gemspec'),
+ b_spec.loaded_from
+ assert_equal base_dir, b_spec.base_dir
+
+ assert_equal extension_dir, b_spec.extension_dir
+ end
+
+ def test_specs_local
+ source = Gem::Source::Git.new @name, @repository, 'master', true
+ source.remote = false
+
+ capture_io do
+ assert_empty source.specs
+ end
+ end
+
+ def test_uri
+ assert_equal URI(@repository), @source.uri
+ end
+
+ def test_uri_hash
+ assert_equal @hash, @source.uri_hash
+
+ source =
+ Gem::Source::Git.new 'a', 'http://git@example/repo.git', 'master', false
+
+ assert_equal '291c4caac7feba8bb64c297987028acb3dde6cfe',
+ source.uri_hash
+
+ source =
+ Gem::Source::Git.new 'a', 'HTTP://git@EXAMPLE/repo.git', 'master', false
+
+ assert_equal '291c4caac7feba8bb64c297987028acb3dde6cfe',
+ source.uri_hash
+ end
+
+end
+