rubygems-update 0.9.5 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rubygems-update might be problematic. Click here for more details.
- data/ChangeLog +135 -0
- data/Rakefile +3 -1
- data/lib/rubygems.rb +27 -38
- data/lib/rubygems/commands/install_command.rb +2 -0
- data/lib/rubygems/commands/mirror_command.rb +8 -2
- data/lib/rubygems/commands/query_command.rb +3 -1
- data/lib/rubygems/commands/server_command.rb +3 -3
- data/lib/rubygems/commands/unpack_command.rb +11 -4
- data/lib/rubygems/commands/update_command.rb +114 -108
- data/lib/rubygems/defaults.rb +46 -0
- data/lib/rubygems/dependency_installer.rb +13 -2
- data/lib/rubygems/indexer.rb +1 -1
- data/lib/rubygems/install_update_options.rb +7 -0
- data/lib/rubygems/installer.rb +66 -11
- data/lib/rubygems/package.rb +2 -1
- data/lib/rubygems/platform.rb +24 -30
- data/lib/rubygems/remote_fetcher.rb +7 -3
- data/lib/rubygems/require_paths_builder.rb +15 -0
- data/lib/rubygems/rubygems_version.rb +1 -1
- data/lib/rubygems/security.rb +1 -1
- data/lib/rubygems/server.rb +18 -3
- data/lib/rubygems/source_index.rb +20 -23
- data/lib/rubygems/source_info_cache.rb +3 -3
- data/lib/rubygems/specification.rb +64 -31
- data/lib/rubygems/uninstaller.rb +1 -1
- data/lib/rubygems/validator.rb +3 -2
- data/lib/rubygems/version.rb +10 -3
- data/setup.rb +30 -6
- data/test/gemutilities.rb +23 -13
- data/test/gemutilities.rbc +0 -0
- data/test/mockgemui.rbc +0 -0
- data/test/test_gem.rb +46 -76
- data/test/test_gem.rbc +0 -0
- data/test/test_gem_commands_build_command.rb +12 -12
- data/test/test_gem_commands_dependency_command.rb +10 -10
- data/test/test_gem_commands_mirror_command.rb +9 -4
- data/test/test_gem_commands_query_command.rb +7 -3
- data/test/test_gem_commands_server_command.rb +27 -0
- data/test/test_gem_commands_unpack_command.rb +20 -2
- data/test/test_gem_format.rb +1 -1
- data/test/test_gem_indexer.rb +5 -5
- data/test/test_gem_install_update_options.rb +1 -1
- data/test/test_gem_installer.rb +149 -60
- data/test/test_gem_platform.rb +19 -0
- data/test/test_gem_remote_fetcher.rb +19 -2
- data/test/test_gem_server.rb +44 -1
- data/test/test_gem_source_index.rb +2 -2
- data/test/test_gem_specification.rb +300 -168
- data/test/test_gem_version.rb +15 -0
- data/test/test_kernel.rb +19 -19
- metadata +46 -42
- data/lib/rubygems/remote_installer.rb +0 -195
- data/test/test_gem_remote_installer.rb +0 -161
data/test/test_gem_platform.rb
CHANGED
@@ -5,6 +5,19 @@ require 'rbconfig'
|
|
5
5
|
|
6
6
|
class TestGemPlatform < RubyGemTestCase
|
7
7
|
|
8
|
+
def test_self_const_missing
|
9
|
+
consts = [:DARWIN, :LINUX_586, :MSWIN32, :PPC_DARWIN, :WIN32, :X86_LINUX]
|
10
|
+
|
11
|
+
consts.each do |const|
|
12
|
+
e = assert_raise NameError do
|
13
|
+
Gem::Platform.const_missing const
|
14
|
+
end
|
15
|
+
|
16
|
+
assert_equal "#{const} has been removed, use CURRENT instead",
|
17
|
+
e.message
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
8
21
|
def test_self_local
|
9
22
|
util_set_arch 'i686-darwin8.10.1'
|
10
23
|
|
@@ -19,6 +32,7 @@ class TestGemPlatform < RubyGemTestCase
|
|
19
32
|
end
|
20
33
|
|
21
34
|
def test_self_new
|
35
|
+
assert_equal Gem::Platform.local, Gem::Platform.new(Gem::Platform::CURRENT)
|
22
36
|
assert_equal Gem::Platform::RUBY, Gem::Platform.new(Gem::Platform::RUBY)
|
23
37
|
assert_equal Gem::Platform::RUBY, Gem::Platform.new(nil)
|
24
38
|
assert_equal Gem::Platform::RUBY, Gem::Platform.new('')
|
@@ -59,10 +73,15 @@ class TestGemPlatform < RubyGemTestCase
|
|
59
73
|
'i386-mingw32' => ['x86', 'mingw32', nil],
|
60
74
|
'i386-mswin32' => ['x86', 'mswin32', nil],
|
61
75
|
'i386-mswin32_80' => ['x86', 'mswin32', '80'],
|
76
|
+
'i386-mswin32-80' => ['x86', 'mswin32', '80'],
|
77
|
+
'x86-mswin32' => ['x86', 'mswin32', nil],
|
78
|
+
'x86-mswin32_60' => ['x86', 'mswin32', '60'],
|
79
|
+
'x86-mswin32-60' => ['x86', 'mswin32', '60'],
|
62
80
|
'i386-netbsdelf' => ['x86', 'netbsdelf', nil],
|
63
81
|
'i386-openbsd4.0' => ['x86', 'openbsd', '4.0'],
|
64
82
|
'i386-solaris2.10' => ['x86', 'solaris', '2.10'],
|
65
83
|
'i386-solaris2.8' => ['x86', 'solaris', '2.8'],
|
84
|
+
'mswin32' => ['x86', 'mswin32', nil],
|
66
85
|
'x86_64-linux' => ['x86_64', 'linux', nil],
|
67
86
|
'x86_64-openbsd3.9' => ['x86_64', 'openbsd', '3.9'],
|
68
87
|
'x86_64-openbsd4.0' => ['x86_64', 'openbsd', '4.0'],
|
@@ -140,11 +140,12 @@ gems:
|
|
140
140
|
raise SocketError
|
141
141
|
end
|
142
142
|
|
143
|
+
uri = 'http://gems.example.com/yaml'
|
143
144
|
e = assert_raise Gem::RemoteFetcher::FetchError do
|
144
|
-
fetcher.fetch_size
|
145
|
+
fetcher.fetch_size uri
|
145
146
|
end
|
146
147
|
|
147
|
-
assert_equal
|
148
|
+
assert_equal "SocketError (SocketError)\n\tgetting size of #{uri}", e.message
|
148
149
|
end
|
149
150
|
|
150
151
|
def test_no_proxy
|
@@ -231,6 +232,22 @@ gems:
|
|
231
232
|
assert_equal 'EOFError: EOFError reading uri', e.message
|
232
233
|
end
|
233
234
|
|
235
|
+
def test_fetch_path_open_uri_http_error
|
236
|
+
fetcher = Gem::RemoteFetcher.new nil
|
237
|
+
|
238
|
+
def fetcher.open_uri_or_path(uri)
|
239
|
+
io = StringIO.new 'went boom'
|
240
|
+
err = OpenURI::HTTPError.new 'error', io
|
241
|
+
raise err
|
242
|
+
end
|
243
|
+
|
244
|
+
e = assert_raise Gem::RemoteFetcher::FetchError do
|
245
|
+
fetcher.fetch_path 'uri'
|
246
|
+
end
|
247
|
+
|
248
|
+
assert_equal "OpenURI::HTTPError: error reading uri\n\twent boom", e.message
|
249
|
+
end
|
250
|
+
|
234
251
|
def test_fetch_path_socket_error
|
235
252
|
fetcher = Gem::RemoteFetcher.new nil
|
236
253
|
|
data/test/test_gem_server.rb
CHANGED
@@ -4,6 +4,7 @@ require 'rubygems/server'
|
|
4
4
|
require 'stringio'
|
5
5
|
|
6
6
|
class Gem::Server
|
7
|
+
attr_accessor :source_index
|
7
8
|
attr_reader :server
|
8
9
|
end
|
9
10
|
|
@@ -25,6 +26,7 @@ class TestGemServer < RubyGemTestCase
|
|
25
26
|
|
26
27
|
@server.quick @req, @res
|
27
28
|
|
29
|
+
assert_equal 200, @res.status, @res.body
|
28
30
|
assert_match %r| \d\d:\d\d:\d\d |, @res['date']
|
29
31
|
assert_equal 'text/plain', @res['content-type']
|
30
32
|
assert_equal "a-1", @res.body
|
@@ -36,6 +38,7 @@ class TestGemServer < RubyGemTestCase
|
|
36
38
|
|
37
39
|
@server.quick @req, @res
|
38
40
|
|
41
|
+
assert_equal 200, @res.status, @res.body
|
39
42
|
assert_match %r| \d\d:\d\d:\d\d |, @res['date']
|
40
43
|
assert_equal 'text/plain', @res['content-type']
|
41
44
|
assert_equal "a-1", Zlib::Inflate.inflate(@res.body)
|
@@ -47,6 +50,7 @@ class TestGemServer < RubyGemTestCase
|
|
47
50
|
|
48
51
|
@server.quick @req, @res
|
49
52
|
|
53
|
+
assert_equal 200, @res.status, @res.body
|
50
54
|
assert @res['date']
|
51
55
|
assert_equal 'text/plain', @res['content-type']
|
52
56
|
yaml = Zlib::Inflate.inflate(@res.body)
|
@@ -55,15 +59,54 @@ class TestGemServer < RubyGemTestCase
|
|
55
59
|
assert_match %r|version: "1"|, yaml
|
56
60
|
end
|
57
61
|
|
62
|
+
def test_quick_a_1_mswin32_gemspec_rz
|
63
|
+
a1_p = quick_gem 'a', '1' do |s| s.platform = Gem::Platform.local end
|
64
|
+
si = Gem::SourceIndex.new @a1.full_name => @a1, a1_p.full_name => a1_p
|
65
|
+
@server.source_index = si
|
66
|
+
|
67
|
+
data = StringIO.new "GET /quick/a-1-#{Gem::Platform.local}.gemspec.rz HTTP/1.0\r\n\r\n"
|
68
|
+
@req.parse data
|
69
|
+
|
70
|
+
@server.quick @req, @res
|
71
|
+
|
72
|
+
assert_equal 200, @res.status, @res.body
|
73
|
+
assert @res['date']
|
74
|
+
assert_equal 'text/plain', @res['content-type']
|
75
|
+
yaml = Zlib::Inflate.inflate(@res.body)
|
76
|
+
assert_match %r|Gem::Specification|, yaml
|
77
|
+
assert_match %r|name: a|, yaml
|
78
|
+
assert_match %r|version: "1"|, yaml
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_quick_common_substrings
|
82
|
+
ab1 = quick_gem 'ab', '1'
|
83
|
+
si = Gem::SourceIndex.new @a1.full_name => @a1, ab1.full_name => ab1
|
84
|
+
@server.source_index = si
|
85
|
+
|
86
|
+
data = StringIO.new "GET /quick/a-1.gemspec.rz HTTP/1.0\r\n\r\n"
|
87
|
+
@req.parse data
|
88
|
+
|
89
|
+
@server.quick @req, @res
|
90
|
+
|
91
|
+
assert_equal 200, @res.status, @res.body
|
92
|
+
assert @res['date']
|
93
|
+
assert_equal 'text/plain', @res['content-type']
|
94
|
+
yaml = Zlib::Inflate.inflate @res.body
|
95
|
+
assert_match %r|Gem::Specification|, yaml
|
96
|
+
assert_match %r|name: a$|, yaml
|
97
|
+
assert_match %r|version: "1"|, yaml
|
98
|
+
end
|
99
|
+
|
58
100
|
def test_quick_z_9_gemspec_rz
|
59
101
|
data = StringIO.new "GET /quick/z-9.gemspec.rz HTTP/1.0\r\n\r\n"
|
60
102
|
@req.parse data
|
61
103
|
|
62
104
|
@server.quick @req, @res
|
63
105
|
|
106
|
+
assert_equal 404, @res.status, @res.body
|
64
107
|
assert_match %r| \d\d:\d\d:\d\d |, @res['date']
|
65
108
|
assert_equal 'text/plain', @res['content-type']
|
66
|
-
assert_equal '', @res.body
|
109
|
+
assert_equal 'No gems found matching "z" "9" nil', @res.body
|
67
110
|
assert_equal 404, @res.status
|
68
111
|
end
|
69
112
|
|
@@ -178,7 +178,7 @@ class TestGemSourceIndex < RubyGemTestCase
|
|
178
178
|
end
|
179
179
|
|
180
180
|
def test_latest_specs
|
181
|
-
spec = quick_gem @gem1.name, '
|
181
|
+
spec = quick_gem @gem1.name, '1'
|
182
182
|
@source_index.add_spec spec
|
183
183
|
|
184
184
|
expected = [
|
@@ -223,7 +223,7 @@ class TestGemSourceIndex < RubyGemTestCase
|
|
223
223
|
|
224
224
|
def test_search
|
225
225
|
assert_equal [@gem1, @gem4], @source_index.search("gem_one")
|
226
|
-
assert_equal [@gem1], @source_index.search("gem_one", "=
|
226
|
+
assert_equal [@gem1], @source_index.search("gem_one", "= 2")
|
227
227
|
|
228
228
|
assert_equal [], @source_index.search("bogusstring")
|
229
229
|
assert_equal [], @source_index.search("gem_one", "= 3.2.1")
|
@@ -47,12 +47,13 @@ end
|
|
47
47
|
def setup
|
48
48
|
super
|
49
49
|
|
50
|
-
@
|
50
|
+
@a1 = quick_gem 'a', '1' do |s|
|
51
51
|
s.executable = 'exec'
|
52
52
|
s.extensions << 'ext/a/extconf.rb'
|
53
53
|
s.has_rdoc = 'true'
|
54
54
|
s.test_file = 'test/suite.rb'
|
55
55
|
s.requirements << 'A working computer'
|
56
|
+
s.rubyforge_project = 'example'
|
56
57
|
|
57
58
|
s.add_dependency 'rake', '> 0.4'
|
58
59
|
s.add_dependency 'jabber4r', '> 0.0.0'
|
@@ -62,9 +63,14 @@ end
|
|
62
63
|
s.files = %w[lib/code.rb]
|
63
64
|
end
|
64
65
|
|
65
|
-
@
|
66
|
+
@a2 = quick_gem 'a', '2' do |s|
|
66
67
|
s.files = %w[lib/code.rb]
|
67
68
|
end
|
69
|
+
|
70
|
+
FileUtils.mkdir_p File.join(@tempdir, 'bin')
|
71
|
+
File.open File.join(@tempdir, 'bin', 'exec'), 'w' do |fp|
|
72
|
+
fp.puts "#!#{Gem.ruby}"
|
73
|
+
end
|
68
74
|
end
|
69
75
|
|
70
76
|
def test_self_attribute_names
|
@@ -107,10 +113,10 @@ end
|
|
107
113
|
end
|
108
114
|
|
109
115
|
def test_self_load
|
110
|
-
spec = File.join @gemhome, 'specifications', "#{@
|
116
|
+
spec = File.join @gemhome, 'specifications', "#{@a2.full_name}.gemspec"
|
111
117
|
gs = Gem::Specification.load spec
|
112
118
|
|
113
|
-
assert_equal @
|
119
|
+
assert_equal @a2, gs
|
114
120
|
end
|
115
121
|
|
116
122
|
def test_self_load_legacy_ruby
|
@@ -119,7 +125,7 @@ end
|
|
119
125
|
assert_equal '0.4.0', s.version.to_s
|
120
126
|
assert_equal true, s.has_rdoc?
|
121
127
|
assert_equal Gem::Specification::TODAY, s.date
|
122
|
-
assert s.required_ruby_version.satisfied_by?(Gem::Version.new('
|
128
|
+
assert s.required_ruby_version.satisfied_by?(Gem::Version.new('1'))
|
123
129
|
assert_equal false, s.has_unit_tests?
|
124
130
|
end
|
125
131
|
|
@@ -129,7 +135,7 @@ end
|
|
129
135
|
assert_equal '0.4.0', s.version.to_s
|
130
136
|
assert_equal true, s.has_rdoc?
|
131
137
|
#assert_equal Date.today, s.date
|
132
|
-
#assert s.required_ruby_version.satisfied_by?(Gem::Version.new('
|
138
|
+
#assert s.required_ruby_version.satisfied_by?(Gem::Version.new('1'))
|
133
139
|
assert_equal false, s.has_unit_tests?
|
134
140
|
end
|
135
141
|
|
@@ -197,10 +203,10 @@ end
|
|
197
203
|
end
|
198
204
|
|
199
205
|
def test__dump
|
200
|
-
@
|
201
|
-
@
|
206
|
+
@a2.platform = Gem::Platform.local
|
207
|
+
@a2.instance_variable_set :@original_platform, 'old_platform'
|
202
208
|
|
203
|
-
data = Marshal.dump @
|
209
|
+
data = Marshal.dump @a2
|
204
210
|
|
205
211
|
same_spec = Marshal.load data
|
206
212
|
|
@@ -208,64 +214,64 @@ end
|
|
208
214
|
end
|
209
215
|
|
210
216
|
def test_author
|
211
|
-
assert_equal 'A User', @
|
217
|
+
assert_equal 'A User', @a1.author
|
212
218
|
end
|
213
219
|
|
214
220
|
def test_authors
|
215
|
-
assert_equal ['A User'], @
|
221
|
+
assert_equal ['A User'], @a1.authors
|
216
222
|
end
|
217
223
|
|
218
224
|
def test_bindir_equals
|
219
|
-
@
|
225
|
+
@a1.bindir = 'apps'
|
220
226
|
|
221
|
-
assert_equal 'apps', @
|
227
|
+
assert_equal 'apps', @a1.bindir
|
222
228
|
end
|
223
229
|
|
224
230
|
def test_bindir_equals_nil
|
225
|
-
@
|
226
|
-
@
|
231
|
+
@a2.bindir = nil
|
232
|
+
@a2.executable = 'app'
|
227
233
|
|
228
|
-
assert_equal nil, @
|
229
|
-
assert_equal %w[lib/code.rb app], @
|
234
|
+
assert_equal nil, @a2.bindir
|
235
|
+
assert_equal %w[lib/code.rb app], @a2.files
|
230
236
|
end
|
231
237
|
|
232
238
|
def test_date
|
233
|
-
assert_equal Gem::Specification::TODAY, @
|
239
|
+
assert_equal Gem::Specification::TODAY, @a1.date
|
234
240
|
end
|
235
241
|
|
236
242
|
def test_date_equals_date
|
237
|
-
@
|
238
|
-
assert_equal Time.local(2003, 9, 17, 0,0,0), @
|
243
|
+
@a1.date = Date.new(2003, 9, 17)
|
244
|
+
assert_equal Time.local(2003, 9, 17, 0,0,0), @a1.date
|
239
245
|
end
|
240
246
|
|
241
247
|
def test_date_equals_string
|
242
|
-
@
|
243
|
-
assert_equal Time.local(2003, 9, 17, 0,0,0), @
|
248
|
+
@a1.date = '2003-09-17'
|
249
|
+
assert_equal Time.local(2003, 9, 17, 0,0,0), @a1.date
|
244
250
|
end
|
245
251
|
|
246
252
|
def test_date_equals_time
|
247
|
-
@
|
248
|
-
assert_equal Time.local(2003, 9, 17, 0,0,0), @
|
253
|
+
@a1.date = Time.local(2003, 9, 17, 0,0,0)
|
254
|
+
assert_equal Time.local(2003, 9, 17, 0,0,0), @a1.date
|
249
255
|
end
|
250
256
|
|
251
257
|
def test_date_equals_time_local
|
252
258
|
# HACK PDT
|
253
|
-
@
|
254
|
-
assert_equal Time.local(2003, 9, 17, 0,0,0), @
|
259
|
+
@a1.date = Time.local(2003, 9, 17, 19,50,0)
|
260
|
+
assert_equal Time.local(2003, 9, 17, 0,0,0), @a1.date
|
255
261
|
end
|
256
262
|
|
257
263
|
def test_date_equals_time_utc
|
258
264
|
# HACK PDT
|
259
|
-
@
|
260
|
-
assert_equal Time.local(2003, 9, 17, 0,0,0), @
|
265
|
+
@a1.date = Time.local(2003, 9, 17, 19,50,0)
|
266
|
+
assert_equal Time.local(2003, 9, 17, 0,0,0), @a1.date
|
261
267
|
end
|
262
268
|
|
263
269
|
def test_default_executable
|
264
|
-
assert_equal 'exec', @
|
270
|
+
assert_equal 'exec', @a1.default_executable
|
265
271
|
|
266
|
-
@
|
267
|
-
@
|
268
|
-
assert_equal nil, @
|
272
|
+
@a1.default_executable = nil
|
273
|
+
@a1.instance_variable_set :@executables, nil
|
274
|
+
assert_equal nil, @a1.default_executable
|
269
275
|
end
|
270
276
|
|
271
277
|
def test_dependencies
|
@@ -273,11 +279,11 @@ end
|
|
273
279
|
jabber = Gem::Dependency.new 'jabber4r', '> 0.0.0'
|
274
280
|
pqa = Gem::Dependency.new 'pqa', ['> 0.4', '<= 0.6']
|
275
281
|
|
276
|
-
assert_equal [rake, jabber, pqa], @
|
282
|
+
assert_equal [rake, jabber, pqa], @a1.dependencies
|
277
283
|
end
|
278
284
|
|
279
285
|
def test_description
|
280
|
-
assert_equal 'This is a test description', @
|
286
|
+
assert_equal 'This is a test description', @a1.description
|
281
287
|
end
|
282
288
|
|
283
289
|
def test_eql_eh
|
@@ -290,10 +296,10 @@ end
|
|
290
296
|
end
|
291
297
|
|
292
298
|
def test_equals2
|
293
|
-
assert_equal @
|
294
|
-
assert_equal @
|
295
|
-
assert_not_equal @
|
296
|
-
assert_not_equal @
|
299
|
+
assert_equal @a1, @a1
|
300
|
+
assert_equal @a1, @a1.dup
|
301
|
+
assert_not_equal @a1, @a2
|
302
|
+
assert_not_equal @a1, Object.new
|
297
303
|
end
|
298
304
|
|
299
305
|
# The cgikit specification was reported to be causing trouble in at least
|
@@ -322,42 +328,42 @@ end
|
|
322
328
|
end
|
323
329
|
|
324
330
|
def test_equals2_default_executable
|
325
|
-
spec = @
|
331
|
+
spec = @a1.dup
|
326
332
|
spec.default_executable = 'xx'
|
327
333
|
|
328
|
-
assert_not_equal @
|
329
|
-
assert_not_equal spec, @
|
334
|
+
assert_not_equal @a1, spec
|
335
|
+
assert_not_equal spec, @a1
|
330
336
|
end
|
331
337
|
|
332
338
|
def test_equals2_extensions
|
333
|
-
spec = @
|
339
|
+
spec = @a1.dup
|
334
340
|
spec.extensions = 'xx'
|
335
341
|
|
336
|
-
assert_not_equal @
|
337
|
-
assert_not_equal spec, @
|
342
|
+
assert_not_equal @a1, spec
|
343
|
+
assert_not_equal spec, @a1
|
338
344
|
end
|
339
345
|
|
340
346
|
def test_executables
|
341
|
-
@
|
342
|
-
assert_equal %w[app], @
|
347
|
+
@a1.executable = 'app'
|
348
|
+
assert_equal %w[app], @a1.executables
|
343
349
|
end
|
344
350
|
|
345
351
|
def test_executable_equals
|
346
|
-
@
|
347
|
-
assert_equal 'app', @
|
348
|
-
assert_equal %w[lib/code.rb bin/app], @
|
352
|
+
@a2.executable = 'app'
|
353
|
+
assert_equal 'app', @a2.executable
|
354
|
+
assert_equal %w[lib/code.rb bin/app], @a2.files
|
349
355
|
end
|
350
356
|
|
351
357
|
def test_extensions
|
352
|
-
assert_equal ['ext/a/extconf.rb'], @
|
358
|
+
assert_equal ['ext/a/extconf.rb'], @a1.extensions
|
353
359
|
end
|
354
360
|
|
355
361
|
def test_files
|
356
|
-
@
|
357
|
-
@
|
358
|
-
@
|
359
|
-
@
|
360
|
-
@
|
362
|
+
@a1.files = %w(files bin/common)
|
363
|
+
@a1.test_files = %w(test_files bin/common)
|
364
|
+
@a1.executables = %w(executables common)
|
365
|
+
@a1.extra_rdoc_files = %w(extra_rdoc_files bin/common)
|
366
|
+
@a1.extensions = %w(extensions bin/common)
|
361
367
|
|
362
368
|
expected = %w[
|
363
369
|
bin/common
|
@@ -367,113 +373,123 @@ end
|
|
367
373
|
files
|
368
374
|
test_files
|
369
375
|
]
|
370
|
-
assert_equal expected, @
|
376
|
+
assert_equal expected, @a1.files.sort
|
371
377
|
end
|
372
378
|
|
373
379
|
def test_files_duplicate
|
374
|
-
@
|
375
|
-
@
|
376
|
-
@
|
380
|
+
@a2.files = %w[a b c d b]
|
381
|
+
@a2.extra_rdoc_files = %w[x y z x]
|
382
|
+
@a2.normalize
|
377
383
|
|
378
|
-
assert_equal %w[a b c d x y z], @
|
379
|
-
assert_equal %w[x y z], @
|
384
|
+
assert_equal %w[a b c d x y z], @a2.files
|
385
|
+
assert_equal %w[x y z], @a2.extra_rdoc_files
|
380
386
|
end
|
381
387
|
|
382
388
|
def test_files_extra_rdoc_files
|
383
|
-
@
|
384
|
-
@
|
385
|
-
@
|
386
|
-
assert_equal %w[a b c d x y z], @
|
389
|
+
@a2.files = %w[a b c d]
|
390
|
+
@a2.extra_rdoc_files = %w[x y z]
|
391
|
+
@a2.normalize
|
392
|
+
assert_equal %w[a b c d x y z], @a2.files
|
387
393
|
end
|
388
394
|
|
389
395
|
def test_files_non_array
|
390
|
-
@
|
391
|
-
@
|
392
|
-
@
|
393
|
-
@
|
394
|
-
@
|
396
|
+
@a1.files = "F"
|
397
|
+
@a1.test_files = "TF"
|
398
|
+
@a1.executables = "X"
|
399
|
+
@a1.extra_rdoc_files = "ERF"
|
400
|
+
@a1.extensions = "E"
|
395
401
|
|
396
|
-
assert_equal %w[E ERF F TF bin/X], @
|
402
|
+
assert_equal %w[E ERF F TF bin/X], @a1.files.sort
|
397
403
|
end
|
398
404
|
|
399
405
|
def test_files_non_array_pathological
|
400
|
-
@
|
401
|
-
@
|
402
|
-
@
|
403
|
-
@
|
404
|
-
@
|
406
|
+
@a1.instance_variable_set :@files, "F"
|
407
|
+
@a1.instance_variable_set :@test_files, "TF"
|
408
|
+
@a1.instance_variable_set :@extra_rdoc_files, "ERF"
|
409
|
+
@a1.instance_variable_set :@extensions, "E"
|
410
|
+
@a1.instance_variable_set :@executables, "X"
|
411
|
+
|
412
|
+
assert_equal %w[E ERF F TF bin/X], @a1.files.sort
|
413
|
+
assert_kind_of Integer, @a1.hash
|
414
|
+
end
|
405
415
|
|
406
|
-
|
407
|
-
|
416
|
+
def test_full_gem_path
|
417
|
+
assert_equal File.join(@gemhome, 'gems', @a1.full_name),
|
418
|
+
@a1.full_gem_path
|
419
|
+
|
420
|
+
@a1.original_platform = 'mswin32'
|
421
|
+
|
422
|
+
assert_equal File.join(@gemhome, 'gems', @a1.original_name),
|
423
|
+
@a1.full_gem_path
|
408
424
|
end
|
409
425
|
|
410
426
|
def test_full_name
|
411
|
-
assert_equal 'a-
|
427
|
+
assert_equal 'a-1', @a1.full_name
|
412
428
|
|
413
|
-
@
|
414
|
-
assert_equal 'a-
|
429
|
+
@a1.platform = Gem::Platform.new ['universal', 'darwin', nil]
|
430
|
+
assert_equal 'a-1-universal-darwin', @a1.full_name
|
415
431
|
|
416
|
-
@
|
417
|
-
assert_equal 'a-
|
432
|
+
@a1.instance_variable_set :@new_platform, 'mswin32'
|
433
|
+
assert_equal 'a-1-mswin32', @a1.full_name, 'legacy'
|
418
434
|
|
419
435
|
return if win_platform?
|
420
436
|
|
421
|
-
@
|
422
|
-
assert_equal 'a-
|
437
|
+
@a1.platform = 'current'
|
438
|
+
assert_equal 'a-1-x86-darwin-8', @a1.full_name
|
423
439
|
end
|
424
440
|
|
425
441
|
def test_full_name_windows
|
426
442
|
test_cases = {
|
427
|
-
'i386-mswin32' => 'a-
|
428
|
-
'i386-mswin32_80' => 'a-
|
429
|
-
'i386-mingw32' => 'a-
|
443
|
+
'i386-mswin32' => 'a-1-x86-mswin32-60',
|
444
|
+
'i386-mswin32_80' => 'a-1-x86-mswin32-80',
|
445
|
+
'i386-mingw32' => 'a-1-x86-mingw32'
|
430
446
|
}
|
431
447
|
|
432
448
|
test_cases.each do |arch, expected|
|
433
449
|
util_set_arch arch
|
434
|
-
@
|
435
|
-
assert_equal expected, @
|
450
|
+
@a1.platform = 'current'
|
451
|
+
assert_equal expected, @a1.full_name
|
436
452
|
end
|
437
453
|
end
|
438
454
|
|
439
455
|
def test_has_rdoc_eh
|
440
|
-
assert_equal true, @
|
456
|
+
assert_equal true, @a1.has_rdoc?
|
441
457
|
end
|
442
458
|
|
443
459
|
def test_hash
|
444
|
-
assert_equal @
|
445
|
-
assert_equal @
|
446
|
-
assert_not_equal @
|
460
|
+
assert_equal @a1.hash, @a1.hash
|
461
|
+
assert_equal @a1.hash, @a1.dup.hash
|
462
|
+
assert_not_equal @a1.hash, @a2.hash
|
447
463
|
end
|
448
464
|
|
449
465
|
def test_lib_files
|
450
|
-
@
|
466
|
+
@a1.files = %w[lib/foo.rb Rakefile]
|
451
467
|
|
452
|
-
assert_equal %w[lib/foo.rb], @
|
468
|
+
assert_equal %w[lib/foo.rb], @a1.lib_files
|
453
469
|
end
|
454
470
|
|
455
471
|
def test_name
|
456
|
-
assert_equal 'a', @
|
472
|
+
assert_equal 'a', @a1.name
|
457
473
|
end
|
458
474
|
|
459
475
|
def test_original_name
|
460
|
-
assert_equal 'a-
|
476
|
+
assert_equal 'a-1', @a1.full_name
|
461
477
|
|
462
|
-
@
|
463
|
-
@
|
464
|
-
assert_equal 'a-
|
478
|
+
@a1.platform = 'i386-linux'
|
479
|
+
@a1.instance_variable_set :@original_platform, 'i386-linux'
|
480
|
+
assert_equal 'a-1-i386-linux', @a1.original_name
|
465
481
|
end
|
466
482
|
|
467
483
|
def test_platform
|
468
|
-
assert_equal Gem::Platform::RUBY, @
|
484
|
+
assert_equal Gem::Platform::RUBY, @a1.platform
|
469
485
|
end
|
470
486
|
|
471
487
|
def test_platform_equals
|
472
|
-
@
|
473
|
-
assert_equal Gem::Platform::RUBY, @
|
488
|
+
@a1.platform = nil
|
489
|
+
assert_equal Gem::Platform::RUBY, @a1.platform
|
474
490
|
|
475
|
-
@
|
476
|
-
assert_equal Gem::Platform::RUBY, @
|
491
|
+
@a1.platform = Gem::Platform::RUBY
|
492
|
+
assert_equal Gem::Platform::RUBY, @a1.platform
|
477
493
|
|
478
494
|
test_cases = {
|
479
495
|
'i386-mswin32' => ['x86', 'mswin32', '60'],
|
@@ -484,29 +500,35 @@ end
|
|
484
500
|
|
485
501
|
test_cases.each do |arch, expected|
|
486
502
|
util_set_arch arch
|
487
|
-
@
|
488
|
-
assert_equal Gem::Platform.new(expected), @
|
503
|
+
@a1.platform = Gem::Platform::CURRENT
|
504
|
+
assert_equal Gem::Platform.new(expected), @a1.platform
|
489
505
|
end
|
490
506
|
end
|
491
507
|
|
508
|
+
def test_platform_equals_current
|
509
|
+
@a1.platform = Gem::Platform::CURRENT
|
510
|
+
assert_equal Gem::Platform.local, @a1.platform
|
511
|
+
assert_equal Gem::Platform.local.to_s, @a1.original_platform
|
512
|
+
end
|
513
|
+
|
492
514
|
def test_platform_equals_legacy
|
493
|
-
@
|
494
|
-
assert_equal Gem::Platform
|
515
|
+
@a1.platform = 'mswin32'
|
516
|
+
assert_equal Gem::Platform.new('x86-mswin32'), @a1.platform
|
495
517
|
|
496
|
-
@
|
497
|
-
assert_equal Gem::Platform
|
518
|
+
@a1.platform = 'i586-linux'
|
519
|
+
assert_equal Gem::Platform.new('x86-linux'), @a1.platform
|
498
520
|
|
499
|
-
@
|
500
|
-
assert_equal Gem::Platform
|
521
|
+
@a1.platform = 'powerpc-darwin'
|
522
|
+
assert_equal Gem::Platform.new('ppc-darwin'), @a1.platform
|
501
523
|
end
|
502
524
|
|
503
525
|
def test_require_paths
|
504
|
-
@
|
505
|
-
assert_equal %w[lib], @
|
526
|
+
@a1.require_path = 'lib'
|
527
|
+
assert_equal %w[lib], @a1.require_paths
|
506
528
|
end
|
507
529
|
|
508
530
|
def test_requirements
|
509
|
-
assert_equal ['A working computer'], @
|
531
|
+
assert_equal ['A working computer'], @a1.requirements
|
510
532
|
end
|
511
533
|
|
512
534
|
def test_spaceship_name
|
@@ -539,28 +561,22 @@ end
|
|
539
561
|
end
|
540
562
|
|
541
563
|
def test_summary
|
542
|
-
assert_equal 'this is a summary', @
|
564
|
+
assert_equal 'this is a summary', @a1.summary
|
543
565
|
end
|
544
566
|
|
545
567
|
def test_test_files
|
546
|
-
@
|
547
|
-
assert_equal ['test/suite.rb'], @
|
548
|
-
end
|
549
|
-
|
550
|
-
def test_test_suite_file
|
551
|
-
@a0_0_2.test_suite_file = 'test/suite.rb'
|
552
|
-
assert_equal ['test/suite.rb'], @a0_0_2.test_files
|
553
|
-
# XXX: what about the warning?
|
568
|
+
@a1.test_file = 'test/suite.rb'
|
569
|
+
assert_equal ['test/suite.rb'], @a1.test_files
|
554
570
|
end
|
555
571
|
|
556
572
|
def test_to_ruby
|
557
|
-
@
|
573
|
+
@a2.required_rubygems_version = Gem::Requirement.new '> 0'
|
558
574
|
|
559
|
-
ruby_code = @
|
575
|
+
ruby_code = @a2.to_ruby
|
560
576
|
|
561
577
|
expected = "Gem::Specification.new do |s|
|
562
578
|
s.name = %q{a}
|
563
|
-
s.version = \"
|
579
|
+
s.version = \"2\"
|
564
580
|
|
565
581
|
s.specification_version = #{Gem::Specification::CURRENT_SPECIFICATION_VERSION} if s.respond_to? :specification_version=
|
566
582
|
|
@@ -582,17 +598,20 @@ end
|
|
582
598
|
|
583
599
|
same_spec = eval ruby_code
|
584
600
|
|
585
|
-
assert_equal @
|
601
|
+
assert_equal @a2, same_spec
|
586
602
|
end
|
587
603
|
|
588
604
|
def test_to_ruby_fancy
|
589
|
-
@
|
590
|
-
ruby_code = @
|
605
|
+
@a1.platform = Gem::Platform.local
|
606
|
+
ruby_code = @a1.to_ruby
|
607
|
+
|
608
|
+
local = Gem::Platform.local
|
609
|
+
expected_platform = "[#{local.cpu.inspect}, #{local.os.inspect}, #{local.version.inspect}]"
|
591
610
|
|
592
611
|
expected = "Gem::Specification.new do |s|
|
593
612
|
s.name = %q{a}
|
594
|
-
s.version = \"
|
595
|
-
s.platform = Gem::Platform.new(
|
613
|
+
s.version = \"1\"
|
614
|
+
s.platform = Gem::Platform.new(#{expected_platform})
|
596
615
|
|
597
616
|
s.specification_version = 2 if s.respond_to? :specification_version=
|
598
617
|
|
@@ -609,6 +628,7 @@ end
|
|
609
628
|
s.homepage = %q{http://example.com}
|
610
629
|
s.require_paths = [\"lib\"]
|
611
630
|
s.requirements = [\"A working computer\"]
|
631
|
+
s.rubyforge_project = %q{example}
|
612
632
|
s.rubygems_version = %q{#{Gem::RubyGemsVersion}}
|
613
633
|
s.summary = %q{this is a summary}
|
614
634
|
s.test_files = [\"test/suite.rb\"]
|
@@ -623,7 +643,7 @@ end
|
|
623
643
|
|
624
644
|
same_spec = eval ruby_code
|
625
645
|
|
626
|
-
assert_equal @
|
646
|
+
assert_equal @a1, same_spec
|
627
647
|
end
|
628
648
|
|
629
649
|
def test_to_ruby_legacy
|
@@ -635,10 +655,10 @@ end
|
|
635
655
|
end
|
636
656
|
|
637
657
|
def test_to_ruby_platform
|
638
|
-
@
|
639
|
-
@
|
658
|
+
@a2.platform = Gem::Platform.local
|
659
|
+
@a2.instance_variable_set :@original_platform, 'old_platform'
|
640
660
|
|
641
|
-
ruby_code = @
|
661
|
+
ruby_code = @a2.to_ruby
|
642
662
|
|
643
663
|
same_spec = eval ruby_code
|
644
664
|
|
@@ -646,28 +666,34 @@ end
|
|
646
666
|
end
|
647
667
|
|
648
668
|
def test_to_yaml
|
649
|
-
yaml_str = @
|
669
|
+
yaml_str = @a1.to_yaml
|
650
670
|
same_spec = YAML.load(yaml_str)
|
651
671
|
|
652
|
-
assert_equal @
|
672
|
+
assert_equal @a1, same_spec
|
653
673
|
end
|
654
674
|
|
655
675
|
def test_to_yaml_fancy
|
656
|
-
@
|
657
|
-
yaml_str = @
|
676
|
+
@a1.platform = Gem::Platform.local
|
677
|
+
yaml_str = @a1.to_yaml
|
658
678
|
|
659
679
|
same_spec = YAML.load(yaml_str)
|
660
680
|
|
661
|
-
assert_equal Gem::Platform
|
681
|
+
assert_equal Gem::Platform.local, same_spec.platform
|
662
682
|
|
663
|
-
assert_equal @
|
683
|
+
assert_equal @a1, same_spec
|
664
684
|
end
|
665
685
|
|
666
|
-
def
|
667
|
-
@
|
668
|
-
@a0_0_1.instance_variable_set :@original_platform, 'powerpc-darwin7.9.0'
|
686
|
+
def test_to_yaml_platform_empty_string
|
687
|
+
@a1.instance_variable_set :@original_platform, ''
|
669
688
|
|
670
|
-
|
689
|
+
assert_match %r|^platform: ruby$|, @a1.to_yaml
|
690
|
+
end
|
691
|
+
|
692
|
+
def test_to_yaml_platform_legacy
|
693
|
+
@a1.platform = 'powerpc-darwin7.9.0'
|
694
|
+
@a1.instance_variable_set :@original_platform, 'powerpc-darwin7.9.0'
|
695
|
+
|
696
|
+
yaml_str = @a1.to_yaml
|
671
697
|
|
672
698
|
same_spec = YAML.load(yaml_str)
|
673
699
|
|
@@ -675,8 +701,61 @@ end
|
|
675
701
|
assert_equal 'powerpc-darwin7.9.0', same_spec.original_platform
|
676
702
|
end
|
677
703
|
|
704
|
+
def test_to_yaml_platform_nil
|
705
|
+
@a1.instance_variable_set :@original_platform, nil
|
706
|
+
|
707
|
+
assert_match %r|^platform: ruby$|, @a1.to_yaml
|
708
|
+
end
|
709
|
+
|
678
710
|
def test_validate
|
679
|
-
|
711
|
+
Dir.chdir @tempdir do
|
712
|
+
assert @a1.validate
|
713
|
+
end
|
714
|
+
end
|
715
|
+
|
716
|
+
def test_validate_authors
|
717
|
+
Dir.chdir @tempdir do
|
718
|
+
@a1.authors = []
|
719
|
+
|
720
|
+
use_ui @ui do
|
721
|
+
@a1.validate
|
722
|
+
end
|
723
|
+
|
724
|
+
assert_equal "WARNING: no author specified\n", @ui.error, 'error'
|
725
|
+
|
726
|
+
@a1.authors = [Object.new]
|
727
|
+
|
728
|
+
e = assert_raise Gem::InvalidSpecificationException do
|
729
|
+
@a1.validate
|
730
|
+
end
|
731
|
+
|
732
|
+
assert_equal 'authors must be Array of Strings', e.message
|
733
|
+
end
|
734
|
+
end
|
735
|
+
|
736
|
+
def test_validate_autorequire
|
737
|
+
Dir.chdir @tempdir do
|
738
|
+
@a1.autorequire = 'code'
|
739
|
+
|
740
|
+
use_ui @ui do
|
741
|
+
@a1.validate
|
742
|
+
end
|
743
|
+
|
744
|
+
assert_equal "WARNING: deprecated autorequire specified\n",
|
745
|
+
@ui.error, 'error'
|
746
|
+
end
|
747
|
+
end
|
748
|
+
|
749
|
+
def test_validate_email
|
750
|
+
Dir.chdir @tempdir do
|
751
|
+
@a1.email = ''
|
752
|
+
|
753
|
+
use_ui @ui do
|
754
|
+
@a1.validate
|
755
|
+
end
|
756
|
+
|
757
|
+
assert_equal "WARNING: no email specified\n", @ui.error, 'error'
|
758
|
+
end
|
680
759
|
end
|
681
760
|
|
682
761
|
def test_validate_empty
|
@@ -687,51 +766,104 @@ end
|
|
687
766
|
assert_equal 'missing value for attribute name', e.message
|
688
767
|
end
|
689
768
|
|
769
|
+
def test_validate_executables
|
770
|
+
FileUtils.mkdir_p File.join(@tempdir, 'bin')
|
771
|
+
File.open File.join(@tempdir, 'bin', 'exec'), 'w' do end
|
772
|
+
|
773
|
+
use_ui @ui do
|
774
|
+
Dir.chdir @tempdir do
|
775
|
+
assert @a1.validate
|
776
|
+
end
|
777
|
+
end
|
778
|
+
|
779
|
+
assert_equal '', @ui.output, 'output'
|
780
|
+
assert_equal "WARNING: bin/exec is missing #! line\n", @ui.error, 'error'
|
781
|
+
end
|
782
|
+
|
690
783
|
def test_validate_empty_require_paths
|
691
|
-
@
|
784
|
+
@a1.require_paths = []
|
692
785
|
e = assert_raise Gem::InvalidSpecificationException do
|
693
|
-
@
|
786
|
+
@a1.validate
|
694
787
|
end
|
695
788
|
|
696
789
|
assert_equal 'specification must have at least one require_path', e.message
|
697
790
|
end
|
698
791
|
|
699
|
-
def
|
700
|
-
|
701
|
-
|
792
|
+
def test_validate_homepage
|
793
|
+
Dir.chdir @tempdir do
|
794
|
+
@a1.homepage = ''
|
702
795
|
|
703
|
-
|
704
|
-
|
705
|
-
|
796
|
+
use_ui @ui do
|
797
|
+
@a1.validate
|
798
|
+
end
|
799
|
+
|
800
|
+
assert_equal "WARNING: no homepage specified\n", @ui.error, 'error'
|
706
801
|
end
|
802
|
+
end
|
707
803
|
|
708
|
-
|
709
|
-
|
804
|
+
def test_validate_has_rdoc
|
805
|
+
Dir.chdir @tempdir do
|
806
|
+
@a1.has_rdoc = false
|
807
|
+
|
808
|
+
use_ui @ui do
|
809
|
+
@a1.validate
|
810
|
+
end
|
811
|
+
|
812
|
+
assert_equal "WARNING: RDoc will not be generated (has_rdoc == false)\n",
|
813
|
+
@ui.error, 'error'
|
814
|
+
end
|
710
815
|
end
|
711
816
|
|
712
817
|
def test_validate_platform_legacy
|
713
|
-
|
714
|
-
|
818
|
+
Dir.chdir @tempdir do
|
819
|
+
@a1.platform = 'mswin32'
|
820
|
+
assert @a1.validate
|
821
|
+
|
822
|
+
@a1.platform = 'i586-linux'
|
823
|
+
assert @a1.validate
|
824
|
+
|
825
|
+
@a1.platform = 'powerpc-darwin'
|
826
|
+
assert @a1.validate
|
827
|
+
end
|
828
|
+
end
|
715
829
|
|
716
|
-
|
717
|
-
|
830
|
+
def test_validate_rubyforge_project
|
831
|
+
Dir.chdir @tempdir do
|
832
|
+
@a1.rubyforge_project = ''
|
718
833
|
|
719
|
-
|
720
|
-
|
834
|
+
use_ui @ui do
|
835
|
+
@a1.validate
|
836
|
+
end
|
837
|
+
|
838
|
+
assert_equal "WARNING: no rubyforge_project specified\n",
|
839
|
+
@ui.error, 'error'
|
840
|
+
end
|
721
841
|
end
|
722
842
|
|
723
843
|
def test_validate_rubygems_version
|
724
|
-
@
|
844
|
+
@a1.rubygems_version = "3"
|
725
845
|
e = assert_raise Gem::InvalidSpecificationException do
|
726
|
-
@
|
846
|
+
@a1.validate
|
727
847
|
end
|
728
848
|
|
729
849
|
assert_equal "expected RubyGems version #{Gem::RubyGemsVersion}, was 3",
|
730
850
|
e.message
|
731
851
|
end
|
732
852
|
|
853
|
+
def test_validate_summary
|
854
|
+
Dir.chdir @tempdir do
|
855
|
+
@a1.summary = ''
|
856
|
+
|
857
|
+
use_ui @ui do
|
858
|
+
@a1.validate
|
859
|
+
end
|
860
|
+
|
861
|
+
assert_equal "WARNING: no summary specified\n", @ui.error, 'error'
|
862
|
+
end
|
863
|
+
end
|
864
|
+
|
733
865
|
def test_version
|
734
|
-
assert_equal Gem::Version.new('
|
866
|
+
assert_equal Gem::Version.new('1'), @a1.version
|
735
867
|
end
|
736
868
|
|
737
869
|
end
|