summaryrefslogtreecommitdiff
path: root/jni/ruby/test/rdoc/test_rdoc_options.rb
diff options
context:
space:
mode:
authorJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-16 18:49:26 +0900
committerJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-30 00:39:06 +0900
commitfcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch)
tree64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/test/rdoc/test_rdoc_options.rb
Fresh start
Diffstat (limited to 'jni/ruby/test/rdoc/test_rdoc_options.rb')
-rw-r--r--jni/ruby/test/rdoc/test_rdoc_options.rb766
1 files changed, 766 insertions, 0 deletions
diff --git a/jni/ruby/test/rdoc/test_rdoc_options.rb b/jni/ruby/test/rdoc/test_rdoc_options.rb
new file mode 100644
index 0000000..67053e3
--- /dev/null
+++ b/jni/ruby/test/rdoc/test_rdoc_options.rb
@@ -0,0 +1,766 @@
+require 'rdoc/test_case'
+
+class TestRDocOptions < RDoc::TestCase
+
+ def setup
+ super
+
+ @options = RDoc::Options.new
+ @generators = RDoc::RDoc::GENERATORS.dup
+ end
+
+ def teardown
+ super
+
+ RDoc::RDoc::GENERATORS.replace @generators
+ end
+
+ def test_check_files
+ skip "assumes UNIX permission model" if /mswin|mingw/ =~ RUBY_PLATFORM
+
+ out, err = capture_io do
+ temp_dir do
+ FileUtils.touch 'unreadable'
+ FileUtils.chmod 0, 'unreadable'
+
+ @options.files = %w[nonexistent unreadable]
+
+ @options.check_files
+ end
+ end
+
+ assert_empty @options.files
+
+ assert_empty out
+ assert_empty err
+ end
+
+ def test_check_files_warn
+ @options.verbosity = 2
+
+ out, err = verbose_capture_io do
+ @options.files = %w[nonexistent]
+
+ @options.check_files
+ end
+
+ assert_empty out
+ assert_equal "file 'nonexistent' not found\n", err
+ assert_empty @options.files
+ end
+
+ def test_dry_run_default
+ refute @options.dry_run
+ end
+
+ def test_encode_with
+ coder = {}
+ class << coder; alias add []=; end
+
+ @options.encode_with coder
+
+ encoding = Object.const_defined?(:Encoding) ? 'UTF-8' : nil
+
+ expected = {
+ 'charset' => 'UTF-8',
+ 'encoding' => encoding,
+ 'exclude' => [],
+ 'hyperlink_all' => false,
+ 'line_numbers' => false,
+ 'locale' => nil,
+ 'locale_dir' => 'locale',
+ 'locale_name' => nil,
+ 'main_page' => nil,
+ 'markup' => 'rdoc',
+ 'output_decoration' => true,
+ 'page_dir' => nil,
+ 'rdoc_include' => [],
+ 'show_hash' => false,
+ 'static_path' => [],
+ 'tab_width' => 8,
+ 'template_stylesheets' => [],
+ 'title' => nil,
+ 'visibility' => :protected,
+ 'webcvs' => nil,
+ }
+
+ assert_equal expected, coder
+ end
+
+ def test_encode_with_trim_paths
+ subdir = nil
+ coder = {}
+ class << coder; alias add []=; end
+
+ temp_dir do |dir|
+ FileUtils.mkdir 'project'
+ FileUtils.mkdir 'dir'
+ FileUtils.touch 'file'
+
+ Dir.chdir 'project' do
+ subdir = File.expand_path 'subdir'
+ FileUtils.mkdir 'subdir'
+ @options.parse %w[
+ --copy subdir
+ --copy ../file
+ --copy ../
+ --copy /
+ --include subdir
+ --include ../dir
+ --include ../
+ --include /
+ ]
+
+ @options.encode_with coder
+ end
+ end
+
+ assert_equal [subdir], coder['rdoc_include']
+
+ assert_equal [subdir], coder['static_path']
+ end
+
+ def test_encoding_default
+ skip "Encoding not implemented" unless Object.const_defined? :Encoding
+
+ assert_equal Encoding::UTF_8, @options.encoding
+ end
+
+ def test_generator_descriptions
+ # HACK autotest/isolate should take care of this
+ RDoc::RDoc::GENERATORS.clear
+ RDoc::RDoc::GENERATORS['darkfish'] = RDoc::Generator::Darkfish
+ RDoc::RDoc::GENERATORS['ri'] = RDoc::Generator::RI
+
+ expected = <<-EXPECTED.chomp
+ darkfish - HTML generator, written by Michael Granger
+ ri - creates ri data files
+ EXPECTED
+
+ assert_equal expected, @options.generator_descriptions
+ end
+
+ def test_init_with_encoding
+ skip "Encoding not implemented" unless Object.const_defined? :Encoding
+ RDoc.load_yaml
+
+ @options.encoding = Encoding::IBM437
+
+ options = YAML.load YAML.dump @options
+
+ assert_equal Encoding::IBM437, options.encoding
+ end
+
+ def test_init_with_trim_paths
+ RDoc.load_yaml
+
+ yaml = <<-YAML
+--- !ruby/object:RDoc::Options
+static_path:
+- /etc
+rdoc_include:
+- /etc
+ YAML
+
+ options = YAML.load yaml
+
+ assert_empty options.rdoc_include
+ assert_empty options.static_path
+ end
+
+ def test_parse_copy_files_file_relative
+ file = File.basename __FILE__
+ expected = File.expand_path __FILE__
+
+ Dir.chdir File.expand_path('..', __FILE__) do
+ @options.parse %W[--copy-files #{file}]
+
+ assert_equal [expected], @options.static_path
+ end
+ end
+
+ def test_parse_copy_files_file_absolute
+ @options.parse %W[--copy-files #{File.expand_path __FILE__}]
+
+ assert_equal [File.expand_path(__FILE__)], @options.static_path
+ end
+
+ def test_parse_copy_files_directory_relative
+ @options.parse %w[--copy-files .]
+
+ assert_equal [@pwd], @options.static_path
+ end
+
+ def test_parse_copy_files_directory_absolute
+ @options.parse %w[--copy-files /]
+
+ assert_equal 1, @options.static_path.length
+
+ assert_match %r%^([A-Z]:)?/$%i, @options.static_path.first
+ end
+
+ def test_parse_coverage
+ @options.parse %w[--dcov]
+
+ assert @options.coverage_report
+ assert @options.force_update
+ end
+
+ def test_parse_coverage_no
+ @options.parse %w[--no-dcov]
+
+ refute @options.coverage_report
+ end
+
+ def test_parse_coverage_level_1
+ @options.parse %w[--dcov=1]
+
+ assert_equal 1, @options.coverage_report
+ end
+
+ def test_parse_dash_p
+ out, err = capture_io do
+ @options.parse %w[-p]
+ end
+
+ assert @options.pipe
+ refute_match %r%^Usage: %, err
+ refute_match %r%^invalid options%, err
+
+ assert_empty out
+ end
+
+ def test_parse_dash_p_files
+ out, err = capture_io do
+ @options.parse ['-p', File.expand_path(__FILE__)]
+ end
+
+ refute @options.pipe
+ refute_match %r%^Usage: %, err
+ assert_match %r%^invalid options: -p .with files.%, err
+
+ assert_empty out
+ end
+
+ def test_parse_default
+ @options.parse []
+
+ assert_equal RDoc::Generator::Darkfish, @options.generator
+ assert_equal 'darkfish', @options.template
+ assert_match %r%rdoc/generator/template/darkfish$%, @options.template_dir
+ end
+
+ def test_parse_deprecated
+ dep_hash = RDoc::Options::DEPRECATED
+ options = dep_hash.keys.sort
+
+ out, err = capture_io do
+ @options.parse options
+ end
+
+ dep_hash.each_pair do |opt, message|
+ assert_match %r%.*#{opt}.+#{message}%, err
+ end
+
+ assert_empty out
+ end
+
+ def test_parse_dry_run
+ @options.parse %w[--dry-run]
+
+ assert @options.dry_run
+ end
+
+ def test_parse_encoding
+ skip "Encoding not implemented" unless Object.const_defined? :Encoding
+
+ @options.parse %w[--encoding Big5]
+
+ assert_equal Encoding::Big5, @options.encoding
+ assert_equal 'Big5', @options.charset
+ end
+
+ def test_parse_encoding_invalid
+ skip "Encoding not implemented" unless Object.const_defined? :Encoding
+
+ out, err = capture_io do
+ @options.parse %w[--encoding invalid]
+ end
+
+ assert_match %r%^invalid options: --encoding invalid%, err
+
+ assert_empty out
+ end
+
+ def test_parse_formatter
+ e = assert_raises OptionParser::InvalidOption do
+ @options.parse %w[--format darkfish --format ri]
+ end
+
+ assert_equal 'invalid option: --format generator already set to darkfish',
+ e.message
+ end
+
+ def test_parse_formatter_ri
+ e = assert_raises OptionParser::InvalidOption do
+ @options.parse %w[--format darkfish --ri]
+ end
+
+ assert_equal 'invalid option: --ri generator already set to darkfish',
+ e.message
+
+ @options = RDoc::Options.new
+
+ e = assert_raises OptionParser::InvalidOption do
+ @options.parse %w[--format darkfish -r]
+ end
+
+ assert_equal 'invalid option: -r generator already set to darkfish',
+ e.message
+ end
+
+ def test_parse_formatter_ri_site
+ e = assert_raises OptionParser::InvalidOption do
+ @options.parse %w[--format darkfish --ri-site]
+ end
+
+ assert_equal 'invalid option: --ri-site generator already set to darkfish',
+ e.message
+
+ @options = RDoc::Options.new
+
+ e = assert_raises OptionParser::InvalidOption do
+ @options.parse %w[--format darkfish -R]
+ end
+
+ assert_equal 'invalid option: -R generator already set to darkfish',
+ e.message
+ end
+
+ def test_parse_h
+ out, = capture_io do
+ begin
+ @options.parse %w[-h]
+ rescue SystemExit
+ end
+ end
+
+ assert_equal 1, out.scan(/HTML generator options:/).length
+ assert_equal 1, out.scan(/ri generator options:/). length
+ end
+
+ def test_parse_help
+ out, = capture_io do
+ begin
+ @options.parse %w[--help]
+ rescue SystemExit
+ end
+ end
+
+ assert_equal 1, out.scan(/HTML generator options:/).length
+ assert_equal 1, out.scan(/ri generator options:/). length
+ end
+
+ def test_parse_help_extra_generator
+ RDoc::RDoc::GENERATORS['test'] = Class.new do
+ def self.setup_options options
+ op = options.option_parser
+
+ op.separator 'test generator options:'
+ end
+ end
+
+ out, = capture_io do
+ begin
+ @options.parse %w[--help]
+ rescue SystemExit
+ end
+ end
+
+ assert_equal 1, out.scan(/HTML generator options:/).length
+ assert_equal 1, out.scan(/ri generator options:/). length
+ assert_equal 1, out.scan(/test generator options:/).length
+ end
+
+ def test_parse_format_for_extra_generator
+ RDoc::RDoc::GENERATORS['test'] = Class.new do
+ def self.setup_options options
+ op = options.option_parser
+
+ op.separator 'test generator options:'
+ end
+ end
+
+ @options.setup_generator 'test'
+
+ assert_equal @options.generator_name, 'test'
+ end
+
+ def test_parse_ignore_invalid
+ out, err = capture_io do
+ @options.parse %w[--ignore-invalid --bogus]
+ end
+
+ refute_match %r%^Usage: %, err
+ assert_match %r%^invalid options: --bogus%, err
+
+ assert_empty out
+ end
+
+ def test_parse_ignore_invalid_default
+ out, err = capture_io do
+ @options.parse %w[--bogus --main BLAH]
+ end
+
+ refute_match %r%^Usage: %, err
+ assert_match %r%^invalid options: --bogus%, err
+
+ assert_equal 'BLAH', @options.main_page
+
+ assert_empty out
+ end
+
+ def test_parse_ignore_invalid_no
+ out, err = capture_io do
+ assert_raises SystemExit do
+ @options.parse %w[--no-ignore-invalid --bogus=arg --bobogus --visibility=extended]
+ end
+ end
+
+ assert_match %r%^Usage: %, err
+ assert_match %r%^invalid options: --bogus=arg, --bobogus, --visibility=extended%, err
+
+ assert_empty out
+ end
+
+ def test_parse_ignore_invalid_no_quiet
+ out, err = capture_io do
+ assert_raises SystemExit do
+ @options.parse %w[--quiet --no-ignore-invalid --bogus=arg --bobogus --visibility=extended]
+ end
+ end
+
+ refute_match %r%^Usage: %, err
+ assert_match %r%^invalid options: --bogus=arg, --bobogus, --visibility=extended%, err
+
+ assert_empty out
+ end
+
+ def test_ignore_needless_arg
+ out, err = capture_io do
+ @options.parse %w[--ri=foo]
+ end
+
+ assert_match %r%^invalid options: --ri=foo%, err
+
+ assert_empty out
+ end
+
+ def test_ignore_missing_arg
+ out, err = capture_io do
+ @options.parse %w[--copy-files]
+ end
+
+ assert_match %r%^invalid options: --copy-files%, err
+
+ assert_empty out
+ end
+
+ def test_parse_main
+ out, err = capture_io do
+ @options.parse %w[--main MAIN]
+ end
+
+ assert_empty out
+ assert_empty err
+
+ assert_equal 'MAIN', @options.main_page
+ end
+
+ def test_parse_markup
+ out, err = capture_io do
+ @options.parse %w[--markup tomdoc]
+ end
+
+ assert_empty out
+ assert_empty err
+
+ assert_equal 'tomdoc', @options.markup
+ end
+
+ def test_parse_page_dir
+ assert_nil @options.page_dir
+
+ out, err = capture_io do
+ @options.parse %W[--page-dir #{Dir.tmpdir}]
+ end
+
+ assert_empty out
+ assert_empty err
+
+ expected =
+ Pathname(Dir.tmpdir).expand_path.relative_path_from @options.root
+
+ assert_equal expected, @options.page_dir
+ assert_equal [Dir.tmpdir], @options.files
+ end
+
+ def test_parse_page_dir_root
+ assert_nil @options.page_dir
+
+ Dir.mktmpdir do |dir|
+ abs_root = dir
+ abs_page_dir = File.join dir, 'pages'
+ FileUtils.mkdir abs_page_dir
+
+ out, err = capture_io do
+ @options.parse %W[--page-dir #{abs_page_dir} --root #{abs_root}]
+ end
+
+ assert_empty out
+ assert_empty err
+
+ assert_equal Pathname('pages'), @options.page_dir
+ assert_equal [abs_page_dir], @options.files
+ end
+ end
+
+ def test_parse_ri_site
+ @options.parse %w[--ri-site]
+
+ assert_equal RDoc::Generator::RI, @options.generator
+ assert_equal RDoc::RI::Paths.site_dir, @options.op_dir
+ end
+
+ def test_parse_root
+ assert_equal Pathname(Dir.pwd), @options.root
+
+ out, err = capture_io do
+ @options.parse %W[--root #{Dir.tmpdir}]
+ end
+
+ assert_empty out
+ assert_empty err
+
+ assert_equal Pathname(Dir.tmpdir), @options.root
+ assert_includes @options.rdoc_include, @options.root.to_s
+ end
+
+ def test_parse_tab_width
+ @options.parse %w[--tab-width=1]
+ assert_equal 1, @options.tab_width
+
+ @options.parse %w[-w2]
+ assert_equal 2, @options.tab_width
+
+ _, err = capture_io do
+ @options.parse %w[-w=2]
+ end
+
+ assert_match 'invalid options', err
+
+ _, err = capture_io do
+ @options.parse %w[-w0]
+ end
+
+ assert_match 'invalid options', err
+ end
+
+ def test_parse_template
+ out, err = capture_io do
+ @options.parse %w[--template darkfish]
+ end
+
+ assert_empty out
+ assert_empty err
+
+ assert_equal 'darkfish', @options.template
+
+ assert_match %r%rdoc/generator/template/darkfish$%, @options.template_dir
+ end
+
+ def test_parse_template_nonexistent
+ out, err = capture_io do
+ @options.parse %w[--template NONEXISTENT]
+ end
+
+ assert_empty out
+ assert_equal "could not find template NONEXISTENT\n", err
+
+ assert_equal 'darkfish', @options.template
+ assert_match %r%rdoc/generator/template/darkfish$%, @options.template_dir
+ end
+
+ def test_parse_template_load_path
+ orig_LOAD_PATH = $LOAD_PATH.dup
+
+ template_dir = nil
+
+ Dir.mktmpdir do |dir|
+ $LOAD_PATH << dir
+
+ template_dir = File.join dir, 'rdoc', 'generator', 'template', 'load_path'
+
+ FileUtils.mkdir_p template_dir
+
+ out, err = capture_io do
+ @options.parse %w[--template load_path]
+ end
+
+ assert_empty out
+ assert_empty err
+ end
+
+ assert_equal 'load_path', @options.template
+ assert_equal template_dir, @options.template_dir
+ ensure
+ $LOAD_PATH.replace orig_LOAD_PATH
+ end
+
+ def test_parse_visibility
+ @options.parse %w[--visibility=public]
+ assert_equal :public, @options.visibility
+
+ @options.parse %w[--visibility=protected]
+ assert_equal :protected, @options.visibility
+
+ @options.parse %w[--visibility=private]
+ assert_equal :private, @options.visibility
+
+ @options.parse %w[--visibility=nodoc]
+ assert_equal :nodoc, @options.visibility
+ end
+
+ def test_parse_write_options
+ tmpdir = File.join Dir.tmpdir, "test_rdoc_options_#{$$}"
+ FileUtils.mkdir_p tmpdir
+
+ Dir.chdir tmpdir do
+ e = assert_raises SystemExit do
+ @options.parse %w[--write-options]
+ end
+
+ assert_equal 0, e.status
+
+ assert File.exist? '.rdoc_options'
+ end
+ ensure
+ FileUtils.rm_rf tmpdir
+ end
+
+ def test_parse_extension_alias
+ out, err = capture_io do
+ @options.parse %w[--extension foobar=rdoc]
+ end
+
+ assert_includes RDoc::Parser.parsers, [/\.foobar$/, RDoc::Parser::Simple]
+
+ assert_empty out
+ assert_empty err
+ end
+
+ def test_setup_generator
+ test_generator = Class.new do
+ def self.setup_options op
+ @op = op
+ end
+
+ def self.op() @op end
+ end
+
+ RDoc::RDoc::GENERATORS['test'] = test_generator
+
+ @options.setup_generator 'test'
+
+ assert_equal test_generator, @options.generator
+ assert_equal [test_generator], @options.generator_options
+
+ assert_equal @options, test_generator.op
+ ensure
+ RDoc::RDoc::GENERATORS.delete 'test'
+ end
+
+ def test_setup_generator_no_option_parser
+ test_generator = Class.new do
+ def self.setup_options op
+ op.option_parser.separator nil
+ @op = op
+ end
+
+ def self.op() @op end
+ end
+
+ RDoc::RDoc::GENERATORS['test'] = test_generator
+
+ @options.setup_generator 'test'
+
+ assert_equal test_generator, @options.generator
+ assert_equal [test_generator], @options.generator_options
+
+ assert_equal @options, test_generator.op
+ ensure
+ RDoc::RDoc::GENERATORS.delete 'test'
+ end
+
+ def test_update_output_dir
+ assert @options.update_output_dir
+
+ @options.update_output_dir = false
+
+ refute @options.update_output_dir
+ end
+
+ def test_warn
+ out, err = capture_io do
+ @options.warn "warnings off"
+ end
+
+ assert_empty out
+ assert_empty err
+
+ @options.verbosity = 2
+
+ out, err = verbose_capture_io do
+ @options.warn "warnings on"
+ end
+
+ assert_empty out
+ assert_equal "warnings on\n", err
+ end
+
+ def test_write_options
+ temp_dir do |dir|
+ @options.write_options
+
+ assert File.exist? '.rdoc_options'
+
+ assert_equal @options, YAML.load(File.read('.rdoc_options'))
+ end
+ end
+
+ def test_version
+ out, _ = capture_io do
+ begin
+ @options.parse %w[--version]
+ rescue SystemExit
+ end
+ end
+
+ assert out.include?(RDoc::VERSION)
+
+ out, _ = capture_io do
+ begin
+ @options.parse %w[-v]
+ rescue SystemExit
+ end
+ end
+
+ assert out.include?(RDoc::VERSION)
+ end
+
+ def test_visibility
+ @options.visibility = :all
+ assert_equal :private, @options.visibility
+ end
+end
+