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.
- data/ChangeLog +5811 -0
- data/History.txt +887 -0
- data/LICENSE.txt +51 -0
- data/README.md +87 -0
- data/Rakefile +113 -0
- data/lib/gauntlet_libgems.rb +50 -0
- data/lib/libgems.rb +1246 -0
- data/lib/libgems/builder.rb +102 -0
- data/lib/libgems/command.rb +534 -0
- data/lib/libgems/command_manager.rb +182 -0
- data/lib/libgems/commands/build_command.rb +53 -0
- data/lib/libgems/commands/cert_command.rb +86 -0
- data/lib/libgems/commands/check_command.rb +80 -0
- data/lib/libgems/commands/cleanup_command.rb +106 -0
- data/lib/libgems/commands/contents_command.rb +98 -0
- data/lib/libgems/commands/dependency_command.rb +195 -0
- data/lib/libgems/commands/environment_command.rb +133 -0
- data/lib/libgems/commands/fetch_command.rb +67 -0
- data/lib/libgems/commands/generate_index_command.rb +133 -0
- data/lib/libgems/commands/help_command.rb +172 -0
- data/lib/libgems/commands/install_command.rb +178 -0
- data/lib/libgems/commands/list_command.rb +35 -0
- data/lib/libgems/commands/lock_command.rb +110 -0
- data/lib/libgems/commands/mirror_command.rb +111 -0
- data/lib/libgems/commands/outdated_command.rb +33 -0
- data/lib/libgems/commands/owner_command.rb +75 -0
- data/lib/libgems/commands/pristine_command.rb +93 -0
- data/lib/libgems/commands/push_command.rb +56 -0
- data/lib/libgems/commands/query_command.rb +280 -0
- data/lib/libgems/commands/rdoc_command.rb +91 -0
- data/lib/libgems/commands/search_command.rb +31 -0
- data/lib/libgems/commands/server_command.rb +86 -0
- data/lib/libgems/commands/sources_command.rb +157 -0
- data/lib/libgems/commands/specification_command.rb +125 -0
- data/lib/libgems/commands/stale_command.rb +27 -0
- data/lib/libgems/commands/uninstall_command.rb +83 -0
- data/lib/libgems/commands/unpack_command.rb +121 -0
- data/lib/libgems/commands/update_command.rb +160 -0
- data/lib/libgems/commands/which_command.rb +86 -0
- data/lib/libgems/config_file.rb +345 -0
- data/lib/libgems/custom_require.rb +44 -0
- data/lib/libgems/defaults.rb +101 -0
- data/lib/libgems/dependency.rb +227 -0
- data/lib/libgems/dependency_installer.rb +286 -0
- data/lib/libgems/dependency_list.rb +208 -0
- data/lib/libgems/doc_manager.rb +242 -0
- data/lib/libgems/errors.rb +35 -0
- data/lib/libgems/exceptions.rb +91 -0
- data/lib/libgems/ext.rb +18 -0
- data/lib/libgems/ext/builder.rb +56 -0
- data/lib/libgems/ext/configure_builder.rb +25 -0
- data/lib/libgems/ext/ext_conf_builder.rb +24 -0
- data/lib/libgems/ext/rake_builder.rb +39 -0
- data/lib/libgems/format.rb +81 -0
- data/lib/libgems/gem_openssl.rb +92 -0
- data/lib/libgems/gem_path_searcher.rb +100 -0
- data/lib/libgems/gem_runner.rb +79 -0
- data/lib/libgems/gemcutter_utilities.rb +49 -0
- data/lib/libgems/indexer.rb +720 -0
- data/lib/libgems/install_update_options.rb +125 -0
- data/lib/libgems/installer.rb +604 -0
- data/lib/libgems/local_remote_options.rb +135 -0
- data/lib/libgems/old_format.rb +153 -0
- data/lib/libgems/package.rb +97 -0
- data/lib/libgems/package/f_sync_dir.rb +23 -0
- data/lib/libgems/package/tar_header.rb +266 -0
- data/lib/libgems/package/tar_input.rb +222 -0
- data/lib/libgems/package/tar_output.rb +144 -0
- data/lib/libgems/package/tar_reader.rb +106 -0
- data/lib/libgems/package/tar_reader/entry.rb +141 -0
- data/lib/libgems/package/tar_writer.rb +241 -0
- data/lib/libgems/package_task.rb +126 -0
- data/lib/libgems/platform.rb +183 -0
- data/lib/libgems/remote_fetcher.rb +414 -0
- data/lib/libgems/require_paths_builder.rb +18 -0
- data/lib/libgems/requirement.rb +153 -0
- data/lib/libgems/security.rb +814 -0
- data/lib/libgems/server.rb +872 -0
- data/lib/libgems/source_index.rb +597 -0
- data/lib/libgems/source_info_cache.rb +395 -0
- data/lib/libgems/source_info_cache_entry.rb +56 -0
- data/lib/libgems/spec_fetcher.rb +337 -0
- data/lib/libgems/specification.rb +1487 -0
- data/lib/libgems/test_utilities.rb +147 -0
- data/lib/libgems/text.rb +65 -0
- data/lib/libgems/uninstaller.rb +278 -0
- data/lib/libgems/user_interaction.rb +527 -0
- data/lib/libgems/validator.rb +240 -0
- data/lib/libgems/version.rb +316 -0
- data/lib/libgems/version_option.rb +65 -0
- data/lib/rbconfig/datadir.rb +20 -0
- data/test/bogussources.rb +8 -0
- data/test/data/gem-private_key.pem +27 -0
- data/test/data/gem-public_cert.pem +20 -0
- data/test/fake_certlib/openssl.rb +7 -0
- data/test/foo/discover.rb +0 -0
- data/test/gem_installer_test_case.rb +97 -0
- data/test/gem_package_tar_test_case.rb +132 -0
- data/test/gemutilities.rb +605 -0
- data/test/insure_session.rb +43 -0
- data/test/mockgemui.rb +56 -0
- data/test/plugin/exception/libgems_plugin.rb +2 -0
- data/test/plugin/load/libgems_plugin.rb +1 -0
- data/test/plugin/standarderror/libgems_plugin.rb +2 -0
- data/test/private_key.pem +27 -0
- data/test/public_cert.pem +20 -0
- data/test/rubygems_plugin.rb +21 -0
- data/test/simple_gem.rb +66 -0
- data/test/test_config.rb +12 -0
- data/test/test_gem.rb +780 -0
- data/test/test_gem_builder.rb +27 -0
- data/test/test_gem_command.rb +178 -0
- data/test/test_gem_command_manager.rb +207 -0
- data/test/test_gem_commands_build_command.rb +74 -0
- data/test/test_gem_commands_cert_command.rb +124 -0
- data/test/test_gem_commands_check_command.rb +18 -0
- data/test/test_gem_commands_contents_command.rb +156 -0
- data/test/test_gem_commands_dependency_command.rb +216 -0
- data/test/test_gem_commands_environment_command.rb +144 -0
- data/test/test_gem_commands_fetch_command.rb +76 -0
- data/test/test_gem_commands_generate_index_command.rb +135 -0
- data/test/test_gem_commands_install_command.rb +315 -0
- data/test/test_gem_commands_list_command.rb +36 -0
- data/test/test_gem_commands_lock_command.rb +68 -0
- data/test/test_gem_commands_mirror_command.rb +60 -0
- data/test/test_gem_commands_outdated_command.rb +40 -0
- data/test/test_gem_commands_owner_command.rb +105 -0
- data/test/test_gem_commands_pristine_command.rb +108 -0
- data/test/test_gem_commands_push_command.rb +81 -0
- data/test/test_gem_commands_query_command.rb +426 -0
- data/test/test_gem_commands_server_command.rb +59 -0
- data/test/test_gem_commands_sources_command.rb +209 -0
- data/test/test_gem_commands_specification_command.rb +139 -0
- data/test/test_gem_commands_stale_command.rb +38 -0
- data/test/test_gem_commands_uninstall_command.rb +83 -0
- data/test/test_gem_commands_unpack_command.rb +199 -0
- data/test/test_gem_commands_update_command.rb +207 -0
- data/test/test_gem_commands_which_command.rb +66 -0
- data/test/test_gem_config_file.rb +287 -0
- data/test/test_gem_dependency.rb +149 -0
- data/test/test_gem_dependency_installer.rb +661 -0
- data/test/test_gem_dependency_list.rb +230 -0
- data/test/test_gem_doc_manager.rb +31 -0
- data/test/test_gem_ext_configure_builder.rb +84 -0
- data/test/test_gem_ext_ext_conf_builder.rb +173 -0
- data/test/test_gem_ext_rake_builder.rb +81 -0
- data/test/test_gem_format.rb +70 -0
- data/test/test_gem_gem_path_searcher.rb +78 -0
- data/test/test_gem_gem_runner.rb +45 -0
- data/test/test_gem_gemcutter_utilities.rb +103 -0
- data/test/test_gem_indexer.rb +673 -0
- data/test/test_gem_install_update_options.rb +68 -0
- data/test/test_gem_installer.rb +857 -0
- data/test/test_gem_local_remote_options.rb +97 -0
- data/test/test_gem_package_tar_header.rb +130 -0
- data/test/test_gem_package_tar_input.rb +112 -0
- data/test/test_gem_package_tar_output.rb +97 -0
- data/test/test_gem_package_tar_reader.rb +46 -0
- data/test/test_gem_package_tar_reader_entry.rb +109 -0
- data/test/test_gem_package_tar_writer.rb +144 -0
- data/test/test_gem_package_task.rb +59 -0
- data/test/test_gem_platform.rb +264 -0
- data/test/test_gem_remote_fetcher.rb +740 -0
- data/test/test_gem_requirement.rb +292 -0
- data/test/test_gem_server.rb +356 -0
- data/test/test_gem_silent_ui.rb +113 -0
- data/test/test_gem_source_index.rb +461 -0
- data/test/test_gem_spec_fetcher.rb +410 -0
- data/test/test_gem_specification.rb +1334 -0
- data/test/test_gem_stream_ui.rb +218 -0
- data/test/test_gem_text.rb +43 -0
- data/test/test_gem_uninstaller.rb +146 -0
- data/test/test_gem_validator.rb +63 -0
- data/test/test_gem_version.rb +181 -0
- data/test/test_gem_version_option.rb +89 -0
- data/test/test_kernel.rb +59 -0
- metadata +402 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require File.expand_path('../gem_installer_test_case', __FILE__)
|
|
2
|
+
require 'libgems/install_update_options'
|
|
3
|
+
require 'libgems/command'
|
|
4
|
+
|
|
5
|
+
class TestGemInstallUpdateOptions < LibGemsInstallerTestCase
|
|
6
|
+
|
|
7
|
+
def setup
|
|
8
|
+
super
|
|
9
|
+
|
|
10
|
+
@cmd = LibGems::Command.new 'dummy', 'dummy'
|
|
11
|
+
@cmd.extend LibGems::InstallUpdateOptions
|
|
12
|
+
@cmd.add_install_update_options
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_add_install_update_options
|
|
16
|
+
args = %w[-i /install_to --rdoc --ri -E -f -t -w -P HighSecurity
|
|
17
|
+
--ignore-dependencies --format-exec --include-dependencies]
|
|
18
|
+
|
|
19
|
+
assert @cmd.handles?(args)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_security_policy
|
|
23
|
+
@cmd.handle_options %w[-P HighSecurity]
|
|
24
|
+
|
|
25
|
+
assert_equal LibGems::Security::HighSecurity, @cmd.options[:security_policy]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_security_policy_unknown
|
|
29
|
+
@cmd.add_install_update_options
|
|
30
|
+
|
|
31
|
+
assert_raises OptionParser::InvalidArgument do
|
|
32
|
+
@cmd.handle_options %w[-P UnknownSecurity]
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_user_install_enabled
|
|
37
|
+
@cmd.handle_options %w[--user-install]
|
|
38
|
+
|
|
39
|
+
assert @cmd.options[:user_install]
|
|
40
|
+
|
|
41
|
+
@installer = LibGems::Installer.new @gem, @cmd.options
|
|
42
|
+
@installer.install
|
|
43
|
+
assert File.exist?(File.join(LibGems.user_dir, 'gems'))
|
|
44
|
+
assert File.exist?(File.join(LibGems.user_dir, 'gems',
|
|
45
|
+
@spec.full_name))
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_user_install_disabled_read_only
|
|
49
|
+
if win_platform?
|
|
50
|
+
skip('test_user_install_disabled_read_only test skipped on MS Windows')
|
|
51
|
+
else
|
|
52
|
+
@cmd.handle_options %w[--no-user-install]
|
|
53
|
+
|
|
54
|
+
refute @cmd.options[:user_install]
|
|
55
|
+
|
|
56
|
+
File.chmod 0755, @userhome
|
|
57
|
+
FileUtils.chmod 0000, @gemhome
|
|
58
|
+
|
|
59
|
+
assert_raises(LibGems::FilePermissionError) do
|
|
60
|
+
@installer = LibGems::Installer.new @gem, @cmd.options
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
ensure
|
|
64
|
+
FileUtils.chmod 0755, @gemhome
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
|
|
@@ -0,0 +1,857 @@
|
|
|
1
|
+
require File.expand_path('../gem_installer_test_case', __FILE__)
|
|
2
|
+
|
|
3
|
+
class TestGemInstaller < LibGemsInstallerTestCase
|
|
4
|
+
|
|
5
|
+
def test_app_script_text
|
|
6
|
+
util_make_exec '2', ''
|
|
7
|
+
|
|
8
|
+
expected = <<-EOF
|
|
9
|
+
#!#{LibGems.ruby}
|
|
10
|
+
#
|
|
11
|
+
# This file was generated by LibGems.
|
|
12
|
+
#
|
|
13
|
+
# The application 'a' is installed as part of a gem, and
|
|
14
|
+
# this file is here to facilitate running it.
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
require 'libgems'
|
|
18
|
+
|
|
19
|
+
version = \">= 0\"
|
|
20
|
+
|
|
21
|
+
if ARGV.first =~ /^_(.*)_$/ and LibGems::Version.correct? $1 then
|
|
22
|
+
version = $1
|
|
23
|
+
ARGV.shift
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
gem 'a', version
|
|
27
|
+
load LibGems.bin_path('a', 'my_exec', version)
|
|
28
|
+
EOF
|
|
29
|
+
|
|
30
|
+
wrapper = @installer.app_script_text 'my_exec'
|
|
31
|
+
assert_equal expected, wrapper
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_build_extensions_none
|
|
35
|
+
use_ui @ui do
|
|
36
|
+
@installer.build_extensions
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
assert_equal '', @ui.output
|
|
40
|
+
assert_equal '', @ui.error
|
|
41
|
+
|
|
42
|
+
refute File.exist?('gem_make.out')
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_build_extensions_extconf_bad
|
|
46
|
+
@spec.extensions << 'extconf.rb'
|
|
47
|
+
|
|
48
|
+
e = assert_raises LibGems::Installer::ExtensionBuildError do
|
|
49
|
+
use_ui @ui do
|
|
50
|
+
@installer.build_extensions
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
assert_match(/\AERROR: Failed to build gem native extension.$/, e.message)
|
|
55
|
+
|
|
56
|
+
assert_equal "Building native extensions. This could take a while...\n",
|
|
57
|
+
@ui.output
|
|
58
|
+
assert_equal '', @ui.error
|
|
59
|
+
|
|
60
|
+
gem_make_out = File.join @gemhome, 'gems', @spec.full_name, 'gem_make.out'
|
|
61
|
+
expected = <<-EOF
|
|
62
|
+
#{LibGems.ruby} extconf.rb
|
|
63
|
+
#{LibGems.ruby}: No such file or directory -- extconf.rb (LoadError)
|
|
64
|
+
EOF
|
|
65
|
+
|
|
66
|
+
assert_match %r%#{Regexp.escape LibGems.ruby} extconf\.rb%,
|
|
67
|
+
File.read(gem_make_out)
|
|
68
|
+
assert_match %r%#{Regexp.escape LibGems.ruby}: No such file%,
|
|
69
|
+
File.read(gem_make_out)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_build_extensions_unsupported
|
|
73
|
+
@spec.extensions << nil
|
|
74
|
+
|
|
75
|
+
e = assert_raises LibGems::Installer::ExtensionBuildError do
|
|
76
|
+
use_ui @ui do
|
|
77
|
+
@installer.build_extensions
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
assert_match(/^No builder for extension ''$/, e.message)
|
|
82
|
+
|
|
83
|
+
assert_equal "Building native extensions. This could take a while...\n",
|
|
84
|
+
@ui.output
|
|
85
|
+
assert_equal '', @ui.error
|
|
86
|
+
|
|
87
|
+
assert_equal "No builder for extension ''\n", File.read('gem_make.out')
|
|
88
|
+
ensure
|
|
89
|
+
FileUtils.rm_f 'gem_make.out'
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def test_ensure_dependency
|
|
93
|
+
dep = LibGems::Dependency.new 'a', '>= 2'
|
|
94
|
+
assert @installer.ensure_dependency(@spec, dep)
|
|
95
|
+
|
|
96
|
+
dep = LibGems::Dependency.new 'b', '> 2'
|
|
97
|
+
e = assert_raises LibGems::InstallError do
|
|
98
|
+
@installer.ensure_dependency @spec, dep
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
assert_equal 'a requires b (> 2, runtime)', e.message
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def test_extract_files
|
|
105
|
+
format = Object.new
|
|
106
|
+
def format.file_entries
|
|
107
|
+
[[{'size' => 7, 'mode' => 0400, 'path' => 'thefile'}, 'thefile']]
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
@installer.format = format
|
|
111
|
+
|
|
112
|
+
@installer.extract_files
|
|
113
|
+
|
|
114
|
+
thefile_path = File.join(util_gem_dir, 'thefile')
|
|
115
|
+
assert_equal 'thefile', File.read(thefile_path)
|
|
116
|
+
|
|
117
|
+
unless LibGems.win_platform? then
|
|
118
|
+
assert_equal 0400, File.stat(thefile_path).mode & 0777
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def test_extract_files_bad_dest
|
|
123
|
+
@installer.gem_dir = 'somedir'
|
|
124
|
+
@installer.format = nil
|
|
125
|
+
e = assert_raises ArgumentError do
|
|
126
|
+
@installer.extract_files
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
assert_equal 'format required to extract from', e.message
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def test_extract_files_relative
|
|
133
|
+
format = Object.new
|
|
134
|
+
def format.file_entries
|
|
135
|
+
[[{'size' => 10, 'mode' => 0644, 'path' => '../thefile'}, '../thefile']]
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
@installer.format = format
|
|
139
|
+
|
|
140
|
+
e = assert_raises LibGems::InstallError do
|
|
141
|
+
@installer.extract_files
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
assert_equal "attempt to install file into \"../thefile\" under #{util_gem_dir.inspect}",
|
|
145
|
+
e.message
|
|
146
|
+
assert_equal false, File.file?(File.join(@tempdir, '../thefile')),
|
|
147
|
+
"You may need to remove this file if you broke the test once"
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def test_extract_files_absolute
|
|
151
|
+
format = Object.new
|
|
152
|
+
def format.file_entries
|
|
153
|
+
[[{'size' => 8, 'mode' => 0644, 'path' => '/thefile'}, '/thefile']]
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
@installer.format = format
|
|
157
|
+
|
|
158
|
+
e = assert_raises LibGems::InstallError do
|
|
159
|
+
@installer.extract_files
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
assert_equal 'attempt to install file into "/thefile"', e.message
|
|
163
|
+
assert_equal false, File.file?(File.join('/thefile')),
|
|
164
|
+
"You may need to remove this file if you broke the test once"
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def test_generate_bin_bindir
|
|
168
|
+
@installer.wrappers = true
|
|
169
|
+
|
|
170
|
+
@spec.executables = ["my_exec"]
|
|
171
|
+
@spec.bindir = '.'
|
|
172
|
+
|
|
173
|
+
exec_file = @installer.formatted_program_filename "my_exec"
|
|
174
|
+
exec_path = File.join util_gem_dir(@spec.version), exec_file
|
|
175
|
+
File.open exec_path, 'w' do |f|
|
|
176
|
+
f.puts '#!/usr/bin/ruby'
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
@installer.gem_dir = util_gem_dir
|
|
180
|
+
|
|
181
|
+
@installer.generate_bin
|
|
182
|
+
|
|
183
|
+
assert_equal true, File.directory?(util_inst_bindir)
|
|
184
|
+
installed_exec = File.join(util_inst_bindir, "my_exec")
|
|
185
|
+
assert_equal true, File.exist?(installed_exec)
|
|
186
|
+
assert_equal(0100755, File.stat(installed_exec).mode) unless win_platform?
|
|
187
|
+
|
|
188
|
+
wrapper = File.read installed_exec
|
|
189
|
+
assert_match %r|generated by #{LibGems::NAME}|, wrapper
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def test_generate_bin_script
|
|
193
|
+
@installer.wrappers = true
|
|
194
|
+
util_make_exec
|
|
195
|
+
@installer.gem_dir = util_gem_dir
|
|
196
|
+
|
|
197
|
+
@installer.generate_bin
|
|
198
|
+
assert_equal true, File.directory?(util_inst_bindir)
|
|
199
|
+
installed_exec = File.join(util_inst_bindir, "my_exec")
|
|
200
|
+
assert_equal true, File.exist?(installed_exec)
|
|
201
|
+
assert_equal(0100755, File.stat(installed_exec).mode) unless win_platform?
|
|
202
|
+
|
|
203
|
+
wrapper = File.read installed_exec
|
|
204
|
+
assert_match %r|generated by #{LibGems::NAME}|, wrapper
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
def test_generate_bin_script_format
|
|
208
|
+
@installer.format_executable = true
|
|
209
|
+
@installer.wrappers = true
|
|
210
|
+
util_make_exec
|
|
211
|
+
@installer.gem_dir = util_gem_dir
|
|
212
|
+
|
|
213
|
+
LibGems::Installer.exec_format = 'foo-%s-bar'
|
|
214
|
+
@installer.generate_bin
|
|
215
|
+
assert_equal true, File.directory?(util_inst_bindir)
|
|
216
|
+
installed_exec = File.join util_inst_bindir, 'foo-my_exec-bar'
|
|
217
|
+
assert_equal true, File.exist?(installed_exec)
|
|
218
|
+
ensure
|
|
219
|
+
LibGems::Installer.exec_format = nil
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def test_generate_bin_script_format_disabled
|
|
223
|
+
@installer.wrappers = true
|
|
224
|
+
util_make_exec
|
|
225
|
+
@installer.gem_dir = util_gem_dir
|
|
226
|
+
|
|
227
|
+
LibGems::Installer.exec_format = 'foo-%s-bar'
|
|
228
|
+
@installer.generate_bin
|
|
229
|
+
assert_equal true, File.directory?(util_inst_bindir)
|
|
230
|
+
installed_exec = File.join util_inst_bindir, 'my_exec'
|
|
231
|
+
assert_equal true, File.exist?(installed_exec)
|
|
232
|
+
ensure
|
|
233
|
+
LibGems::Installer.exec_format = nil
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def test_generate_bin_script_install_dir
|
|
237
|
+
@installer.wrappers = true
|
|
238
|
+
@spec.executables = ["my_exec"]
|
|
239
|
+
|
|
240
|
+
gem_dir = File.join "#{@gemhome}2", 'gems', @spec.full_name
|
|
241
|
+
gem_bindir = File.join gem_dir, 'bin'
|
|
242
|
+
FileUtils.mkdir_p gem_bindir
|
|
243
|
+
File.open File.join(gem_bindir, "my_exec"), 'w' do |f|
|
|
244
|
+
f.puts "#!/bin/ruby"
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
@installer.gem_home = "#{@gemhome}2"
|
|
248
|
+
@installer.gem_dir = gem_dir
|
|
249
|
+
|
|
250
|
+
@installer.generate_bin
|
|
251
|
+
|
|
252
|
+
installed_exec = File.join("#{@gemhome}2", 'bin', 'my_exec')
|
|
253
|
+
assert_equal true, File.exist?(installed_exec)
|
|
254
|
+
assert_equal(0100755, File.stat(installed_exec).mode) unless win_platform?
|
|
255
|
+
|
|
256
|
+
wrapper = File.read installed_exec
|
|
257
|
+
assert_match %r|generated by #{LibGems::NAME}|, wrapper
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def test_generate_bin_script_no_execs
|
|
261
|
+
@installer.wrappers = true
|
|
262
|
+
@installer.generate_bin
|
|
263
|
+
assert_equal false, File.exist?(util_inst_bindir)
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
def test_generate_bin_script_no_perms
|
|
267
|
+
@installer.wrappers = true
|
|
268
|
+
util_make_exec
|
|
269
|
+
|
|
270
|
+
Dir.mkdir util_inst_bindir
|
|
271
|
+
|
|
272
|
+
if win_platform?
|
|
273
|
+
skip('test_generate_bin_script_no_perms skipped on MS Windows')
|
|
274
|
+
else
|
|
275
|
+
File.chmod 0000, util_inst_bindir
|
|
276
|
+
|
|
277
|
+
assert_raises LibGems::FilePermissionError do
|
|
278
|
+
@installer.generate_bin
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
ensure
|
|
282
|
+
File.chmod 0700, util_inst_bindir unless $DEBUG
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
def test_generate_bin_script_no_shebang
|
|
286
|
+
@installer.wrappers = true
|
|
287
|
+
@spec.executables = ["my_exec"]
|
|
288
|
+
|
|
289
|
+
gem_dir = File.join @gemhome, 'gems', @spec.full_name
|
|
290
|
+
gem_bindir = File.join gem_dir, 'bin'
|
|
291
|
+
FileUtils.mkdir_p gem_bindir
|
|
292
|
+
File.open File.join(gem_bindir, "my_exec"), 'w' do |f|
|
|
293
|
+
f.puts "blah blah blah"
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
@installer.generate_bin
|
|
297
|
+
|
|
298
|
+
installed_exec = File.join @gemhome, 'bin', 'my_exec'
|
|
299
|
+
assert_equal true, File.exist?(installed_exec)
|
|
300
|
+
assert_equal 0100755, File.stat(installed_exec).mode unless win_platform?
|
|
301
|
+
|
|
302
|
+
wrapper = File.read installed_exec
|
|
303
|
+
assert_match %r|generated by #{LibGems::NAME}|, wrapper
|
|
304
|
+
# HACK some gems don't have #! in their executables, restore 2008/06
|
|
305
|
+
#assert_no_match %r|generated by #{LibGems::NAME}|, wrapper
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
def test_generate_bin_script_wrappers
|
|
309
|
+
@installer.wrappers = true
|
|
310
|
+
util_make_exec
|
|
311
|
+
@installer.gem_dir = util_gem_dir
|
|
312
|
+
installed_exec = File.join(util_inst_bindir, "my_exec")
|
|
313
|
+
|
|
314
|
+
real_exec = File.join util_gem_dir, 'bin', 'my_exec'
|
|
315
|
+
|
|
316
|
+
# fake --no-wrappers for previous install
|
|
317
|
+
unless LibGems.win_platform? then
|
|
318
|
+
FileUtils.mkdir_p File.dirname(installed_exec)
|
|
319
|
+
FileUtils.ln_s real_exec, installed_exec
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
@installer.generate_bin
|
|
323
|
+
assert_equal true, File.directory?(util_inst_bindir)
|
|
324
|
+
assert_equal true, File.exist?(installed_exec)
|
|
325
|
+
assert_equal(0100755, File.stat(installed_exec).mode) unless win_platform?
|
|
326
|
+
|
|
327
|
+
assert_match %r|generated by #{LibGems::NAME}|, File.read(installed_exec)
|
|
328
|
+
|
|
329
|
+
refute_match %r|generated by #{LibGems::NAME}|, File.read(real_exec),
|
|
330
|
+
'real executable overwritten'
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
def test_generate_bin_symlink
|
|
334
|
+
return if win_platform? #Windows FS do not support symlinks
|
|
335
|
+
|
|
336
|
+
@installer.wrappers = false
|
|
337
|
+
util_make_exec
|
|
338
|
+
@installer.gem_dir = util_gem_dir
|
|
339
|
+
|
|
340
|
+
@installer.generate_bin
|
|
341
|
+
assert_equal true, File.directory?(util_inst_bindir)
|
|
342
|
+
installed_exec = File.join(util_inst_bindir, "my_exec")
|
|
343
|
+
assert_equal true, File.symlink?(installed_exec)
|
|
344
|
+
assert_equal(File.join(util_gem_dir, "bin", "my_exec"),
|
|
345
|
+
File.readlink(installed_exec))
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
def test_generate_bin_symlink_no_execs
|
|
349
|
+
@installer.wrappers = false
|
|
350
|
+
@installer.generate_bin
|
|
351
|
+
assert_equal false, File.exist?(util_inst_bindir)
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
def test_generate_bin_symlink_no_perms
|
|
355
|
+
@installer.wrappers = false
|
|
356
|
+
util_make_exec
|
|
357
|
+
@installer.gem_dir = util_gem_dir
|
|
358
|
+
|
|
359
|
+
Dir.mkdir util_inst_bindir
|
|
360
|
+
|
|
361
|
+
if win_platform?
|
|
362
|
+
skip('test_generate_bin_symlink_no_perms skipped on MS Windows')
|
|
363
|
+
else
|
|
364
|
+
File.chmod 0000, util_inst_bindir
|
|
365
|
+
|
|
366
|
+
assert_raises LibGems::FilePermissionError do
|
|
367
|
+
@installer.generate_bin
|
|
368
|
+
end
|
|
369
|
+
end
|
|
370
|
+
ensure
|
|
371
|
+
File.chmod 0700, util_inst_bindir unless $DEBUG
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
def test_generate_bin_symlink_update_newer
|
|
375
|
+
return if win_platform? #Windows FS do not support symlinks
|
|
376
|
+
|
|
377
|
+
@installer.wrappers = false
|
|
378
|
+
util_make_exec
|
|
379
|
+
@installer.gem_dir = util_gem_dir
|
|
380
|
+
|
|
381
|
+
@installer.generate_bin
|
|
382
|
+
installed_exec = File.join(util_inst_bindir, "my_exec")
|
|
383
|
+
assert_equal(File.join(util_gem_dir, "bin", "my_exec"),
|
|
384
|
+
File.readlink(installed_exec))
|
|
385
|
+
|
|
386
|
+
@spec = LibGems::Specification.new do |s|
|
|
387
|
+
s.files = ['lib/code.rb']
|
|
388
|
+
s.name = "a"
|
|
389
|
+
s.version = "3"
|
|
390
|
+
s.summary = "summary"
|
|
391
|
+
s.description = "desc"
|
|
392
|
+
s.require_path = 'lib'
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
util_make_exec '3'
|
|
396
|
+
@installer.gem_dir = File.join util_gem_dir('3')
|
|
397
|
+
@installer.generate_bin
|
|
398
|
+
installed_exec = File.join(util_inst_bindir, "my_exec")
|
|
399
|
+
assert_equal(File.join(util_gem_bindir('3'), "my_exec"),
|
|
400
|
+
File.readlink(installed_exec),
|
|
401
|
+
"Ensure symlink moved to latest version")
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
def test_generate_bin_symlink_update_older
|
|
405
|
+
return if win_platform? #Windows FS do not support symlinks
|
|
406
|
+
|
|
407
|
+
@installer.wrappers = false
|
|
408
|
+
util_make_exec
|
|
409
|
+
@installer.gem_dir = util_gem_dir
|
|
410
|
+
|
|
411
|
+
@installer.generate_bin
|
|
412
|
+
installed_exec = File.join(util_inst_bindir, "my_exec")
|
|
413
|
+
assert_equal(File.join(util_gem_dir, "bin", "my_exec"),
|
|
414
|
+
File.readlink(installed_exec))
|
|
415
|
+
|
|
416
|
+
spec = LibGems::Specification.new do |s|
|
|
417
|
+
s.files = ['lib/code.rb']
|
|
418
|
+
s.name = "a"
|
|
419
|
+
s.version = "1"
|
|
420
|
+
s.summary = "summary"
|
|
421
|
+
s.description = "desc"
|
|
422
|
+
s.require_path = 'lib'
|
|
423
|
+
end
|
|
424
|
+
|
|
425
|
+
util_make_exec '1'
|
|
426
|
+
@installer.gem_dir = util_gem_dir('1')
|
|
427
|
+
@installer.spec = spec
|
|
428
|
+
|
|
429
|
+
@installer.generate_bin
|
|
430
|
+
|
|
431
|
+
installed_exec = File.join(util_inst_bindir, "my_exec")
|
|
432
|
+
assert_equal(File.join(util_gem_dir('2'), "bin", "my_exec"),
|
|
433
|
+
File.readlink(installed_exec),
|
|
434
|
+
"Ensure symlink not moved")
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
def test_generate_bin_symlink_update_remove_wrapper
|
|
438
|
+
return if win_platform? #Windows FS do not support symlinks
|
|
439
|
+
|
|
440
|
+
@installer.wrappers = true
|
|
441
|
+
util_make_exec
|
|
442
|
+
@installer.gem_dir = util_gem_dir
|
|
443
|
+
|
|
444
|
+
@installer.generate_bin
|
|
445
|
+
installed_exec = File.join(util_inst_bindir, "my_exec")
|
|
446
|
+
assert_equal true, File.exist?(installed_exec)
|
|
447
|
+
|
|
448
|
+
@spec = LibGems::Specification.new do |s|
|
|
449
|
+
s.files = ['lib/code.rb']
|
|
450
|
+
s.name = "a"
|
|
451
|
+
s.version = "3"
|
|
452
|
+
s.summary = "summary"
|
|
453
|
+
s.description = "desc"
|
|
454
|
+
s.require_path = 'lib'
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
@installer.wrappers = false
|
|
458
|
+
util_make_exec '3'
|
|
459
|
+
@installer.gem_dir = util_gem_dir '3'
|
|
460
|
+
@installer.generate_bin
|
|
461
|
+
installed_exec = File.join(util_inst_bindir, "my_exec")
|
|
462
|
+
assert_equal(File.join(util_gem_dir('3'), "bin", "my_exec"),
|
|
463
|
+
File.readlink(installed_exec),
|
|
464
|
+
"Ensure symlink moved to latest version")
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
def test_generate_bin_symlink_win32
|
|
468
|
+
old_win_platform = LibGems.win_platform?
|
|
469
|
+
LibGems.win_platform = true
|
|
470
|
+
@installer.wrappers = false
|
|
471
|
+
util_make_exec
|
|
472
|
+
@installer.gem_dir = util_gem_dir
|
|
473
|
+
|
|
474
|
+
use_ui @ui do
|
|
475
|
+
@installer.generate_bin
|
|
476
|
+
end
|
|
477
|
+
|
|
478
|
+
assert_equal true, File.directory?(util_inst_bindir)
|
|
479
|
+
installed_exec = File.join(util_inst_bindir, "my_exec")
|
|
480
|
+
assert_equal true, File.exist?(installed_exec)
|
|
481
|
+
|
|
482
|
+
assert_match(/Unable to use symlinks on Windows, installing wrapper/i,
|
|
483
|
+
@ui.error)
|
|
484
|
+
|
|
485
|
+
wrapper = File.read installed_exec
|
|
486
|
+
assert_match(/generated by #{LibGems::NAME}/, wrapper)
|
|
487
|
+
ensure
|
|
488
|
+
LibGems.win_platform = old_win_platform
|
|
489
|
+
end
|
|
490
|
+
|
|
491
|
+
def test_generate_bin_uses_default_shebang
|
|
492
|
+
return if win_platform? #Windows FS do not support symlinks
|
|
493
|
+
|
|
494
|
+
@installer.wrappers = true
|
|
495
|
+
util_make_exec
|
|
496
|
+
|
|
497
|
+
@installer.generate_bin
|
|
498
|
+
|
|
499
|
+
default_shebang = LibGems.ruby
|
|
500
|
+
shebang_line = open("#{@gemhome}/bin/my_exec") { |f| f.readlines.first }
|
|
501
|
+
assert_match(/\A#!/, shebang_line)
|
|
502
|
+
assert_match(/#{default_shebang}/, shebang_line)
|
|
503
|
+
end
|
|
504
|
+
|
|
505
|
+
def test_initialize
|
|
506
|
+
spec = quick_gem 'a' do |s| s.platform = LibGems::Platform.new 'mswin32' end
|
|
507
|
+
gem = File.join @tempdir, spec.file_name
|
|
508
|
+
|
|
509
|
+
Dir.mkdir util_inst_bindir
|
|
510
|
+
util_build_gem spec
|
|
511
|
+
FileUtils.mv File.join(@gemhome, 'cache', spec.file_name),
|
|
512
|
+
@tempdir
|
|
513
|
+
|
|
514
|
+
installer = LibGems::Installer.new gem
|
|
515
|
+
|
|
516
|
+
assert_equal File.join(@gemhome, 'gems', spec.full_name), installer.gem_dir
|
|
517
|
+
end
|
|
518
|
+
|
|
519
|
+
def test_install
|
|
520
|
+
Dir.mkdir util_inst_bindir
|
|
521
|
+
util_setup_gem
|
|
522
|
+
|
|
523
|
+
cache_file = File.join @gemhome, 'cache', @spec.file_name
|
|
524
|
+
|
|
525
|
+
LibGems.pre_install do |installer|
|
|
526
|
+
assert !File.exist?(cache_file), 'cache file should not exist yet'
|
|
527
|
+
end
|
|
528
|
+
|
|
529
|
+
LibGems.post_install do |installer|
|
|
530
|
+
assert File.exist?(cache_file), 'cache file should exist'
|
|
531
|
+
end
|
|
532
|
+
|
|
533
|
+
build_rake_in do
|
|
534
|
+
use_ui @ui do
|
|
535
|
+
assert_equal @spec, @installer.install
|
|
536
|
+
end
|
|
537
|
+
end
|
|
538
|
+
|
|
539
|
+
gemdir = File.join @gemhome, 'gems', @spec.full_name
|
|
540
|
+
assert File.exist?(gemdir)
|
|
541
|
+
|
|
542
|
+
exe = File.join(gemdir, 'bin', 'executable')
|
|
543
|
+
assert File.exist?(exe)
|
|
544
|
+
exe_mode = File.stat(exe).mode & 0111
|
|
545
|
+
assert_equal 0111, exe_mode, "0%o" % exe_mode unless win_platform?
|
|
546
|
+
|
|
547
|
+
assert File.exist?(File.join(gemdir, 'lib', 'code.rb'))
|
|
548
|
+
|
|
549
|
+
assert File.exist?(File.join(gemdir, 'ext', 'a', 'Rakefile'))
|
|
550
|
+
|
|
551
|
+
spec_file = File.join(@gemhome, 'specifications', @spec.spec_name)
|
|
552
|
+
|
|
553
|
+
assert_equal spec_file, @spec.loaded_from
|
|
554
|
+
assert File.exist?(spec_file)
|
|
555
|
+
|
|
556
|
+
assert_same @installer, @pre_install_hook_arg
|
|
557
|
+
assert_same @installer, @post_install_hook_arg
|
|
558
|
+
end
|
|
559
|
+
|
|
560
|
+
def test_install_bad_gem
|
|
561
|
+
gem = nil
|
|
562
|
+
|
|
563
|
+
use_ui @ui do
|
|
564
|
+
Dir.chdir @tempdir do LibGems::Builder.new(@spec).build end
|
|
565
|
+
gem = File.join @tempdir, @spec.file_name
|
|
566
|
+
end
|
|
567
|
+
|
|
568
|
+
gem_data = File.open gem, 'rb' do |fp| fp.read 1024 end
|
|
569
|
+
File.open gem, 'wb' do |fp| fp.write gem_data end
|
|
570
|
+
|
|
571
|
+
e = assert_raises LibGems::InstallError do
|
|
572
|
+
use_ui @ui do
|
|
573
|
+
@installer = LibGems::Installer.new gem
|
|
574
|
+
@installer.install
|
|
575
|
+
end
|
|
576
|
+
end
|
|
577
|
+
|
|
578
|
+
assert_equal "invalid gem format for #{gem}", e.message
|
|
579
|
+
end
|
|
580
|
+
|
|
581
|
+
def test_install_check_dependencies
|
|
582
|
+
@spec.add_dependency 'b', '> 5'
|
|
583
|
+
util_setup_gem
|
|
584
|
+
|
|
585
|
+
use_ui @ui do
|
|
586
|
+
assert_raises LibGems::InstallError do
|
|
587
|
+
@installer.install
|
|
588
|
+
end
|
|
589
|
+
end
|
|
590
|
+
end
|
|
591
|
+
|
|
592
|
+
def test_install_check_dependencies_install_dir
|
|
593
|
+
gemhome2 = "#{@gemhome}2"
|
|
594
|
+
@spec.add_dependency 'b'
|
|
595
|
+
|
|
596
|
+
b2 = quick_gem 'b', 2
|
|
597
|
+
|
|
598
|
+
FileUtils.mv @gemhome, gemhome2
|
|
599
|
+
LibGems.source_index.gems.delete b2.full_name
|
|
600
|
+
source_index = LibGems::SourceIndex.from_gems_in File.join(gemhome2,
|
|
601
|
+
'specifications')
|
|
602
|
+
|
|
603
|
+
util_setup_gem
|
|
604
|
+
|
|
605
|
+
@installer = LibGems::Installer.new @gem, :install_dir => gemhome2,
|
|
606
|
+
:source_index => source_index
|
|
607
|
+
|
|
608
|
+
build_rake_in do
|
|
609
|
+
use_ui @ui do
|
|
610
|
+
@installer.install
|
|
611
|
+
end
|
|
612
|
+
end
|
|
613
|
+
|
|
614
|
+
assert File.exist?(File.join(gemhome2, 'gems', @spec.full_name))
|
|
615
|
+
end
|
|
616
|
+
|
|
617
|
+
def test_install_force
|
|
618
|
+
use_ui @ui do
|
|
619
|
+
installer = LibGems::Installer.new old_ruby_required, :force => true
|
|
620
|
+
installer.install
|
|
621
|
+
end
|
|
622
|
+
|
|
623
|
+
gem_dir = File.join(@gemhome, 'gems', 'old_ruby_required-1')
|
|
624
|
+
assert File.exist?(gem_dir)
|
|
625
|
+
end
|
|
626
|
+
|
|
627
|
+
def test_install_ignore_dependencies
|
|
628
|
+
Dir.mkdir util_inst_bindir
|
|
629
|
+
@spec.add_dependency 'b', '> 5'
|
|
630
|
+
util_setup_gem
|
|
631
|
+
@installer.ignore_dependencies = true
|
|
632
|
+
|
|
633
|
+
build_rake_in do
|
|
634
|
+
use_ui @ui do
|
|
635
|
+
assert_equal @spec, @installer.install
|
|
636
|
+
end
|
|
637
|
+
end
|
|
638
|
+
|
|
639
|
+
gemdir = File.join @gemhome, 'gems', @spec.full_name
|
|
640
|
+
assert File.exist?(gemdir)
|
|
641
|
+
|
|
642
|
+
exe = File.join(gemdir, 'bin', 'executable')
|
|
643
|
+
assert File.exist?(exe)
|
|
644
|
+
exe_mode = File.stat(exe).mode & 0111
|
|
645
|
+
assert_equal 0111, exe_mode, "0%o" % exe_mode unless win_platform?
|
|
646
|
+
assert File.exist?(File.join(gemdir, 'lib', 'code.rb'))
|
|
647
|
+
|
|
648
|
+
assert File.exist?(File.join(@gemhome, 'specifications', @spec.spec_name))
|
|
649
|
+
end
|
|
650
|
+
|
|
651
|
+
def test_install_missing_dirs
|
|
652
|
+
FileUtils.rm_f File.join(LibGems.dir, 'cache')
|
|
653
|
+
FileUtils.rm_f File.join(LibGems.dir, 'docs')
|
|
654
|
+
FileUtils.rm_f File.join(LibGems.dir, 'specifications')
|
|
655
|
+
|
|
656
|
+
use_ui @ui do
|
|
657
|
+
Dir.chdir @tempdir do LibGems::Builder.new(@spec).build end
|
|
658
|
+
gem = File.join @tempdir, @spec.file_name
|
|
659
|
+
|
|
660
|
+
@installer.install
|
|
661
|
+
end
|
|
662
|
+
|
|
663
|
+
File.directory? File.join(LibGems.dir, 'cache')
|
|
664
|
+
File.directory? File.join(LibGems.dir, 'docs')
|
|
665
|
+
File.directory? File.join(LibGems.dir, 'specifications')
|
|
666
|
+
|
|
667
|
+
assert File.exist?(File.join(@gemhome, 'cache', @spec.file_name))
|
|
668
|
+
assert File.exist?(File.join(@gemhome, 'specifications', @spec.spec_name))
|
|
669
|
+
end
|
|
670
|
+
|
|
671
|
+
def test_install_with_message
|
|
672
|
+
@spec.post_install_message = 'I am a shiny gem!'
|
|
673
|
+
|
|
674
|
+
use_ui @ui do
|
|
675
|
+
Dir.chdir @tempdir do LibGems::Builder.new(@spec).build end
|
|
676
|
+
|
|
677
|
+
@installer.install
|
|
678
|
+
end
|
|
679
|
+
|
|
680
|
+
assert_match %r|I am a shiny gem!|, @ui.output
|
|
681
|
+
end
|
|
682
|
+
|
|
683
|
+
def test_install_wrong_ruby_version
|
|
684
|
+
use_ui @ui do
|
|
685
|
+
installer = LibGems::Installer.new old_ruby_required
|
|
686
|
+
e = assert_raises LibGems::InstallError do
|
|
687
|
+
installer.install
|
|
688
|
+
end
|
|
689
|
+
assert_equal 'old_ruby_required requires Ruby version = 1.4.6.',
|
|
690
|
+
e.message
|
|
691
|
+
end
|
|
692
|
+
end
|
|
693
|
+
|
|
694
|
+
def test_install_wrong_rubygems_version
|
|
695
|
+
spec = quick_gem 'old_rubygems_required', '1' do |s|
|
|
696
|
+
s.required_rubygems_version = '< 0'
|
|
697
|
+
end
|
|
698
|
+
|
|
699
|
+
util_build_gem spec
|
|
700
|
+
|
|
701
|
+
gem = File.join @gemhome, 'cache', spec.file_name
|
|
702
|
+
|
|
703
|
+
use_ui @ui do
|
|
704
|
+
@installer = LibGems::Installer.new gem
|
|
705
|
+
e = assert_raises LibGems::InstallError do
|
|
706
|
+
@installer.install
|
|
707
|
+
end
|
|
708
|
+
assert_equal "old_rubygems_required requires #{LibGems::NAME} version < 0. " +
|
|
709
|
+
"Try 'gem update --system' to update #{LibGems::NAME} itself.", e.message
|
|
710
|
+
end
|
|
711
|
+
end
|
|
712
|
+
|
|
713
|
+
def test_installation_satisfies_dependency_eh
|
|
714
|
+
dep = LibGems::Dependency.new 'a', '>= 2'
|
|
715
|
+
assert @installer.installation_satisfies_dependency?(dep)
|
|
716
|
+
|
|
717
|
+
dep = LibGems::Dependency.new 'a', '> 2'
|
|
718
|
+
refute @installer.installation_satisfies_dependency?(dep)
|
|
719
|
+
end
|
|
720
|
+
|
|
721
|
+
def test_shebang
|
|
722
|
+
util_make_exec '2', "#!/usr/bin/ruby"
|
|
723
|
+
|
|
724
|
+
shebang = @installer.shebang 'my_exec'
|
|
725
|
+
|
|
726
|
+
assert_equal "#!#{LibGems.ruby}", shebang
|
|
727
|
+
end
|
|
728
|
+
|
|
729
|
+
def test_shebang_arguments
|
|
730
|
+
util_make_exec '2', "#!/usr/bin/ruby -ws"
|
|
731
|
+
|
|
732
|
+
shebang = @installer.shebang 'my_exec'
|
|
733
|
+
|
|
734
|
+
assert_equal "#!#{LibGems.ruby} -ws", shebang
|
|
735
|
+
end
|
|
736
|
+
|
|
737
|
+
def test_shebang_empty
|
|
738
|
+
util_make_exec '2', ''
|
|
739
|
+
|
|
740
|
+
shebang = @installer.shebang 'my_exec'
|
|
741
|
+
assert_equal "#!#{LibGems.ruby}", shebang
|
|
742
|
+
end
|
|
743
|
+
|
|
744
|
+
def test_shebang_env
|
|
745
|
+
util_make_exec '2', "#!/usr/bin/env ruby"
|
|
746
|
+
|
|
747
|
+
shebang = @installer.shebang 'my_exec'
|
|
748
|
+
|
|
749
|
+
assert_equal "#!#{LibGems.ruby}", shebang
|
|
750
|
+
end
|
|
751
|
+
|
|
752
|
+
def test_shebang_env_arguments
|
|
753
|
+
util_make_exec '2', "#!/usr/bin/env ruby -ws"
|
|
754
|
+
|
|
755
|
+
shebang = @installer.shebang 'my_exec'
|
|
756
|
+
|
|
757
|
+
assert_equal "#!#{LibGems.ruby} -ws", shebang
|
|
758
|
+
end
|
|
759
|
+
|
|
760
|
+
def test_shebang_env_shebang
|
|
761
|
+
util_make_exec '2', ''
|
|
762
|
+
@installer.env_shebang = true
|
|
763
|
+
|
|
764
|
+
shebang = @installer.shebang 'my_exec'
|
|
765
|
+
|
|
766
|
+
env_shebang = "/usr/bin/env" unless LibGems.win_platform?
|
|
767
|
+
|
|
768
|
+
assert_equal("#!#{env_shebang} #{LibGems::ConfigMap[:ruby_install_name]}",
|
|
769
|
+
shebang)
|
|
770
|
+
end
|
|
771
|
+
|
|
772
|
+
def test_shebang_nested
|
|
773
|
+
util_make_exec '2', "#!/opt/local/ruby/bin/ruby"
|
|
774
|
+
|
|
775
|
+
shebang = @installer.shebang 'my_exec'
|
|
776
|
+
|
|
777
|
+
assert_equal "#!#{LibGems.ruby}", shebang
|
|
778
|
+
end
|
|
779
|
+
|
|
780
|
+
def test_shebang_nested_arguments
|
|
781
|
+
util_make_exec '2', "#!/opt/local/ruby/bin/ruby -ws"
|
|
782
|
+
|
|
783
|
+
shebang = @installer.shebang 'my_exec'
|
|
784
|
+
|
|
785
|
+
assert_equal "#!#{LibGems.ruby} -ws", shebang
|
|
786
|
+
end
|
|
787
|
+
|
|
788
|
+
def test_shebang_version
|
|
789
|
+
util_make_exec '2', "#!/usr/bin/ruby18"
|
|
790
|
+
|
|
791
|
+
shebang = @installer.shebang 'my_exec'
|
|
792
|
+
|
|
793
|
+
assert_equal "#!#{LibGems.ruby}", shebang
|
|
794
|
+
end
|
|
795
|
+
|
|
796
|
+
def test_shebang_version_arguments
|
|
797
|
+
util_make_exec '2', "#!/usr/bin/ruby18 -ws"
|
|
798
|
+
|
|
799
|
+
shebang = @installer.shebang 'my_exec'
|
|
800
|
+
|
|
801
|
+
assert_equal "#!#{LibGems.ruby} -ws", shebang
|
|
802
|
+
end
|
|
803
|
+
|
|
804
|
+
def test_shebang_version_env
|
|
805
|
+
util_make_exec '2', "#!/usr/bin/env ruby18"
|
|
806
|
+
|
|
807
|
+
shebang = @installer.shebang 'my_exec'
|
|
808
|
+
|
|
809
|
+
assert_equal "#!#{LibGems.ruby}", shebang
|
|
810
|
+
end
|
|
811
|
+
|
|
812
|
+
def test_shebang_version_env_arguments
|
|
813
|
+
util_make_exec '2', "#!/usr/bin/env ruby18 -ws"
|
|
814
|
+
|
|
815
|
+
shebang = @installer.shebang 'my_exec'
|
|
816
|
+
|
|
817
|
+
assert_equal "#!#{LibGems.ruby} -ws", shebang
|
|
818
|
+
end
|
|
819
|
+
|
|
820
|
+
def test_unpack
|
|
821
|
+
util_setup_gem
|
|
822
|
+
|
|
823
|
+
dest = File.join @gemhome, 'gems', @spec.full_name
|
|
824
|
+
|
|
825
|
+
@installer.unpack dest
|
|
826
|
+
|
|
827
|
+
assert File.exist?(File.join(dest, 'lib', 'code.rb'))
|
|
828
|
+
assert File.exist?(File.join(dest, 'bin', 'executable'))
|
|
829
|
+
end
|
|
830
|
+
|
|
831
|
+
def test_write_spec
|
|
832
|
+
spec_dir = File.join @gemhome, 'specifications'
|
|
833
|
+
spec_file = File.join spec_dir, @spec.spec_name
|
|
834
|
+
FileUtils.rm spec_file
|
|
835
|
+
refute File.exist?(spec_file)
|
|
836
|
+
|
|
837
|
+
@installer.spec = @spec
|
|
838
|
+
@installer.gem_home = @gemhome
|
|
839
|
+
|
|
840
|
+
@installer.write_spec
|
|
841
|
+
|
|
842
|
+
assert File.exist?(spec_file)
|
|
843
|
+
assert_equal @spec, LibGems.gemspec_eval(File.read(spec_file))
|
|
844
|
+
end
|
|
845
|
+
|
|
846
|
+
def old_ruby_required
|
|
847
|
+
spec = quick_gem 'old_ruby_required', '1' do |s|
|
|
848
|
+
s.required_ruby_version = '= 1.4.6'
|
|
849
|
+
end
|
|
850
|
+
|
|
851
|
+
util_build_gem spec
|
|
852
|
+
|
|
853
|
+
File.join @gemhome, 'cache', spec.file_name
|
|
854
|
+
end
|
|
855
|
+
|
|
856
|
+
end
|
|
857
|
+
|