1require 'rubygems/installer_test_case'
2require 'rubygems/install_update_options'
3require 'rubygems/command'
4require 'rubygems/dependency_installer'
5
6class TestGemInstallUpdateOptions < Gem::InstallerTestCase
7
8  def setup
9    super
10
11    @cmd = Gem::Command.new 'dummy', 'dummy',
12                            Gem::DependencyInstaller::DEFAULT_OPTIONS
13    @cmd.extend Gem::InstallUpdateOptions
14    @cmd.add_install_update_options
15  end
16
17  def test_add_install_update_options
18    args = %w[
19      --document
20      --format-exec
21      --ignore-dependencies
22      --rdoc
23      --ri
24      -E
25      -P HighSecurity
26      -f
27      -i /install_to
28      -w
29    ]
30
31    assert @cmd.handles?(args)
32  end
33
34  def test_doc
35    @cmd.handle_options %w[--doc]
36
37    assert_equal %w[ri], @cmd.options[:document].sort
38  end
39
40  def test_doc_rdoc
41    @cmd.handle_options %w[--doc=rdoc]
42
43    assert_equal %w[rdoc], @cmd.options[:document]
44
45    @cmd.handle_options %w[--doc ri]
46
47    assert_equal %w[ri], @cmd.options[:document]
48  end
49
50  def test_doc_rdoc_ri
51    @cmd.handle_options %w[--doc=rdoc,ri]
52
53    assert_equal %w[rdoc ri], @cmd.options[:document]
54  end
55
56  def test_doc_no
57    @cmd.handle_options %w[--no-doc]
58
59    assert_equal [], @cmd.options[:document]
60  end
61
62  def test_document
63    @cmd.handle_options %w[--document]
64
65    assert_equal %w[ri], @cmd.options[:document].sort
66  end
67
68  def test_document_no
69    @cmd.handle_options %w[--no-document]
70
71    assert_equal %w[], @cmd.options[:document]
72  end
73
74  def test_document_rdoc
75    @cmd.handle_options %w[--document=rdoc]
76
77    assert_equal %w[rdoc], @cmd.options[:document]
78
79    @cmd.handle_options %w[--document ri]
80
81    assert_equal %w[ri], @cmd.options[:document]
82  end
83
84  def test_rdoc
85    @cmd.handle_options %w[--rdoc]
86
87    assert_equal %w[rdoc ri], @cmd.options[:document].sort
88  end
89
90  def test_rdoc_no
91    @cmd.handle_options %w[--no-rdoc]
92
93    assert_equal %w[ri], @cmd.options[:document]
94  end
95
96  def test_ri
97    @cmd.handle_options %w[--no-ri]
98
99    assert_equal %w[], @cmd.options[:document]
100  end
101
102  def test_security_policy
103    @cmd.handle_options %w[-P HighSecurity]
104
105    assert_equal Gem::Security::HighSecurity, @cmd.options[:security_policy]
106  end
107
108  def test_security_policy_unknown
109    @cmd.add_install_update_options
110
111    assert_raises OptionParser::InvalidArgument do
112      @cmd.handle_options %w[-P UnknownSecurity]
113    end
114  end
115
116  def test_user_install_enabled
117    @cmd.handle_options %w[--user-install]
118
119    assert @cmd.options[:user_install]
120
121    @installer = Gem::Installer.new @gem, @cmd.options
122    @installer.install
123    assert_path_exists File.join(Gem.user_dir, 'gems')
124    assert_path_exists File.join(Gem.user_dir, 'gems', @spec.full_name)
125  end
126
127  def test_user_install_disabled_read_only
128    if win_platform?
129      skip('test_user_install_disabled_read_only test skipped on MS Windows')
130    else
131      @cmd.handle_options %w[--no-user-install]
132
133      refute @cmd.options[:user_install]
134
135      FileUtils.chmod 0755, @userhome
136      FileUtils.chmod 0000, @gemhome
137
138      Gem.use_paths @gemhome, @userhome
139
140      assert_raises(Gem::FilePermissionError) do
141        Gem::Installer.new(@gem, @cmd.options).install
142      end
143    end
144  ensure
145    FileUtils.chmod 0755, @gemhome
146  end
147end
148