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