slimgems 1.3.8

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.
Files changed (185) hide show
  1. data/ChangeLog +5811 -0
  2. data/History.txt +887 -0
  3. data/LICENSE.txt +51 -0
  4. data/README.md +87 -0
  5. data/Rakefile +120 -0
  6. data/bin/gem +25 -0
  7. data/bin/update_slimgems +35 -0
  8. data/bootstrap/Rakefile +4 -0
  9. data/hide_lib_for_update/note.txt +5 -0
  10. data/lib/gauntlet_rubygems.rb +50 -0
  11. data/lib/rbconfig/datadir.rb +20 -0
  12. data/lib/rubygems.rb +1220 -0
  13. data/lib/rubygems/builder.rb +102 -0
  14. data/lib/rubygems/command.rb +534 -0
  15. data/lib/rubygems/command_manager.rb +182 -0
  16. data/lib/rubygems/commands/build_command.rb +53 -0
  17. data/lib/rubygems/commands/cert_command.rb +86 -0
  18. data/lib/rubygems/commands/check_command.rb +80 -0
  19. data/lib/rubygems/commands/cleanup_command.rb +106 -0
  20. data/lib/rubygems/commands/contents_command.rb +98 -0
  21. data/lib/rubygems/commands/dependency_command.rb +195 -0
  22. data/lib/rubygems/commands/environment_command.rb +132 -0
  23. data/lib/rubygems/commands/fetch_command.rb +67 -0
  24. data/lib/rubygems/commands/generate_index_command.rb +133 -0
  25. data/lib/rubygems/commands/help_command.rb +172 -0
  26. data/lib/rubygems/commands/install_command.rb +178 -0
  27. data/lib/rubygems/commands/list_command.rb +35 -0
  28. data/lib/rubygems/commands/lock_command.rb +110 -0
  29. data/lib/rubygems/commands/mirror_command.rb +111 -0
  30. data/lib/rubygems/commands/outdated_command.rb +33 -0
  31. data/lib/rubygems/commands/owner_command.rb +75 -0
  32. data/lib/rubygems/commands/pristine_command.rb +93 -0
  33. data/lib/rubygems/commands/push_command.rb +56 -0
  34. data/lib/rubygems/commands/query_command.rb +280 -0
  35. data/lib/rubygems/commands/rdoc_command.rb +91 -0
  36. data/lib/rubygems/commands/search_command.rb +31 -0
  37. data/lib/rubygems/commands/server_command.rb +86 -0
  38. data/lib/rubygems/commands/setup_command.rb +387 -0
  39. data/lib/rubygems/commands/sources_command.rb +157 -0
  40. data/lib/rubygems/commands/specification_command.rb +125 -0
  41. data/lib/rubygems/commands/stale_command.rb +27 -0
  42. data/lib/rubygems/commands/uninstall_command.rb +83 -0
  43. data/lib/rubygems/commands/unpack_command.rb +121 -0
  44. data/lib/rubygems/commands/update_command.rb +212 -0
  45. data/lib/rubygems/commands/which_command.rb +86 -0
  46. data/lib/rubygems/config_file.rb +345 -0
  47. data/lib/rubygems/custom_require.rb +44 -0
  48. data/lib/rubygems/defaults.rb +101 -0
  49. data/lib/rubygems/dependency.rb +227 -0
  50. data/lib/rubygems/dependency_installer.rb +286 -0
  51. data/lib/rubygems/dependency_list.rb +208 -0
  52. data/lib/rubygems/doc_manager.rb +242 -0
  53. data/lib/rubygems/errors.rb +35 -0
  54. data/lib/rubygems/exceptions.rb +91 -0
  55. data/lib/rubygems/ext.rb +18 -0
  56. data/lib/rubygems/ext/builder.rb +56 -0
  57. data/lib/rubygems/ext/configure_builder.rb +25 -0
  58. data/lib/rubygems/ext/ext_conf_builder.rb +24 -0
  59. data/lib/rubygems/ext/rake_builder.rb +39 -0
  60. data/lib/rubygems/format.rb +81 -0
  61. data/lib/rubygems/gem_openssl.rb +92 -0
  62. data/lib/rubygems/gem_path_searcher.rb +100 -0
  63. data/lib/rubygems/gem_runner.rb +79 -0
  64. data/lib/rubygems/gemcutter_utilities.rb +49 -0
  65. data/lib/rubygems/indexer.rb +720 -0
  66. data/lib/rubygems/install_update_options.rb +125 -0
  67. data/lib/rubygems/installer.rb +604 -0
  68. data/lib/rubygems/local_remote_options.rb +135 -0
  69. data/lib/rubygems/old_format.rb +153 -0
  70. data/lib/rubygems/package.rb +97 -0
  71. data/lib/rubygems/package/f_sync_dir.rb +23 -0
  72. data/lib/rubygems/package/tar_header.rb +266 -0
  73. data/lib/rubygems/package/tar_input.rb +222 -0
  74. data/lib/rubygems/package/tar_output.rb +144 -0
  75. data/lib/rubygems/package/tar_reader.rb +106 -0
  76. data/lib/rubygems/package/tar_reader/entry.rb +141 -0
  77. data/lib/rubygems/package/tar_writer.rb +241 -0
  78. data/lib/rubygems/package_task.rb +126 -0
  79. data/lib/rubygems/platform.rb +183 -0
  80. data/lib/rubygems/remote_fetcher.rb +414 -0
  81. data/lib/rubygems/require_paths_builder.rb +18 -0
  82. data/lib/rubygems/requirement.rb +153 -0
  83. data/lib/rubygems/security.rb +814 -0
  84. data/lib/rubygems/server.rb +872 -0
  85. data/lib/rubygems/source_index.rb +597 -0
  86. data/lib/rubygems/source_info_cache.rb +395 -0
  87. data/lib/rubygems/source_info_cache_entry.rb +56 -0
  88. data/lib/rubygems/spec_fetcher.rb +337 -0
  89. data/lib/rubygems/specification.rb +1486 -0
  90. data/lib/rubygems/test_utilities.rb +147 -0
  91. data/lib/rubygems/text.rb +65 -0
  92. data/lib/rubygems/uninstaller.rb +278 -0
  93. data/lib/rubygems/user_interaction.rb +527 -0
  94. data/lib/rubygems/validator.rb +240 -0
  95. data/lib/rubygems/version.rb +316 -0
  96. data/lib/rubygems/version_option.rb +65 -0
  97. data/lib/ubygems.rb +10 -0
  98. data/setup.rb +42 -0
  99. data/test/bogussources.rb +8 -0
  100. data/test/data/gem-private_key.pem +27 -0
  101. data/test/data/gem-public_cert.pem +20 -0
  102. data/test/fake_certlib/openssl.rb +7 -0
  103. data/test/foo/discover.rb +0 -0
  104. data/test/functional.rb +92 -0
  105. data/test/gem_installer_test_case.rb +97 -0
  106. data/test/gem_package_tar_test_case.rb +132 -0
  107. data/test/gemutilities.rb +605 -0
  108. data/test/insure_session.rb +43 -0
  109. data/test/mockgemui.rb +56 -0
  110. data/test/plugin/exception/rubygems_plugin.rb +2 -0
  111. data/test/plugin/load/rubygems_plugin.rb +1 -0
  112. data/test/plugin/standarderror/rubygems_plugin.rb +2 -0
  113. data/test/private_key.pem +27 -0
  114. data/test/public_cert.pem +20 -0
  115. data/test/rubygems_plugin.rb +21 -0
  116. data/test/simple_gem.rb +66 -0
  117. data/test/test_config.rb +12 -0
  118. data/test/test_gem.rb +766 -0
  119. data/test/test_gem_builder.rb +27 -0
  120. data/test/test_gem_command.rb +178 -0
  121. data/test/test_gem_command_manager.rb +207 -0
  122. data/test/test_gem_commands_build_command.rb +74 -0
  123. data/test/test_gem_commands_cert_command.rb +124 -0
  124. data/test/test_gem_commands_check_command.rb +18 -0
  125. data/test/test_gem_commands_contents_command.rb +156 -0
  126. data/test/test_gem_commands_dependency_command.rb +216 -0
  127. data/test/test_gem_commands_environment_command.rb +144 -0
  128. data/test/test_gem_commands_fetch_command.rb +76 -0
  129. data/test/test_gem_commands_generate_index_command.rb +135 -0
  130. data/test/test_gem_commands_install_command.rb +315 -0
  131. data/test/test_gem_commands_list_command.rb +36 -0
  132. data/test/test_gem_commands_lock_command.rb +68 -0
  133. data/test/test_gem_commands_mirror_command.rb +60 -0
  134. data/test/test_gem_commands_outdated_command.rb +40 -0
  135. data/test/test_gem_commands_owner_command.rb +105 -0
  136. data/test/test_gem_commands_pristine_command.rb +108 -0
  137. data/test/test_gem_commands_push_command.rb +81 -0
  138. data/test/test_gem_commands_query_command.rb +426 -0
  139. data/test/test_gem_commands_server_command.rb +59 -0
  140. data/test/test_gem_commands_sources_command.rb +209 -0
  141. data/test/test_gem_commands_specification_command.rb +139 -0
  142. data/test/test_gem_commands_stale_command.rb +38 -0
  143. data/test/test_gem_commands_uninstall_command.rb +83 -0
  144. data/test/test_gem_commands_unpack_command.rb +199 -0
  145. data/test/test_gem_commands_update_command.rb +353 -0
  146. data/test/test_gem_commands_which_command.rb +66 -0
  147. data/test/test_gem_config_file.rb +287 -0
  148. data/test/test_gem_dependency.rb +149 -0
  149. data/test/test_gem_dependency_installer.rb +661 -0
  150. data/test/test_gem_dependency_list.rb +230 -0
  151. data/test/test_gem_doc_manager.rb +31 -0
  152. data/test/test_gem_ext_configure_builder.rb +84 -0
  153. data/test/test_gem_ext_ext_conf_builder.rb +173 -0
  154. data/test/test_gem_ext_rake_builder.rb +81 -0
  155. data/test/test_gem_format.rb +70 -0
  156. data/test/test_gem_gem_path_searcher.rb +78 -0
  157. data/test/test_gem_gem_runner.rb +45 -0
  158. data/test/test_gem_gemcutter_utilities.rb +103 -0
  159. data/test/test_gem_indexer.rb +673 -0
  160. data/test/test_gem_install_update_options.rb +68 -0
  161. data/test/test_gem_installer.rb +857 -0
  162. data/test/test_gem_local_remote_options.rb +97 -0
  163. data/test/test_gem_package_tar_header.rb +130 -0
  164. data/test/test_gem_package_tar_input.rb +112 -0
  165. data/test/test_gem_package_tar_output.rb +97 -0
  166. data/test/test_gem_package_tar_reader.rb +46 -0
  167. data/test/test_gem_package_tar_reader_entry.rb +109 -0
  168. data/test/test_gem_package_tar_writer.rb +144 -0
  169. data/test/test_gem_package_task.rb +59 -0
  170. data/test/test_gem_platform.rb +264 -0
  171. data/test/test_gem_remote_fetcher.rb +740 -0
  172. data/test/test_gem_requirement.rb +292 -0
  173. data/test/test_gem_server.rb +356 -0
  174. data/test/test_gem_silent_ui.rb +113 -0
  175. data/test/test_gem_source_index.rb +461 -0
  176. data/test/test_gem_spec_fetcher.rb +410 -0
  177. data/test/test_gem_specification.rb +1291 -0
  178. data/test/test_gem_stream_ui.rb +218 -0
  179. data/test/test_gem_text.rb +43 -0
  180. data/test/test_gem_uninstaller.rb +146 -0
  181. data/test/test_gem_validator.rb +63 -0
  182. data/test/test_gem_version.rb +181 -0
  183. data/test/test_gem_version_option.rb +89 -0
  184. data/test/test_kernel.rb +59 -0
  185. metadata +413 -0
@@ -0,0 +1,199 @@
1
+ require File.expand_path('../gemutilities', __FILE__)
2
+ require 'rubygems/commands/unpack_command'
3
+
4
+ class TestGemCommandsUnpackCommand < RubyGemTestCase
5
+
6
+ def setup
7
+ super
8
+
9
+ Dir.chdir @tempdir do
10
+ @cmd = Gem::Commands::UnpackCommand.new
11
+ end
12
+ end
13
+
14
+ def test_find_in_cache
15
+ util_make_gems
16
+
17
+ assert_equal(
18
+ @cmd.find_in_cache(@a1.file_name),
19
+ File.join(@gemhome, 'cache', @a1.file_name),
20
+ 'found a-1.gem in the cache'
21
+ )
22
+ end
23
+
24
+ def test_get_path
25
+ util_make_gems
26
+ util_setup_fake_fetcher
27
+ util_setup_spec_fetcher @a1
28
+
29
+ a1_data = nil
30
+
31
+ open File.join(@gemhome, 'cache', @a1.file_name), 'rb' do |fp|
32
+ a1_data = fp.read
33
+ end
34
+
35
+ Gem::RemoteFetcher.fetcher.data['http://gems.example.com/gems/a-1.gem'] =
36
+ a1_data
37
+
38
+ dep = Gem::Dependency.new(@a1.name, @a1.version)
39
+ assert_equal(
40
+ @cmd.get_path(dep),
41
+ File.join(@gemhome, 'cache', @a1.file_name),
42
+ 'fetches a-1 and returns the cache path'
43
+ )
44
+
45
+ FileUtils.rm File.join(@gemhome, 'cache', @a1.file_name)
46
+
47
+ assert_equal(
48
+ @cmd.get_path(dep),
49
+ File.join(@gemhome, 'cache', @a1.file_name),
50
+ 'when removed from cache, refetches a-1'
51
+ )
52
+ end
53
+
54
+ def test_execute
55
+ util_make_gems
56
+
57
+ @cmd.options[:args] = %w[a b]
58
+
59
+ use_ui @ui do
60
+ Dir.chdir @tempdir do
61
+ @cmd.execute
62
+ end
63
+ end
64
+
65
+ assert File.exist?(File.join(@tempdir, 'a-3.a')), 'a should be unpacked'
66
+ assert File.exist?(File.join(@tempdir, 'b-2')), 'b should be unpacked'
67
+ end
68
+
69
+ def test_execute_gem_path
70
+ util_make_gems
71
+
72
+ Gem.clear_paths
73
+
74
+ gemhome2 = File.join @tempdir, 'gemhome2'
75
+
76
+ Gem.send :set_paths, [gemhome2, @gemhome].join(File::PATH_SEPARATOR)
77
+ Gem.send :set_home, gemhome2
78
+
79
+ @cmd.options[:args] = %w[a]
80
+
81
+ use_ui @ui do
82
+ Dir.chdir @tempdir do
83
+ @cmd.execute
84
+ end
85
+ end
86
+
87
+ assert File.exist?(File.join(@tempdir, 'a-3.a'))
88
+ end
89
+
90
+ def test_execute_gem_path_missing
91
+ util_make_gems
92
+ util_setup_spec_fetcher
93
+
94
+ Gem.clear_paths
95
+
96
+ gemhome2 = File.join @tempdir, 'gemhome2'
97
+
98
+ Gem.send :set_paths, [gemhome2, @gemhome].join(File::PATH_SEPARATOR)
99
+ Gem.send :set_home, gemhome2
100
+
101
+ @cmd.options[:args] = %w[z]
102
+
103
+ use_ui @ui do
104
+ Dir.chdir @tempdir do
105
+ @cmd.execute
106
+ end
107
+ end
108
+
109
+ assert_equal '', @ui.output
110
+ end
111
+
112
+ def test_execute_remote
113
+ util_setup_fake_fetcher
114
+ util_setup_spec_fetcher @a1, @a2
115
+ util_clear_gems
116
+
117
+ a2_data = nil
118
+ open File.join(@gemhome, 'cache', @a2.file_name), 'rb' do |fp|
119
+ a2_data = fp.read
120
+ end
121
+
122
+ Gem::RemoteFetcher.fetcher.data['http://gems.example.com/gems/a-2.gem'] =
123
+ a2_data
124
+
125
+ Gem.configuration.verbose = :really
126
+ @cmd.options[:args] = %w[a]
127
+
128
+ use_ui @ui do
129
+ Dir.chdir @tempdir do
130
+ @cmd.execute
131
+ end
132
+ end
133
+
134
+ assert File.exist?(File.join(@tempdir, 'a-2')), 'a should be unpacked'
135
+ end
136
+
137
+ def test_execute_sudo
138
+ util_make_gems
139
+
140
+ File.chmod 0555, @gemhome
141
+
142
+ @cmd.options[:args] = %w[b]
143
+
144
+ use_ui @ui do
145
+ Dir.chdir @tempdir do
146
+ @cmd.execute
147
+ end
148
+ end
149
+
150
+ assert File.exist?(File.join(@tempdir, 'b-2')), 'b should be unpacked'
151
+ ensure
152
+ File.chmod 0755, @gemhome
153
+ end
154
+
155
+ def test_execute_with_target_option
156
+ util_make_gems
157
+
158
+ target = 'with_target'
159
+ @cmd.options[:args] = %w[a]
160
+ @cmd.options[:target] = target
161
+
162
+ use_ui @ui do
163
+ Dir.chdir @tempdir do
164
+ @cmd.execute
165
+ end
166
+ end
167
+
168
+ assert File.exist?(File.join(@tempdir, target, 'a-3.a'))
169
+ end
170
+
171
+ def test_execute_exact_match
172
+ foo_spec = quick_gem 'foo'
173
+ foo_bar_spec = quick_gem 'foo_bar'
174
+
175
+ use_ui @ui do
176
+ Dir.chdir @tempdir do
177
+ Gem::Builder.new(foo_spec).build
178
+ Gem::Builder.new(foo_bar_spec).build
179
+ end
180
+ end
181
+
182
+ foo_path = File.join(@tempdir, "#{foo_spec.full_name}.gem")
183
+ foo_bar_path = File.join(@tempdir, "#{foo_bar_spec.full_name}.gem")
184
+ Gem::Installer.new(foo_path).install
185
+ Gem::Installer.new(foo_bar_path).install
186
+
187
+ @cmd.options[:args] = %w[foo]
188
+
189
+ use_ui @ui do
190
+ Dir.chdir @tempdir do
191
+ @cmd.execute
192
+ end
193
+ end
194
+
195
+ assert File.exist?(File.join(@tempdir, foo_spec.full_name))
196
+ end
197
+
198
+ end
199
+
@@ -0,0 +1,353 @@
1
+ require File.expand_path('../gemutilities', __FILE__)
2
+ require 'rubygems/commands/update_command'
3
+
4
+ class TestGemCommandsUpdateCommand < RubyGemTestCase
5
+
6
+ def setup
7
+ super
8
+
9
+ @oldpath = Dir.pwd
10
+ Dir.chdir(File.dirname(__FILE__))
11
+
12
+ @cmd = Gem::Commands::UpdateCommand.new
13
+
14
+ @cmd.options[:generate_rdoc] = false
15
+ @cmd.options[:generate_ri] = false
16
+
17
+ util_setup_fake_fetcher
18
+
19
+ @a1_path = File.join @gemhome, 'cache', @a1.file_name
20
+ @a2_path = File.join @gemhome, 'cache', @a2.file_name
21
+
22
+ util_setup_spec_fetcher @a1, @a2
23
+
24
+ @fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] =
25
+ read_binary @a1_path
26
+ @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
27
+ read_binary @a2_path
28
+ end
29
+
30
+ def teardown
31
+ super
32
+ Dir.chdir(@oldpath)
33
+ end
34
+
35
+ def test_execute
36
+ util_clear_gems
37
+
38
+ Gem::Installer.new(@a1_path).install
39
+
40
+ @cmd.options[:args] = []
41
+ @cmd.options[:generate_rdoc] = true
42
+ @cmd.options[:generate_ri] = true
43
+
44
+ use_ui @ui do
45
+ @cmd.execute
46
+ end
47
+
48
+ out = @ui.output.split "\n"
49
+ assert_match "Updating installed gems", out.shift
50
+ assert_match "Updating #{@a2.name}", out.shift
51
+ assert_match "Successfully installed #{@a2.full_name}", out.shift
52
+ assert_match "Gems updated: #{@a2.name}", out.shift
53
+ assert_match "Installing ri documentation for a-2...", out.join
54
+ assert_match "Installing RDoc documentation for a-2...", out.join
55
+ end
56
+
57
+ def util_setup_rubygem version
58
+ gem = quick_gem(Gem::GEM_NAME, version.to_s) do |s|
59
+ s.files = %w[setup.rb]
60
+ end
61
+ write_file File.join(*%W[gems #{gem.original_name} setup.rb])
62
+ util_build_gem gem
63
+ util_setup_spec_fetcher gem
64
+ gem
65
+ end
66
+
67
+ def util_setup_rubygem8
68
+ @rubygem8 = util_setup_rubygem 8
69
+ end
70
+
71
+ def util_setup_rubygem9
72
+ @rubygem9 = util_setup_rubygem 9
73
+ end
74
+
75
+ def util_setup_rubygem_current
76
+ @rubygem_current = util_setup_rubygem Gem::VERSION
77
+ end
78
+
79
+ def util_add_to_fetcher *specs
80
+ specs.each do |spec|
81
+ gem_file = File.join @gemhome, 'cache', spec.file_name
82
+
83
+ @fetcher.data["http://gems.example.com/gems/#{spec.file_name}"] =
84
+ Gem.read_binary gem_file
85
+ end
86
+ end
87
+
88
+ def test_execute_system
89
+ util_setup_rubygem9
90
+ util_setup_spec_fetcher @rubygem9
91
+ util_add_to_fetcher @rubygem9
92
+ util_clear_gems
93
+
94
+ @cmd.options[:args] = []
95
+ @cmd.options[:system] = true
96
+ @cmd.options[:generate_rdoc] = false
97
+ @cmd.options[:generate_ri] = false
98
+
99
+ use_ui @ui do
100
+ @cmd.execute
101
+ end
102
+
103
+ out = @ui.output.split "\n"
104
+ assert_equal "Updating #{Gem::GEM_NAME}", out.shift
105
+ assert_equal "Successfully installed #{Gem::GEM_NAME}-9", out.shift
106
+ assert_equal "#{Gem::NAME} system software updated (9)", out.shift
107
+
108
+ assert_empty out
109
+ end
110
+
111
+ def test_execute_system_at_latest
112
+ util_setup_rubygem_current
113
+ util_setup_spec_fetcher @rubygem_current
114
+ util_add_to_fetcher @rubygem_current
115
+ util_clear_gems
116
+
117
+ @cmd.options[:args] = []
118
+ @cmd.options[:system] = true
119
+ @cmd.options[:generate_rdoc] = false
120
+ @cmd.options[:generate_ri] = false
121
+
122
+ assert_raises Gem::SystemExitException do
123
+ use_ui @ui do
124
+ @cmd.execute
125
+ end
126
+ end
127
+
128
+ out = @ui.output.split "\n"
129
+ assert_equal "#{Gem::NAME} is already up-to-date (#{Gem::VERSION})", out.shift
130
+ assert_empty out
131
+ end
132
+
133
+ def test_execute_system_multiple
134
+ util_setup_rubygem9
135
+ util_setup_rubygem8
136
+ util_setup_spec_fetcher @rubygem8, @rubygem9
137
+ util_add_to_fetcher @rubygem8, @rubygem9
138
+ util_clear_gems
139
+
140
+ @cmd.options[:args] = []
141
+ @cmd.options[:system] = true
142
+ @cmd.options[:generate_rdoc] = false
143
+ @cmd.options[:generate_ri] = false
144
+
145
+ use_ui @ui do
146
+ @cmd.execute
147
+ end
148
+
149
+ out = @ui.output.split "\n"
150
+ assert_equal "Updating #{Gem::GEM_NAME}", out.shift
151
+ assert_equal "Successfully installed #{Gem::GEM_NAME}-9", out.shift
152
+ assert_equal "#{Gem::NAME} system software updated (9)", out.shift
153
+
154
+ assert_empty out
155
+ end
156
+
157
+ def test_execute_system_specific
158
+ util_clear_gems
159
+ util_setup_rubygem9
160
+ util_setup_rubygem8
161
+ util_setup_spec_fetcher @rubygem8, @rubygem9
162
+ util_add_to_fetcher @rubygem8, @rubygem9
163
+
164
+ @cmd.options[:args] = []
165
+ @cmd.options[:system] = "8"
166
+ @cmd.options[:generate_rdoc] = false
167
+ @cmd.options[:generate_ri] = false
168
+
169
+ use_ui @ui do
170
+ @cmd.execute
171
+ end
172
+
173
+ out = @ui.output.split "\n"
174
+ assert_equal "Updating #{Gem::GEM_NAME}", out.shift
175
+ assert_equal "Successfully installed #{Gem::GEM_NAME}-8", out.shift
176
+ assert_equal "#{Gem::NAME} system software updated (8)", out.shift
177
+
178
+ assert_empty out
179
+ end
180
+
181
+ def test_execute_system_with_gems
182
+ @cmd.options[:args] = %w[gem]
183
+ @cmd.options[:system] = true
184
+ @cmd.options[:generate_rdoc] = false
185
+ @cmd.options[:generate_ri] = false
186
+
187
+ assert_raises MockGemUi::TermError do
188
+ use_ui @ui do
189
+ @cmd.execute
190
+ end
191
+ end
192
+
193
+ assert_empty @ui.output
194
+ assert_equal "ERROR: Gem names are not allowed with the --system option\n",
195
+ @ui.error
196
+ end
197
+
198
+ # before:
199
+ # a1 -> c1.2
200
+ # after:
201
+ # a2 -> b2 # new dependency
202
+ # a2 -> c2
203
+
204
+ def test_execute_dependencies
205
+ @a1.add_dependency 'c', '1.2'
206
+
207
+ @c2 = quick_gem 'c', '2' do |s|
208
+ s.files = %w[lib/code.rb]
209
+ s.require_paths = %w[lib]
210
+ end
211
+
212
+ @a2.add_dependency 'c', '2'
213
+ @a2.add_dependency 'b', '2'
214
+
215
+ @b2_path = File.join @gemhome, 'cache', @b2.file_name
216
+ @c1_2_path = File.join @gemhome, 'cache', @c1_2.file_name
217
+ @c2_path = File.join @gemhome, 'cache', @c2.file_name
218
+
219
+ @source_index = Gem::SourceIndex.new
220
+ @source_index.add_spec @a1
221
+ @source_index.add_spec @a2
222
+ @source_index.add_spec @b2
223
+ @source_index.add_spec @c1_2
224
+ @source_index.add_spec @c2
225
+
226
+ util_build_gem @a1
227
+ util_build_gem @a2
228
+ util_build_gem @c2
229
+
230
+ @fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] = read_binary @a1_path
231
+ @fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = read_binary @a2_path
232
+ @fetcher.data["#{@gem_repo}gems/#{@b2.file_name}"] = read_binary @b2_path
233
+ @fetcher.data["#{@gem_repo}gems/#{@c1_2.file_name}"] =
234
+ read_binary @c1_2_path
235
+ @fetcher.data["#{@gem_repo}gems/#{@c2.file_name}"] = read_binary @c2_path
236
+
237
+ util_setup_spec_fetcher @a1, @a2, @b2, @c1_2, @c2
238
+ util_clear_gems
239
+
240
+ Gem::Installer.new(@c1_2_path).install
241
+ Gem::Installer.new(@a1_path).install
242
+
243
+ @cmd.options[:args] = []
244
+
245
+ use_ui @ui do
246
+ @cmd.execute
247
+ end
248
+
249
+ out = @ui.output.split "\n"
250
+ assert_equal "Updating installed gems", out.shift
251
+ assert_equal "Updating #{@a2.name}", out.shift
252
+ assert_equal "Successfully installed #{@c2.full_name}", out.shift
253
+ assert_equal "Successfully installed #{@b2.full_name}", out.shift
254
+ assert_equal "Successfully installed #{@a2.full_name}", out.shift
255
+ assert_equal "Gems updated: #{@c2.name}, #{@b2.name}, #{@a2.name}",
256
+ out.shift
257
+
258
+ assert_empty out
259
+ end
260
+
261
+ def test_execute_named
262
+ util_clear_gems
263
+
264
+ Gem::Installer.new(@a1_path).install
265
+
266
+ @cmd.options[:args] = [@a1.name]
267
+
268
+ use_ui @ui do
269
+ @cmd.execute
270
+ end
271
+
272
+ out = @ui.output.split "\n"
273
+ assert_equal "Updating installed gems", out.shift
274
+ assert_equal "Updating #{@a2.name}", out.shift
275
+ assert_equal "Successfully installed #{@a2.full_name}", out.shift
276
+ assert_equal "Gems updated: #{@a2.name}", out.shift
277
+
278
+ assert_empty out
279
+ end
280
+
281
+ def test_execute_named_up_to_date
282
+ util_clear_gems
283
+
284
+ Gem::Installer.new(@a2_path).install
285
+
286
+ @cmd.options[:args] = [@a2.name]
287
+
288
+ use_ui @ui do
289
+ @cmd.execute
290
+ end
291
+
292
+ out = @ui.output.split "\n"
293
+ assert_equal "Updating installed gems", out.shift
294
+ assert_equal "Nothing to update", out.shift
295
+
296
+ assert_empty out
297
+ end
298
+
299
+ def test_execute_up_to_date
300
+ util_clear_gems
301
+
302
+ Gem::Installer.new(@a2_path).install
303
+
304
+ @cmd.options[:args] = []
305
+
306
+ use_ui @ui do
307
+ @cmd.execute
308
+ end
309
+
310
+ out = @ui.output.split "\n"
311
+ assert_equal "Updating installed gems", out.shift
312
+ assert_equal "Nothing to update", out.shift
313
+
314
+ assert_empty out
315
+ end
316
+
317
+ def test_handle_options_system
318
+ @cmd.handle_options %w[--system]
319
+
320
+ expected = {
321
+ :generate_ri => true,
322
+ :system => true,
323
+ :force => false,
324
+ :args => [],
325
+ :generate_rdoc => true,
326
+ :test => false,
327
+ }
328
+
329
+ assert_equal expected, @cmd.options
330
+ end
331
+
332
+ def test_handle_options_system_non_version
333
+ assert_raises ArgumentError do
334
+ @cmd.handle_options %w[--system non-version]
335
+ end
336
+ end
337
+
338
+ def test_handle_options_system_specific
339
+ @cmd.handle_options %w[--system 1.3.7]
340
+
341
+ expected = {
342
+ :generate_ri => true,
343
+ :system => "1.3.7",
344
+ :force => false,
345
+ :args => [],
346
+ :generate_rdoc => true,
347
+ :test => false,
348
+ }
349
+
350
+ assert_equal expected, @cmd.options
351
+ end
352
+
353
+ end