1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/rdoc/test_rdoc_options.rb
drbrain 2ef9c50c6e Import RDoc 3
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30249 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-12-20 03:22:49 +00:00

299 lines
6.7 KiB
Ruby

require 'rubygems'
require 'minitest/autorun'
require 'rdoc/options'
require 'fileutils'
require 'tmpdir'
class TestRDocOptions < MiniTest::Unit::TestCase
def setup
@options = RDoc::Options.new
end
def test_check_files
out, err = capture_io do
Dir.mktmpdir do |dir|
Dir.chdir dir do
FileUtils.touch 'unreadable'
FileUtils.chmod 0, 'unreadable'
@options.files = %w[nonexistent unreadable]
@options.check_files
end
end
end
assert_empty @options.files
assert_equal '', out
expected = <<-EXPECTED
file 'nonexistent' not found
file 'unreadable' not readable
EXPECTED
assert_equal expected, err
end
def test_dry_run_default
refute @options.dry_run
end
def test_encoding_default
skip "Encoding not implemented" unless Object.const_defined? :Encoding
assert_equal Encoding.default_external, @options.encoding
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_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_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_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_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_setup_generator
test_generator = Object.new
def test_generator.setup_options(op)
@op = op
end
def test_generator.op() @op end
RDoc::RDoc::GENERATORS['TestGenerator'] = test_generator
@options.setup_generator 'TestGenerator'
assert_equal test_generator, @options.generator
assert_equal [test_generator], @options.generator_options
assert_equal @options, test_generator.op
end
end