* lib/rdoc: Update to 3.9.1. Fixes === lines in verbatim sections.

Fixes :nodoc: on class aliases.  Fixes :stopdoc: creating references
	  to Object.  Fixes spacing when class comments are merged in ri.
	  Fixes `ri []` crash.  Fixes bug report URL when rdoc crashes.  Adds
	  :doc: and :nodoc: to allow hiding of implementation details in ruby.
	  Makes `rdoc` and `ri` gem-aware.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@32803 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
drbrain 2011-08-01 18:57:36 +00:00
parent e2c24e1616
commit 8e627bc1f7
33 changed files with 1058 additions and 603 deletions

View file

@ -67,6 +67,30 @@ class TestRDocCodeObject < XrefTestCase
assert_equal Encoding::UTF_8, @co.comment.encoding
end
def test_display_eh_document_self
assert @co.display?
@co.document_self = false
refute @co.display?
end
def test_display_eh_ignore
assert @co.display?
@co.ignore
refute @co.display?
@co.stop_doc
refute @co.display?
@co.done_documenting = false
refute @co.display?
end
def test_document_children_equals
@co.document_children = false
refute @co.document_children
@ -156,6 +180,22 @@ class TestRDocCodeObject < XrefTestCase
assert_nil @co.instance_variable_get(:@full_name)
end
def test_ignore
@co.ignore
refute @co.document_self
refute @co.document_children
assert @co.ignored?
end
def test_ignore_eh
refute @co.ignored?
@co.ignore
assert @co.ignored?
end
def test_line
@c1_m.line = 5
@ -202,10 +242,16 @@ class TestRDocCodeObject < XrefTestCase
end
def test_record_location
c = RDoc::CodeObject.new
c.record_location @xref_data
@co.record_location @xref_data
assert_equal 'xref_data.rb', c.file.relative_name
assert_equal 'xref_data.rb', @co.file.relative_name
end
def test_record_location_ignored
@co.ignore
@co.record_location @xref_data
refute @co.ignored?
end
def test_start_doc
@ -218,6 +264,16 @@ class TestRDocCodeObject < XrefTestCase
assert @co.document_children
end
def test_start_doc_ignored
@co.ignore
@co.start_doc
assert @co.document_self
assert @co.document_children
refute @co.ignored?
end
def test_stop_doc
@co.document_self = true
@co.document_children = true

View file

@ -38,6 +38,7 @@ class TestRDocGeneratorDarkfish < MiniTest::Unit::TestCase
@top_level = RDoc::TopLevel.new 'file.rb'
@klass = @top_level.add_class RDoc::NormalClass, 'Object'
@meth = RDoc::AnyMethod.new nil, 'method'
@meth_bang = RDoc::AnyMethod.new nil, 'method!'
@attr = RDoc::Attr.new nil, 'attr', 'RW', ''
@ -45,6 +46,9 @@ class TestRDocGeneratorDarkfish < MiniTest::Unit::TestCase
@klass.add_method @meth
@klass.add_method @meth_bang
@klass.add_attribute @attr
@ignored = @top_level.add_class RDoc::NormalClass, 'Ignored'
@ignored.ignore
end
def teardown
@ -83,6 +87,8 @@ class TestRDocGeneratorDarkfish < MiniTest::Unit::TestCase
File.read('Object.html'))
assert_match(/<meta content="text\/html; charset=#{encoding}"/,
File.read('file_rb.html'))
refute_match(/Ignored/, File.read('index.html'))
end
def test_generate_dry_run

View file

@ -124,6 +124,24 @@ class TestRDocMarkupDocument < MiniTest::Unit::TestCase
assert_equal expected, result
end
def test_merge_empty
original = @RM::Document.new
root = @RM::Document.new original
replace = @RM::Document.new @RM::Paragraph.new 'replace'
replace.file = 'file.rb'
other = @RM::Document.new replace
result = root.merge other
inner = @RM::Document.new @RM::Paragraph.new 'replace'
inner.file = 'file.rb'
expected = @RM::Document.new inner
assert_equal expected, result
end
def test_push
@d.push @RM::BlankLine.new, @RM::BlankLine.new

View file

@ -248,6 +248,23 @@ the time
assert_equal expected, @RMP.parse(str).parts
end
def test_parse_heading_empty
str = <<-STR
===
* bullet
STR
expected = [
@RM::Heading.new(3, ''),
@RM::BlankLine.new,
@RM::List.new(:BULLET, *[
@RM::ListItem.new(nil,
@RM::Paragraph.new('bullet'))]),
]
assert_equal expected, @RMP.parse(str).parts
end
def test_parse_heading_heading
str = '= ='
@ -1085,6 +1102,23 @@ the time
assert_equal expected, @RMP.tokenize(str)
end
def test_tokenize_heading_empty
str = <<-STR
===
* bullet
STR
expected = [
[:HEADER, 3, 0, 0],
[:NEWLINE, "\n", 3, 0],
[:BULLET, "*", 0, 1],
[:TEXT, "bullet", 2, 1],
[:NEWLINE, "\n", 8, 1],
]
assert_equal expected, @RMP.tokenize(str)
end
def test_tokenize_heading_heading
str = <<-STR
= =
@ -1366,6 +1400,44 @@ Example heading:
assert_equal expected, @RMP.tokenize(str)
end
def test_tokenize_verbatim_rule
str = <<-STR
Verbatim section here that is double-underlined
===============================================
STR
expected = [
[:TEXT, 'Verbatim section here that is double-underlined', 2, 0],
[:NEWLINE, "\n", 49, 0],
[:HEADER, 47, 2, 1],
[:NEWLINE, "\n", 49, 1],
]
assert_equal expected, @RMP.tokenize(str)
end
def test_tokenize_verbatim_rule_fancy
str = <<-STR
A
b
===============================================
c
STR
expected = [
[:TEXT, 'A', 2, 0],
[:NEWLINE, "\n", 3, 0],
[:TEXT, 'b', 4, 1],
[:NEWLINE, "\n", 5, 1],
[:HEADER, 47, 2, 2],
[:NEWLINE, "\n", 49, 2],
[:TEXT, 'c', 4, 3],
[:NEWLINE, "\n", 5, 3],
]
assert_equal expected, @RMP.tokenize(str)
end
# HACK move to Verbatim test case
def test_verbatim_normalize
v = @RM::Verbatim.new "foo\n", "\n", "\n", "bar\n"

View file

@ -5,6 +5,7 @@ require 'rubygems'
require 'minitest/autorun'
require 'rdoc/markup/pre_process'
require 'rdoc/code_objects'
require 'rdoc/options'
class TestRDocMarkupPreProcess < MiniTest::Unit::TestCase
@ -19,6 +20,8 @@ class TestRDocMarkupPreProcess < MiniTest::Unit::TestCase
end
def teardown
RDoc::Markup::PreProcess.registered.clear
@tempfile.close
end
@ -73,6 +76,14 @@ contents of a string.
end
def test_handle
text = "# :main: M\n"
out = @pp.handle text
assert_same out, text
assert_equal "#\n", text
end
def test_handle_unregistered
text = "# :x: y\n"
out = @pp.handle text
@ -80,142 +91,329 @@ contents of a string.
assert_equal "# :x: y\n", text
end
def test_handle_block
text = "# :x: y\n"
def test_handle_directive_blankline
result = @pp.handle_directive '#', 'arg', 'a, b'
@pp.handle text do |directive, param|
false
end
assert_equal "#\n", result
end
assert_equal "# :x: y\n", text
def test_handle_directive_downcase
method = RDoc::AnyMethod.new nil, 'm'
@pp.handle text do |directive, param|
@pp.handle_directive '', 'ARG', 'a, b', method
assert_equal 'a, b', method.params
end
def test_handle_directive_arg
method = RDoc::AnyMethod.new nil, 'm'
@pp.handle_directive '', 'arg', 'a, b', method
assert_equal 'a, b', method.params
end
def test_handle_directive_arg_no_context
result = @pp.handle_directive '', 'arg', 'a, b', nil
assert_equal "\n", result
end
def test_handle_directive_args
method = RDoc::AnyMethod.new nil, 'm'
@pp.handle_directive '', 'args', 'a, b', method
assert_equal 'a, b', method.params
end
def test_handle_directive_block
result = @pp.handle_directive '', 'x', 'y' do |directive, param|
''
end
assert_equal "", text
assert_empty result
end
def test_handle_category
def test_handle_directive_block_false
result = @pp.handle_directive '', 'x', 'y' do |directive, param|
false
end
assert_equal ":x: y\n", result
end
def test_handle_directive_block_nil
result = @pp.handle_directive '', 'x', 'y' do |directive, param|
nil
end
assert_equal ":x: y\n", result
end
def test_handle_directive_category
context = RDoc::Context.new
original_section = context.current_section
text = "# :category: other\n"
@pp.handle text, context
@pp.handle_directive '', 'category', 'other', context
refute_equal original_section, context.current_section
end
def test_handle_code_object
cd = RDoc::CodeObject.new
text = "# :x: y\n"
@pp.handle text, cd
def test_handle_directive_doc
code_object = RDoc::CodeObject.new
code_object.document_self = false
code_object.force_documentation = false
assert_equal "# :x: y\n", text
assert_equal 'y', cd.metadata['x']
@pp.handle_directive '', 'doc', nil, code_object
cd.metadata.clear
text = "# :x:\n"
@pp.handle text, cd
assert_equal "# :x: \n", text
assert_includes cd.metadata, 'x'
assert code_object.document_self
assert code_object.force_documentation
end
def test_handle_code_object_block
cd = RDoc::CodeObject.new
text = "# :x: y\n"
@pp.handle text, cd do
false
end
def test_handle_directive_doc_no_context
result = @pp.handle_directive '', 'doc', nil
assert_equal "# :x: y\n", text
assert_empty cd.metadata
@pp.handle text, cd do
nil
end
assert_equal "# :x: y\n", text
assert_equal 'y', cd.metadata['x']
cd.metadata.clear
@pp.handle text, cd do
''
end
assert_equal '', text
assert_empty cd.metadata
assert_equal "\n", result
end
def test_handle_registered
def test_handle_directive_enddoc
code_object = RDoc::CodeObject.new
@pp.handle_directive '', 'enddoc', nil, code_object
assert code_object.done_documenting
end
def test_handle_directive_include
@tempfile.write 'included'
@tempfile.flush
result = @pp.handle_directive '', 'include', @file_name
assert_equal 'included', result
end
def test_handle_directive_main
@pp.options = RDoc::Options.new
@pp.handle_directive '', 'main', 'M'
assert_equal 'M', @pp.options.main_page
end
def test_handle_directive_notnew
m = RDoc::AnyMethod.new nil, 'm'
@pp.handle_directive '', 'notnew', nil, m
assert m.dont_rename_initialize
end
def test_handle_directive_not_new
m = RDoc::AnyMethod.new nil, 'm'
@pp.handle_directive '', 'not_new', nil, m
assert m.dont_rename_initialize
end
def test_handle_directive_not_dash_new
m = RDoc::AnyMethod.new nil, 'm'
@pp.handle_directive '', 'not-new', nil, m
assert m.dont_rename_initialize
end
def test_handle_directive_nodoc
code_object = RDoc::CodeObject.new
code_object.document_self = true
code_object.document_children = true
@pp.handle_directive '', 'nodoc', nil, code_object
refute code_object.document_self
assert code_object.document_children
end
def test_handle_directive_nodoc_all
code_object = RDoc::CodeObject.new
code_object.document_self = true
code_object.document_children = true
@pp.handle_directive '', 'nodoc', 'all', code_object
refute code_object.document_self
refute code_object.document_children
end
def test_handle_directive_nodoc_no_context
result = @pp.handle_directive '', 'nodoc', nil
assert_equal "\n", result
end
def test_handle_directive_registered
RDoc::Markup::PreProcess.register 'x'
text = "# :x: y\n"
@pp.handle text
assert_equal '', text
result = @pp.handle_directive '', 'x', 'y'
text = "# :x: y\n"
assert_nil result
@pp.handle text do |directive, param|
result = @pp.handle_directive '', 'x', 'y' do |directive, param|
false
end
assert_equal "# :x: y\n", text
assert_equal ":x: y\n", result
text = "# :x: y\n"
@pp.handle text do |directive, param|
result = @pp.handle_directive '', 'x', 'y' do |directive, param|
''
end
assert_equal "", text
assert_equal '', result
end
def test_handle_registered_block
def test_handle_directive_registered_block
called = nil
RDoc::Markup::PreProcess.register 'x' do |directive, param|
called = [directive, param]
'blah'
end
text = "# :x: y\n"
@pp.handle text
result = @pp.handle_directive '', 'x', 'y'
assert_equal 'blah', text
assert_equal 'blah', result
assert_equal %w[x y], called
end
def test_handle_registered_code_object
def test_handle_directive_registered_code_object
RDoc::Markup::PreProcess.register 'x'
cd = RDoc::CodeObject.new
code_object = RDoc::CodeObject.new
text = "# :x: y\n"
@pp.handle text, cd
@pp.handle_directive '', 'x', 'y', code_object
assert_equal '', text
assert_equal 'y', cd.metadata['x']
assert_equal 'y', code_object.metadata['x']
cd.metadata.clear
text = "# :x: y\n"
code_object.metadata.clear
@pp.handle text do |directive, param|
result = @pp.handle_directive '', 'x', 'y' do |directive, param|
false
end
assert_equal "# :x: y\n", text
assert_empty cd.metadata
assert_equal ":x: y\n", result
assert_empty code_object.metadata
text = "# :x: y\n"
@pp.handle text do |directive, param|
result = @pp.handle_directive '', 'x', 'y' do |directive, param|
''
end
assert_equal "", text
assert_empty cd.metadata
assert_equal '', result
assert_empty code_object.metadata
end
def test_handle_directive_startdoc
code_object = RDoc::CodeObject.new
code_object.stop_doc
code_object.force_documentation = false
@pp.handle_directive '', 'startdoc', nil, code_object
assert code_object.document_self
assert code_object.document_children
assert code_object.force_documentation
end
def test_handle_directive_stopdoc
code_object = RDoc::CodeObject.new
@pp.handle_directive '', 'stopdoc', nil, code_object
refute code_object.document_self
refute code_object.document_children
end
def test_handle_directive_title
@pp.options = RDoc::Options.new
@pp.handle_directive '', 'title', 'T'
assert_equal 'T', @pp.options.title
end
def test_handle_directive_unhandled
code_object = RDoc::CodeObject.new
@pp.handle_directive '', 'x', 'y', code_object
assert_equal 'y', code_object.metadata['x']
code_object.metadata.clear
@pp.handle_directive '', 'x', '', code_object
assert_includes code_object.metadata, 'x'
end
def test_handle_directive_unhandled_block
code_object = RDoc::CodeObject.new
@pp.handle_directive '', 'x', 'y', code_object do
false
end
assert_empty code_object.metadata
@pp.handle_directive '', 'x', 'y', code_object do
nil
end
assert_equal 'y', code_object.metadata['x']
code_object.metadata.clear
@pp.handle_directive '', 'x', 'y', code_object do
''
end
assert_empty code_object.metadata
end
def test_handle_directive_yield
method = RDoc::AnyMethod.new nil, 'm'
method.params = 'index, &block'
@pp.handle_directive '', 'yield', 'item', method
assert_equal 'item', method.block_params
assert_equal 'index', method.params
end
def test_handle_directive_yield_block_param
method = RDoc::AnyMethod.new nil, 'm'
method.params = '&block'
@pp.handle_directive '', 'yield', 'item', method
assert_equal 'item', method.block_params
assert_empty method.params
end
def test_handle_directive_yield_no_context
method = RDoc::AnyMethod.new nil, 'm'
@pp.handle_directive '', 'yield', 'item', method
assert_equal 'item', method.block_params
end
def test_handle_directive_yields
method = RDoc::AnyMethod.new nil, 'm'
@pp.handle_directive '', 'yields', 'item', method
assert_equal 'item', method.block_params
end
end

View file

@ -306,6 +306,14 @@ class TestRDocMarkupToHtml < RDoc::Markup::FormatterTestCase
@to.gen_url('link:example', 'example')
end
def test_handle_special_HYPERLINK_link
special = RDoc::Markup::Special.new 0, 'link:README.txt'
link = @to.handle_special_HYPERLINK special
assert_equal '<a href="README.txt">README.txt</a>', link
end
def test_list_verbatim_2
str = "* one\n verb1\n verb2\n* two\n"

View file

@ -10,159 +10,94 @@ class TestRDocMarkupToHtmlCrossref < XrefTestCase
def setup
super
@xref = RDoc::Markup::ToHtmlCrossref.new 'index.html', @c1, true
@to = RDoc::Markup::ToHtmlCrossref.new 'index.html', @c1, true
end
def assert_ref(path, ref)
assert_equal "\n<p><a href=\"#{path}\">#{ref}</a></p>\n", @xref.convert(ref)
def test_convert_CROSSREF
result = @to.convert 'C1'
assert_equal "\n<p><a href=\"C1.html\">C1</a></p>\n", result
end
def refute_ref(body, ref)
assert_equal "\n<p>#{body}</p>\n", @xref.convert(ref)
def test_convert_HYPERLINK_rdoc_ref
result = @to.convert 'rdoc-ref:C1'
assert_equal "\n<p><a href=\"C1.html\">C1</a></p>\n", result
end
def test_handle_special_CROSSREF_C2
@xref = RDoc::Markup::ToHtmlCrossref.new 'classes/C2.html', @c2, true
def test_gen_url
assert_equal '<a href="C1.html">Some class</a>',
@to.gen_url('rdoc-ref:C1', 'Some class')
refute_ref '#m', '#m'
assert_ref '../C1.html#method-c-m', 'C1::m'
assert_ref '../C2/C3.html', 'C2::C3'
assert_ref '../C2/C3.html#method-i-m', 'C2::C3#m'
assert_ref '../C2/C3/H1.html', 'C3::H1'
assert_ref '../C4.html', 'C4'
assert_ref '../C3/H2.html', 'C3::H2'
refute_ref 'H1', 'H1'
assert_equal '<a href="http://example">HTTP example</a>',
@to.gen_url('http://example', 'HTTP example')
end
def test_handle_special_CROSSREF_C2_C3
@xref = RDoc::Markup::ToHtmlCrossref.new 'classes/C2/C3.html', @c2_c3, true
assert_ref '../../C2/C3.html#method-i-m', '#m'
assert_ref '../../C2/C3.html', 'C3'
assert_ref '../../C2/C3.html#method-i-m', 'C3#m'
assert_ref '../../C2/C3/H1.html', 'H1'
assert_ref '../../C2/C3/H1.html', 'C3::H1'
assert_ref '../../C4.html', 'C4'
assert_ref '../../C3/H2.html', 'C3::H2'
end
def test_handle_special_CROSSREF_C3
@xref = RDoc::Markup::ToHtmlCrossref.new 'classes/C3.html', @c3, true
assert_ref '../C3.html', 'C3'
refute_ref '#m', '#m'
refute_ref 'C3#m', 'C3#m'
assert_ref '../C3/H1.html', 'H1'
assert_ref '../C3/H1.html', 'C3::H1'
assert_ref '../C3/H2.html', 'C3::H2'
assert_ref '../C4.html', 'C4'
end
def test_handle_special_CROSSREF_C4
@xref = RDoc::Markup::ToHtmlCrossref.new 'classes/C4.html', @c4, true
# C4 ref inside a C4 containing a C4 should resolve to the contained class
assert_ref '../C4/C4.html', 'C4'
end
def test_handle_special_CROSSREF_C4_C4
@xref = RDoc::Markup::ToHtmlCrossref.new 'classes/C4/C4.html', @c4_c4, true
# A C4 reference inside a C4 class contained within a C4 class should
# resolve to the inner C4 class.
assert_ref '../../C4/C4.html', 'C4'
end
def test_handle_special_CROSSREF_class
assert_ref 'C1.html', 'C1'
refute_ref 'H1', 'H1'
assert_ref 'C2.html', 'C2'
assert_ref 'C2/C3.html', 'C2::C3'
assert_ref 'C2/C3/H1.html', 'C2::C3::H1'
assert_ref 'C3.html', '::C3'
assert_ref 'C3/H1.html', '::C3::H1'
assert_ref 'C4/C4.html', 'C4::C4'
end
def test_handle_special_CROSSREF_file
assert_ref 'xref_data_rb.html', 'xref_data.rb'
end
def test_handle_special_CROSSREF_method
refute_ref 'm', 'm'
assert_ref 'C1.html#method-i-m', '#m'
assert_ref 'C1.html#method-c-m', '::m'
assert_ref 'C1.html#method-i-m', 'C1#m'
assert_ref 'C1.html#method-c-m', 'C1.m'
assert_ref 'C1.html#method-c-m', 'C1::m'
assert_ref 'C1.html#method-i-m', 'C1#m'
assert_ref 'C1.html#method-i-m', 'C1#m()'
assert_ref 'C1.html#method-i-m', 'C1#m(*)'
assert_ref 'C1.html#method-c-m', 'C1.m'
assert_ref 'C1.html#method-c-m', 'C1.m()'
assert_ref 'C1.html#method-c-m', 'C1.m(*)'
assert_ref 'C1.html#method-c-m', 'C1::m'
assert_ref 'C1.html#method-c-m', 'C1::m()'
assert_ref 'C1.html#method-c-m', 'C1::m(*)'
assert_ref 'C2/C3.html#method-i-m', 'C2::C3#m'
assert_ref 'C2/C3.html#method-i-m', 'C2::C3.m'
# TODO stop escaping - HTML5 allows anything but space
assert_ref 'C2/C3/H1.html#method-i-m-3F', 'C2::C3::H1#m?'
assert_ref 'C2/C3.html#method-i-m', '::C2::C3#m'
assert_ref 'C2/C3.html#method-i-m', '::C2::C3#m()'
assert_ref 'C2/C3.html#method-i-m', '::C2::C3#m(*)'
end
def test_handle_special_CROSSREF_no_ref
assert_equal '', @xref.convert('')
refute_ref 'bogus', 'bogus'
refute_ref 'bogus', '\bogus'
refute_ref '\bogus', '\\\bogus'
refute_ref '#n', '\#n'
refute_ref '#n()', '\#n()'
refute_ref '#n(*)', '\#n(*)'
refute_ref 'C1', '\C1'
refute_ref '::C3', '\::C3'
refute_ref '::C3::H1#n', '::C3::H1#n'
refute_ref '::C3::H1#n(*)', '::C3::H1#n(*)'
refute_ref '::C3::H1#n', '\::C3::H1#n'
def test_handle_special_CROSSREF
assert_equal "<a href=\"C2/C3.html\">C2::C3</a>", SPECIAL('C2::C3')
end
def test_handle_special_CROSSREF_show_hash_false
@xref.show_hash = false
@to.show_hash = false
assert_equal "\n<p><a href=\"C1.html#method-i-m\">m</a></p>\n",
@xref.convert('#m')
assert_equal "<a href=\"C1.html#method-i-m\">m</a>",
SPECIAL('#m')
end
def test_handle_special_CROSSREF_special
assert_equal "\n<p><a href=\"C2/C3.html\">C2::C3</a>;method(*)</p>\n",
@xref.convert('C2::C3;method(*)')
def test_handle_special_HYPERLINK_rdoc
RDoc::TopLevel.new 'README.txt'
@to = RDoc::Markup::ToHtmlCrossref.new 'C2.html', @c2, true
link = @to.handle_special_HYPERLINK hyper 'C2::C3'
assert_equal '<a href="C2/C3.html">C2::C3</a>', link
link = @to.handle_special_HYPERLINK hyper 'C4'
assert_equal '<a href="C4.html">C4</a>', link
link = @to.handle_special_HYPERLINK hyper 'README.txt'
assert_equal '<a href="README_txt.html">README.txt</a>', link
end
def test_handle_special_TIDYLINK_rdoc
RDoc::TopLevel.new 'README.txt'
@to = RDoc::Markup::ToHtmlCrossref.new 'C2.html', @c2, true
link = @to.handle_special_TIDYLINK tidy 'C2::C3'
assert_equal '<a href="C2/C3.html">tidy</a>', link
link = @to.handle_special_TIDYLINK tidy 'C4'
assert_equal '<a href="C4.html">tidy</a>', link
link = @to.handle_special_TIDYLINK tidy 'README.txt'
assert_equal '<a href="README_txt.html">tidy</a>', link
end
def test_link
assert_equal 'n', @to.link('n', 'n')
assert_equal '<a href="C1.html#method-c-m">m</a>', @to.link('m', 'm')
end
def SPECIAL text
@to.handle_special_CROSSREF special text
end
def hyper reference
RDoc::Markup::Special.new 0, "rdoc-ref:#{reference}"
end
def special text
RDoc::Markup::Special.new 0, text
end
def tidy reference
RDoc::Markup::Special.new 0, "{tidy}[rdoc-ref:#{reference}]"
end
end

View file

@ -313,22 +313,6 @@ class C; end
comment
end
def test_look_for_directives_in_enddoc
util_parser ""
@parser.look_for_directives_in @top_level, "# :enddoc:\n"
assert @top_level.done_documenting
end
def test_look_for_directives_in_main
util_parser ""
@parser.look_for_directives_in @top_level, "# :main: new main page\n"
assert_equal 'new main page', @options.main_page
end
def test_look_for_directives_in_method
util_parser ""
@ -345,31 +329,6 @@ class C; end
assert_equal "# :singleton-method: my_method\n", comment
end
def test_look_for_directives_in_startdoc
util_parser ""
@top_level.stop_doc
assert !@top_level.document_self
assert !@top_level.document_children
@parser.look_for_directives_in @top_level, "# :startdoc:\n"
assert @top_level.document_self
assert @top_level.document_children
end
def test_look_for_directives_in_stopdoc
util_parser ""
assert @top_level.document_self
assert @top_level.document_children
@parser.look_for_directives_in @top_level, "# :stopdoc:\n"
assert !@top_level.document_self
assert !@top_level.document_children
end
def test_look_for_directives_in_section
util_parser ""
@ -384,14 +343,6 @@ class C; end
assert_equal '', comment
end
def test_look_for_directives_in_title
util_parser ""
@parser.look_for_directives_in @top_level, "# :title: new title\n"
assert_equal 'new title', @options.title
end
def test_look_for_directives_in_unhandled
util_parser ""
@ -797,12 +748,7 @@ end
@parser.parse_class @top_level, RDoc::Parser::Ruby::NORMAL, tk, comment
foo = @top_level.classes.first
assert_equal 'Foo', foo.full_name
assert_equal 'my class', foo.comment
assert_equal [@top_level], foo.in_files
assert_equal 0, foo.offset
assert_equal 1, foo.line
assert_empty @top_level.classes.first.comment
end
def test_parse_multi_ghost_methods
@ -2227,6 +2173,45 @@ end
assert_empty @top_level.comment
end
def test_parse_top_level_statements_stopdoc_integration
content = <<-CONTENT
# :stopdoc:
class Example
def method_name
end
end
CONTENT
util_parser content
@parser.parse_top_level_statements @top_level
assert_equal 1, @top_level.classes.length
assert_empty @top_level.modules
assert @top_level.find_module_named('Example').ignored?
end
# This tests parse_comment
def test_parse_top_level_statements_constant_nodoc_integration
content = <<-CONTENT
class A
C = A # :nodoc:
end
CONTENT
util_parser content
@parser.parse_top_level_statements @top_level
klass = @top_level.find_module_named('A')
c = klass.constants.first
assert_nil c.document_self, 'C should not be documented'
end
def test_parse_yield_in_braces_with_parens
klass = RDoc::NormalClass.new 'Foo'
klass.parent = @top_level

View file

@ -5,6 +5,7 @@ require 'tmpdir'
require 'fileutils'
require 'stringio'
require 'rdoc/ri/driver'
require 'rdoc/rdoc'
class TestRDocRIDriver < MiniTest::Unit::TestCase
@ -223,7 +224,7 @@ class TestRDocRIDriver < MiniTest::Unit::TestCase
def test_add_method_list_none
out = @RM::Document.new
@driver.add_method_list out, nil, 'Class'
@driver.add_method_list out, [], 'Class'
assert_equal @RM::Document.new, out
end
@ -249,6 +250,46 @@ class TestRDocRIDriver < MiniTest::Unit::TestCase
assert_equal expected, @driver.classes
end
def test_class_document
util_store
tl1 = RDoc::TopLevel.new 'one.rb'
tl2 = RDoc::TopLevel.new 'two.rb'
@cFoo.add_comment 'one', tl1
@cFoo.add_comment 'two', tl2
@store.save_class @cFoo
found = [
[@store, @store.load_class(@cFoo.full_name)]
]
out = @driver.class_document @cFoo.full_name, found, [], []
expected = @RM::Document.new
@driver.add_class expected, 'Foo', []
@driver.add_includes expected, []
@driver.add_from expected, @store
expected << @RM::Rule.new(1)
doc = @RM::Document.new(@RM::Paragraph.new('one'))
doc.file = 'one.rb'
expected.push doc
expected << @RM::BlankLine.new
doc = @RM::Document.new(@RM::Paragraph.new('two'))
doc.file = 'two.rb'
expected.push doc
expected << @RM::Rule.new(1)
expected << @RM::Heading.new(1, 'Instance methods:')
expected << @RM::BlankLine.new
expected << @RM::Verbatim.new('inherit')
expected << @RM::Verbatim.new('override')
expected << @RM::BlankLine.new
assert_equal expected, out
end
def test_complete
store = RDoc::RI::Store.new @home_ri
store.cache[:ancestors] = {
@ -633,8 +674,24 @@ Foo::Bar#bother
def test_list_methods_matching
util_store
assert_equal %w[Foo::Bar#attr Foo::Bar#blah Foo::Bar#bother Foo::Bar::new],
@driver.list_methods_matching('Foo::Bar.')
assert_equal %w[
Foo::Bar#attr
Foo::Bar#blah
Foo::Bar#bother
Foo::Bar::new
],
@driver.list_methods_matching('Foo::Bar.').sort
end
def test_list_methods_matching_inherit
util_multi_store
assert_equal %w[
Bar#baz
Bar#inherit
Bar#override
],
@driver.list_methods_matching('Bar.').sort
end
def test_list_methods_matching_regexp
@ -805,6 +862,42 @@ Foo::Bar#bother
assert_equal 'baz', meth, 'Foo::Bar#baz method'
end
def test_parse_name_special
specials = %w[
%
&
*
+
+@
-
-@
/
<
<<
<=
<=>
==
===
=>
=~
>
>>
[]
[]=
^
`
|
~
~@
]
specials.each do |special|
parsed = @driver.parse_name special
assert_equal ['', '.', special], parsed
end
end
def _test_setup_pager # this test doesn't do anything anymore :(
@driver.use_stdout = false
@ -864,29 +957,28 @@ Foo::Bar#bother
def util_multi_store
util_store
@store1 = @store
@top_level = RDoc::TopLevel.new 'file.rb'
@home_ri2 = "#{@home_ri}2"
@store2 = RDoc::RI::Store.new @home_ri2
# as if seen in a namespace like class Ambiguous::Other
@mAmbiguous = RDoc::NormalModule.new 'Ambiguous'
@mAmbiguous = @top_level.add_module RDoc::NormalModule, 'Ambiguous'
@cFoo = RDoc::NormalClass.new 'Foo'
@cFoo = @top_level.add_class RDoc::NormalClass, 'Foo'
@cBar = RDoc::NormalClass.new 'Bar'
@cBar.superclass = 'Foo'
@cFoo_Baz = RDoc::NormalClass.new 'Baz'
@cFoo_Baz.parent = @cFoo
@cBar = @top_level.add_class RDoc::NormalClass, 'Bar', 'Foo'
@cFoo_Baz = @cFoo.add_class RDoc::NormalClass, 'Baz'
@baz = RDoc::AnyMethod.new nil, 'baz'
@baz = @cBar.add_method RDoc::AnyMethod.new(nil, 'baz')
@baz.record_location @top_level
@cBar.add_method @baz
@override = RDoc::AnyMethod.new nil, 'override'
@override = @cBar.add_method RDoc::AnyMethod.new(nil, 'override')
@override.comment = 'must be displayed'
@override.record_location @top_level
@cBar.add_method @override
@store2.save_class @mAmbiguous
@store2.save_class @cBar
@ -898,6 +990,8 @@ Foo::Bar#bother
@store2.save_cache
@driver.stores = [@store1, @store2]
RDoc::RDoc.reset
end
def util_store
@ -905,53 +999,42 @@ Foo::Bar#bother
@top_level = RDoc::TopLevel.new 'file.rb'
@cFoo = RDoc::NormalClass.new 'Foo'
@mInc = RDoc::NormalModule.new 'Inc'
@cAmbiguous = RDoc::NormalClass.new 'Ambiguous'
@cFoo = @top_level.add_class RDoc::NormalClass, 'Foo'
@mInc = @top_level.add_module RDoc::NormalModule, 'Inc'
@cAmbiguous = @top_level.add_class RDoc::NormalClass, 'Ambiguous'
doc = @RM::Document.new @RM::Paragraph.new('Include thingy')
@cFooInc = RDoc::Include.new 'Inc', doc
@cFooInc = @cFoo.add_include RDoc::Include.new('Inc', doc)
@cFooInc.record_location @top_level
@cFoo.add_include @cFooInc
@cFoo_Bar = RDoc::NormalClass.new 'Bar'
@cFoo_Bar.parent = @cFoo
@cFoo_Bar = @cFoo.add_class RDoc::NormalClass, 'Bar'
@blah = RDoc::AnyMethod.new nil, 'blah'
@blah = @cFoo_Bar.add_method RDoc::AnyMethod.new(nil, 'blah')
@blah.call_seq = "blah(5) => 5\nblah(6) => 6\n"
@blah.record_location @top_level
@bother = RDoc::AnyMethod.new nil, 'bother'
@bother = @cFoo_Bar.add_method RDoc::AnyMethod.new(nil, 'bother')
@bother.block_params = "stuff"
@bother.params = "(things)"
@bother.record_location @top_level
@new = RDoc::AnyMethod.new nil, 'new'
@new = @cFoo_Bar.add_method RDoc::AnyMethod.new nil, 'new'
@new.record_location @top_level
@new.singleton = true
@cFoo_Bar.add_method @blah
@cFoo_Bar.add_method @bother
@cFoo_Bar.add_method @new
@attr = RDoc::Attr.new nil, 'attr', 'RW', ''
@attr = @cFoo_Bar.add_attribute RDoc::Attr.new nil, 'attr', 'RW', ''
@attr.record_location @top_level
@cFoo_Bar.add_attribute @attr
@cFoo_Baz = @cFoo.add_class RDoc::NormalClass, 'Baz'
@cFoo_Baz.record_location @top_level
@cFoo_Baz = RDoc::NormalClass.new 'Baz'
@cFoo_Baz.parent = @cFoo
@inherit = RDoc::AnyMethod.new nil, 'inherit'
@inherit = @cFoo.add_method RDoc::AnyMethod.new(nil, 'inherit')
@inherit.record_location @top_level
@cFoo.add_method @inherit
# overriden by Bar in multi_store
@overriden = RDoc::AnyMethod.new nil, 'override'
@overriden = @cFoo.add_method RDoc::AnyMethod.new(nil, 'override')
@overriden.comment = 'must not be displayed'
@overriden.record_location @top_level
@cFoo.add_method @overriden
@store.save_class @cFoo
@store.save_class @cFoo_Bar
@ -970,6 +1053,8 @@ Foo::Bar#bother
@store.save_cache
@driver.stores = [@store]
RDoc::RDoc.reset
end
end

View file

@ -43,6 +43,11 @@ class XrefTestCase < MiniTest::Unit::TestCase
@c2_b = @c2.method_list.first
@c2_c3 = @xref_data.find_module_named 'C2::C3'
@c2_c3_m = @c2_c3.method_list.first # C2::C3#m
@c2_c3_h1 = @xref_data.find_module_named 'C2::C3::H1'
@c2_c3_h1_meh = @c2_c3_h1.method_list.first # C2::C3::H1#m?
@c3 = @xref_data.find_module_named 'C3'
@c4 = @xref_data.find_module_named 'C4'
@c4_c4 = @xref_data.find_module_named 'C4::C4'