OSDN Git Service

ruby-1.9.1-rc1
[splhack/AndroidRuby.git] / lib / ruby-1.9.1-rc1 / test / rubygems / test_gem_spec_fetcher.rb
1 require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
2 require 'rubygems/spec_fetcher'
3
4 class TestGemSpecFetcher < RubyGemTestCase
5
6   def setup
7     super
8
9     @uri = URI.parse @gem_repo
10
11     util_setup_fake_fetcher
12
13     @source_index.add_spec @pl1
14
15     @specs = @source_index.gems.sort.map do |name, spec|
16       [spec.name, spec.version, spec.original_platform]
17     end.sort
18
19     @fetcher.data["#{@gem_repo}specs.#{Gem.marshal_version}.gz"] =
20       util_gzip(Marshal.dump(@specs))
21
22     @latest_specs = @source_index.latest_specs.sort.map do |spec|
23       [spec.name, spec.version, spec.original_platform]
24     end
25
26     @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] =
27       util_gzip(Marshal.dump(@latest_specs))
28
29     @sf = Gem::SpecFetcher.new
30   end
31
32   def test_fetch_all
33     @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec.rz"] =
34       util_zip(Marshal.dump(@a1))
35     @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a2.full_name}.gemspec.rz"] =
36       util_zip(Marshal.dump(@a2))
37
38     dep = Gem::Dependency.new 'a', 1
39     specs_and_sources = @sf.fetch dep, true
40
41     spec_names = specs_and_sources.map do |spec, source_uri|
42       [spec.full_name, source_uri]
43     end
44
45     expected = [[@a1.full_name, @gem_repo], [@a2.full_name, @gem_repo]]
46
47     assert_equal expected, spec_names
48
49     assert_same specs_and_sources.first.last, specs_and_sources.last.last
50   end
51
52   def test_fetch_latest
53     @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec.rz"] =
54       util_zip(Marshal.dump(@a1))
55     @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a2.full_name}.gemspec.rz"] =
56       util_zip(Marshal.dump(@a2))
57
58     dep = Gem::Dependency.new 'a', 1
59     specs_and_sources = @sf.fetch dep
60
61     spec_names = specs_and_sources.map do |spec, source_uri|
62       [spec.full_name, source_uri]
63     end
64
65     assert_equal [[@a2.full_name, @gem_repo]], spec_names
66   end
67
68   def test_fetch_legacy_repo
69     @fetcher.data.delete "#{@gem_repo}specs.#{Gem.marshal_version}.gz"
70     @fetcher.data["#{@gem_repo}yaml"] = ''
71     util_setup_source_info_cache @a1, @a2
72
73     dep = Gem::Dependency.new 'a', 1
74     specs = nil
75
76     use_ui @ui do
77       specs = @sf.fetch dep, true
78     end
79
80     expected = <<-EOF
81 WARNING:  RubyGems 1.2+ index not found for:
82 \thttp://gems.example.com/
83
84 RubyGems will revert to legacy indexes degrading performance.
85     EOF
86
87     assert_equal expected, @ui.error
88
89     specs = specs.map { |spec, source_uri| [spec.full_name, source_uri] }
90
91     expected = [
92       [@a1.full_name, @gem_repo],
93       [@a2.full_name, @gem_repo],
94     ]
95
96     assert_equal expected, specs
97   end
98
99   def test_fetch_platform
100     util_set_arch 'i386-linux'
101
102     @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@pl1.original_name}.gemspec.rz"] =
103       util_zip(Marshal.dump(@pl1))
104
105     dep = Gem::Dependency.new 'pl', 1
106     specs_and_sources = @sf.fetch dep
107
108     spec_names = specs_and_sources.map do |spec, source_uri|
109       [spec.full_name, source_uri]
110     end
111
112     assert_equal [[@pl1.full_name, @gem_repo]], spec_names
113   end
114
115   def test_fetch_spec
116     spec_uri = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec"
117     @fetcher.data["#{spec_uri}.rz"] = util_zip(Marshal.dump(@a1))
118
119     spec = @sf.fetch_spec ['a', Gem::Version.new(1), 'ruby'], @uri
120     assert_equal @a1.full_name, spec.full_name
121
122     cache_dir = @sf.cache_dir URI.parse(spec_uri)
123
124     cache_file = File.join cache_dir, "#{@a1.full_name}.gemspec"
125
126     assert File.exist?(cache_file)
127   end
128
129   def test_fetch_spec_cached
130     spec_uri = "#{@gem_repo}/#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec"
131     @fetcher.data["#{spec_uri}.rz"] = nil
132
133     cache_dir = @sf.cache_dir URI.parse(spec_uri)
134     FileUtils.mkdir_p cache_dir
135
136     cache_file = File.join cache_dir, "#{@a1.full_name}.gemspec"
137
138     open cache_file, 'wb' do |io|
139       Marshal.dump @a1, io
140     end
141
142     spec = @sf.fetch_spec ['a', Gem::Version.new(1), 'ruby'], @uri
143     assert_equal @a1.full_name, spec.full_name
144   end
145
146   def test_fetch_spec_platform
147     @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@pl1.original_name}.gemspec.rz"] =
148       util_zip(Marshal.dump(@pl1))
149
150     spec = @sf.fetch_spec ['pl', Gem::Version.new(1), 'i386-linux'], @uri
151
152     assert_equal @pl1.full_name, spec.full_name
153   end
154
155   def test_fetch_spec_platform_ruby
156     @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec.rz"] =
157       util_zip(Marshal.dump(@a1))
158
159     spec = @sf.fetch_spec ['a', Gem::Version.new(1), nil], @uri
160     assert_equal @a1.full_name, spec.full_name
161
162     spec = @sf.fetch_spec ['a', Gem::Version.new(1), ''], @uri
163     assert_equal @a1.full_name, spec.full_name
164   end
165
166   def test_find_matching_all
167     dep = Gem::Dependency.new 'a', 1
168     specs = @sf.find_matching dep, true
169
170     expected = [
171       [['a', Gem::Version.new(1), Gem::Platform::RUBY], @gem_repo],
172       [['a', Gem::Version.new(2), Gem::Platform::RUBY], @gem_repo],
173     ]
174
175     assert_equal expected, specs
176   end
177
178   def test_find_matching_latest
179     dep = Gem::Dependency.new 'a', 1
180     specs = @sf.find_matching dep
181
182     expected = [
183       [['a', Gem::Version.new(2), Gem::Platform::RUBY], @gem_repo],
184     ]
185
186     assert_equal expected, specs
187   end
188
189   def test_find_matching_platform
190     util_set_arch 'i386-linux'
191
192     dep = Gem::Dependency.new 'pl', 1
193     specs = @sf.find_matching dep
194
195     expected = [
196       [['pl', Gem::Version.new(1), 'i386-linux'], @gem_repo],
197     ]
198
199     assert_equal expected, specs
200
201     util_set_arch 'i386-freebsd6'
202
203     dep = Gem::Dependency.new 'pl', 1
204     specs = @sf.find_matching dep
205
206     assert_equal [], specs
207   end
208
209   def test_find_all_platforms
210     util_set_arch 'i386-freebsd6'
211
212     dep = Gem::Dependency.new 'pl', 1
213     specs = @sf.find_matching dep, false, false
214
215     expected = [
216       [['pl', Gem::Version.new(1), 'i386-linux'], @gem_repo],
217     ]
218
219     assert_equal expected, specs
220   end
221
222   def test_list
223     specs = @sf.list
224
225     assert_equal [@uri], specs.keys
226     assert_equal @latest_specs, specs[@uri].sort
227   end
228
229   def test_list_all
230     specs = @sf.list true
231
232     assert_equal [@uri], specs.keys
233
234     assert_equal @specs, specs[@uri].sort
235   end
236
237   def test_list_cache
238     specs = @sf.list
239
240     assert !specs[@uri].empty?
241
242     @fetcher.data["#{@gem_repo}/latest_specs.#{Gem.marshal_version}.gz"] = nil
243
244     cached_specs = @sf.list
245
246     assert_equal specs, cached_specs
247   end
248
249   def test_list_cache_all
250     specs = @sf.list true
251
252     assert !specs[@uri].empty?
253
254     @fetcher.data["#{@gem_repo}/specs.#{Gem.marshal_version}.gz"] = nil
255
256     cached_specs = @sf.list true
257
258     assert_equal specs, cached_specs
259   end
260
261   def test_list_latest_all
262     specs = @sf.list false
263
264     assert_equal [@latest_specs], specs.values
265
266     specs = @sf.list true
267
268     assert_equal [@specs], specs.values, 'specs file not loaded'
269   end
270
271   def test_load_specs
272     specs = @sf.load_specs @uri, 'specs'
273
274     expected = [
275       ['a',      Gem::Version.new(1),     Gem::Platform::RUBY],
276       ['a',      Gem::Version.new(2),     Gem::Platform::RUBY],
277       ['a_evil', Gem::Version.new(9),     Gem::Platform::RUBY],
278       ['c',      Gem::Version.new('1.2'), Gem::Platform::RUBY],
279       ['pl',     Gem::Version.new(1),     'i386-linux'],
280     ]
281
282     assert_equal expected, specs
283
284     cache_dir = File.join Gem.user_home, '.gem', 'specs', 'gems.example.com%80'
285     assert File.exist?(cache_dir), "#{cache_dir} does not exist"
286
287     cache_file = File.join cache_dir, "specs.#{Gem.marshal_version}"
288     assert File.exist?(cache_file)
289   end
290
291   def test_load_specs_cached
292     @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] = nil
293     @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}"] =
294       ' ' * Marshal.dump(@latest_specs).length
295
296     cache_dir = File.join Gem.user_home, '.gem', 'specs', 'gems.example.com%80'
297
298     FileUtils.mkdir_p cache_dir
299
300     cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}"
301
302     open cache_file, 'wb' do |io|
303       Marshal.dump @latest_specs, io
304     end
305
306     latest_specs = @sf.load_specs @uri, 'latest_specs'
307
308     assert_equal @latest_specs, latest_specs
309   end
310
311 end
312