rubygems-update 2.7.6 → 2.7.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -23
  3. data/History.txt +116 -0
  4. data/Manifest.txt +3 -3
  5. data/Rakefile +12 -2
  6. data/bundler/CHANGELOG.md +130 -0
  7. data/bundler/README.md +5 -1
  8. data/bundler/bundler.gemspec +2 -1
  9. data/bundler/lib/bundler.rb +12 -8
  10. data/bundler/lib/bundler/build_metadata.rb +19 -2
  11. data/bundler/lib/bundler/cli.rb +3 -1
  12. data/bundler/lib/bundler/cli/check.rb +1 -1
  13. data/bundler/lib/bundler/cli/exec.rb +4 -4
  14. data/bundler/lib/bundler/cli/gem.rb +5 -2
  15. data/bundler/lib/bundler/cli/init.rb +5 -0
  16. data/bundler/lib/bundler/cli/install.rb +2 -2
  17. data/bundler/lib/bundler/cli/outdated.rb +1 -1
  18. data/bundler/lib/bundler/cli/update.rb +3 -3
  19. data/bundler/lib/bundler/compact_index_client/updater.rb +10 -1
  20. data/bundler/lib/bundler/current_ruby.rb +8 -1
  21. data/bundler/lib/bundler/definition.rb +33 -23
  22. data/bundler/lib/bundler/dep_proxy.rb +2 -2
  23. data/bundler/lib/bundler/dependency.rb +1 -0
  24. data/bundler/lib/bundler/deprecate.rb +2 -1
  25. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  26. data/bundler/lib/bundler/env.rb +10 -8
  27. data/bundler/lib/bundler/fetcher.rb +3 -3
  28. data/bundler/lib/bundler/fetcher/downloader.rb +10 -5
  29. data/bundler/lib/bundler/fetcher/index.rb +2 -2
  30. data/bundler/lib/bundler/friendly_errors.rb +2 -0
  31. data/bundler/lib/bundler/gem_helper.rb +1 -1
  32. data/bundler/lib/bundler/gem_version_promoter.rb +12 -0
  33. data/bundler/lib/bundler/injector.rb +5 -5
  34. data/bundler/lib/bundler/installer.rb +12 -4
  35. data/bundler/lib/bundler/installer/gem_installer.rb +9 -2
  36. data/bundler/lib/bundler/installer/parallel_installer.rb +1 -1
  37. data/bundler/lib/bundler/lazy_specification.rb +1 -1
  38. data/bundler/lib/bundler/mirror.rb +2 -2
  39. data/bundler/lib/bundler/plugin.rb +2 -2
  40. data/bundler/lib/bundler/plugin/index.rb +7 -2
  41. data/bundler/lib/bundler/process_lock.rb +1 -1
  42. data/bundler/lib/bundler/resolver.rb +10 -9
  43. data/bundler/lib/bundler/resolver/spec_group.rb +0 -5
  44. data/bundler/lib/bundler/ruby_version.rb +1 -1
  45. data/bundler/lib/bundler/rubygems_integration.rb +9 -3
  46. data/bundler/lib/bundler/runtime.rb +2 -2
  47. data/bundler/lib/bundler/shared_helpers.rb +15 -3
  48. data/bundler/lib/bundler/source/git.rb +2 -1
  49. data/bundler/lib/bundler/source/git/git_proxy.rb +6 -1
  50. data/bundler/lib/bundler/source/metadata.rb +1 -1
  51. data/bundler/lib/bundler/source/rubygems.rb +11 -2
  52. data/bundler/lib/bundler/source/rubygems/remote.rb +4 -1
  53. data/bundler/lib/bundler/spec_set.rb +4 -1
  54. data/bundler/lib/bundler/templates/Executable +1 -1
  55. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -2
  56. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +2 -0
  57. data/bundler/lib/bundler/ui/shell.rb +3 -1
  58. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -1
  59. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +7 -2
  60. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  61. data/bundler/lib/bundler/version.rb +1 -1
  62. data/bundler/man/bundle-binstubs.ronn +3 -3
  63. data/bundler/man/bundle-check.ronn +3 -3
  64. data/bundler/man/bundle-config.ronn +13 -9
  65. data/bundler/man/bundle-doctor.ronn +33 -0
  66. data/bundler/man/bundle-exec.ronn +3 -3
  67. data/bundler/man/bundle-gem.ronn +1 -1
  68. data/bundler/man/bundle-init.ronn +15 -4
  69. data/bundler/man/bundle-inject.ronn +3 -3
  70. data/bundler/man/bundle-install.ronn +12 -3
  71. data/bundler/man/bundle-lock.ronn +1 -1
  72. data/bundler/man/bundle-outdated.ronn +1 -1
  73. data/bundler/man/bundle-package.ronn +3 -3
  74. data/bundler/man/bundle-show.ronn +3 -2
  75. data/bundler/man/bundle-update.ronn +18 -14
  76. data/bundler/man/bundle-viz.ronn +1 -1
  77. data/bundler/man/bundle.ronn +27 -27
  78. data/bundler/man/gemfile.5.ronn +24 -9
  79. data/lib/rubygems.rb +24 -11
  80. data/lib/rubygems/bundler_version_finder.rb +9 -22
  81. data/lib/rubygems/command_manager.rb +6 -4
  82. data/lib/rubygems/commands/install_command.rb +7 -0
  83. data/lib/rubygems/commands/owner_command.rb +4 -1
  84. data/lib/rubygems/commands/push_command.rb +37 -4
  85. data/lib/rubygems/commands/setup_command.rb +3 -3
  86. data/lib/rubygems/commands/uninstall_command.rb +1 -1
  87. data/lib/rubygems/commands/unpack_command.rb +1 -1
  88. data/lib/rubygems/core_ext/kernel_require.rb +2 -7
  89. data/lib/rubygems/dependency.rb +1 -0
  90. data/lib/rubygems/dependency_installer.rb +4 -2
  91. data/lib/rubygems/exceptions.rb +5 -1
  92. data/lib/rubygems/gemcutter_utilities.rb +5 -2
  93. data/lib/rubygems/indexer.rb +1 -1
  94. data/lib/rubygems/install_update_options.rb +1 -1
  95. data/lib/rubygems/installer.rb +29 -6
  96. data/lib/rubygems/package.rb +20 -2
  97. data/lib/rubygems/package/tar_header.rb +3 -1
  98. data/lib/rubygems/package/tar_writer.rb +2 -3
  99. data/lib/rubygems/remote_fetcher.rb +1 -1
  100. data/lib/rubygems/request_set.rb +28 -17
  101. data/lib/rubygems/requirement.rb +14 -3
  102. data/lib/rubygems/resolver/api_specification.rb +5 -0
  103. data/lib/rubygems/security.rb +6 -1
  104. data/lib/rubygems/server.rb +3 -3
  105. data/lib/rubygems/source.rb +1 -1
  106. data/lib/rubygems/specification.rb +7 -10
  107. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  108. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  109. data/lib/rubygems/test_case.rb +22 -4
  110. data/lib/rubygems/test_utilities.rb +1 -1
  111. data/lib/rubygems/user_interaction.rb +9 -2
  112. data/lib/rubygems/util/licenses.rb +35 -4
  113. data/lib/rubygems/version.rb +7 -1
  114. data/lib/ubygems.rb +3 -0
  115. data/test/rubygems/test_bundled_ca.rb +7 -4
  116. data/test/rubygems/test_gem.rb +45 -10
  117. data/test/rubygems/test_gem_bundler_version_finder.rb +8 -7
  118. data/test/rubygems/test_gem_command_manager.rb +2 -2
  119. data/test/rubygems/test_gem_commands_build_command.rb +2 -0
  120. data/test/rubygems/test_gem_commands_install_command.rb +37 -0
  121. data/test/rubygems/test_gem_commands_push_command.rb +20 -0
  122. data/test/rubygems/test_gem_commands_setup_command.rb +6 -1
  123. data/test/rubygems/test_gem_commands_signin_command.rb +1 -1
  124. data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -1
  125. data/test/rubygems/test_gem_dependency.rb +1 -1
  126. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -4
  127. data/test/rubygems/test_gem_install_update_options.rb +2 -0
  128. data/test/rubygems/test_gem_installer.rb +109 -3
  129. data/test/rubygems/test_gem_package.rb +90 -5
  130. data/test/rubygems/test_gem_package_tar_header.rb +2 -1
  131. data/test/rubygems/test_gem_remote_fetcher.rb +6 -2
  132. data/test/rubygems/test_gem_request.rb +5 -2
  133. data/test/rubygems/test_gem_requirement.rb +6 -0
  134. data/test/rubygems/test_gem_resolver_api_specification.rb +24 -0
  135. data/test/rubygems/test_gem_resolver_installer_set.rb +1 -1
  136. data/test/rubygems/test_gem_security_policy.rb +3 -3
  137. data/test/rubygems/test_gem_server.rb +12 -12
  138. data/test/rubygems/test_gem_specification.rb +27 -13
  139. data/test/rubygems/test_gem_stream_ui.rb +2 -2
  140. data/test/rubygems/test_gem_text.rb +5 -0
  141. data/test/rubygems/test_gem_util.rb +4 -2
  142. data/test/rubygems/test_gem_version.rb +29 -2
  143. data/util/ci +1 -0
  144. data/util/generate_spdx_license_list.rb +15 -6
  145. data/util/update_bundled_ca_certificates.rb +1 -3
  146. metadata +12 -12
  147. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  148. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
@@ -238,7 +238,7 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
238
238
  @cmd.handle_options %w[]
239
239
 
240
240
  assert_equal false, @cmd.options[:check_dev]
241
- assert_equal nil, @cmd.options[:install_dir]
241
+ assert_nil @cmd.options[:install_dir]
242
242
  assert_equal true, @cmd.options[:user_install]
243
243
  assert_equal Gem::Requirement.default, @cmd.options[:version]
244
244
  assert_equal false, @cmd.options[:vendor]
@@ -358,7 +358,7 @@ class TestGemDependency < Gem::TestCase
358
358
  dep.to_specs
359
359
  end
360
360
 
361
- assert_match "Could not find 'bundler' (3.5) required by reason.\nTo update to the lastest version installed on your system, run `bundle update --bundler`.\nTo install the missing version, run `gem install bundler:3.5`\n", e.message
361
+ assert_match "Could not find 'bundler' (3.5) required by reason.\nTo update to the latest version installed on your system, run `bundle update --bundler`.\nTo install the missing version, run `gem install bundler:3.5`\n", e.message
362
362
  end
363
363
 
364
364
  Gem::BundlerVersionFinder.stub(:bundler_version_with_reason, ["2.0.0.pre.1", "reason"]) do
@@ -16,11 +16,9 @@ class TestGemExtRakeBuilder < Gem::TestCase
16
16
  def test_class_build
17
17
  create_temp_mkrf_file('task :default')
18
18
  output = []
19
- realdir = nil # HACK /tmp vs. /private/tmp
20
19
 
21
20
  build_rake_in do |rake|
22
21
  Dir.chdir @ext do
23
- realdir = Dir.pwd
24
22
  Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', nil, @dest_path, output
25
23
  end
26
24
 
@@ -38,11 +36,9 @@ class TestGemExtRakeBuilder < Gem::TestCase
38
36
  def test_class_build_with_args
39
37
  create_temp_mkrf_file('task :default')
40
38
  output = []
41
- realdir = nil # HACK /tmp vs. /private/tmp
42
39
 
43
40
  build_rake_in do |rake|
44
41
  Dir.chdir @ext do
45
- realdir = Dir.pwd
46
42
  non_empty_args_list = ['']
47
43
  Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', nil, @dest_path, output, non_empty_args_list
48
44
  end
@@ -119,6 +119,8 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
119
119
  end
120
120
 
121
121
  def test_security_policy_unknown
122
+ skip 'openssl is missing' unless defined?(OpenSSL::SSL)
123
+
122
124
  @cmd.add_install_update_options
123
125
 
124
126
  e = assert_raises OptionParser::InvalidArgument do
@@ -21,7 +21,7 @@ class TestGemInstaller < Gem::InstallerTestCase
21
21
  super
22
22
  common_installer_setup
23
23
 
24
- if __name__ =~ /^test_install(_|$)/ then
24
+ if (self.class.method_defined?(:__name__) ? __name__ : name) =~ /\Atest_install(_|\Z)/
25
25
  FileUtils.rm_r @spec.gem_dir
26
26
  FileUtils.rm_r @user_spec.gem_dir
27
27
  end
@@ -34,7 +34,7 @@ class TestGemInstaller < Gem::InstallerTestCase
34
34
 
35
35
  super
36
36
 
37
- Gem.configuration = @config
37
+ Gem.configuration = instance_variable_defined?(:@config) ? @config : nil
38
38
  end
39
39
 
40
40
  def test_app_script_text
@@ -663,7 +663,7 @@ gem 'other', version
663
663
  assert_path_exists installed_exec
664
664
 
665
665
  if symlink_supported?
666
- assert_send([File, :symlink?, installed_exec])
666
+ assert File.symlink?(installed_exec)
667
667
  return
668
668
  end
669
669
 
@@ -1474,6 +1474,112 @@ gem 'other', version
1474
1474
  end
1475
1475
  end
1476
1476
 
1477
+ def test_pre_install_checks_malicious_name_before_eval
1478
+ spec = util_spec "malicious\n::Object.const_set(:FROM_EVAL, true)#", '1'
1479
+ def spec.full_name # so the spec is buildable
1480
+ "malicious-1"
1481
+ end
1482
+ def spec.validate(*args); end
1483
+
1484
+ util_build_gem spec
1485
+
1486
+ gem = File.join(@gemhome, 'cache', spec.file_name)
1487
+
1488
+ use_ui @ui do
1489
+ @installer = Gem::Installer.at gem
1490
+ e = assert_raises Gem::InstallError do
1491
+ @installer.pre_install_checks
1492
+ end
1493
+ assert_equal "#<Gem::Specification name=malicious\n::Object.const_set(:FROM_EVAL, true)# version=1> has an invalid name", e.message
1494
+ end
1495
+ refute defined?(::Object::FROM_EVAL)
1496
+ end
1497
+
1498
+ def test_pre_install_checks_malicious_require_paths_before_eval
1499
+ spec = util_spec "malicious", '1'
1500
+ def spec.full_name # so the spec is buildable
1501
+ "malicious-1"
1502
+ end
1503
+ def spec.validate(*args); end
1504
+ spec.require_paths = ["malicious\n``"]
1505
+
1506
+ util_build_gem spec
1507
+
1508
+ gem = File.join(@gemhome, 'cache', spec.file_name)
1509
+
1510
+ use_ui @ui do
1511
+ @installer = Gem::Installer.at gem
1512
+ e = assert_raises Gem::InstallError do
1513
+ @installer.pre_install_checks
1514
+ end
1515
+ assert_equal "#<Gem::Specification name=malicious version=1> has an invalid require_paths", e.message
1516
+ end
1517
+ end
1518
+
1519
+ def test_pre_install_checks_malicious_extensions_before_eval
1520
+ spec = util_spec "malicious", '1'
1521
+ def spec.full_name # so the spec is buildable
1522
+ "malicious-1"
1523
+ end
1524
+ def spec.validate(*args); end
1525
+ spec.extensions = ["malicious\n``"]
1526
+
1527
+ util_build_gem spec
1528
+
1529
+ gem = File.join(@gemhome, 'cache', spec.file_name)
1530
+
1531
+ use_ui @ui do
1532
+ @installer = Gem::Installer.at gem
1533
+ e = assert_raises Gem::InstallError do
1534
+ @installer.pre_install_checks
1535
+ end
1536
+ assert_equal "#<Gem::Specification name=malicious version=1> has an invalid extensions", e.message
1537
+ end
1538
+ end
1539
+
1540
+ def test_pre_install_checks_malicious_specification_version_before_eval
1541
+ spec = util_spec "malicious", '1'
1542
+ def spec.full_name # so the spec is buildable
1543
+ "malicious-1"
1544
+ end
1545
+ def spec.validate(*args); end
1546
+ spec.specification_version = "malicious\n``"
1547
+
1548
+ util_build_gem spec
1549
+
1550
+ gem = File.join(@gemhome, 'cache', spec.file_name)
1551
+
1552
+ use_ui @ui do
1553
+ @installer = Gem::Installer.at gem
1554
+ e = assert_raises Gem::InstallError do
1555
+ @installer.pre_install_checks
1556
+ end
1557
+ assert_equal "#<Gem::Specification name=malicious version=1> has an invalid specification_version", e.message
1558
+ end
1559
+ end
1560
+
1561
+ def test_pre_install_checks_malicious_dependencies_before_eval
1562
+ spec = util_spec "malicious", '1'
1563
+ def spec.full_name # so the spec is buildable
1564
+ "malicious-1"
1565
+ end
1566
+ def spec.validate(*args); end
1567
+ spec.add_dependency "b\nfoo", '> 5'
1568
+
1569
+ util_build_gem spec
1570
+
1571
+ gem = File.join(@gemhome, 'cache', spec.file_name)
1572
+
1573
+ use_ui @ui do
1574
+ @installer = Gem::Installer.at gem
1575
+ @installer.ignore_dependencies = true
1576
+ e = assert_raises Gem::InstallError do
1577
+ @installer.pre_install_checks
1578
+ end
1579
+ assert_equal "#<Gem::Specification name=malicious version=1> has an invalid dependencies", e.message
1580
+ end
1581
+ end
1582
+
1477
1583
  def test_shebang
1478
1584
  util_make_exec @spec, "#!/usr/bin/ruby"
1479
1585
 
@@ -480,6 +480,42 @@ class TestGemPackage < Gem::Package::TarTestCase
480
480
  "#{destination_subdir} is not allowed", e.message)
481
481
  end
482
482
 
483
+ def test_extract_symlink_parent_doesnt_delete_user_dir
484
+ skip if RUBY_VERSION <= "1.8.7"
485
+
486
+ package = Gem::Package.new @gem
487
+
488
+ # Extract into a subdirectory of @destination; if this test fails it writes
489
+ # a file outside destination_subdir, but we want the file to remain inside
490
+ # @destination so it will be cleaned up.
491
+ destination_subdir = File.join @destination, 'subdir'
492
+ FileUtils.mkdir_p destination_subdir
493
+
494
+ destination_user_dir = File.join @destination, 'user'
495
+ destination_user_subdir = File.join destination_user_dir, 'dir'
496
+ FileUtils.mkdir_p destination_user_subdir
497
+
498
+ tgz_io = util_tar_gz do |tar|
499
+ tar.add_symlink 'link', destination_user_dir, 16877
500
+ tar.add_symlink 'link/dir', '.', 16877
501
+ end
502
+
503
+ e = assert_raises(Gem::Package::PathError, Errno::EACCES) do
504
+ package.extract_tar_gz tgz_io, destination_subdir
505
+ end
506
+
507
+ assert_path_exists destination_user_subdir
508
+
509
+ if Gem::Package::PathError === e
510
+ assert_equal("installing into parent path #{destination_user_subdir} of " +
511
+ "#{destination_subdir} is not allowed", e.message)
512
+ elsif win_platform?
513
+ skip "symlink - must be admin with no UAC on Windows"
514
+ else
515
+ raise e
516
+ end
517
+ end
518
+
483
519
  def test_extract_tar_gz_directory
484
520
  package = Gem::Package.new @gem
485
521
 
@@ -524,6 +560,21 @@ class TestGemPackage < Gem::Package::TarTestCase
524
560
  assert_path_exists extracted
525
561
  end
526
562
 
563
+ if Gem.win_platform?
564
+ def test_extract_tar_gz_case_insensitive
565
+ package = Gem::Package.new @gem
566
+
567
+ tgz_io = util_tar_gz do |tar|
568
+ tar.add_file 'foo/file.rb', 0644 do |io| io.write 'hi' end
569
+ end
570
+
571
+ package.extract_tar_gz tgz_io, @destination.upcase
572
+
573
+ extracted = File.join @destination, 'foo/file.rb'
574
+ assert_path_exists extracted
575
+ end
576
+ end
577
+
527
578
  def test_install_location
528
579
  package = Gem::Package.new @gem
529
580
 
@@ -607,7 +658,7 @@ class TestGemPackage < Gem::Package::TarTestCase
607
658
  end
608
659
 
609
660
  def test_load_spec
610
- entry = StringIO.new Gem.gzip @spec.to_yaml
661
+ entry = StringIO.new Gem::Util.gzip @spec.to_yaml
611
662
  def entry.full_name() 'metadata.gz' end
612
663
 
613
664
  package = Gem::Package.new 'nonexistent.gem'
@@ -637,7 +688,7 @@ class TestGemPackage < Gem::Package::TarTestCase
637
688
  data_tgz = data_tgz.string
638
689
 
639
690
  gem = util_tar do |tar|
640
- metadata_gz = Gem.gzip @spec.to_yaml
691
+ metadata_gz = Gem::Util.gzip @spec.to_yaml
641
692
 
642
693
  tar.add_file 'metadata.gz', 0444 do |io|
643
694
  io.write metadata_gz
@@ -684,7 +735,7 @@ class TestGemPackage < Gem::Package::TarTestCase
684
735
  data_tgz = data_tgz.string
685
736
 
686
737
  gem = util_tar do |tar|
687
- metadata_gz = Gem.gzip @spec.to_yaml
738
+ metadata_gz = Gem::Util.gzip @spec.to_yaml
688
739
 
689
740
  tar.add_file 'metadata.gz', 0444 do |io|
690
741
  io.write metadata_gz
@@ -721,7 +772,7 @@ class TestGemPackage < Gem::Package::TarTestCase
721
772
 
722
773
  def test_verify_corrupt
723
774
  tf = Tempfile.open 'corrupt' do |io|
724
- data = Gem.gzip 'a' * 10
775
+ data = Gem::Util.gzip 'a' * 10
725
776
  io.write \
726
777
  tar_file_header('metadata.gz', "\000x", 0644, data.length, Time.now)
727
778
  io.write data
@@ -845,7 +896,7 @@ class TestGemPackage < Gem::Package::TarTestCase
845
896
  build.add_contents gem
846
897
 
847
898
  # write bogus data.tar.gz to foil signature
848
- bogus_data = Gem.gzip 'hello'
899
+ bogus_data = Gem::Util.gzip 'hello'
849
900
  fake_signer = Class.new do
850
901
  def digest_name; 'SHA512'; end
851
902
  def digest_algorithm; Digest(:SHA512); end
@@ -903,6 +954,40 @@ class TestGemPackage < Gem::Package::TarTestCase
903
954
  end
904
955
 
905
956
  assert_equal "package is corrupt, exception while verifying: whatever (ArgumentError) in #{@gem}", e.message
957
+
958
+ valid_metadata = ["metadata", "metadata.gz"]
959
+ valid_metadata.each do |vm|
960
+ $spec_loaded = false
961
+ $good_name = vm
962
+
963
+ entry = Object.new
964
+ def entry.full_name() $good_name end
965
+
966
+ package = Gem::Package.new(@gem)
967
+ package.instance_variable_set(:@files, [])
968
+ def package.load_spec(entry) $spec_loaded = true end
969
+
970
+ package.verify_entry(entry)
971
+
972
+ assert $spec_loaded
973
+ end
974
+
975
+ invalid_metadata = ["metadataxgz", "foobar\nmetadata", "metadata\nfoobar"]
976
+ invalid_metadata.each do |vm|
977
+ $spec_loaded = false
978
+ $bad_name = vm
979
+
980
+ entry = Object.new
981
+ def entry.full_name() $bad_name end
982
+
983
+ package = Gem::Package.new(@gem)
984
+ package.instance_variable_set(:@files, [])
985
+ def package.load_spec(entry) $spec_loaded = true end
986
+
987
+ package.verify_entry(entry)
988
+
989
+ refute $spec_loaded
990
+ end
906
991
  end
907
992
 
908
993
  def test_spec
@@ -158,8 +158,9 @@ group\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
158
158
  header_s[124, 12] = val
159
159
  io = TempIO.new header_s
160
160
  assert_raises ArgumentError do
161
- new_header = Gem::Package::TarHeader.from io
161
+ Gem::Package::TarHeader.from io
162
162
  end
163
+ io.close! if io.respond_to? :close!
163
164
  end
164
165
  end
165
166
 
@@ -9,6 +9,10 @@ rescue LoadError => e
9
9
  e.message =~ / -- openssl$/
10
10
  end
11
11
 
12
+ unless defined?(OpenSSL::SSL) then
13
+ warn 'Skipping Gem::Request tests. openssl not found.'
14
+ end
15
+
12
16
  require 'rubygems/remote_fetcher'
13
17
  require 'rubygems/package'
14
18
  require 'minitest/mock'
@@ -541,7 +545,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
541
545
  @fetcher = fetcher
542
546
 
543
547
  def fetcher.fetch_http(uri, mtime, head = nil)
544
- Gem.gzip 'foo'
548
+ Gem::Util.gzip 'foo'
545
549
  end
546
550
 
547
551
  assert_equal 'foo', fetcher.fetch_path(@uri + 'foo.gz')
@@ -1067,4 +1071,4 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
1067
1071
  assert_equal "/home/skillet", @fetcher.correct_for_windows_path(path)
1068
1072
  end
1069
1073
 
1070
- end
1074
+ end if defined?(OpenSSL::SSL)
@@ -4,6 +4,10 @@ require 'rubygems/request'
4
4
  require 'ostruct'
5
5
  require 'base64'
6
6
 
7
+ unless defined?(OpenSSL::SSL) then
8
+ warn 'Skipping Gem::Request tests. openssl not found.'
9
+ end
10
+
7
11
  class TestGemRequest < Gem::TestCase
8
12
 
9
13
  CA_CERT_FILE = cert_path 'ca'
@@ -491,5 +495,4 @@ ERROR: Certificate is an invalid CA certificate
491
495
  end
492
496
  end
493
497
 
494
- end
495
-
498
+ end if defined?(OpenSSL::SSL)
@@ -28,6 +28,8 @@ class TestGemRequirement < Gem::TestCase
28
28
  assert_requirement_equal "= 2", "2"
29
29
  assert_requirement_equal "= 2", ["2"]
30
30
  assert_requirement_equal "= 2", v(2)
31
+ assert_requirement_equal "2.0", "2"
32
+ assert_requirement_equal ["= 2", ">= 2"], [">= 2", "= 2"]
31
33
  end
32
34
 
33
35
  def test_create
@@ -69,6 +71,7 @@ class TestGemRequirement < Gem::TestCase
69
71
  assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse('= 1')
70
72
  assert_equal ['>', Gem::Version.new(1)], Gem::Requirement.parse('> 1')
71
73
  assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse("=\n1")
74
+ assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse('1.0')
72
75
 
73
76
  assert_equal ['=', Gem::Version.new(2)],
74
77
  Gem::Requirement.parse(Gem::Version.new('2'))
@@ -226,6 +229,8 @@ class TestGemRequirement < Gem::TestCase
226
229
  assert_satisfied_by "0.2.33", "= 0.2.33"
227
230
  assert_satisfied_by "0.2.34", "> 0.2.33"
228
231
  assert_satisfied_by "1.0", "= 1.0"
232
+ assert_satisfied_by "1.0.0", "= 1.0"
233
+ assert_satisfied_by "1.0", "= 1.0.0"
229
234
  assert_satisfied_by "1.0", "1.0"
230
235
  assert_satisfied_by "1.8.2", "> 1.8.0"
231
236
  assert_satisfied_by "1.112", "> 1.111"
@@ -313,6 +318,7 @@ class TestGemRequirement < Gem::TestCase
313
318
  def test_satisfied_by_boxed
314
319
  refute_satisfied_by "1.3", "~> 1.4"
315
320
  assert_satisfied_by "1.4", "~> 1.4"
321
+ assert_satisfied_by "1.4.0", "~> 1.4"
316
322
  assert_satisfied_by "1.5", "~> 1.4"
317
323
  refute_satisfied_by "2.0", "~> 1.4"
318
324
 
@@ -141,5 +141,29 @@ class TestGemResolverAPISpecification < Gem::TestCase
141
141
  assert_equal 'a-1', spec.full_name
142
142
  end
143
143
 
144
+ def test_spec_jruby_platform
145
+ spec_fetcher do |fetcher|
146
+ fetcher.gem 'j', 1 do |spec|
147
+ spec.platform = 'jruby'
148
+ end
149
+ end
150
+
151
+ dep_uri = URI(@gem_repo) + 'api/v1/dependencies'
152
+ set = Gem::Resolver::APISet.new dep_uri
153
+ data = {
154
+ :name => 'j',
155
+ :number => '1',
156
+ :platform => 'jruby',
157
+ :dependencies => [],
158
+ }
159
+
160
+ api_spec = Gem::Resolver::APISpecification.new set, data
161
+
162
+ spec = api_spec.spec
163
+
164
+ assert_kind_of Gem::Specification, spec
165
+ assert_equal 'j-1-java', spec.full_name
166
+ end
167
+
144
168
  end
145
169