Class: Gem::InstallerTestCase

Inherits:
TestCase
  • Object
show all
Defined in:
lib/rubygems/installer_test_case.rb

Overview

A test case for Gem::Installer.

Constant Summary

Constants inherited from TestCase

TestCase::PRIVATE_KEY_PASSPHRASE, TestCase::TEST_PATH

Instance Attribute Summary

Attributes inherited from TestCase

#fetcher, #gem_repo, #uri

Instance Method Summary collapse

Methods inherited from TestCase

#add_to_fetcher, #all_spec_names, #assert_activate, #assert_contains_make_command, #assert_directory_exists, #assert_path_exists, #bindir, #build_rake_in, cert_path, #common_installer_setup, #common_installer_teardown, #dep, #dependency_request, #enable_shared, #exeext, #git_gem, #have_git?, #in_path?, #install_default_gems, #install_default_specs, #install_gem, #install_gem_user, #install_specs, java_platform?, #java_platform?, key_path, load_cert, load_key, #loaded_spec_names, make_command, #make_command, #mu_pp, #new_default_spec, #nmake_found?, #parse_make_command_line, #process_based_port, process_based_port, #quick_gem, #read_binary, #read_cache, #refute_path_exists, #req, rubybin, #save_gemspec, #save_loaded_features, #scan_make_command_lines, #spec, #spec_fetcher, #teardown, #uninstall_gem, #unresolved_names, #util_build_gem, #util_clear_RUBY_VERSION, #util_clear_gems, #util_gem, #util_gzip, #util_make_gems, #util_remove_gem, #util_restore_RUBY_VERSION, #util_set_RUBY_VERSION, #util_set_arch, #util_setup_spec_fetcher, #util_spec, #util_zip, #v, vc_windows?, #vc_windows?, #vendor_gem, #vendordir, #wait_for_child_process_to_exit, win_platform?, #win_platform?, #write_file

Methods included from Deprecate

deprecate, skip, skip=, skip_during

Methods included from DefaultUserInteraction

ui, #ui, #ui=, ui=, use_ui, #use_ui

Methods included from Text

#clean_text, #format_text, #levenshtein_distance, #min3, #truncate_text

Instance Method Details

#setupObject


69
70
71
72
73
# File 'lib/rubygems/installer_test_case.rb', line 69

def setup
  super

  Gem::Installer.path_warning = false
end

#setup_base_gemObject

Creates the following instance variables:

@spec

a spec named 'a', intended for regular installs

And returns a gem built for the @spec


127
128
129
130
131
# File 'lib/rubygems/installer_test_case.rb', line 127

def setup_base_gem
  @spec = setup_base_spec
  util_build_gem @spec
  @spec.cache_file
end

#setup_base_installerObject

Creates the following instance variables:

@spec

a spec named 'a', intended for regular installs

@gem

the path to a built gem from @spec

And returns a Gem::Installer for the @spec that installs into @gemhome


114
115
116
117
# File 'lib/rubygems/installer_test_case.rb', line 114

def setup_base_installer
  @gem = setup_base_gem
  util_installer @spec, @gemhome
end

#setup_base_specObject

Sets up a generic specification for testing the rubygems installer

And returns it


138
139
140
141
142
# File 'lib/rubygems/installer_test_case.rb', line 138

def setup_base_spec
  quick_gem 'a' do |spec|
    util_make_exec spec
  end
end

#setup_base_user_installerObject

Creates the following instance variables:

@spec

a spec named 'a', intended for regular installs

@user_spec

a spec named 'b', intended for user installs

@gem

the path to a built gem from @spec

@user_gem

the path to a built gem from @user_spec

And returns a Gem::Installer for the @user_spec that installs into Gem.user_dir


159
160
161
162
163
164
165
166
167
168
169
# File 'lib/rubygems/installer_test_case.rb', line 159

def setup_base_user_installer
  @user_spec = quick_gem 'b' do |spec|
    util_make_exec spec
  end

  util_build_gem @user_spec

  @user_gem = @user_spec.cache_file

  util_installer @user_spec, Gem.user_dir, :user
end

#util_inst_bindirObject

The path where installed executables live


78
79
80
# File 'lib/rubygems/installer_test_case.rb', line 78

def util_inst_bindir
  File.join @gemhome, "bin"
end

#util_installer(spec, gem_home, user = false) ⇒ Object

Creates an installer for spec that will install into gem_home. If user is true a user-install will be performed.


227
228
229
230
231
# File 'lib/rubygems/installer_test_case.rb', line 227

def util_installer(spec, gem_home, user=false)
  Gem::Installer.at(spec.cache_file,
                     :install_dir => gem_home,
                     :user_install => user)
end

#util_make_exec(spec = @spec, shebang = "#!/usr/bin/ruby", bindir = "bin") ⇒ Object

Adds an executable named “executable” to spec with the given shebang.

The executable is also written to the bin dir in @tmpdir and the installed gem directory for spec.


88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/rubygems/installer_test_case.rb', line 88

def util_make_exec(spec = @spec, shebang = "#!/usr/bin/ruby", bindir = "bin")
  spec.executables = %w[executable]
  spec.bindir = bindir

  exec_path = spec.bin_file "executable"
  write_file exec_path do |io|
    io.puts shebang
  end

  bin_path = File.join @tempdir, "bin", "executable"
  write_file bin_path do |io|
    io.puts shebang
  end
end

#util_setup_gem(ui = @ui) ⇒ Object

Builds the @spec gem and returns an installer for it. The built gem includes:

bin/executable
lib/code.rb
ext/a/mkrf_conf.rb

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
# File 'lib/rubygems/installer_test_case.rb', line 188

def util_setup_gem(ui = @ui)
  @spec.files << File.join('lib', 'code.rb')
  @spec.extensions << File.join('ext', 'a', 'mkrf_conf.rb')

  Dir.chdir @tempdir do
    FileUtils.mkdir_p 'bin'
    FileUtils.mkdir_p 'lib'
    FileUtils.mkdir_p File.join('ext', 'a')

    File.open File.join('bin', 'executable'), 'w' do |f|
      f.puts "raise 'ran executable'"
    end

    File.open File.join('lib', 'code.rb'), 'w' do |f|
      f.puts '1'
    end

    File.open File.join('ext', 'a', 'mkrf_conf.rb'), 'w' do |f|
      f << <<-EOF
        File.open 'Rakefile', 'w' do |rf| rf.puts "task :default" end
      EOF
    end

    yield @spec if block_given?

    use_ui ui do
      FileUtils.rm_f @gem

      @gem = Gem::Package.build @spec
    end
  end

  Gem::Installer.at @gem
end

#util_setup_installerObject

Sets up the base @gem, builds it and returns an installer for it.


174
175
176
177
178
# File 'lib/rubygems/installer_test_case.rb', line 174

def util_setup_installer
  @gem = setup_base_gem

  util_setup_gem
end