1require 'rubygems' 2require 'rubygems/test_case' 3require 'rdoc/rubygems_hook' 4 5class TestRDocRubygemsHook < Gem::TestCase 6 7 def setup 8 super 9 10 skip 'requires RubyGems 1.9+' unless 11 Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.9') 12 13 @a = quick_spec 'a' do |s| 14 s.rdoc_options = %w[--main MyTitle] 15 s.extra_rdoc_files = %w[README] 16 end 17 18 write_file File.join(@tempdir, 'lib', 'a.rb') 19 write_file File.join(@tempdir, 'README') 20 21 install_gem @a 22 23 @hook = RDoc::RubygemsHook.new @a 24 25 begin 26 RDoc::RubygemsHook.load_rdoc 27 rescue Gem::DocumentError => e 28 skip e.message 29 end 30 31 Gem.configuration[:rdoc] = nil 32 end 33 34 def test_initialize 35 refute @hook.generate_rdoc 36 assert @hook.generate_ri 37 38 rdoc = RDoc::RubygemsHook.new @a, false, false 39 40 refute rdoc.generate_rdoc 41 refute rdoc.generate_ri 42 end 43 44 def test_delete_legacy_args 45 args = %w[ 46 --inline-source 47 --one-file 48 --promiscuous 49 -p 50 ] 51 52 @hook.delete_legacy_args args 53 54 assert_empty args 55 end 56 57 def test_document 58 options = RDoc::Options.new 59 options.files = [] 60 61 rdoc = @hook.new_rdoc 62 rdoc.store = RDoc::Store.new 63 @hook.instance_variable_set :@rdoc, rdoc 64 @hook.instance_variable_set :@file_info, [] 65 66 @hook.document 'darkfish', options, @a.doc_dir('rdoc') 67 68 assert @hook.rdoc_installed? 69 end 70 71 def test_generate 72 FileUtils.mkdir_p @a.doc_dir 73 FileUtils.mkdir_p File.join(@a.gem_dir, 'lib') 74 75 @hook.generate 76 77 refute @hook.rdoc_installed? 78 assert @hook.ri_installed? 79 80 rdoc = @hook.instance_variable_get :@rdoc 81 82 refute rdoc.options.hyperlink_all 83 assert_equal Pathname(@a.full_gem_path), rdoc.options.root 84 assert_equal %w[README lib], rdoc.options.files.sort 85 86 assert_equal 'MyTitle', rdoc.store.main 87 end 88 89 def test_generate_all 90 @hook.generate_rdoc = true 91 @hook.generate_ri = true 92 93 FileUtils.mkdir_p @a.doc_dir 94 FileUtils.mkdir_p File.join(@a.gem_dir, 'lib') 95 96 @hook.generate 97 98 assert @hook.rdoc_installed? 99 assert @hook.ri_installed? 100 101 rdoc = @hook.instance_variable_get :@rdoc 102 103 refute rdoc.options.hyperlink_all 104 assert_equal Pathname(@a.full_gem_path), rdoc.options.root 105 assert_equal %w[README lib], rdoc.options.files.sort 106 107 assert_equal 'MyTitle', rdoc.store.main 108 end 109 110 def test_generate_configuration_rdoc_array 111 Gem.configuration[:rdoc] = %w[-A] 112 113 FileUtils.mkdir_p @a.doc_dir 114 FileUtils.mkdir_p File.join(@a.gem_dir, 'lib') 115 116 @hook.generate 117 118 rdoc = @hook.instance_variable_get :@rdoc 119 120 assert rdoc.options.hyperlink_all 121 end 122 123 def test_generate_configuration_rdoc_string 124 Gem.configuration[:rdoc] = '-A' 125 126 FileUtils.mkdir_p @a.doc_dir 127 FileUtils.mkdir_p File.join(@a.gem_dir, 'lib') 128 129 @hook.generate 130 131 rdoc = @hook.instance_variable_get :@rdoc 132 133 assert rdoc.options.hyperlink_all 134 end 135 136 def test_generate_default_gem 137 skip 'RubyGems 2 required' unless @a.respond_to? :default_gem? 138 @a.loaded_from = 139 File.join Gem::Specification.default_specifications_dir, 'a.gemspec' 140 141 FileUtils.mkdir_p @a.doc_dir 142 FileUtils.mkdir_p File.join(@a.gem_dir, 'lib') 143 144 @hook.generate 145 146 refute @hook.rdoc_installed? 147 refute @hook.ri_installed? 148 end 149 150 def test_generate_disabled 151 @hook.generate_rdoc = false 152 @hook.generate_ri = false 153 154 @hook.generate 155 156 refute @hook.rdoc_installed? 157 refute @hook.ri_installed? 158 end 159 160 def test_generate_force 161 FileUtils.mkdir_p @a.doc_dir 'ri' 162 FileUtils.mkdir_p @a.doc_dir 'rdoc' 163 FileUtils.mkdir_p File.join(@a.gem_dir, 'lib') 164 165 @hook.force = true 166 167 @hook.generate 168 169 refute_path_exists File.join(@a.doc_dir('rdoc'), 'index.html') 170 assert_path_exists File.join(@a.doc_dir('ri'), 'cache.ri') 171 end 172 173 def test_generate_no_overwrite 174 FileUtils.mkdir_p @a.doc_dir 'ri' 175 FileUtils.mkdir_p @a.doc_dir 'rdoc' 176 FileUtils.mkdir_p File.join(@a.gem_dir, 'lib') 177 178 @hook.generate 179 180 refute_path_exists File.join(@a.doc_dir('rdoc'), 'index.html') 181 refute_path_exists File.join(@a.doc_dir('ri'), 'cache.ri') 182 end 183 184 def test_new_rdoc 185 assert_kind_of RDoc::RDoc, @hook.new_rdoc 186 end 187 188 def test_rdoc_installed? 189 refute @hook.rdoc_installed? 190 191 FileUtils.mkdir_p @a.doc_dir 'rdoc' 192 193 assert @hook.rdoc_installed? 194 end 195 196 def test_remove 197 FileUtils.mkdir_p @a.doc_dir 'rdoc' 198 FileUtils.mkdir_p @a.doc_dir 'ri' 199 200 @hook.remove 201 202 refute @hook.rdoc_installed? 203 refute @hook.ri_installed? 204 205 assert_path_exists @a.doc_dir 206 end 207 208 def test_remove_unwritable 209 skip 'chmod not supported' if Gem.win_platform? 210 FileUtils.mkdir_p @a.base_dir 211 FileUtils.chmod 0, @a.base_dir 212 213 e = assert_raises Gem::FilePermissionError do 214 @hook.remove 215 end 216 217 assert_equal @a.base_dir, e.directory 218 ensure 219 FileUtils.chmod(0755, @a.base_dir) if File.directory?(@a.base_dir) 220 end 221 222 def test_ri_installed? 223 refute @hook.ri_installed? 224 225 FileUtils.mkdir_p @a.doc_dir 'ri' 226 227 assert @hook.ri_installed? 228 end 229 230 def test_setup 231 @hook.setup 232 233 assert_path_exists @a.doc_dir 234 end 235 236 def test_setup_unwritable 237 skip 'chmod not supported' if Gem.win_platform? 238 FileUtils.mkdir_p @a.doc_dir 239 FileUtils.chmod 0, @a.doc_dir 240 241 e = assert_raises Gem::FilePermissionError do 242 @hook.setup 243 end 244 245 assert_equal @a.doc_dir, e.directory 246 ensure 247 if File.exist? @a.doc_dir 248 FileUtils.chmod 0755, @a.doc_dir 249 FileUtils.rm_r @a.doc_dir 250 end 251 end 252 253end 254 255