mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00

Synchronize rdoc with upstream version v6.3.1. [ruby/rdoc] Use File.open to fix the OS Command Injection vulnerability in CVE-2021-31799 https://github.com/ruby/rdoc/commit/a7f5d6ab88 --- lib/rdoc/rdoc.rb | 2 +- test/rdoc/test_rdoc_rdoc.rb | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) [ruby/rdoc] Support ChangeLog generated by `git log` https://github.com/ruby/rdoc/commit/5e0a123ca1 --- lib/rdoc/parser/changelog.rb | 35 +++++++++++++++++++++ test/rdoc/test_rdoc_parser_changelog.rb | 56 +++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) [ruby/rdoc] Make each commit entries h3 https://github.com/ruby/rdoc/commit/11eefb2ae9 --- lib/rdoc/parser/changelog.rb | 12 ++++++------ test/rdoc/test_rdoc_parser_changelog.rb | 12 ++++-------- 2 files changed, 10 insertions(+), 14 deletions(-) [ruby/rdoc] Tweak log entry markdown * add 3 levels to headings * prefix commit log to labels to make unique IDs https://github.com/ruby/rdoc/commit/5074c13209 --- lib/rdoc/parser/changelog.rb | 20 +++++++++++++++++- test/rdoc/test_rdoc_parser_changelog.rb | 36 ++++++++++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 2 deletions(-) [ruby/rdoc] Shorten commit hashes https://github.com/ruby/rdoc/commit/5d3e153963 --- lib/rdoc/parser/changelog.rb | 2 +- test/rdoc/test_rdoc_parser_changelog.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) [ruby/rdoc] Add links to the commits https://github.com/ruby/rdoc/commit/1821628076 --- lib/rdoc/parser/changelog.rb | 107 +++++++++++++++++++++++++------- test/rdoc/test_rdoc_parser_changelog.rb | 36 ++++++----- 2 files changed, 107 insertions(+), 36 deletions(-) [ruby/rdoc] Sort by CommitDate if available https://github.com/ruby/rdoc/commit/455715e930 --- lib/rdoc/parser/changelog.rb | 11 ++++++--- test/rdoc/test_rdoc_parser_changelog.rb | 40 +++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 3 deletions(-) [ruby/rdoc] Skip non-date logs by git-log `RDoc::Parser::ChangeLog` mis-parses ChangeLog generated by git-log, because of too heuristic `Time.parse`. For instance, "commit 8187228de0142d3ac7950b7d977c2849e934c637" results in "8187-08-16", that is, day 228 in the year 8187. https://github.com/ruby/rdoc/commit/9711e6f6d9 --- lib/rdoc/parser/changelog.rb | 36 ++++++++++++++++++++------------- test/rdoc/test_rdoc_parser_changelog.rb | 2 ++ 2 files changed, 24 insertions(+), 14 deletions(-) [ruby/rdoc] Support other date formats in git-log https://github.com/ruby/rdoc/commit/ad8cf37d72 --- lib/rdoc/parser/changelog.rb | 6 +++--- test/rdoc/test_rdoc_parser_changelog.rb | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) [ruby/rdoc] Support iso-strict format in git-log https://github.com/ruby/rdoc/commit/2a6c22da63 --- lib/rdoc/parser/changelog.rb | 6 +++--- test/rdoc/test_rdoc_parser_changelog.rb | 11 +++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) [ruby/rdoc] Update Rdoc.css sidebar panel. Updates css so the sidebar look like a panel instead of looking like chopped edges. https://github.com/ruby/rdoc/commit/b0098c6d72 --- lib/rdoc/generator/template/darkfish/css/rdoc.css | 1 + 1 file changed, 1 insertion(+) [ruby/rdoc] Support GFM table https://github.com/ruby/rdoc/commit/9dc933df16 --- lib/rdoc/markdown.rb | 349 +++++++++++++++++++++++++++++++- lib/rdoc/markup.rb | 1 + lib/rdoc/markup/table.rb | 47 +++++ lib/rdoc/markup/to_html.rb | 23 +++ lib/rdoc/markup/to_joined_paragraph.rb | 1 + lib/rdoc/markup/to_rdoc.rb | 28 +++ lib/rdoc/markup/to_table_of_contents.rb | 1 + test/rdoc/test_rdoc_markdown.rb | 23 +++ 8 files changed, 471 insertions(+), 2 deletions(-) create mode 100644 lib/rdoc/markup/table.rb [ruby/rdoc] Add table style https://github.com/ruby/rdoc/commit/2219c5ae80 --- lib/rdoc/generator/template/darkfish/css/rdoc.css | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) [ruby/rdoc] Fixed CodeFence without blank lines Currently a fenced code block needs a preceding blank line, it should not be required, as: https://github.github.com/gfm/#fenced-code-blocks > A fenced code block may interrupt a paragraph, and does not > require a blank line either before or after. Just recommended: https://docs.github.com/en/github/writing-on-github/creating-and-highlighting-code-blocks > We recommend placing a blank line before and after code blocks > to make the raw formatting easier to read. https://github.com/ruby/rdoc/commit/0e1776caf3 --- lib/rdoc/markdown.rb | 447 +++++++--------------------------------- test/rdoc/test_rdoc_markdown.rb | 36 +++- 2 files changed, 112 insertions(+), 371 deletions(-) [ruby/rdoc] Allow partial default values to be overridden with .rdoc_options https://github.com/ruby/rdoc/commit/e14800891f --- lib/rdoc/options.rb | 34 +++++++++++++++++++++++++++++++++- lib/rdoc/rdoc.rb | 7 ++++++- test/rdoc/test_rdoc_rdoc.rb | 12 ++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) [ruby/rdoc] Allow empty .rdoc_options https://github.com/ruby/rdoc/commit/0c8cb25b50 --- lib/rdoc/rdoc.rb | 2 ++ test/rdoc/test_rdoc_rdoc.rb | 11 +++++++++++ 2 files changed, 13 insertions(+) [ruby/rdoc] Suppress unused variable warning of "text" https://github.com/ruby/rdoc/commit/3a4120b155 --- lib/rdoc/markdown.rb | 345 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 343 insertions(+), 2 deletions(-) [ruby/rdoc] Get rid of a trailing space https://github.com/ruby/rdoc/commit/7b7b91768e --- lib/rdoc/markdown.rb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) [ruby/rdoc] Disable other notations in <code> tags https://github.com/ruby/rdoc/commit/0cd3b55210 --- lib/rdoc/markup/attr_span.rb | 10 ++- lib/rdoc/markup/attribute_manager.rb | 102 ++++++++++++++++++------ test/rdoc/test_rdoc_markup_attribute_manager.rb | 24 +++++- test/rdoc/test_rdoc_markup_to_html.rb | 6 ++ 4 files changed, 114 insertions(+), 28 deletions(-) [ruby/rdoc] Treat other tags as word boundaries https://github.com/ruby/rdoc/commit/8222f85a17 --- lib/rdoc/markup/attribute_manager.rb | 17 +++++++++++++---- test/rdoc/test_rdoc_markup_to_html.rb | 5 +++++ 2 files changed, 18 insertions(+), 4 deletions(-) [ruby/rdoc] Treat emphasis tags as excluding other notations And exclusive notations don't exclude other exclusive notations. https://github.com/ruby/rdoc/commit/b8baa9a435 --- lib/rdoc/markup/attr_span.rb | 2 +- lib/rdoc/markup/attribute_manager.rb | 10 +++++----- test/rdoc/test_rdoc_markup_attribute_manager.rb | 1 + 3 files changed, 7 insertions(+), 6 deletions(-) [ruby/rdoc] Clarify that dots in URL are replaced The dots in all path components from the document root are replaced with underscores, not only in the basename. https://github.com/ruby/rdoc/commit/7a3417ea4c --- test/rdoc/test_rdoc_top_level.rb | 3 +++ 1 file changed, 3 insertions(+) [ruby/rdoc] Links to document texts without "rdoc-ref:" prefix While links to generated HTML from RDoc file needs to be prefixed by "rdoc-ref:" currently, in case of explicit references this seems just redundant. Also GitHub RDoc support does not work with this prefix. This patch lets links to such document texts (".rb", ".rdoc" and ".md" now) refer URLs generated by `RDoc::TopLevel#http_url` without the prefix. https://github.com/ruby/rdoc/commit/f18b27b69d --- lib/rdoc/markup/to_html.rb | 4 ++++ test/rdoc/test_rdoc_markup_to_html.rb | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+) [ruby/rdoc] Use File.open to fix the OS Command Injection vulnerability in CVE-2021-31799 https://github.com/ruby/rdoc/commit/a7f5d6ab88 --- lib/rdoc/rdoc.rb | 2 +- test/rdoc/test_rdoc_rdoc.rb | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) [ruby/rdoc] Version 6.3.1 https://github.com/ruby/rdoc/commit/9307f932b7 --- lib/rdoc/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
291 lines
7.1 KiB
Ruby
291 lines
7.1 KiB
Ruby
# frozen_string_literal: true
|
|
require File.expand_path '../xref_test_case', __FILE__
|
|
|
|
class TestRDocTopLevel < XrefTestCase
|
|
|
|
def setup
|
|
super
|
|
|
|
@top_level = @store.add_file 'path/top_level.rb'
|
|
@top_level.parser = RDoc::Parser::Ruby
|
|
end
|
|
|
|
def test_initialize
|
|
t = RDoc::TopLevel.new 'path/file.rb'
|
|
|
|
assert_equal 'path/file.rb', t.absolute_name
|
|
assert_equal 'path/file.rb', t.relative_name
|
|
end
|
|
|
|
def test_initialize_relative
|
|
t = RDoc::TopLevel.new 'path/file.rb', 'file.rb'
|
|
|
|
assert_equal 'path/file.rb', t.absolute_name
|
|
assert_equal 'file.rb', t.relative_name
|
|
end
|
|
|
|
def test_add_alias
|
|
a = RDoc::Alias.new nil, 'old', 'new', nil
|
|
@top_level.add_alias a
|
|
|
|
object = @store.find_class_named 'Object'
|
|
expected = { '#old' => [a] }
|
|
assert_equal expected, object.unmatched_alias_lists
|
|
assert_includes object.in_files, @top_level
|
|
end
|
|
|
|
def test_add_alias_nodoc
|
|
@top_level.document_self = false
|
|
|
|
a = RDoc::Alias.new nil, 'old', 'new', nil
|
|
@top_level.add_alias a
|
|
|
|
object = @store.find_class_named('Object')
|
|
assert_empty object.unmatched_alias_lists
|
|
assert_includes object.in_files, @top_level
|
|
end
|
|
|
|
def test_add_constant
|
|
const = RDoc::Constant.new 'C', nil, nil
|
|
@top_level.add_constant const
|
|
|
|
object = @store.find_class_named 'Object'
|
|
assert_equal [const], object.constants
|
|
assert_includes object.in_files, @top_level
|
|
end
|
|
|
|
def test_add_constant_nodoc
|
|
@top_level.document_self = false
|
|
|
|
const = RDoc::Constant.new 'C', nil, nil
|
|
@top_level.add_constant const
|
|
|
|
object = @store.find_class_named 'Object'
|
|
assert_empty object.constants
|
|
assert_includes object.in_files, @top_level
|
|
end
|
|
|
|
def test_add_include
|
|
include = RDoc::Include.new 'C', nil
|
|
@top_level.add_include include
|
|
|
|
object = @store.find_class_named 'Object'
|
|
assert_equal [include], object.includes
|
|
assert_includes object.in_files, @top_level
|
|
end
|
|
|
|
def test_add_include_nodoc
|
|
@top_level.document_self = false
|
|
|
|
include = RDoc::Include.new 'C', nil
|
|
@top_level.add_include include
|
|
|
|
object = @store.find_class_named('Object')
|
|
assert_empty object.includes
|
|
assert_includes object.in_files, @top_level
|
|
end
|
|
|
|
def test_add_method
|
|
method = RDoc::AnyMethod.new nil, 'm'
|
|
@top_level.add_method method
|
|
|
|
object = @store.find_class_named 'Object'
|
|
assert_equal [method], object.method_list
|
|
assert_includes object.in_files, @top_level
|
|
end
|
|
|
|
def test_add_method_stopdoc
|
|
@top_level.document_self = false
|
|
|
|
method = RDoc::AnyMethod.new nil, 'm'
|
|
@top_level.add_method method
|
|
|
|
object = @store.find_class_named('Object')
|
|
assert_empty object.method_list
|
|
assert_includes object.in_files, @top_level
|
|
end
|
|
|
|
def test_base_name
|
|
assert_equal 'top_level.rb', @top_level.base_name
|
|
end
|
|
|
|
def test_display_eh
|
|
refute @top_level.display?
|
|
|
|
page = @store.add_file 'README.txt'
|
|
page.parser = RDoc::Parser::Simple
|
|
|
|
assert page.display?
|
|
end
|
|
|
|
def test_eql_eh
|
|
top_level2 = @store.add_file 'path/top_level.rb'
|
|
other_level = @store.add_file 'path/other_level.rb'
|
|
|
|
assert_operator @top_level, :eql?, top_level2
|
|
|
|
refute_operator other_level, :eql?, @top_level
|
|
end
|
|
|
|
def test_equals2
|
|
top_level2 = @store.add_file 'path/top_level.rb'
|
|
other_level = @store.add_file 'path/other_level.rb'
|
|
|
|
assert_equal @top_level, top_level2
|
|
|
|
refute_equal other_level, @top_level
|
|
end
|
|
|
|
def test_find_class_or_module
|
|
assert_equal @c1, @xref_data.find_class_or_module('C1')
|
|
assert_equal @c2_c3, @xref_data.find_class_or_module('C2::C3')
|
|
assert_equal @c4, @xref_data.find_class_or_module('C4')
|
|
assert_equal @m1_m2, @xref_data.find_class_or_module('M1::M2')
|
|
end
|
|
|
|
def test_full_name
|
|
assert_equal 'path/top_level.rb', @top_level.full_name
|
|
end
|
|
|
|
def test_hash
|
|
tl2 = @store.add_file 'path/top_level.rb'
|
|
tl3 = @store.add_file 'other/top_level.rb'
|
|
|
|
assert_equal @top_level.hash, tl2.hash
|
|
refute_equal @top_level.hash, tl3.hash
|
|
end
|
|
|
|
def test_http_url
|
|
assert_equal 'prefix/path/top_level_rb.html', @top_level.http_url('prefix')
|
|
|
|
other_level = @store.add_file 'path.other/level.rb'
|
|
assert_equal 'prefix/path_other/level_rb.html', other_level.http_url('prefix')
|
|
end
|
|
|
|
def test_last_modified
|
|
assert_nil @top_level.last_modified
|
|
stat = Object.new
|
|
def stat.mtime() 0 end
|
|
@top_level.file_stat = stat
|
|
assert_equal 0, @top_level.last_modified
|
|
end
|
|
|
|
def test_marshal_dump
|
|
page = @store.add_file 'README.txt'
|
|
page.parser = RDoc::Parser::Simple
|
|
page.comment = RDoc::Comment.new 'This is a page', page
|
|
|
|
loaded = Marshal.load Marshal.dump page
|
|
|
|
comment = RDoc::Markup::Document.new(
|
|
RDoc::Markup::Paragraph.new('This is a page'))
|
|
comment.file = loaded
|
|
|
|
assert_equal page, loaded
|
|
|
|
assert_equal 'README.txt', loaded.absolute_name
|
|
assert_equal 'README.txt', loaded.relative_name
|
|
|
|
assert_equal RDoc::Parser::Simple, loaded.parser
|
|
|
|
assert_equal comment, loaded.comment
|
|
end
|
|
|
|
def test_marshal_load_version_0
|
|
loaded = Marshal.load "\x04\bU:\x13RDoc::TopLevel" +
|
|
"[\ti\x00I\"\x0FREADME.txt\x06:\x06EF" +
|
|
"c\x19RDoc::Parser::Simple" +
|
|
"o:\eRDoc::Markup::Document\a:\v@parts" +
|
|
"[\x06o:\x1CRDoc::Markup::Paragraph\x06;\b" +
|
|
"[\x06I\"\x13This is a page\x06;\x06F:\n@file@\a"
|
|
|
|
comment = RDoc::Markup::Document.new(
|
|
RDoc::Markup::Paragraph.new('This is a page'))
|
|
comment.file = loaded
|
|
|
|
assert_equal 'README.txt', loaded.absolute_name
|
|
assert_equal 'README.txt', loaded.relative_name
|
|
|
|
assert_equal RDoc::Parser::Simple, loaded.parser
|
|
|
|
assert_equal comment, loaded.comment
|
|
|
|
assert loaded.display?
|
|
end
|
|
|
|
def test_name
|
|
assert_equal 'top_level.rb', @top_level.name
|
|
end
|
|
|
|
def test_page_name
|
|
assert_equal 'top_level', @top_level.page_name
|
|
|
|
tl = @store.add_file 'README.ja'
|
|
|
|
assert_equal 'README.ja', tl.page_name
|
|
|
|
tl = @store.add_file 'Rakefile'
|
|
|
|
assert_equal 'Rakefile', tl.page_name
|
|
end
|
|
|
|
def test_page_name_trim_extension
|
|
tl = @store.add_file 'README.ja.rdoc'
|
|
|
|
assert_equal 'README.ja', tl.page_name
|
|
|
|
tl = @store.add_file 'README.ja.md'
|
|
|
|
assert_equal 'README.ja', tl.page_name
|
|
|
|
tl = @store.add_file 'README.txt'
|
|
|
|
assert_equal 'README', tl.page_name
|
|
end
|
|
|
|
def test_search_record
|
|
assert_nil @xref_data.search_record
|
|
end
|
|
|
|
def test_search_record_page
|
|
page = @store.add_file 'README.txt'
|
|
page.parser = RDoc::Parser::Simple
|
|
page.comment = 'This is a comment.'
|
|
|
|
expected = [
|
|
'README',
|
|
'',
|
|
'README',
|
|
'',
|
|
'README_txt.html',
|
|
'',
|
|
"<p>This is a comment.\n",
|
|
]
|
|
|
|
assert_equal expected, page.search_record
|
|
end
|
|
|
|
def test_text_eh
|
|
refute @xref_data.text?
|
|
|
|
rd = @store.add_file 'rd_format.rd'
|
|
rd.parser = RDoc::Parser::RD
|
|
|
|
assert rd.text?
|
|
|
|
simple = @store.add_file 'simple.txt'
|
|
simple.parser = RDoc::Parser::Simple
|
|
|
|
assert simple.text?
|
|
end
|
|
|
|
def test_text_eh_no_parser
|
|
refute @xref_data.text?
|
|
|
|
rd = @store.add_file 'rd_format.rd'
|
|
|
|
refute rd.text?
|
|
end
|
|
|
|
end
|
|
|