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