1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
|
# frozen_string_literal: true
require_relative "helper"
require "rubygems/commands/unpack_command"
class TestGemCommandsUnpackCommand < Gem::TestCase
def setup
super
Dir.chdir @tempdir do
@cmd = Gem::Commands::UnpackCommand.new
end
end
def test_find_in_cache
util_make_gems
assert_equal(
@cmd.find_in_cache(File.basename(@a1.cache_file)),
@a1.cache_file,
"found a-1.gem in the cache"
)
end
def test_get_path
specs = spec_fetcher do |fetcher|
fetcher.gem "a", 1
end
dep = Gem::Dependency.new "a", 1
assert_equal(
@cmd.get_path(dep),
specs["a-1"].cache_file,
"fetches a-1 and returns the cache path"
)
FileUtils.rm specs["a-1"].cache_file
assert_equal(
@cmd.get_path(dep),
specs["a-1"].cache_file,
"when removed from cache, refetches a-1"
)
end
def test_execute
util_make_gems
@cmd.options[:args] = %w[a b]
use_ui @ui do
Dir.chdir @tempdir do
@cmd.execute
end
end
assert File.exist?(File.join(@tempdir, "a-3.a")), "a should be unpacked"
assert File.exist?(File.join(@tempdir, "b-2")), "b should be unpacked"
end
def test_execute_gem_path
spec_fetcher do |fetcher|
fetcher.gem "a", "3.a"
end
Gem.clear_paths
gemhome2 = File.join @tempdir, "gemhome2"
Gem.use_paths gemhome2, [gemhome2, @gemhome]
@cmd.options[:args] = %w[a]
use_ui @ui do
Dir.chdir @tempdir do
@cmd.execute
end
end
assert File.exist?(File.join(@tempdir, "a-3.a"))
end
def test_execute_gem_path_missing
spec_fetcher
Gem.clear_paths
gemhome2 = File.join @tempdir, "gemhome2"
Gem.use_paths gemhome2, [gemhome2, @gemhome]
@cmd.options[:args] = %w[z]
use_ui @ui do
Dir.chdir @tempdir do
@cmd.execute
end
end
assert_equal "", @ui.output
end
def test_execute_remote
spec_fetcher do |fetcher|
fetcher.download "a", 1
fetcher.download "a", 2
end
Gem.configuration.verbose = :really
@cmd.options[:args] = %w[a]
use_ui @ui do
Dir.chdir @tempdir do
@cmd.execute
end
end
assert File.exist?(File.join(@tempdir, "a-2")), "a should be unpacked"
end
def test_execute_spec
util_make_gems
@cmd.options[:args] = %w[a b]
@cmd.options[:spec] = true
use_ui @ui do
Dir.chdir @tempdir do
@cmd.execute
end
end
assert File.exist?(File.join(@tempdir, "a-3.a.gemspec"))
assert File.exist?(File.join(@tempdir, "b-2.gemspec"))
end
def test_execute_spec_target
util_make_gems
@cmd.options[:args] = %w[a b]
@cmd.options[:target] = "specs"
@cmd.options[:spec] = true
use_ui @ui do
Dir.chdir @tempdir do
@cmd.execute
end
end
assert File.exist?(File.join(@tempdir, "specs/a-3.a.gemspec"))
assert File.exist?(File.join(@tempdir, "specs/b-2.gemspec"))
end
def test_execute_sudo
pend "Cannot perform this test on windows (chmod)" if Gem.win_platform?
util_make_gems
FileUtils.chmod 0o555, @gemhome
@cmd.options[:args] = %w[b]
use_ui @ui do
Dir.chdir @tempdir do
@cmd.execute
end
end
assert File.exist?(File.join(@tempdir, "b-2")), "b should be unpacked"
ensure
FileUtils.chmod 0o755, @gemhome
end
def test_execute_with_target_option
util_make_gems
target = "with_target"
@cmd.options[:args] = %w[a]
@cmd.options[:target] = target
use_ui @ui do
Dir.chdir @tempdir do
@cmd.execute
end
end
assert File.exist?(File.join(@tempdir, target, "a-3.a"))
end
def test_execute_exact_match
foo_spec = util_spec "foo"
foo_bar_spec = util_spec "foo_bar"
use_ui @ui do
Dir.chdir @tempdir do
Gem::Package.build foo_spec
Gem::Package.build foo_bar_spec
end
end
foo_path = File.join(@tempdir, "#{foo_spec.full_name}.gem")
foo_bar_path = File.join(@tempdir, "#{foo_bar_spec.full_name}.gem")
Gem::Installer.at(foo_path).install
Gem::Installer.at(foo_bar_path).install
@cmd.options[:args] = %w[foo]
use_ui @ui do
Dir.chdir @tempdir do
@cmd.execute
end
end
assert_path_exist File.join(@tempdir, foo_spec.full_name)
end
def test_handle_options_metadata
refute @cmd.options[:spec]
@cmd.send :handle_options, %w[--spec a]
assert @cmd.options[:spec]
end
end
|