summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_install_update_options.rb
blob: 3638a0670aaeaa730798b786b603a1455be76a3a (plain)
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
require 'test/unit'
require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
require File.join(File.expand_path(File.dirname(__FILE__)),
                  'gem_installer_test_case')
require 'rubygems/install_update_options'
require 'rubygems/command'

class TestGemInstallUpdateOptions < GemInstallerTestCase

  def setup
    super

    @cmd = Gem::Command.new 'dummy', 'dummy'
    @cmd.extend Gem::InstallUpdateOptions
    @cmd.add_install_update_options
  end

  def test_add_install_update_options
    args = %w[-i /install_to --rdoc --ri -E -f -t -w -P HighSecurity
              --ignore-dependencies --format-exec --include-dependencies]

    assert @cmd.handles?(args)
  end

  def test_security_policy
    @cmd.handle_options %w[-P HighSecurity]

    assert_equal Gem::Security::HighSecurity, @cmd.options[:security_policy]
  end

  def test_security_policy_unknown
    @cmd.add_install_update_options

    assert_raise OptionParser::InvalidArgument do
      @cmd.handle_options %w[-P UnknownSecurity]
    end
  end

  def test_user_install_enabled
    @cmd.handle_options %w[--user-install]

    @installer = Gem::Installer.new @gem, @cmd.options
    @installer.install
    assert File.exist?(File.join(@userhome, '.gem', 'gems'))
    assert File.exist?(File.join(@userhome, '.gem', 'gems', 
                                 @spec.full_name))
  end

  def test_user_install_disabled_read_only
    @cmd.handle_options %w[--no-user-install]

    File.chmod 0755, @userhome
    FileUtils.chmod 0000, @gemhome

    assert_raises(Gem::FilePermissionError) do
      @installer = Gem::Installer.new @gem, @cmd.options
    end
  ensure
    FileUtils.chmod 0755, @gemhome
  end
end