summaryrefslogtreecommitdiff
path: root/jni/ruby/test/rdoc/test_rdoc_rdoc.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_rdoc.rb
Fresh start
Diffstat (limited to 'jni/ruby/test/rdoc/test_rdoc_rdoc.rb')
-rw-r--r--jni/ruby/test/rdoc/test_rdoc_rdoc.rb455
1 files changed, 455 insertions, 0 deletions
diff --git a/jni/ruby/test/rdoc/test_rdoc_rdoc.rb b/jni/ruby/test/rdoc/test_rdoc_rdoc.rb
new file mode 100644
index 0000000..230c18f
--- /dev/null
+++ b/jni/ruby/test/rdoc/test_rdoc_rdoc.rb
@@ -0,0 +1,455 @@
+require 'rdoc/test_case'
+
+class TestRDocRDoc < RDoc::TestCase
+
+ def setup
+ super
+
+ @rdoc = RDoc::RDoc.new
+ @rdoc.options = RDoc::Options.new
+
+ @stats = RDoc::Stats.new @store, 0, 0
+ @rdoc.instance_variable_set :@stats, @stats
+ end
+
+ def test_document # functional test
+ options = RDoc::Options.new
+ options.files = [File.expand_path('../xref_data.rb', __FILE__)]
+ options.setup_generator 'ri'
+ options.main_page = 'MAIN_PAGE.rdoc'
+ options.root = Pathname File.expand_path('..', __FILE__)
+ options.title = 'title'
+
+ rdoc = RDoc::RDoc.new
+
+ temp_dir do
+ options.op_dir = 'ri'
+
+ capture_io do
+ rdoc.document options
+ end
+
+ assert File.directory? 'ri'
+ assert_equal rdoc, rdoc.store.rdoc
+ end
+
+ store = rdoc.store
+
+ assert_equal 'MAIN_PAGE.rdoc', store.main
+ assert_equal 'title', store.title
+ end
+
+ def test_gather_files
+ a = File.expand_path __FILE__
+ b = File.expand_path '../test_rdoc_text.rb', __FILE__
+
+ assert_equal [a, b], @rdoc.gather_files([b, a, b])
+ end
+
+ def test_handle_pipe
+ $stdin = StringIO.new "hello"
+
+ out, = capture_io do
+ @rdoc.handle_pipe
+ end
+
+ assert_equal "\n<p>hello</p>\n", out
+ ensure
+ $stdin = STDIN
+ end
+
+ def test_handle_pipe_rd
+ $stdin = StringIO.new "=begin\nhello\n=end"
+
+ @rdoc.options.markup = 'rd'
+
+ out, = capture_io do
+ @rdoc.handle_pipe
+ end
+
+ assert_equal "\n<p>hello</p>\n", out
+ ensure
+ $stdin = STDIN
+ end
+
+ def test_load_options
+ temp_dir do
+ options = RDoc::Options.new
+ options.markup = 'tomdoc'
+ options.write_options
+
+ options = @rdoc.load_options
+
+ assert_equal 'tomdoc', options.markup
+ end
+ end
+
+ def test_load_options_invalid
+ temp_dir do
+ open '.rdoc_options', 'w' do |io|
+ io.write "a: !ruby.yaml.org,2002:str |\nfoo"
+ end
+
+ e = assert_raises RDoc::Error do
+ @rdoc.load_options
+ end
+
+ options_file = File.expand_path '.rdoc_options'
+ assert_equal "#{options_file} is not a valid rdoc options file", e.message
+ end
+ end
+
+ def load_options_no_file
+ temp_dir do
+ options = @rdoc.load_options
+
+ assert_kind_of RDoc::Options, options
+ end
+ end
+
+ def test_normalized_file_list
+ files = temp_dir do |dir|
+ flag_file = @rdoc.output_flag_file dir
+
+ FileUtils.touch flag_file
+
+ @rdoc.normalized_file_list [__FILE__, flag_file]
+ end
+
+ files = files.map { |file| File.expand_path file }
+
+ assert_equal [File.expand_path(__FILE__)], files
+ end
+
+ def test_normalized_file_list_not_modified
+ files = [__FILE__]
+
+ @rdoc.last_modified[__FILE__] = File.stat(__FILE__).mtime
+
+ files = @rdoc.normalized_file_list [__FILE__]
+
+ assert_empty files
+ end
+
+ def test_normalized_file_list_non_file_directory
+ dev = defined?(File::NULL) ? File::NULL : '/dev/stdin'
+ skip "#{dev} is not a character special" unless
+ File.chardev? dev
+
+ files = nil
+
+ out, err = verbose_capture_io do
+ files = @rdoc.normalized_file_list [dev]
+ end
+
+ files = files.map { |file| File.expand_path file }
+
+ assert_empty files
+
+ assert_empty out
+ assert_match %r"^rdoc can't parse", err
+ assert_match %r"#{dev}$", err
+ end
+
+ def test_parse_file
+ @rdoc.store = RDoc::Store.new
+
+ temp_dir do |dir|
+ @rdoc.options.root = Pathname(Dir.pwd)
+
+ open 'test.txt', 'w' do |io|
+ io.puts 'hi'
+ end
+
+ top_level = @rdoc.parse_file 'test.txt'
+
+ assert_equal 'test.txt', top_level.absolute_name
+ assert_equal 'test.txt', top_level.relative_name
+ end
+ end
+
+ def test_parse_file_binary
+ @rdoc.store = RDoc::Store.new
+
+ root = File.dirname __FILE__
+
+ @rdoc.options.root = Pathname root
+
+ out, err = capture_io do
+ Dir.chdir root do
+ assert_nil @rdoc.parse_file 'binary.dat'
+ end
+ end
+
+ assert_empty out
+ assert_empty err
+ end
+
+ def test_parse_file_include_root
+ @rdoc.store = RDoc::Store.new
+
+ top_level = nil
+ temp_dir do |dir|
+ @rdoc.options.parse %W[--root #{File.dirname(__FILE__)}]
+
+ open 'include.txt', 'w' do |io|
+ io.puts ':include: test.txt'
+ end
+
+ out, err = capture_io do
+ top_level = @rdoc.parse_file 'include.txt'
+ end
+ assert_empty out
+ assert_empty err
+ end
+ assert_equal "test file", top_level.comment.text
+ end
+
+ def test_parse_file_page_dir
+ @rdoc.store = RDoc::Store.new
+
+ temp_dir do |dir|
+ FileUtils.mkdir 'pages'
+ @rdoc.options.page_dir = Pathname('pages')
+ @rdoc.options.root = Pathname(Dir.pwd)
+
+ open 'pages/test.txt', 'w' do |io|
+ io.puts 'hi'
+ end
+
+ top_level = @rdoc.parse_file 'pages/test.txt'
+
+ assert_equal 'pages/test.txt', top_level.absolute_name
+ assert_equal 'test.txt', top_level.relative_name
+ end
+ end
+
+ def test_parse_file_relative
+ pwd = Dir.pwd
+
+ @rdoc.store = RDoc::Store.new
+
+ temp_dir do |dir|
+ @rdoc.options.root = Pathname(dir)
+
+ open 'test.txt', 'w' do |io|
+ io.puts 'hi'
+ end
+
+ test_txt = File.join dir, 'test.txt'
+
+ Dir.chdir pwd do
+ top_level = @rdoc.parse_file test_txt
+
+ assert_equal test_txt, top_level.absolute_name
+ assert_equal 'test.txt', top_level.relative_name
+ end
+ end
+ end
+
+ def test_parse_file_encoding
+ skip "Encoding not implemented" unless Object.const_defined? :Encoding
+ @rdoc.options.encoding = Encoding::ISO_8859_1
+ @rdoc.store = RDoc::Store.new
+
+ tf = Tempfile.open 'test.txt' do |io|
+ io.write 'hi'
+ io.rewind
+
+ top_level = @rdoc.parse_file io.path
+
+ assert_equal Encoding::ISO_8859_1, top_level.absolute_name.encoding
+ io
+ end
+ tf.close! if tf.respond_to? :close!
+ end
+
+ def test_parse_file_forbidden
+ skip 'chmod not supported' if Gem.win_platform?
+
+ @rdoc.store = RDoc::Store.new
+
+ tf = Tempfile.open 'test.txt' do |io|
+ io.write 'hi'
+ io.rewind
+
+ File.chmod 0000, io.path
+
+ begin
+ top_level = :bug
+
+ _, err = capture_io do
+ top_level = @rdoc.parse_file io.path
+ end
+
+ assert_match "Unable to read #{io.path},", err
+
+ assert_nil top_level
+ ensure
+ File.chmod 0400, io.path
+ end
+ io
+ end
+ tf.close! if tf.respond_to? :close!
+ end
+
+ def test_remove_unparseable
+ file_list = %w[
+ blah.class
+ blah.eps
+ blah.erb
+ blah.scpt.txt
+ blah.ttf
+ blah.yml
+ ]
+
+ assert_empty @rdoc.remove_unparseable file_list
+ end
+
+ def test_remove_unparseable_tags_emacs
+ temp_dir do
+ open 'TAGS', 'wb' do |io| # emacs
+ io.write "\f\nlib/foo.rb,43\n"
+ end
+
+ file_list = %w[
+ TAGS
+ ]
+
+ assert_empty @rdoc.remove_unparseable file_list
+ end
+ end
+
+ def test_remove_unparseable_tags_vim
+ temp_dir do
+ open 'TAGS', 'w' do |io| # emacs
+ io.write "!_TAG_"
+ end
+
+ file_list = %w[
+ TAGS
+ ]
+
+ assert_empty @rdoc.remove_unparseable file_list
+ end
+ end
+
+ def test_setup_output_dir
+ Dir.mktmpdir {|d|
+ path = File.join d, 'testdir'
+
+ last = @rdoc.setup_output_dir path, false
+
+ assert_empty last
+
+ assert File.directory? path
+ assert File.exist? @rdoc.output_flag_file path
+ }
+ end
+
+ def test_setup_output_dir_dry_run
+ @rdoc.options.dry_run = true
+
+ Dir.mktmpdir do |d|
+ path = File.join d, 'testdir'
+
+ @rdoc.setup_output_dir path, false
+
+ refute File.exist? path
+ end
+ end
+
+ def test_setup_output_dir_exists
+ Dir.mktmpdir {|path|
+ open @rdoc.output_flag_file(path), 'w' do |io|
+ io.puts Time.at 0
+ io.puts "./lib/rdoc.rb\t#{Time.at 86400}"
+ end
+
+ last = @rdoc.setup_output_dir path, false
+
+ assert_equal 1, last.size
+ assert_equal Time.at(86400), last['./lib/rdoc.rb']
+ }
+ end
+
+ def test_setup_output_dir_exists_empty_created_rid
+ Dir.mktmpdir {|path|
+ open @rdoc.output_flag_file(path), 'w' do end
+
+ e = assert_raises RDoc::Error do
+ @rdoc.setup_output_dir path, false
+ end
+
+ assert_match %r%Directory #{Regexp.escape path} already exists%, e.message
+ }
+ end
+
+ def test_setup_output_dir_exists_file
+ tf = Tempfile.open 'test_rdoc_rdoc' do |tempfile|
+ path = tempfile.path
+
+ e = assert_raises RDoc::Error do
+ @rdoc.setup_output_dir path, false
+ end
+
+ assert_match(%r%#{Regexp.escape path} exists and is not a directory%,
+ e.message)
+ tempfile
+ end
+ tf.close! if tf.respond_to? :close!
+ end
+
+ def test_setup_output_dir_exists_not_rdoc
+ Dir.mktmpdir do |dir|
+ e = assert_raises RDoc::Error do
+ @rdoc.setup_output_dir dir, false
+ end
+
+ assert_match %r%Directory #{Regexp.escape dir} already exists%, e.message
+ end
+ end
+
+ def test_update_output_dir
+ Dir.mktmpdir do |d|
+ @rdoc.update_output_dir d, Time.now, {}
+
+ assert File.exist? "#{d}/created.rid"
+ end
+ end
+
+ def test_update_output_dir_dont
+ Dir.mktmpdir do |d|
+ @rdoc.options.update_output_dir = false
+ @rdoc.update_output_dir d, Time.now, {}
+
+ refute File.exist? "#{d}/created.rid"
+ end
+ end
+
+ def test_update_output_dir_dry_run
+ Dir.mktmpdir do |d|
+ @rdoc.options.dry_run = true
+ @rdoc.update_output_dir d, Time.now, {}
+
+ refute File.exist? "#{d}/created.rid"
+ end
+ end
+
+ def test_normalized_file_list_removes_created_rid_dir
+ temp_dir do |d|
+ FileUtils.mkdir "doc"
+ flag_file = @rdoc.output_flag_file "doc"
+ file = File.join "doc", "test"
+ FileUtils.touch flag_file
+ FileUtils.touch file
+
+ file_list = ["doc"]
+
+ output = @rdoc.normalized_file_list file_list
+
+ assert_empty output
+ end
+ end
+end
+