rubygems-update 2.1.11 → 2.2.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rubygems-update might be problematic. Click here for more details.

Files changed (190) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.autotest +37 -12
  5. data/History.txt +99 -2
  6. data/MIT.txt +1 -0
  7. data/Manifest.txt +59 -19
  8. data/Rakefile +4 -6
  9. data/lib/gauntlet_rubygems.rb +1 -1
  10. data/lib/rubygems.rb +102 -80
  11. data/lib/rubygems/available_set.rb +2 -2
  12. data/lib/rubygems/basic_specification.rb +97 -8
  13. data/lib/rubygems/commands/install_command.rb +58 -15
  14. data/lib/rubygems/commands/list_command.rb +1 -7
  15. data/lib/rubygems/commands/outdated_command.rb +1 -1
  16. data/lib/rubygems/commands/pristine_command.rb +14 -1
  17. data/lib/rubygems/commands/push_command.rb +9 -4
  18. data/lib/rubygems/commands/query_command.rb +33 -17
  19. data/lib/rubygems/commands/search_command.rb +0 -6
  20. data/lib/rubygems/commands/specification_command.rb +1 -1
  21. data/lib/rubygems/commands/unpack_command.rb +1 -1
  22. data/lib/rubygems/commands/update_command.rb +4 -1
  23. data/lib/rubygems/commands/which_command.rb +5 -8
  24. data/lib/rubygems/compatibility.rb +3 -0
  25. data/lib/rubygems/core_ext/kernel_gem.rb +6 -0
  26. data/lib/rubygems/defaults.rb +19 -0
  27. data/lib/rubygems/dependency_installer.rb +28 -9
  28. data/lib/rubygems/doctor.rb +17 -11
  29. data/lib/rubygems/errors.rb +16 -3
  30. data/lib/rubygems/exceptions.rb +52 -5
  31. data/lib/rubygems/ext.rb +1 -2
  32. data/lib/rubygems/ext/build_error.rb +6 -0
  33. data/lib/rubygems/ext/builder.rb +50 -17
  34. data/lib/rubygems/ext/cmake_builder.rb +1 -1
  35. data/lib/rubygems/ext/configure_builder.rb +1 -3
  36. data/lib/rubygems/ext/ext_conf_builder.rb +9 -3
  37. data/lib/rubygems/ext/rake_builder.rb +2 -5
  38. data/lib/rubygems/gemcutter_utilities.rb +8 -1
  39. data/lib/rubygems/installer.rb +14 -4
  40. data/lib/rubygems/installer_test_case.rb +0 -5
  41. data/lib/rubygems/package.rb +11 -2
  42. data/lib/rubygems/psych_additions.rb +1 -1
  43. data/lib/rubygems/rdoc.rb +1 -1
  44. data/lib/rubygems/remote_fetcher.rb +3 -3
  45. data/lib/rubygems/request.rb +16 -8
  46. data/lib/rubygems/request_set.rb +133 -42
  47. data/lib/rubygems/request_set/gem_dependency_api.rb +493 -11
  48. data/lib/rubygems/request_set/lockfile.rb +579 -0
  49. data/lib/rubygems/requirement.rb +58 -30
  50. data/lib/rubygems/resolver.rb +471 -0
  51. data/lib/rubygems/resolver/activation_request.rb +165 -0
  52. data/lib/rubygems/resolver/api_set.rb +110 -0
  53. data/lib/rubygems/resolver/api_specification.rb +79 -0
  54. data/lib/rubygems/resolver/best_set.rb +31 -0
  55. data/lib/rubygems/resolver/composed_set.rb +39 -0
  56. data/lib/rubygems/resolver/conflict.rb +122 -0
  57. data/lib/rubygems/{dependency_resolver → resolver}/current_set.rb +1 -4
  58. data/lib/rubygems/{dependency_resolver → resolver}/dependency_request.rb +37 -7
  59. data/lib/rubygems/resolver/git_set.rb +119 -0
  60. data/lib/rubygems/resolver/git_specification.rb +35 -0
  61. data/lib/rubygems/resolver/index_set.rb +74 -0
  62. data/lib/rubygems/resolver/index_specification.rb +69 -0
  63. data/lib/rubygems/resolver/installed_specification.rb +40 -0
  64. data/lib/rubygems/{dependency_resolver → resolver}/installer_set.rb +18 -17
  65. data/lib/rubygems/resolver/local_specification.rb +16 -0
  66. data/lib/rubygems/resolver/lock_set.rb +78 -0
  67. data/lib/rubygems/resolver/lock_specification.rb +58 -0
  68. data/lib/rubygems/resolver/requirement_list.rb +81 -0
  69. data/lib/rubygems/resolver/set.rb +27 -0
  70. data/lib/rubygems/resolver/spec_specification.rb +58 -0
  71. data/lib/rubygems/resolver/specification.rb +89 -0
  72. data/lib/rubygems/resolver/stats.rb +44 -0
  73. data/lib/rubygems/resolver/vendor_set.rb +83 -0
  74. data/lib/rubygems/resolver/vendor_specification.rb +24 -0
  75. data/lib/rubygems/security/trust_dir.rb +16 -2
  76. data/lib/rubygems/source.rb +71 -18
  77. data/lib/rubygems/source/git.rb +218 -0
  78. data/lib/rubygems/source/installed.rb +8 -1
  79. data/lib/rubygems/source/local.rb +14 -8
  80. data/lib/rubygems/source/lock.rb +48 -0
  81. data/lib/rubygems/source/specific_file.rb +14 -3
  82. data/lib/rubygems/source/vendor.rb +27 -0
  83. data/lib/rubygems/source_list.rb +74 -12
  84. data/lib/rubygems/spec_fetcher.rb +36 -4
  85. data/lib/rubygems/specification.rb +214 -65
  86. data/lib/rubygems/stub_specification.rb +57 -1
  87. data/lib/rubygems/syck_hack.rb +3 -3
  88. data/lib/rubygems/test_case.rb +226 -59
  89. data/lib/rubygems/test_utilities.rb +198 -0
  90. data/lib/rubygems/uninstaller.rb +22 -10
  91. data/lib/rubygems/uri_formatter.rb +20 -0
  92. data/lib/rubygems/user_interaction.rb +193 -71
  93. data/lib/rubygems/util.rb +121 -0
  94. data/lib/rubygems/util/list.rb +4 -0
  95. data/lib/rubygems/util/stringio.rb +34 -0
  96. data/lib/rubygems/validator.rb +6 -2
  97. data/lib/rubygems/version.rb +4 -8
  98. data/test/rubygems/test_bundled_ca.rb +1 -1
  99. data/test/rubygems/test_gem.rb +137 -29
  100. data/test/rubygems/test_gem_available_set.rb +19 -0
  101. data/test/rubygems/test_gem_commands_build_command.rb +1 -1
  102. data/test/rubygems/test_gem_commands_cert_command.rb +2 -2
  103. data/test/rubygems/test_gem_commands_cleanup_command.rb +13 -13
  104. data/test/rubygems/test_gem_commands_dependency_command.rb +24 -34
  105. data/test/rubygems/test_gem_commands_fetch_command.rb +43 -48
  106. data/test/rubygems/test_gem_commands_install_command.rb +244 -279
  107. data/test/rubygems/test_gem_commands_list_command.rb +3 -3
  108. data/test/rubygems/test_gem_commands_outdated_command.rb +7 -12
  109. data/test/rubygems/test_gem_commands_pristine_command.rb +73 -27
  110. data/test/rubygems/test_gem_commands_push_command.rb +76 -8
  111. data/test/rubygems/test_gem_commands_query_command.rb +239 -49
  112. data/test/rubygems/test_gem_commands_sources_command.rb +10 -43
  113. data/test/rubygems/test_gem_commands_specification_command.rb +24 -47
  114. data/test/rubygems/test_gem_commands_stale_command.rb +2 -2
  115. data/test/rubygems/test_gem_commands_uninstall_command.rb +3 -3
  116. data/test/rubygems/test_gem_commands_unpack_command.rb +16 -30
  117. data/test/rubygems/test_gem_commands_update_command.rb +149 -134
  118. data/test/rubygems/test_gem_commands_which_command.rb +4 -2
  119. data/test/rubygems/test_gem_dependency_installer.rb +68 -0
  120. data/test/rubygems/test_gem_dependency_list.rb +17 -17
  121. data/test/rubygems/test_gem_dependency_resolution_error.rb +28 -0
  122. data/test/rubygems/test_gem_doctor.rb +1 -1
  123. data/test/rubygems/test_gem_ext_builder.rb +178 -8
  124. data/test/rubygems/test_gem_ext_cmake_builder.rb +1 -7
  125. data/test/rubygems/test_gem_ext_configure_builder.rb +8 -10
  126. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +18 -21
  127. data/test/rubygems/test_gem_ext_rake_builder.rb +1 -3
  128. data/test/rubygems/test_gem_impossible_dependencies_error.rb +10 -6
  129. data/test/rubygems/test_gem_indexer.rb +6 -6
  130. data/test/rubygems/test_gem_installer.rb +29 -10
  131. data/test/rubygems/test_gem_local_remote_options.rb +1 -1
  132. data/test/rubygems/test_gem_package.rb +18 -0
  133. data/test/rubygems/test_gem_rdoc.rb +1 -1
  134. data/test/rubygems/test_gem_remote_fetcher.rb +1 -1
  135. data/test/rubygems/test_gem_request.rb +37 -10
  136. data/test/rubygems/test_gem_request_set.rb +271 -9
  137. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +684 -0
  138. data/test/rubygems/test_gem_request_set_lockfile.rb +849 -0
  139. data/test/rubygems/test_gem_requirement.rb +21 -0
  140. data/test/rubygems/{test_gem_dependency_resolver.rb → test_gem_resolver.rb} +231 -70
  141. data/test/rubygems/test_gem_resolver_activation_request.rb +63 -0
  142. data/test/rubygems/test_gem_resolver_api_set.rb +167 -0
  143. data/test/rubygems/test_gem_resolver_api_specification.rb +104 -0
  144. data/test/rubygems/test_gem_resolver_best_set.rb +30 -0
  145. data/test/rubygems/test_gem_resolver_conflict.rb +75 -0
  146. data/test/rubygems/test_gem_resolver_dependency_request.rb +20 -0
  147. data/test/rubygems/test_gem_resolver_git_set.rb +148 -0
  148. data/test/rubygems/test_gem_resolver_git_specification.rb +100 -0
  149. data/test/rubygems/test_gem_resolver_index_set.rb +28 -0
  150. data/test/rubygems/test_gem_resolver_index_specification.rb +89 -0
  151. data/test/rubygems/test_gem_resolver_installed_specification.rb +49 -0
  152. data/test/rubygems/test_gem_resolver_installer_set.rb +22 -0
  153. data/test/rubygems/test_gem_resolver_local_specification.rb +45 -0
  154. data/test/rubygems/test_gem_resolver_lock_set.rb +57 -0
  155. data/test/rubygems/test_gem_resolver_lock_specification.rb +87 -0
  156. data/test/rubygems/test_gem_resolver_requirement_list.rb +20 -0
  157. data/test/rubygems/test_gem_resolver_specification.rb +32 -0
  158. data/test/rubygems/test_gem_resolver_vendor_set.rb +67 -0
  159. data/test/rubygems/test_gem_resolver_vendor_specification.rb +83 -0
  160. data/test/rubygems/test_gem_server.rb +4 -4
  161. data/test/rubygems/test_gem_source.rb +54 -64
  162. data/test/rubygems/test_gem_source_git.rb +231 -0
  163. data/test/rubygems/test_gem_source_list.rb +24 -0
  164. data/test/rubygems/test_gem_source_local.rb +1 -1
  165. data/test/rubygems/test_gem_source_lock.rb +114 -0
  166. data/test/rubygems/test_gem_source_vendor.rb +27 -0
  167. data/test/rubygems/test_gem_spec_fetcher.rb +116 -61
  168. data/test/rubygems/test_gem_specification.rb +526 -94
  169. data/test/rubygems/test_gem_stub_specification.rb +123 -10
  170. data/test/rubygems/test_gem_uninstaller.rb +28 -2
  171. data/test/rubygems/test_gem_util.rb +31 -0
  172. data/test/rubygems/test_gem_validator.rb +9 -0
  173. data/util/update_bundled_ca_certificates.rb +8 -1
  174. metadata +89 -29
  175. metadata.gz.sig +2 -4
  176. data/lib/rubygems/dependency_resolver.rb +0 -254
  177. data/lib/rubygems/dependency_resolver/activation_request.rb +0 -109
  178. data/lib/rubygems/dependency_resolver/api_set.rb +0 -65
  179. data/lib/rubygems/dependency_resolver/api_specification.rb +0 -39
  180. data/lib/rubygems/dependency_resolver/composed_set.rb +0 -18
  181. data/lib/rubygems/dependency_resolver/dependency_conflict.rb +0 -85
  182. data/lib/rubygems/dependency_resolver/index_set.rb +0 -64
  183. data/lib/rubygems/dependency_resolver/index_specification.rb +0 -60
  184. data/lib/rubygems/dependency_resolver/installed_specification.rb +0 -52
  185. data/test/rubygems/test_gem_dependency_resolver_api_specification.rb +0 -33
  186. data/test/rubygems/test_gem_dependency_resolver_dependency_conflict.rb +0 -36
  187. data/test/rubygems/test_gem_dependency_resolver_index_set.rb +0 -53
  188. data/test/rubygems/test_gem_dependency_resolver_index_specification.rb +0 -73
  189. data/test/rubygems/test_gem_dependency_resolver_installed_specification.rb +0 -19
  190. data/test/rubygems/test_gem_dependency_resolver_installer_set.rb +0 -28
@@ -0,0 +1,121 @@
1
+ ##
2
+ # This module contains various utility methods as module methods.
3
+
4
+ module Gem::Util
5
+
6
+ @silent_mutex = nil
7
+
8
+ ##
9
+ # Zlib::GzipReader wrapper that unzips +data+.
10
+
11
+ def self.gunzip(data)
12
+ require 'zlib'
13
+ require 'rubygems/util/stringio'
14
+ data = Gem::StringSource.new data
15
+
16
+ unzipped = Zlib::GzipReader.new(data).read
17
+ unzipped.force_encoding Encoding::BINARY if Object.const_defined? :Encoding
18
+ unzipped
19
+ end
20
+
21
+ ##
22
+ # Zlib::GzipWriter wrapper that zips +data+.
23
+
24
+ def self.gzip(data)
25
+ require 'zlib'
26
+ require 'rubygems/util/stringio'
27
+ zipped = Gem::StringSink.new
28
+ zipped.set_encoding Encoding::BINARY if Object.const_defined? :Encoding
29
+
30
+ Zlib::GzipWriter.wrap zipped do |io| io.write data end
31
+
32
+ zipped.string
33
+ end
34
+
35
+ ##
36
+ # A Zlib::Inflate#inflate wrapper
37
+
38
+ def self.inflate(data)
39
+ require 'zlib'
40
+ Zlib::Inflate.inflate data
41
+ end
42
+
43
+ ##
44
+ # This calls IO.popen where it accepts an array for a +command+ (Ruby 1.9+)
45
+ # and implements an IO.popen-like behavior where it does not accept an array
46
+ # for a command.
47
+
48
+ def self.popen *command
49
+ IO.popen command, &:read
50
+ rescue TypeError # ruby 1.8 only supports string command
51
+ r, w = IO.pipe
52
+
53
+ pid = fork do
54
+ STDIN.close
55
+ STDOUT.reopen w
56
+
57
+ exec(*command)
58
+ end
59
+
60
+ w.close
61
+
62
+ begin
63
+ return r.read
64
+ ensure
65
+ Process.wait pid
66
+ end
67
+ end
68
+
69
+ ##
70
+ # Invokes system, but silences all output.
71
+
72
+ def self.silent_system *command
73
+ require 'thread'
74
+
75
+ @silent_mutex ||= Mutex.new
76
+
77
+ null_device = Gem.win_platform? ? 'NUL' : '/dev/null'
78
+
79
+ @silent_mutex.synchronize do
80
+ begin
81
+ stdout = STDOUT.dup
82
+ stderr = STDERR.dup
83
+
84
+ STDOUT.reopen null_device, 'w'
85
+ STDERR.reopen null_device, 'w'
86
+
87
+ return system(*command)
88
+ ensure
89
+ STDOUT.reopen stdout
90
+ STDERR.reopen stderr
91
+ end
92
+ end
93
+ end
94
+
95
+ ##
96
+ # Enumerates the parents of +directory+.
97
+
98
+ def self.traverse_parents directory
99
+ return enum_for __method__, directory unless block_given?
100
+
101
+ here = File.expand_path directory
102
+ start = here
103
+
104
+ Dir.chdir start
105
+
106
+ begin
107
+ loop do
108
+ yield here
109
+
110
+ Dir.chdir '..'
111
+
112
+ return if Dir.pwd == here # toplevel
113
+
114
+ here = Dir.pwd
115
+ end
116
+ ensure
117
+ Dir.chdir start
118
+ end
119
+ end
120
+
121
+ end
@@ -36,6 +36,10 @@ module Gem
36
36
  List.new value, self
37
37
  end
38
38
 
39
+ def pretty_print q # :nodoc:
40
+ q.pp to_a
41
+ end
42
+
39
43
  def self.prepend(list, value)
40
44
  return List.new(value) unless list
41
45
  List.new value, list
@@ -0,0 +1,34 @@
1
+ class Gem::StringSink
2
+ def initialize
3
+ @string = ""
4
+ end
5
+
6
+ attr_reader :string
7
+
8
+ def write(s)
9
+ @string += s
10
+ s.size
11
+ end
12
+
13
+ def set_encoding(enc)
14
+ @string.force_encoding enc
15
+ end
16
+ end
17
+
18
+ class Gem::StringSource
19
+ def initialize(str)
20
+ @string = str.dup
21
+ end
22
+
23
+ def read(count=nil)
24
+ if count
25
+ @string.slice!(0,count)
26
+ else
27
+ s = @string
28
+ @string = ""
29
+ s
30
+ end
31
+ end
32
+
33
+ alias_method :readpartial, :read
34
+ end
@@ -14,7 +14,7 @@ class Gem::Validator
14
14
 
15
15
  include Gem::UserInteraction
16
16
 
17
- def initialize
17
+ def initialize # :nodoc:
18
18
  require 'find'
19
19
  end
20
20
 
@@ -57,8 +57,11 @@ class Gem::Validator
57
57
 
58
58
  public
59
59
 
60
+ ##
61
+ # Describes a problem with a file in a gem.
62
+
60
63
  ErrorData = Struct.new :path, :problem do
61
- def <=> other
64
+ def <=> other # :nodoc:
62
65
  return nil unless self.class === other
63
66
 
64
67
  [path, problem] <=> [other.path, other.problem]
@@ -83,6 +86,7 @@ class Gem::Validator
83
86
 
84
87
  Gem::Specification.each do |spec|
85
88
  next unless gems.include? spec.name unless gems.empty?
89
+ next if spec.default_gem?
86
90
 
87
91
  gem_name = spec.file_name
88
92
  gem_path = spec.cache_file
@@ -145,8 +145,6 @@ class Gem::Version
145
145
 
146
146
  include Comparable
147
147
 
148
- # FIX: These are only used once, in .correct?. Do they deserve to be
149
- # constants?
150
148
  VERSION_PATTERN = '[0-9]+(?>\.[0-9a-zA-Z]+)*(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?' # :nodoc:
151
149
  ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/ # :nodoc:
152
150
 
@@ -174,8 +172,6 @@ class Gem::Version
174
172
  # ver2 = Version.create(ver1) # -> (ver1)
175
173
  # ver3 = Version.create(nil) # -> nil
176
174
 
177
- # REFACTOR: There's no real reason this should be separate from #initialize.
178
-
179
175
  def self.create input
180
176
  if self === input then # check yourself before you wreck yourself
181
177
  input
@@ -188,7 +184,7 @@ class Gem::Version
188
184
 
189
185
  @@all = {}
190
186
 
191
- def self.new version
187
+ def self.new version # :nodoc:
192
188
  @@all[version] ||= super
193
189
  end
194
190
 
@@ -255,17 +251,17 @@ class Gem::Version
255
251
  initialize array[0]
256
252
  end
257
253
 
258
- def yaml_initialize(tag, map)
254
+ def yaml_initialize(tag, map) # :nodoc:
259
255
  @version = map['version']
260
256
  @segments = nil
261
257
  @hash = nil
262
258
  end
263
259
 
264
- def to_yaml_properties
260
+ def to_yaml_properties # :nodoc:
265
261
  ["@version"]
266
262
  end
267
263
 
268
- def encode_with coder
264
+ def encode_with coder # :nodoc:
269
265
  coder.add 'version', @version
270
266
  end
271
267
 
@@ -34,7 +34,7 @@ class TestBundledCA < Gem::TestCase
34
34
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER
35
35
  http.cert_store = bundled_certificate_store
36
36
  http.get('/')
37
- rescue Errno::ENOENT
37
+ rescue Errno::ENOENT, Errno::ETIMEDOUT
38
38
  skip "#{host} seems offline, I can't tell whether ssl would work."
39
39
  rescue OpenSSL::SSL::SSLError => e
40
40
  # Only fail for certificate verification errors
@@ -116,7 +116,7 @@ class TestGem < Gem::TestCase
116
116
  end
117
117
 
118
118
  def test_self_bin_path_nonexistent_binfile
119
- quick_spec 'a', '2' do |s|
119
+ util_spec 'a', '2' do |s|
120
120
  s.executables = ['exec']
121
121
  end
122
122
  assert_raises(Gem::GemNotFoundException) do
@@ -125,7 +125,7 @@ class TestGem < Gem::TestCase
125
125
  end
126
126
 
127
127
  def test_self_bin_path_no_bin_file
128
- quick_spec 'a', '1'
128
+ util_spec 'a', '1'
129
129
  assert_raises(ArgumentError) do
130
130
  Gem.bin_path('a', nil, '1')
131
131
  end
@@ -139,7 +139,7 @@ class TestGem < Gem::TestCase
139
139
 
140
140
  def test_self_bin_path_bin_file_gone_in_latest
141
141
  util_exec_gem
142
- quick_spec 'a', '10' do |s|
142
+ util_spec 'a', '10' do |s|
143
143
  s.executables = []
144
144
  end
145
145
  # Should not find a-10's non-abin (bug)
@@ -183,7 +183,7 @@ class TestGem < Gem::TestCase
183
183
  fp.puts 'blah'
184
184
  end
185
185
 
186
- foo = quick_spec 'foo' do |s| s.files = %w[data/foo.txt] end
186
+ foo = util_spec 'foo' do |s| s.files = %w[data/foo.txt] end
187
187
  install_gem foo
188
188
  end
189
189
 
@@ -258,7 +258,12 @@ class TestGem < Gem::TestCase
258
258
 
259
259
  Gem.ensure_gem_subdirectories @gemhome
260
260
 
261
- assert File.directory? File.join(@gemhome, "cache")
261
+ assert_path_exists File.join @gemhome, 'build_info'
262
+ assert_path_exists File.join @gemhome, 'cache'
263
+ assert_path_exists File.join @gemhome, 'doc'
264
+ assert_path_exists File.join @gemhome, 'extensions'
265
+ assert_path_exists File.join @gemhome, 'gems'
266
+ assert_path_exists File.join @gemhome, 'specifications'
262
267
  end
263
268
 
264
269
  def test_self_ensure_gem_directories_permissions
@@ -333,6 +338,24 @@ class TestGem < Gem::TestCase
333
338
  end
334
339
  end
335
340
 
341
+ def test_self_extension_dir_shared
342
+ enable_shared, RbConfig::CONFIG['ENABLE_SHARED'] =
343
+ RbConfig::CONFIG['ENABLE_SHARED'], 'yes'
344
+
345
+ assert_equal Gem.ruby_api_version, Gem.extension_api_version
346
+ ensure
347
+ RbConfig::CONFIG['ENABLE_SHARED'] = enable_shared
348
+ end
349
+
350
+ def test_self_extension_dir_static
351
+ enable_shared, RbConfig::CONFIG['ENABLE_SHARED'] =
352
+ RbConfig::CONFIG['ENABLE_SHARED'], 'no'
353
+
354
+ assert_equal "#{Gem.ruby_api_version}-static", Gem.extension_api_version
355
+ ensure
356
+ RbConfig::CONFIG['ENABLE_SHARED'] = enable_shared
357
+ end
358
+
336
359
  def test_self_find_files
337
360
  cwd = File.expand_path("test/rubygems", @@project_dir)
338
361
  $LOAD_PATH.unshift cwd
@@ -397,25 +420,23 @@ class TestGem < Gem::TestCase
397
420
  end
398
421
 
399
422
  def test_self_latest_spec_for
400
- a1 = quick_spec 'a', 1
401
- a2 = quick_spec 'a', 2
402
- a3a = quick_spec 'a', '3.a'
403
-
404
- util_setup_fake_fetcher
405
- util_setup_spec_fetcher a1, a2, a3a
423
+ gems = spec_fetcher do |fetcher|
424
+ fetcher.spec 'a', 1
425
+ fetcher.spec 'a', '3.a'
426
+ fetcher.spec 'a', 2
427
+ end
406
428
 
407
429
  spec = Gem.latest_spec_for 'a'
408
430
 
409
- assert_equal a2, spec
431
+ assert_equal gems['a-2'], spec
410
432
  end
411
433
 
412
434
  def test_self_latest_rubygems_version
413
- r1 = quick_spec 'rubygems-update', '1.8.23'
414
- r2 = quick_spec 'rubygems-update', '1.8.24'
415
- r3 = quick_spec 'rubygems-update', '2.0.0.preview3'
416
-
417
- util_setup_fake_fetcher
418
- util_setup_spec_fetcher r1, r2, r3
435
+ spec_fetcher do |fetcher|
436
+ fetcher.spec 'rubygems-update', '1.8.23'
437
+ fetcher.spec 'rubygems-update', '1.8.24'
438
+ fetcher.spec 'rubygems-update', '2.0.0.preview3'
439
+ end
419
440
 
420
441
  version = Gem.latest_rubygems_version
421
442
 
@@ -423,12 +444,11 @@ class TestGem < Gem::TestCase
423
444
  end
424
445
 
425
446
  def test_self_latest_version_for
426
- a1 = quick_spec 'a', 1
427
- a2 = quick_spec 'a', 2
428
- a3a = quick_spec 'a', '3.a'
429
-
430
- util_setup_fake_fetcher
431
- util_setup_spec_fetcher a1, a2, a3a
447
+ spec_fetcher do |fetcher|
448
+ fetcher.spec 'a', 1
449
+ fetcher.spec 'a', 2
450
+ fetcher.spec 'a', '3.a'
451
+ end
432
452
 
433
453
  version = Gem.latest_version_for 'a'
434
454
 
@@ -436,7 +456,7 @@ class TestGem < Gem::TestCase
436
456
  end
437
457
 
438
458
  def test_self_loaded_specs
439
- foo = quick_spec 'foo'
459
+ foo = util_spec 'foo'
440
460
  install_gem foo
441
461
 
442
462
  foo.activate
@@ -640,6 +660,22 @@ class TestGem < Gem::TestCase
640
660
  Gem::ConfigMap[:EXEEXT] = orig_exe_ext
641
661
  end
642
662
 
663
+ def test_self_ruby_api_version
664
+ orig_MAJOR, Gem::ConfigMap[:MAJOR] = Gem::ConfigMap[:MAJOR], '1'
665
+ orig_MINOR, Gem::ConfigMap[:MINOR] = Gem::ConfigMap[:MINOR], '2'
666
+ orig_TEENY, Gem::ConfigMap[:TEENY] = Gem::ConfigMap[:TEENY], '3'
667
+
668
+ Gem.instance_variable_set :@ruby_api_version, nil
669
+
670
+ assert_equal '1.2.3', Gem.ruby_api_version
671
+ ensure
672
+ Gem.instance_variable_set :@ruby_api_version, nil
673
+
674
+ Gem::ConfigMap[:MAJOR] = orig_MAJOR
675
+ Gem::ConfigMap[:MINOR] = orig_MINOR
676
+ Gem::ConfigMap[:TEENY] = orig_TEENY
677
+ end
678
+
643
679
  def test_self_ruby_version_1_8_5
644
680
  util_set_RUBY_VERSION '1.8.5'
645
681
 
@@ -921,13 +957,13 @@ class TestGem < Gem::TestCase
921
957
  fp.puts "class TestGem; PLUGINS_LOADED << 'plugin'; end"
922
958
  end
923
959
 
924
- foo1 = quick_spec 'foo', '1' do |s|
960
+ foo1 = util_spec 'foo', '1' do |s|
925
961
  s.files << plugin_path
926
962
  end
927
963
 
928
964
  install_gem foo1
929
965
 
930
- foo2 = quick_spec 'foo', '2' do |s|
966
+ foo2 = util_spec 'foo', '2' do |s|
931
967
  s.files << plugin_path
932
968
  end
933
969
 
@@ -1084,7 +1120,7 @@ class TestGem < Gem::TestCase
1084
1120
 
1085
1121
  ENV['RUBYGEMS_GEMDEPS'] = "-"
1086
1122
 
1087
- assert_equal [a,b,c], Gem.detect_gemdeps
1123
+ assert_equal [a,b,c], Gem.detect_gemdeps.sort_by { |s| s.name }
1088
1124
  end
1089
1125
 
1090
1126
  LIB_PATH = File.expand_path "../../../lib".untaint, __FILE__.untaint
@@ -1209,6 +1245,78 @@ class TestGem < Gem::TestCase
1209
1245
  end
1210
1246
  end
1211
1247
 
1248
+ def test_use_gemdeps
1249
+ rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], nil
1250
+
1251
+ spec = util_spec 'a', 1
1252
+
1253
+ refute spec.activated?
1254
+
1255
+ open 'Gemfile', 'w' do |io|
1256
+ io.write 'gem "a"'
1257
+ end
1258
+
1259
+ Gem.use_gemdeps
1260
+
1261
+ refute spec.activated?
1262
+ ensure
1263
+ ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
1264
+ end
1265
+
1266
+ def test_use_gemdeps_automatic
1267
+ rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], '-'
1268
+
1269
+ spec = util_spec 'a', 1
1270
+
1271
+ refute spec.activated?
1272
+
1273
+ open 'Gemfile', 'w' do |io|
1274
+ io.write 'gem "a"'
1275
+ end
1276
+
1277
+ Gem.use_gemdeps
1278
+
1279
+ assert spec.activated?
1280
+ ensure
1281
+ ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
1282
+ end
1283
+
1284
+ def test_use_gemdeps_disabled
1285
+ rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], ''
1286
+
1287
+ spec = util_spec 'a', 1
1288
+
1289
+ refute spec.activated?
1290
+
1291
+ open 'Gemfile', 'w' do |io|
1292
+ io.write 'gem "a"'
1293
+ end
1294
+
1295
+ Gem.use_gemdeps
1296
+
1297
+ refute spec.activated?
1298
+ ensure
1299
+ ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
1300
+ end
1301
+
1302
+ def test_use_gemdeps_specific
1303
+ rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], 'x'
1304
+
1305
+ spec = util_spec 'a', 1
1306
+
1307
+ refute spec.activated?
1308
+
1309
+ open 'x', 'w' do |io|
1310
+ io.write 'gem "a"'
1311
+ end
1312
+
1313
+ Gem.use_gemdeps
1314
+
1315
+ assert spec.activated?
1316
+ ensure
1317
+ ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
1318
+ end
1319
+
1212
1320
  def with_plugin(path)
1213
1321
  test_plugin_path = File.expand_path("test/rubygems/plugin/#{path}",
1214
1322
  @@project_dir)
@@ -1237,7 +1345,7 @@ class TestGem < Gem::TestCase
1237
1345
  end
1238
1346
 
1239
1347
  def util_exec_gem
1240
- spec, _ = quick_spec 'a', '4' do |s|
1348
+ spec, _ = util_spec 'a', '4' do |s|
1241
1349
  s.executables = ['exec', 'abin']
1242
1350
  end
1243
1351