rubygems-update 0.8.11 → 0.9.0
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.
- data/ChangeLog +199 -1
- data/README +6 -4
- data/Rakefile +46 -14
- data/bin/gem +6 -0
- data/bin/gem_mirror +7 -1
- data/bin/gem_server +3 -5
- data/bin/gemlock +127 -0
- data/bin/gemri +24 -0
- data/bin/gemwhich +39 -11
- data/bin/index_gem_repository.rb +280 -0
- data/bin/update_rubygems +6 -0
- data/doc/makedoc.rb +7 -1
- data/examples/application/lib/somefunctionality.rb +6 -0
- data/lib/gemconfigure.rb +6 -0
- data/lib/rbconfig/datadir.rb +24 -0
- data/lib/rubygems.rb +90 -24
- data/lib/rubygems/builder.rb +6 -0
- data/lib/rubygems/cmd_manager.rb +36 -30
- data/lib/rubygems/command.rb +90 -29
- data/lib/rubygems/config_file.rb +45 -2
- data/lib/rubygems/custom_require.rb +12 -6
- data/lib/rubygems/dependency_list.rb +6 -0
- data/lib/rubygems/doc_manager.rb +79 -34
- data/lib/rubygems/format.rb +6 -0
- data/lib/rubygems/gem_commands.rb +209 -88
- data/lib/rubygems/gem_openssl.rb +12 -0
- data/lib/rubygems/gem_runner.rb +25 -10
- data/lib/rubygems/incremental_fetcher.rb +136 -0
- data/lib/rubygems/installer.rb +103 -28
- data/lib/rubygems/loadpath_manager.rb +6 -0
- data/lib/rubygems/old_format.rb +6 -0
- data/lib/rubygems/open-uri.rb +231 -79
- data/lib/rubygems/package.rb +5 -3
- data/lib/rubygems/remote_installer.rb +89 -52
- data/lib/rubygems/rubygems_version.rb +1 -1
- data/lib/rubygems/security.rb +6 -0
- data/lib/rubygems/source_index.rb +115 -52
- data/lib/rubygems/specification.rb +92 -76
- data/lib/rubygems/timer.rb +6 -0
- data/lib/rubygems/user_interaction.rb +88 -4
- data/lib/rubygems/validator.rb +6 -0
- data/lib/rubygems/version.rb +6 -0
- data/lib/ubygems.rb +6 -0
- data/post-install.rb +6 -0
- data/scripts/buildtests.rb +6 -0
- data/scripts/gemdoc.rb +6 -0
- data/scripts/runtest.rb +6 -0
- data/scripts/specdoc.rb +6 -0
- data/scripts/upload_gemdoc.rb +6 -0
- data/test/bogussources.rb +6 -2
- data/test/data/PostMessage-0.0.1.gem +0 -0
- data/test/data/a-0.0.1.gem +0 -0
- data/test/data/a-0.0.2.gem +0 -0
- data/test/data/b-0.0.2.gem +0 -0
- data/test/data/c-1.2.gem +0 -0
- data/test/data/gemhome/cache/a-0.0.1.gem +0 -0
- data/test/data/gemhome/cache/a-0.0.2.gem +0 -0
- data/test/data/gemhome/cache/b-0.0.2.gem +0 -0
- data/test/data/gemhome/cache/c-1.2.gem +0 -0
- data/test/data/gemhome/gems/a-0.0.1/lib/code.rb +6 -0
- data/test/data/gemhome/gems/a-0.0.2/lib/code.rb +6 -0
- data/test/data/gemhome/gems/b-0.0.2/lib/code.rb +6 -0
- data/test/data/gemhome/gems/c-1.2/lib/code.rb +6 -0
- data/test/data/gemhome/specifications/a-0.0.1.gemspec +1 -1
- data/test/data/gemhome/specifications/a-0.0.2.gemspec +1 -1
- data/test/data/gemhome/specifications/b-0.0.2.gemspec +1 -1
- data/test/data/gemhome/specifications/c-1.2.gemspec +1 -1
- data/test/data/lib/code.rb +6 -0
- data/test/data/one/lib/one.rb +6 -0
- data/test/data/one/one-0.0.1.gem +0 -0
- data/test/data/post_install.gemspec +19 -0
- data/test/fake_certlib/openssl.rb +6 -0
- data/test/functional.rb +15 -1
- data/test/functional_generate_yaml_index.rb +101 -0
- data/test/gemenvironment.rb +8 -0
- data/test/gemutilities.rb +18 -2
- data/test/insure_session.rb +6 -0
- data/test/mock/gems/gems/sources-0.0.1/lib/sources.rb +6 -0
- data/test/mockgemui.rb +6 -0
- data/test/onegem.rb +12 -0
- data/test/simple_gem.rb +6 -0
- data/test/test_builder.rb +6 -0
- data/test/test_cached_fetcher.rb +6 -0
- data/test/test_check_command.rb +6 -0
- data/test/test_command.rb +6 -0
- data/test/test_configfile.rb +6 -0
- data/test/test_datadir.rb +32 -0
- data/test/test_dependency_list.rb +6 -0
- data/test/test_file_list.rb +6 -0
- data/test/test_format.rb +6 -0
- data/test/test_gemloadpaths.rb +6 -0
- data/test/test_gempaths.rb +11 -1
- data/test/test_incremental_fetcher.rb +175 -0
- data/test/test_installer.rb +30 -3
- data/test/test_loadmanager.rb +6 -0
- data/test/test_local_cache.rb +8 -2
- data/test/test_package.rb +6 -0
- data/test/test_parse_commands.rb +8 -2
- data/test/test_process_commands.rb +31 -0
- data/test/test_remote_fetcher.rb +47 -5
- data/test/test_remote_installer.rb +6 -0
- data/test/test_require_gem.rb +6 -0
- data/test/test_source_index.rb +27 -0
- data/test/test_specific_extras.rb +6 -0
- data/test/test_specification.rb +30 -0
- data/test/test_validator.rb +6 -0
- data/test/test_version_comparison.rb +6 -0
- data/test/testgem.rc +1 -0
- data/test/user_capture.rb +6 -0
- data/test/yaml_data.rb +8 -4
- metadata +187 -173
- data/bin/generate_yaml_index.rb +0 -78
- data/lib/rubygems/deployment.rb +0 -267
- data/test/test_deployment.rb +0 -93
data/test/insure_session.rb
CHANGED
data/test/mockgemui.rb
CHANGED
data/test/onegem.rb
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE.txt for permissions.
|
5
|
+
#++
|
6
|
+
|
1
7
|
module OneGem
|
2
8
|
|
3
9
|
ONEDIR = "test/data/one"
|
@@ -8,6 +14,12 @@ module OneGem
|
|
8
14
|
FileUtils.rm_f ONEGEM
|
9
15
|
end
|
10
16
|
|
17
|
+
def make(controller)
|
18
|
+
unless File.exist?(ONEGEM)
|
19
|
+
build(controller)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
11
23
|
def build(controller)
|
12
24
|
Dir.chdir(ONEDIR) do
|
13
25
|
controller.gem "build one.gemspec"
|
data/test/simple_gem.rb
CHANGED
data/test/test_builder.rb
CHANGED
data/test/test_cached_fetcher.rb
CHANGED
data/test/test_check_command.rb
CHANGED
data/test/test_command.rb
CHANGED
data/test/test_configfile.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
4
|
+
# All rights reserved.
|
5
|
+
# See LICENSE.txt for permissions.
|
6
|
+
#++
|
7
|
+
|
8
|
+
require 'test/unit'
|
9
|
+
require 'rbconfig'
|
10
|
+
require 'rubygems'
|
11
|
+
|
12
|
+
class TestDataDir < Test::Unit::TestCase
|
13
|
+
def test_original_dir
|
14
|
+
datadir = Config::CONFIG['datadir']
|
15
|
+
assert_equal "#{datadir}/xyz", Config.gem_original_datadir('xyz')
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_gem_dir_with_good_package
|
19
|
+
gem 'sources'
|
20
|
+
assert_match %r{gems/1.8/gems/sources-0.0.1/data/sources$}, Gem.datadir('sources')
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_gem_dir_with_bad_package
|
24
|
+
gem 'sources'
|
25
|
+
assert_nil Gem.datadir('xyzzy')
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_basic_dir
|
29
|
+
datadir = Config::CONFIG['datadir']
|
30
|
+
assert_equal "#{datadir}/xyz", Config.datadir('xyz')
|
31
|
+
end
|
32
|
+
end
|
data/test/test_file_list.rb
CHANGED
data/test/test_format.rb
CHANGED
data/test/test_gemloadpaths.rb
CHANGED
data/test/test_gempaths.rb
CHANGED
@@ -1,4 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
4
|
+
# All rights reserved.
|
5
|
+
# See LICENSE.txt for permissions.
|
6
|
+
#++
|
7
|
+
|
2
8
|
|
3
9
|
require 'test/unit'
|
4
10
|
require 'fileutils'
|
@@ -109,6 +115,8 @@ class TestGemPaths < RubyGemTestCase
|
|
109
115
|
end
|
110
116
|
|
111
117
|
def test_ensure_gem_directories_write_protected
|
118
|
+
return if win_platform? #This test works only for FS that support write protection
|
119
|
+
|
112
120
|
gemdir = File.join(@tempdir, "egd")
|
113
121
|
FileUtils.rm_r gemdir rescue nil
|
114
122
|
FileUtils.mkdir_p gemdir
|
@@ -122,6 +130,8 @@ class TestGemPaths < RubyGemTestCase
|
|
122
130
|
end
|
123
131
|
|
124
132
|
def test_ensure_gem_directories_with_parents_write_protected
|
133
|
+
return if win_platform? #This test works only for FS that support write protection
|
134
|
+
|
125
135
|
parent = File.join(@tempdir, "egd")
|
126
136
|
gemdir = "#{parent}/a/b/c"
|
127
137
|
|
@@ -130,7 +140,7 @@ class TestGemPaths < RubyGemTestCase
|
|
130
140
|
FileUtils.chmod 0400, parent
|
131
141
|
Gem.use_paths(gemdir)
|
132
142
|
Gem.send(:ensure_gem_subdirectories, gemdir)
|
133
|
-
assert !
|
143
|
+
assert !File.exist?("#{gemdir}/cache")
|
134
144
|
ensure
|
135
145
|
FileUtils.chmod(0600, parent) rescue nil
|
136
146
|
FileUtils.rm_r parent rescue nil
|
@@ -0,0 +1,175 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
4
|
+
# All rights reserved.
|
5
|
+
# See LICENSE.txt for permissions.
|
6
|
+
#++
|
7
|
+
|
8
|
+
|
9
|
+
require 'test/unit'
|
10
|
+
require 'fileutils'
|
11
|
+
require 'flexmock'
|
12
|
+
|
13
|
+
require 'rubygems/incremental_fetcher'
|
14
|
+
require 'rubygems/remote_installer'
|
15
|
+
require 'test/yaml_data'
|
16
|
+
require 'test/gemutilities'
|
17
|
+
|
18
|
+
class TestIncrementalFetcher < RubyGemTestCase
|
19
|
+
include Gem::DefaultUserInteraction
|
20
|
+
|
21
|
+
TEST_URI = "http://onestepback.org/betagems"
|
22
|
+
|
23
|
+
def setup
|
24
|
+
super
|
25
|
+
@fetcher = FlexMock.new("RemoteFetcher")
|
26
|
+
@manager = FlexMock.new("SourceInfoCache")
|
27
|
+
@inc = Gem::IncrementalFetcher.new(TEST_URI, @fetcher, @manager)
|
28
|
+
@existing_index = Gem::SourceIndex.new
|
29
|
+
@existing_index.add_spec(quick_gem("a", "1.0"))
|
30
|
+
@existing_index.add_spec(quick_gem("b", "2.0"))
|
31
|
+
@sice = Gem::SourceInfoCacheEntry.new(@existing_index, 100)
|
32
|
+
|
33
|
+
@url_hash = { TEST_URI => @sice}
|
34
|
+
@manager.should_receive(:cache_data).and_return(@url_hash)
|
35
|
+
|
36
|
+
@old_ui = ui
|
37
|
+
self.ui = Gem::SilentUI.new
|
38
|
+
end
|
39
|
+
|
40
|
+
def teardown
|
41
|
+
self.ui = @old_ui
|
42
|
+
end
|
43
|
+
|
44
|
+
def verify
|
45
|
+
[ @fetcher, @manager ].each do |it| it.mock_verify end
|
46
|
+
end
|
47
|
+
|
48
|
+
def zipped(string)
|
49
|
+
require 'zlib'
|
50
|
+
Zlib::Deflate.deflate(string)
|
51
|
+
end
|
52
|
+
|
53
|
+
def new_source_index
|
54
|
+
result = Gem::SourceIndex.new
|
55
|
+
result.add_spec(quick_gem("a", "1.0"))
|
56
|
+
result.add_spec(quick_gem("b", "2.0"))
|
57
|
+
result.add_spec(quick_gem("b", "2.1"))
|
58
|
+
result
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_creation
|
62
|
+
assert_not_nil @inc
|
63
|
+
verify
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_remote_size_matches_cached_data_returns_cache
|
67
|
+
@fetcher.should_receive(:size).with_no_args.and_return(100).once
|
68
|
+
@manager.should_receive(:update).never
|
69
|
+
|
70
|
+
si = @inc.source_index
|
71
|
+
|
72
|
+
assert si.specification("a-1.0")
|
73
|
+
assert si.specification("b-2.0")
|
74
|
+
assert_equal 2, si.search(/./).size
|
75
|
+
verify
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_remote_size_differs_and_remote_has_additional_specs
|
79
|
+
@fetcher.should_receive(:size).with_no_args.and_return(200).once
|
80
|
+
@fetcher.should_receive(:fetch_path).with("/quick/index.rz").once.
|
81
|
+
and_return(zipped("a-1.0\nb-2.0\na-1.1\n"))
|
82
|
+
@fetcher.should_receive(:fetch_path).with("/quick/a-1.1.gemspec.rz").once.
|
83
|
+
and_return(zipped(quick_gem("a", "1.1").to_yaml))
|
84
|
+
@manager.should_receive(:update).at_least.once.ordered
|
85
|
+
@manager.should_receive(:flush).at_least.once.ordered
|
86
|
+
|
87
|
+
si = @inc.source_index
|
88
|
+
|
89
|
+
assert si.specification("a-1.0")
|
90
|
+
assert si.specification("a-1.1")
|
91
|
+
assert si.specification("b-2.0")
|
92
|
+
assert_equal 3, si.search(/./).size
|
93
|
+
verify
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_remote_size_differs_and_remote_has_fewer_specs
|
97
|
+
@fetcher.should_receive(:size).with_no_args.and_return(200).once
|
98
|
+
@fetcher.should_receive(:fetch_path).with("/quick/index.rz").once.
|
99
|
+
and_return(zipped("a-1.0\n"))
|
100
|
+
@manager.should_receive(:update).at_least.once.ordered
|
101
|
+
@manager.should_receive(:flush).at_least.once.ordered
|
102
|
+
|
103
|
+
si = @inc.source_index
|
104
|
+
|
105
|
+
assert si.specification("a-1.0")
|
106
|
+
assert_equal 1, si.search(/./).size
|
107
|
+
verify
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_remote_size_differs_and_no_quick_index_is_available
|
111
|
+
@fetcher.should_receive(:size).with_no_args.and_return(200).once
|
112
|
+
@fetcher.should_receive(:fetch_path).with("/quick/index.rz").once.
|
113
|
+
and_return { fail RuntimeError, "No quick/index.rz file available" }
|
114
|
+
new_si = new_source_index
|
115
|
+
@fetcher.should_receive(:source_index).with_no_args.and_return(new_si)
|
116
|
+
|
117
|
+
si = @inc.source_index
|
118
|
+
|
119
|
+
assert_equal new_si.object_id, si.object_id
|
120
|
+
assert si.specification("a-1.0")
|
121
|
+
assert si.specification("b-2.0")
|
122
|
+
assert si.specification("b-2.1")
|
123
|
+
assert_equal 3, si.search(/./).size
|
124
|
+
verify
|
125
|
+
end
|
126
|
+
|
127
|
+
def test_no_source_index_found_for_uri
|
128
|
+
@fetcher.should_receive(:size).with_no_args.and_return(200).once
|
129
|
+
@fetcher.should_receive(:fetch_path).with("/quick/index.rz").once.
|
130
|
+
and_return(zipped("a-1.0\n"))
|
131
|
+
@fetcher.should_receive(:fetch_path).with("/quick/a-1.0.gemspec.rz").once.
|
132
|
+
and_return(zipped(quick_gem("a", "1.0").to_yaml))
|
133
|
+
@manager.should_receive(:update).at_least.once.ordered
|
134
|
+
@manager.should_receive(:flush).at_least.once.ordered
|
135
|
+
@url_hash.delete(TEST_URI)
|
136
|
+
|
137
|
+
si = @inc.source_index
|
138
|
+
|
139
|
+
assert si.specification('a-1.0')
|
140
|
+
assert_equal 1, si.search(/./).size
|
141
|
+
verify
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_fetch_where_some_gemspecs_cant_be_retrieved
|
145
|
+
@fetcher.should_receive(:size).with_no_args.and_return(200).once
|
146
|
+
@fetcher.should_receive(:fetch_path).with("/quick/index.rz").once.
|
147
|
+
and_return(zipped("a-1.0\nb-2.0\na-1.1\na-1.2\na-1.3\n"))
|
148
|
+
@fetcher.should_receive(:fetch_path).with("/quick/a-1.1.gemspec.rz").once.
|
149
|
+
and_return(zipped(quick_gem("a", "1.1").to_yaml))
|
150
|
+
@fetcher.should_receive(:fetch_path).with("/quick/a-1.2.gemspec.rz").once.
|
151
|
+
and_return { fail "No gem found for a-1.2" }
|
152
|
+
@fetcher.should_receive(:fetch_path).with("/quick/a-1.3.gemspec.rz").once.
|
153
|
+
and_return(zipped(quick_gem("a", "1.3").to_yaml))
|
154
|
+
@manager.should_receive(:update).at_least.once.ordered
|
155
|
+
@manager.should_receive(:flush).at_least.once.ordered
|
156
|
+
|
157
|
+
si = @inc.source_index
|
158
|
+
|
159
|
+
assert si.specification("a-1.0")
|
160
|
+
assert si.specification("a-1.1")
|
161
|
+
assert si.specification("a-1.3")
|
162
|
+
assert si.specification("b-2.0")
|
163
|
+
assert_nil si.specification("a-1.2")
|
164
|
+
assert_equal 4, si.search(/./).size
|
165
|
+
verify
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_basic_fetching
|
169
|
+
@fetcher.should_receive(:fetch_path).with("xyz").once.
|
170
|
+
and_return("abc")
|
171
|
+
|
172
|
+
assert_equal "abc", @inc.fetch_path("xyz")
|
173
|
+
end
|
174
|
+
|
175
|
+
end
|
data/test/test_installer.rb
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
3
|
+
# All rights reserved.
|
4
|
+
# See LICENSE.txt for permissions.
|
5
|
+
#++
|
6
|
+
|
1
7
|
$TESTING = true
|
2
8
|
require 'fileutils'
|
3
9
|
require 'tmpdir'
|
@@ -15,7 +21,7 @@ class TestInstaller < RubyGemTestCase
|
|
15
21
|
def setup
|
16
22
|
super
|
17
23
|
@spec = quick_gem("a")
|
18
|
-
@installer = Gem::Installer.new
|
24
|
+
@installer = Gem::Installer.new :fake, {}
|
19
25
|
end
|
20
26
|
|
21
27
|
def util_gem_dir(version = '0.0.2')
|
@@ -45,7 +51,7 @@ class TestInstaller < RubyGemTestCase
|
|
45
51
|
assert_equal true, File.directory?(util_inst_bindir)
|
46
52
|
installed_exec = File.join(util_inst_bindir, "my_exec")
|
47
53
|
assert_equal true, File.exist?(installed_exec)
|
48
|
-
assert_equal
|
54
|
+
assert_equal(0100755, File.stat(installed_exec).mode) unless win_platform?
|
49
55
|
|
50
56
|
wrapper = File.read installed_exec
|
51
57
|
assert_match(/generated by RubyGems/, wrapper)
|
@@ -73,6 +79,8 @@ class TestInstaller < RubyGemTestCase
|
|
73
79
|
end
|
74
80
|
|
75
81
|
def test_generate_bin_symlinks
|
82
|
+
return if win_platform? #Windows FS do not support symlinks
|
83
|
+
|
76
84
|
@installer.options[:wrappers] = false
|
77
85
|
util_make_exec
|
78
86
|
@installer.directory = util_gem_dir
|
@@ -108,6 +116,8 @@ class TestInstaller < RubyGemTestCase
|
|
108
116
|
end
|
109
117
|
|
110
118
|
def test_generate_bin_symlinks_update_newer
|
119
|
+
return if win_platform? #Windows FS do not support symlinks
|
120
|
+
|
111
121
|
@installer.options[:wrappers] = false
|
112
122
|
util_make_exec
|
113
123
|
@installer.directory = File.join @gemhome, util_gem_dir
|
@@ -136,6 +146,8 @@ class TestInstaller < RubyGemTestCase
|
|
136
146
|
end
|
137
147
|
|
138
148
|
def test_generate_bin_symlinks_update_older
|
149
|
+
return if win_platform? #Windows FS do not support symlinks
|
150
|
+
|
139
151
|
@installer.options[:wrappers] = false
|
140
152
|
util_make_exec
|
141
153
|
@installer.directory = File.join @gemhome, util_gem_dir
|
@@ -164,6 +176,8 @@ class TestInstaller < RubyGemTestCase
|
|
164
176
|
end
|
165
177
|
|
166
178
|
def test_generate_bin_symlinks_update_remove_wrapper
|
179
|
+
return if win_platform? #Windows FS do not support symlinks
|
180
|
+
|
167
181
|
@installer.options[:wrappers] = true
|
168
182
|
util_make_exec
|
169
183
|
@installer.directory = util_gem_dir
|
@@ -202,7 +216,9 @@ class TestInstaller < RubyGemTestCase
|
|
202
216
|
assert_equal true, File.directory?(util_inst_bindir)
|
203
217
|
installed_exec = File.join(util_inst_bindir, "my_exec")
|
204
218
|
assert_equal true, File.exist?(installed_exec)
|
205
|
-
|
219
|
+
|
220
|
+
expected_mode = win_platform? ? 0100644 : 0100755
|
221
|
+
assert_equal expected_mode, File.stat(installed_exec).mode
|
206
222
|
|
207
223
|
wrapper = File.read installed_exec
|
208
224
|
assert_match(/generated by RubyGems/, wrapper)
|
@@ -210,5 +226,16 @@ class TestInstaller < RubyGemTestCase
|
|
210
226
|
Config::CONFIG["arch"] = old_arch
|
211
227
|
end
|
212
228
|
|
229
|
+
def test_install_with_message
|
230
|
+
oldstdout = $stdout.dup
|
231
|
+
$stdout = StringIO.new
|
232
|
+
@gem = File.join 'test', 'data', "PostMessage-0.0.1.gem"
|
233
|
+
@installer = Gem::Installer.new @gem, {}
|
234
|
+
@installer.install
|
235
|
+
assert_equal "I am a shiny gem!\n", $stdout.string
|
236
|
+
ensure
|
237
|
+
$stdout = oldstdout
|
238
|
+
end
|
239
|
+
|
213
240
|
end
|
214
241
|
|