libgems 0.0.1

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 (177) 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 +113 -0
  6. data/lib/gauntlet_libgems.rb +50 -0
  7. data/lib/libgems.rb +1246 -0
  8. data/lib/libgems/builder.rb +102 -0
  9. data/lib/libgems/command.rb +534 -0
  10. data/lib/libgems/command_manager.rb +182 -0
  11. data/lib/libgems/commands/build_command.rb +53 -0
  12. data/lib/libgems/commands/cert_command.rb +86 -0
  13. data/lib/libgems/commands/check_command.rb +80 -0
  14. data/lib/libgems/commands/cleanup_command.rb +106 -0
  15. data/lib/libgems/commands/contents_command.rb +98 -0
  16. data/lib/libgems/commands/dependency_command.rb +195 -0
  17. data/lib/libgems/commands/environment_command.rb +133 -0
  18. data/lib/libgems/commands/fetch_command.rb +67 -0
  19. data/lib/libgems/commands/generate_index_command.rb +133 -0
  20. data/lib/libgems/commands/help_command.rb +172 -0
  21. data/lib/libgems/commands/install_command.rb +178 -0
  22. data/lib/libgems/commands/list_command.rb +35 -0
  23. data/lib/libgems/commands/lock_command.rb +110 -0
  24. data/lib/libgems/commands/mirror_command.rb +111 -0
  25. data/lib/libgems/commands/outdated_command.rb +33 -0
  26. data/lib/libgems/commands/owner_command.rb +75 -0
  27. data/lib/libgems/commands/pristine_command.rb +93 -0
  28. data/lib/libgems/commands/push_command.rb +56 -0
  29. data/lib/libgems/commands/query_command.rb +280 -0
  30. data/lib/libgems/commands/rdoc_command.rb +91 -0
  31. data/lib/libgems/commands/search_command.rb +31 -0
  32. data/lib/libgems/commands/server_command.rb +86 -0
  33. data/lib/libgems/commands/sources_command.rb +157 -0
  34. data/lib/libgems/commands/specification_command.rb +125 -0
  35. data/lib/libgems/commands/stale_command.rb +27 -0
  36. data/lib/libgems/commands/uninstall_command.rb +83 -0
  37. data/lib/libgems/commands/unpack_command.rb +121 -0
  38. data/lib/libgems/commands/update_command.rb +160 -0
  39. data/lib/libgems/commands/which_command.rb +86 -0
  40. data/lib/libgems/config_file.rb +345 -0
  41. data/lib/libgems/custom_require.rb +44 -0
  42. data/lib/libgems/defaults.rb +101 -0
  43. data/lib/libgems/dependency.rb +227 -0
  44. data/lib/libgems/dependency_installer.rb +286 -0
  45. data/lib/libgems/dependency_list.rb +208 -0
  46. data/lib/libgems/doc_manager.rb +242 -0
  47. data/lib/libgems/errors.rb +35 -0
  48. data/lib/libgems/exceptions.rb +91 -0
  49. data/lib/libgems/ext.rb +18 -0
  50. data/lib/libgems/ext/builder.rb +56 -0
  51. data/lib/libgems/ext/configure_builder.rb +25 -0
  52. data/lib/libgems/ext/ext_conf_builder.rb +24 -0
  53. data/lib/libgems/ext/rake_builder.rb +39 -0
  54. data/lib/libgems/format.rb +81 -0
  55. data/lib/libgems/gem_openssl.rb +92 -0
  56. data/lib/libgems/gem_path_searcher.rb +100 -0
  57. data/lib/libgems/gem_runner.rb +79 -0
  58. data/lib/libgems/gemcutter_utilities.rb +49 -0
  59. data/lib/libgems/indexer.rb +720 -0
  60. data/lib/libgems/install_update_options.rb +125 -0
  61. data/lib/libgems/installer.rb +604 -0
  62. data/lib/libgems/local_remote_options.rb +135 -0
  63. data/lib/libgems/old_format.rb +153 -0
  64. data/lib/libgems/package.rb +97 -0
  65. data/lib/libgems/package/f_sync_dir.rb +23 -0
  66. data/lib/libgems/package/tar_header.rb +266 -0
  67. data/lib/libgems/package/tar_input.rb +222 -0
  68. data/lib/libgems/package/tar_output.rb +144 -0
  69. data/lib/libgems/package/tar_reader.rb +106 -0
  70. data/lib/libgems/package/tar_reader/entry.rb +141 -0
  71. data/lib/libgems/package/tar_writer.rb +241 -0
  72. data/lib/libgems/package_task.rb +126 -0
  73. data/lib/libgems/platform.rb +183 -0
  74. data/lib/libgems/remote_fetcher.rb +414 -0
  75. data/lib/libgems/require_paths_builder.rb +18 -0
  76. data/lib/libgems/requirement.rb +153 -0
  77. data/lib/libgems/security.rb +814 -0
  78. data/lib/libgems/server.rb +872 -0
  79. data/lib/libgems/source_index.rb +597 -0
  80. data/lib/libgems/source_info_cache.rb +395 -0
  81. data/lib/libgems/source_info_cache_entry.rb +56 -0
  82. data/lib/libgems/spec_fetcher.rb +337 -0
  83. data/lib/libgems/specification.rb +1487 -0
  84. data/lib/libgems/test_utilities.rb +147 -0
  85. data/lib/libgems/text.rb +65 -0
  86. data/lib/libgems/uninstaller.rb +278 -0
  87. data/lib/libgems/user_interaction.rb +527 -0
  88. data/lib/libgems/validator.rb +240 -0
  89. data/lib/libgems/version.rb +316 -0
  90. data/lib/libgems/version_option.rb +65 -0
  91. data/lib/rbconfig/datadir.rb +20 -0
  92. data/test/bogussources.rb +8 -0
  93. data/test/data/gem-private_key.pem +27 -0
  94. data/test/data/gem-public_cert.pem +20 -0
  95. data/test/fake_certlib/openssl.rb +7 -0
  96. data/test/foo/discover.rb +0 -0
  97. data/test/gem_installer_test_case.rb +97 -0
  98. data/test/gem_package_tar_test_case.rb +132 -0
  99. data/test/gemutilities.rb +605 -0
  100. data/test/insure_session.rb +43 -0
  101. data/test/mockgemui.rb +56 -0
  102. data/test/plugin/exception/libgems_plugin.rb +2 -0
  103. data/test/plugin/load/libgems_plugin.rb +1 -0
  104. data/test/plugin/standarderror/libgems_plugin.rb +2 -0
  105. data/test/private_key.pem +27 -0
  106. data/test/public_cert.pem +20 -0
  107. data/test/rubygems_plugin.rb +21 -0
  108. data/test/simple_gem.rb +66 -0
  109. data/test/test_config.rb +12 -0
  110. data/test/test_gem.rb +780 -0
  111. data/test/test_gem_builder.rb +27 -0
  112. data/test/test_gem_command.rb +178 -0
  113. data/test/test_gem_command_manager.rb +207 -0
  114. data/test/test_gem_commands_build_command.rb +74 -0
  115. data/test/test_gem_commands_cert_command.rb +124 -0
  116. data/test/test_gem_commands_check_command.rb +18 -0
  117. data/test/test_gem_commands_contents_command.rb +156 -0
  118. data/test/test_gem_commands_dependency_command.rb +216 -0
  119. data/test/test_gem_commands_environment_command.rb +144 -0
  120. data/test/test_gem_commands_fetch_command.rb +76 -0
  121. data/test/test_gem_commands_generate_index_command.rb +135 -0
  122. data/test/test_gem_commands_install_command.rb +315 -0
  123. data/test/test_gem_commands_list_command.rb +36 -0
  124. data/test/test_gem_commands_lock_command.rb +68 -0
  125. data/test/test_gem_commands_mirror_command.rb +60 -0
  126. data/test/test_gem_commands_outdated_command.rb +40 -0
  127. data/test/test_gem_commands_owner_command.rb +105 -0
  128. data/test/test_gem_commands_pristine_command.rb +108 -0
  129. data/test/test_gem_commands_push_command.rb +81 -0
  130. data/test/test_gem_commands_query_command.rb +426 -0
  131. data/test/test_gem_commands_server_command.rb +59 -0
  132. data/test/test_gem_commands_sources_command.rb +209 -0
  133. data/test/test_gem_commands_specification_command.rb +139 -0
  134. data/test/test_gem_commands_stale_command.rb +38 -0
  135. data/test/test_gem_commands_uninstall_command.rb +83 -0
  136. data/test/test_gem_commands_unpack_command.rb +199 -0
  137. data/test/test_gem_commands_update_command.rb +207 -0
  138. data/test/test_gem_commands_which_command.rb +66 -0
  139. data/test/test_gem_config_file.rb +287 -0
  140. data/test/test_gem_dependency.rb +149 -0
  141. data/test/test_gem_dependency_installer.rb +661 -0
  142. data/test/test_gem_dependency_list.rb +230 -0
  143. data/test/test_gem_doc_manager.rb +31 -0
  144. data/test/test_gem_ext_configure_builder.rb +84 -0
  145. data/test/test_gem_ext_ext_conf_builder.rb +173 -0
  146. data/test/test_gem_ext_rake_builder.rb +81 -0
  147. data/test/test_gem_format.rb +70 -0
  148. data/test/test_gem_gem_path_searcher.rb +78 -0
  149. data/test/test_gem_gem_runner.rb +45 -0
  150. data/test/test_gem_gemcutter_utilities.rb +103 -0
  151. data/test/test_gem_indexer.rb +673 -0
  152. data/test/test_gem_install_update_options.rb +68 -0
  153. data/test/test_gem_installer.rb +857 -0
  154. data/test/test_gem_local_remote_options.rb +97 -0
  155. data/test/test_gem_package_tar_header.rb +130 -0
  156. data/test/test_gem_package_tar_input.rb +112 -0
  157. data/test/test_gem_package_tar_output.rb +97 -0
  158. data/test/test_gem_package_tar_reader.rb +46 -0
  159. data/test/test_gem_package_tar_reader_entry.rb +109 -0
  160. data/test/test_gem_package_tar_writer.rb +144 -0
  161. data/test/test_gem_package_task.rb +59 -0
  162. data/test/test_gem_platform.rb +264 -0
  163. data/test/test_gem_remote_fetcher.rb +740 -0
  164. data/test/test_gem_requirement.rb +292 -0
  165. data/test/test_gem_server.rb +356 -0
  166. data/test/test_gem_silent_ui.rb +113 -0
  167. data/test/test_gem_source_index.rb +461 -0
  168. data/test/test_gem_spec_fetcher.rb +410 -0
  169. data/test/test_gem_specification.rb +1334 -0
  170. data/test/test_gem_stream_ui.rb +218 -0
  171. data/test/test_gem_text.rb +43 -0
  172. data/test/test_gem_uninstaller.rb +146 -0
  173. data/test/test_gem_validator.rb +63 -0
  174. data/test/test_gem_version.rb +181 -0
  175. data/test/test_gem_version_option.rb +89 -0
  176. data/test/test_kernel.rb +59 -0
  177. metadata +402 -0
@@ -0,0 +1,209 @@
1
+ require File.expand_path('../gemutilities', __FILE__)
2
+ require 'libgems/commands/sources_command'
3
+
4
+ class TestGemCommandsSourcesCommand < RubyGemTestCase
5
+
6
+ def setup
7
+ super
8
+
9
+ @cmd = LibGems::Commands::SourcesCommand.new
10
+
11
+ @new_repo = "http://beta-gems.example.com"
12
+ end
13
+
14
+ def test_initialize_proxy
15
+ assert @cmd.handles?(['--http-proxy', 'http://proxy.example.com'])
16
+ end
17
+
18
+ def test_execute
19
+ util_setup_spec_fetcher
20
+ @cmd.handle_options []
21
+
22
+ use_ui @ui do
23
+ @cmd.execute
24
+ end
25
+
26
+ expected = <<-EOF
27
+ *** CURRENT SOURCES ***
28
+
29
+ #{@gem_repo}
30
+ EOF
31
+
32
+ assert_equal expected, @ui.output
33
+ assert_equal '', @ui.error
34
+ end
35
+
36
+ def test_execute_add
37
+ util_setup_fake_fetcher
38
+
39
+ si = LibGems::SourceIndex.new
40
+ si.add_spec @a1
41
+
42
+ specs = si.map do |_, spec|
43
+ [spec.name, spec.version, spec.original_platform]
44
+ end
45
+
46
+ specs_dump_gz = StringIO.new
47
+ Zlib::GzipWriter.wrap specs_dump_gz do |io|
48
+ Marshal.dump specs, io
49
+ end
50
+
51
+ @fetcher.data["#{@new_repo}/specs.#{@marshal_version}.gz"] =
52
+ specs_dump_gz.string
53
+
54
+ @cmd.handle_options %W[--add #{@new_repo}]
55
+
56
+ util_setup_spec_fetcher
57
+
58
+ use_ui @ui do
59
+ @cmd.execute
60
+ end
61
+
62
+ assert_equal [@gem_repo, @new_repo], LibGems.sources
63
+
64
+ expected = <<-EOF
65
+ #{@new_repo} added to sources
66
+ EOF
67
+
68
+ assert_equal expected, @ui.output
69
+ assert_equal '', @ui.error
70
+ end
71
+
72
+ def test_execute_add_nonexistent_source
73
+ util_setup_fake_fetcher
74
+
75
+ uri = "http://beta-gems.example.com/specs.#{@marshal_version}.gz"
76
+ @fetcher.data[uri] = proc do
77
+ raise LibGems::RemoteFetcher::FetchError.new('it died', uri)
78
+ end
79
+
80
+ LibGems::RemoteFetcher.fetcher = @fetcher
81
+
82
+ @cmd.handle_options %w[--add http://beta-gems.example.com]
83
+
84
+ util_setup_spec_fetcher
85
+
86
+ use_ui @ui do
87
+ @cmd.execute
88
+ end
89
+
90
+ expected = <<-EOF
91
+ Error fetching http://beta-gems.example.com:
92
+ \tit died (#{uri})
93
+ EOF
94
+
95
+ assert_equal expected, @ui.output
96
+ assert_equal '', @ui.error
97
+ end
98
+
99
+ def test_execute_add_bad_uri
100
+ @cmd.handle_options %w[--add beta-gems.example.com]
101
+
102
+ util_setup_spec_fetcher
103
+
104
+ use_ui @ui do
105
+ @cmd.execute
106
+ end
107
+
108
+ assert_equal [@gem_repo], LibGems.sources
109
+
110
+ expected = <<-EOF
111
+ beta-gems.example.com is not a URI
112
+ EOF
113
+
114
+ assert_equal expected, @ui.output
115
+ assert_equal '', @ui.error
116
+ end
117
+
118
+ def test_execute_clear_all
119
+ @cmd.handle_options %w[--clear-all]
120
+
121
+ util_setup_spec_fetcher
122
+
123
+ fetcher = LibGems::SpecFetcher.fetcher
124
+
125
+ # HACK figure out how to force directory creation via fetcher
126
+ #assert File.directory?(fetcher.dir), 'cache dir exists'
127
+
128
+ use_ui @ui do
129
+ @cmd.execute
130
+ end
131
+
132
+ expected = <<-EOF
133
+ *** Removed specs cache ***
134
+ *** Removed user source cache ***
135
+ *** Removed latest user source cache ***
136
+ *** Removed system source cache ***
137
+ *** Removed latest system source cache ***
138
+ EOF
139
+
140
+ assert_equal expected, @ui.output
141
+ assert_equal '', @ui.error
142
+
143
+ refute File.exist?(fetcher.dir), 'cache dir removed'
144
+ end
145
+
146
+ def test_execute_remove
147
+ @cmd.handle_options %W[--remove #{@gem_repo}]
148
+
149
+ util_setup_spec_fetcher
150
+
151
+ use_ui @ui do
152
+ @cmd.execute
153
+ end
154
+
155
+ expected = "#{@gem_repo} removed from sources\n"
156
+
157
+ assert_equal expected, @ui.output
158
+ assert_equal '', @ui.error
159
+ end
160
+
161
+ def test_execute_remove_no_network
162
+ @cmd.handle_options %W[--remove #{@gem_repo}]
163
+
164
+ util_setup_fake_fetcher
165
+
166
+ @fetcher.data["#{@gem_repo}Marshal.#{LibGems.marshal_version}"] = proc do
167
+ raise LibGems::RemoteFetcher::FetchError
168
+ end
169
+
170
+ use_ui @ui do
171
+ @cmd.execute
172
+ end
173
+
174
+ expected = "#{@gem_repo} removed from sources\n"
175
+
176
+ assert_equal expected, @ui.output
177
+ assert_equal '', @ui.error
178
+ end
179
+
180
+ def test_execute_update
181
+ @cmd.handle_options %w[--update]
182
+
183
+ util_setup_fake_fetcher
184
+ source_index = util_setup_spec_fetcher @a1
185
+
186
+ specs = source_index.map do |name, spec|
187
+ [spec.name, spec.version, spec.original_platform]
188
+ end
189
+
190
+ @fetcher.data["#{@gem_repo}specs.#{LibGems.marshal_version}.gz"] =
191
+ util_gzip Marshal.dump(specs)
192
+
193
+ latest_specs = source_index.latest_specs.map do |spec|
194
+ [spec.name, spec.version, spec.original_platform]
195
+ end
196
+
197
+ @fetcher.data["#{@gem_repo}latest_specs.#{LibGems.marshal_version}.gz"] =
198
+ util_gzip Marshal.dump(latest_specs)
199
+
200
+ use_ui @ui do
201
+ @cmd.execute
202
+ end
203
+
204
+ assert_equal "source cache successfully updated\n", @ui.output
205
+ assert_equal '', @ui.error
206
+ end
207
+
208
+ end
209
+
@@ -0,0 +1,139 @@
1
+ require File.expand_path('../gemutilities', __FILE__)
2
+ require 'libgems/commands/specification_command'
3
+
4
+ class TestGemCommandsSpecificationCommand < RubyGemTestCase
5
+
6
+ def setup
7
+ super
8
+
9
+ @cmd = LibGems::Commands::SpecificationCommand.new
10
+ end
11
+
12
+ def test_execute
13
+ foo = quick_gem 'foo'
14
+ LibGems.source_index.add_spec foo
15
+
16
+ @cmd.options[:args] = %w[foo]
17
+
18
+ use_ui @ui do
19
+ @cmd.execute
20
+ end
21
+
22
+ assert_match %r|LibGems::Specification|, @ui.output
23
+ assert_match %r|name: foo|, @ui.output
24
+ assert_equal '', @ui.error
25
+ end
26
+
27
+ def test_execute_all
28
+ foo1 = quick_gem 'foo', '0.0.1'
29
+ foo2 = quick_gem 'foo', '0.0.2'
30
+
31
+ @cmd.options[:args] = %w[foo]
32
+ @cmd.options[:all] = true
33
+
34
+ use_ui @ui do
35
+ @cmd.execute
36
+ end
37
+
38
+ assert_match %r|LibGems::Specification|, @ui.output
39
+ assert_match %r|name: foo|, @ui.output
40
+ assert_match %r|version: 0.0.1|, @ui.output
41
+ assert_match %r|version: 0.0.2|, @ui.output
42
+ assert_equal '', @ui.error
43
+ end
44
+
45
+ def test_execute_bad_name
46
+ @cmd.options[:args] = %w[foo]
47
+
48
+ assert_raises MockGemUi::TermError do
49
+ use_ui @ui do
50
+ @cmd.execute
51
+ end
52
+ end
53
+
54
+ assert_equal '', @ui.output
55
+ assert_equal "ERROR: Unknown gem 'foo'\n", @ui.error
56
+ end
57
+
58
+ def test_execute_exact_match
59
+ foo = quick_gem 'foo'
60
+ foo_bar = quick_gem 'foo_bar'
61
+
62
+ @cmd.options[:args] = %w[foo]
63
+
64
+ use_ui @ui do
65
+ @cmd.execute
66
+ end
67
+
68
+ assert_match %r|LibGems::Specification|, @ui.output
69
+ assert_match %r|name: foo|, @ui.output
70
+ assert_equal '', @ui.error
71
+ end
72
+
73
+ def test_execute_field
74
+ foo = quick_gem 'foo'
75
+ LibGems.source_index.add_spec foo
76
+
77
+ @cmd.options[:args] = %w[foo name]
78
+
79
+ use_ui @ui do
80
+ @cmd.execute
81
+ end
82
+
83
+ assert_equal "foo", YAML.load(@ui.output)
84
+ end
85
+
86
+ def test_execute_marshal
87
+ foo = quick_gem 'foo'
88
+ LibGems.source_index.add_spec foo
89
+
90
+ @cmd.options[:args] = %w[foo]
91
+ @cmd.options[:format] = :marshal
92
+
93
+ use_ui @ui do
94
+ @cmd.execute
95
+ end
96
+
97
+ assert_equal foo, Marshal.load(@ui.output)
98
+ assert_equal '', @ui.error
99
+ end
100
+
101
+ def test_execute_remote
102
+ foo = quick_gem 'foo'
103
+
104
+ @fetcher = LibGems::FakeFetcher.new
105
+ LibGems::RemoteFetcher.fetcher = @fetcher
106
+
107
+ util_setup_spec_fetcher foo
108
+
109
+ FileUtils.rm File.join(@gemhome, 'specifications', foo.spec_name)
110
+
111
+ @cmd.options[:args] = %w[foo]
112
+ @cmd.options[:domain] = :remote
113
+
114
+ use_ui @ui do
115
+ @cmd.execute
116
+ end
117
+
118
+ assert_match %r|\A--- !ruby/object:LibGems::Specification|, @ui.output
119
+ assert_match %r|name: foo|, @ui.output
120
+ end
121
+
122
+ def test_execute_ruby
123
+ foo = quick_gem 'foo'
124
+ LibGems.source_index.add_spec foo
125
+
126
+ @cmd.options[:args] = %w[foo]
127
+ @cmd.options[:format] = :ruby
128
+
129
+ use_ui @ui do
130
+ @cmd.execute
131
+ end
132
+
133
+ assert_match %r|LibGems::Specification.new|, @ui.output
134
+ assert_match %r|s.name = %q\{foo\}|, @ui.output
135
+ assert_equal '', @ui.error
136
+ end
137
+
138
+ end
139
+
@@ -0,0 +1,38 @@
1
+ require File.expand_path('../gemutilities', __FILE__)
2
+ require 'libgems/commands/stale_command'
3
+
4
+ class TestGemCommandsStaleCommand < RubyGemTestCase
5
+
6
+ def setup
7
+ super
8
+ @cmd = LibGems::Commands::StaleCommand.new
9
+ end
10
+
11
+ def test_execute_sorts
12
+ files = %w[lib/foo_bar.rb Rakefile]
13
+ foo_bar = quick_gem 'foo_bar' do |gem|
14
+ gem.files = files
15
+ end
16
+ bar_baz = quick_gem 'bar_baz' do |gem|
17
+ gem.files = files
18
+ end
19
+
20
+ files.each do |file|
21
+ filename = bar_baz.full_gem_path + "/#{file}"
22
+ FileUtils.mkdir_p(File.dirname(filename))
23
+ FileUtils.touch(filename, :mtime => Time.now)
24
+
25
+ filename = foo_bar.full_gem_path + "/#{file}"
26
+ FileUtils.mkdir_p(File.dirname(filename))
27
+ FileUtils.touch(filename, :mtime => Time.now - 86400)
28
+ end
29
+
30
+ use_ui @ui do
31
+ @cmd.execute
32
+ end
33
+ lines = @ui.output.split("\n")
34
+ assert_equal("#{foo_bar.name}-#{foo_bar.version}", lines[0].split.first)
35
+ assert_equal("#{bar_baz.name}-#{bar_baz.version}", lines[1].split.first)
36
+ end
37
+
38
+ end
@@ -0,0 +1,83 @@
1
+ require File.expand_path('../gemutilities', __FILE__)
2
+ require File.expand_path('../gem_installer_test_case', __FILE__)
3
+ require 'libgems/commands/uninstall_command'
4
+
5
+ class TestGemCommandsUninstallCommand < LibGemsInstallerTestCase
6
+
7
+ def setup
8
+ super
9
+
10
+ ui = MockGemUi.new
11
+ util_setup_gem ui
12
+
13
+ build_rake_in do
14
+ use_ui ui do
15
+ @installer.install
16
+ end
17
+ end
18
+
19
+ @cmd = LibGems::Commands::UninstallCommand.new
20
+ @cmd.options[:executables] = true
21
+ @executable = File.join(@gemhome, 'bin', 'executable')
22
+ end
23
+
24
+ def test_execute_removes_executable
25
+ if win_platform?
26
+ assert_equal true, File.exist?(@executable)
27
+ else
28
+ assert_equal true, File.symlink?(@executable)
29
+ end
30
+
31
+ # Evil hack to prevent false removal success
32
+ FileUtils.rm_f @executable
33
+ File.open(@executable, "wb+") {|f| f.puts "binary"}
34
+
35
+ @cmd.options[:args] = Array(@spec.name)
36
+ use_ui @ui do
37
+ @cmd.execute
38
+ end
39
+
40
+ output = @ui.output.split "\n"
41
+ assert_match(/Removing executable/, output.shift)
42
+ assert_match(/Successfully uninstalled/, output.shift)
43
+ assert_equal false, File.exist?(@executable)
44
+ assert_nil output.shift, "UI output should have contained only two lines"
45
+ end
46
+
47
+ def test_execute_not_installed
48
+ @cmd.options[:args] = ["foo"]
49
+ e = assert_raises LibGems::InstallError do
50
+ use_ui @ui do
51
+ @cmd.execute
52
+ end
53
+ end
54
+
55
+ assert_match(/\Acannot uninstall, check `gem list -d foo`$/, e.message)
56
+ output = @ui.output.split "\n"
57
+ assert_empty output, "UI output should be empty after an uninstall error"
58
+ end
59
+
60
+ def test_execute_prerelease
61
+ @spec = quick_gem "pre", "2.b"
62
+ @gem = File.join @tempdir, @spec.file_name
63
+ FileUtils.touch @gem
64
+
65
+ util_setup_gem
66
+
67
+ build_rake_in do
68
+ use_ui @ui do
69
+ @installer.install
70
+ end
71
+ end
72
+
73
+ @cmd.options[:args] = ["pre"]
74
+
75
+ use_ui @ui do
76
+ @cmd.execute
77
+ end
78
+
79
+ output = @ui.output
80
+ assert_match(/Successfully uninstalled/, output)
81
+ end
82
+ end
83
+