require 'rdoc/test_case' class TestRDocRIPaths < RDoc::TestCase def setup super @orig_gem_path = Gem.path @tempdir = File.join Dir.tmpdir, "test_rdoc_ri_paths_#{$$}" Gem.use_paths @tempdir Gem.ensure_gem_subdirectories @tempdir specs = [ @rake_10 = Gem::Specification.new('rake', '10.0.1'), @rdoc_4_0 = Gem::Specification.new('rdoc', '4.0'), @rdoc_3_12 = Gem::Specification.new('rdoc', '3.12'), @nodoc = Gem::Specification.new('nodoc', '1.0'), ] specs.each do |spec| spec.loaded_from = spec.spec_file open spec.spec_file, 'w' do |file| file.write spec.to_ruby_for_cache end FileUtils.mkdir_p File.join(spec.doc_dir, 'ri') unless spec.name == 'nodoc' end Gem::Specification.reset Gem::Specification.all = specs end def teardown super Gem.use_paths(*@orig_gem_path) Gem::Specification.reset FileUtils.rm_rf @tempdir end def test_class_each enum = RDoc::RI::Paths.each true, true, true, :all path = enum.map { |dir,| dir } assert_equal RDoc::RI::Paths.system_dir, path.shift assert_equal RDoc::RI::Paths.site_dir, path.shift assert_equal RDoc::RI::Paths.home_dir, path.shift assert_equal File.join(@nodoc.doc_dir, 'ri'), path.shift assert_equal File.join(@rake_10.doc_dir, 'ri'), path.shift assert_equal File.join(@rdoc_4_0.doc_dir, 'ri'), path.shift assert_equal File.join(@rdoc_3_12.doc_dir, 'ri'), path.shift assert_empty path end def test_class_gemdirs_latest Dir.chdir @tempdir do gemdirs = RDoc::RI::Paths.gemdirs :latest expected = [ File.join(@rake_10.doc_dir, 'ri'), File.join(@rdoc_4_0.doc_dir, 'ri'), ] assert_equal expected, gemdirs end end def test_class_gemdirs_legacy Dir.chdir @tempdir do gemdirs = RDoc::RI::Paths.gemdirs true expected = [ File.join(@rake_10.doc_dir, 'ri'), File.join(@rdoc_4_0.doc_dir, 'ri'), ] assert_equal expected, gemdirs end end def test_class_gemdirs_all Dir.chdir @tempdir do gemdirs = RDoc::RI::Paths.gemdirs :all expected = [ File.join(@nodoc.doc_dir, 'ri'), File.join(@rake_10.doc_dir, 'ri'), File.join(@rdoc_4_0.doc_dir, 'ri'), File.join(@rdoc_3_12.doc_dir, 'ri'), ] assert_equal expected, gemdirs end end def test_class_gem_dir dir = RDoc::RI::Paths.gem_dir 'rake', '10.0.1' expected = File.join @rake_10.doc_dir, 'ri' assert_equal expected, dir end def test_class_home_dir dir = RDoc::RI::Paths.home_dir assert_equal RDoc::RI::Paths::HOMEDIR, dir end def test_class_path_nonexistent temp_dir do |dir| nonexistent = File.join dir, 'nonexistent' dir = RDoc::RI::Paths.path true, true, true, true, nonexistent refute_includes dir, nonexistent end end def test_class_raw_path path = RDoc::RI::Paths.raw_path true, true, true, true assert_equal RDoc::RI::Paths.system_dir, path.shift assert_equal RDoc::RI::Paths.site_dir, path.shift assert_equal RDoc::RI::Paths.home_dir, path.shift assert_equal File.join(@rake_10.doc_dir, 'ri'), path.shift end def test_class_raw_path_extra_dirs path = RDoc::RI::Paths.raw_path true, true, true, true, '/nonexistent' assert_equal '/nonexistent', path.shift assert_equal RDoc::RI::Paths.system_dir, path.shift assert_equal RDoc::RI::Paths.site_dir, path.shift assert_equal RDoc::RI::Paths.home_dir, path.shift assert_equal File.join(@rake_10.doc_dir, 'ri'), path.shift end def test_class_site_dir dir = RDoc::RI::Paths.site_dir assert_equal File.join(RDoc::RI::Paths::BASE, 'site'), dir end def test_class_system_dir dir = RDoc::RI::Paths.system_dir assert_equal File.join(RDoc::RI::Paths::BASE, 'system'), dir end end