require 'rdoc/test_case'
class TestRDocRdBlockParser < RDoc::TestCase
def setup
super
@block_parser = RDoc::RD::BlockParser.new
end
def mu_pp(obj)
s = ""
s = PP.pp obj, s
s = s.force_encoding(Encoding.default_external) if defined? Encoding
s.chomp
end
def test_parse_desclist
list = <<-LIST
:one
desc one
:two
desc two
LIST
expected =
doc(
@RM::List.new(:NOTE,
@RM::ListItem.new("one", @RM::Paragraph.new("desc one")),
@RM::ListItem.new("two", @RM::Paragraph.new("desc two"))))
assert_equal expected, parse(list)
end
def test_parse_enumlist
list = <<-LIST
(1) one
(1) two
LIST
expected =
doc(
@RM::List.new(:NUMBER,
@RM::ListItem.new(nil, @RM::Paragraph.new("one")),
@RM::ListItem.new(nil, @RM::Paragraph.new("two"))))
assert_equal expected, parse(list)
end
def test_parse_enumlist_paragraphs
list = <<-LIST
(1) one
two
LIST
expected =
doc(
@RM::List.new(:NUMBER,
@RM::ListItem.new(nil,
@RM::Paragraph.new("one"),
@RM::Paragraph.new("two"))))
assert_equal expected, parse(list)
end
def test_parse_enumlist_multiline
list = <<-LIST
(1) one
two
LIST
contents = "one\n two" # 1.8 vs 1.9
expected =
doc(
@RM::List.new(:NUMBER,
@RM::ListItem.new(nil, @RM::Paragraph.new(*contents))))
assert_equal expected, parse(list)
end
def test_parse_enumlist_verbatim
list = <<-LIST
(1) item
verbatim
LIST
expected =
doc(
@RM::List.new(:NUMBER,
@RM::ListItem.new(nil,
@RM::Paragraph.new("item"),
@RM::Verbatim.new("verbatim\n"))))
assert_equal expected, parse(list)
end
def test_parse_enumlist_verbatim_continue
list = <<-LIST
(1) one
verbatim
two
LIST
expected =
doc(
@RM::List.new(:NUMBER,
@RM::ListItem.new(nil,
@RM::Paragraph.new("one"),
@RM::Verbatim.new("verbatim\n"),
@RM::Paragraph.new("two"))))
assert_equal expected, parse(list)
end
def test_parse_footnote
expected =
doc(
@RM::Paragraph.new("{*1}[rdoc-label:foottext-1:footmark-1]"),
@RM::Rule.new(1),
@RM::Paragraph.new("{^1}[rdoc-label:footmark-1:foottext-1]", "text"))
assert_equal expected, parse("((-text-))")
end
def test_parse_include
@block_parser.include_path = [Dir.tmpdir]
expected = doc(@RM::Include.new("parse_include", [Dir.tmpdir]))
assert_equal expected, parse("<<< parse_include")
end
def test_parse_include_subtree
@block_parser.include_path = [Dir.tmpdir]
expected =
doc(
@RM::BlankLine.new,
@RM::Paragraph.new("include worked"),
@RM::BlankLine.new,
@RM::BlankLine.new)
Tempfile.open %w[parse_include .rd] do |io|
io.puts "=begin\ninclude ((*worked*))\n=end"
io.flush
str = <<-STR
<<< #{File.basename io.path}
STR
assert_equal expected, parse(str)
end
end
def test_parse_heading
assert_equal doc(@RM::Heading.new(1, "H")), parse("= H")
assert_equal doc(@RM::Heading.new(2, "H")), parse("== H")
assert_equal doc(@RM::Heading.new(3, "H")), parse("=== H")
assert_equal doc(@RM::Heading.new(4, "H")), parse("==== H")
assert_equal doc(@RM::Heading.new(5, "H")), parse("+ H")
assert_equal doc(@RM::Heading.new(6, "H")), parse("++ H")
end
def test_parse_itemlist
list = <<-LIST
* one
* two
LIST
expected =
doc(
@RM::List.new(:BULLET,
@RM::ListItem.new(nil, @RM::Paragraph.new("one")),
@RM::ListItem.new(nil, @RM::Paragraph.new("two"))))
assert_equal expected, parse(list)
end
def test_parse_itemlist_multiline
list = <<-LIST
* one
two
LIST
contents = "one\n two" # 1.8 vs 1.9
expected =
doc(
@RM::List.new(:BULLET,
@RM::ListItem.new(nil, @RM::Paragraph.new(*contents))))
assert_equal expected, parse(list)
end
def test_parse_itemlist_nest
list = <<-LIST
* one
* inner
* two
LIST
expected =
doc(
@RM::List.new(:BULLET,
@RM::ListItem.new(nil,
@RM::Paragraph.new("one"),
@RM::List.new(:BULLET,
@RM::ListItem.new(nil, @RM::Paragraph.new("inner")))),
@RM::ListItem.new(nil,
@RM::Paragraph.new("two"))))
assert_equal expected, parse(list)
end
def test_parse_itemlist_paragraphs
list = <<-LIST
* one
two
LIST
expected =
doc(
@RM::List.new(:BULLET,
@RM::ListItem.new(nil,
@RM::Paragraph.new("one"),
@RM::Paragraph.new("two"))))
assert_equal expected, parse(list)
end
def test_parse_itemlist_verbatim
list = <<-LIST
* item
verbatim
LIST
expected =
doc(
@RM::List.new(:BULLET,
@RM::ListItem.new(nil,
@RM::Paragraph.new("item"),
@RM::Verbatim.new("verbatim\n"))))
assert_equal expected, parse(list)
end
def test_parse_itemlist_verbatim_continue
list = <<-LIST
* one
verbatim
two
LIST
expected =
doc(
@RM::List.new(:BULLET,
@RM::ListItem.new(nil,
@RM::Paragraph.new("one"),
@RM::Verbatim.new("verbatim\n"),
@RM::Paragraph.new("two"))))
assert_equal expected, parse(list)
end
def test_parse_lists
list = <<-LIST
(1) one
(1) two
* three
* four
(1) five
(1) six
LIST
expected =
doc(
@RM::List.new(:NUMBER,
@RM::ListItem.new(nil, @RM::Paragraph.new("one")),
@RM::ListItem.new(nil, @RM::Paragraph.new("two"))),
@RM::List.new(:BULLET,
@RM::ListItem.new(nil, @RM::Paragraph.new("three")),
@RM::ListItem.new(nil, @RM::Paragraph.new("four"))),
@RM::List.new(:NUMBER,
@RM::ListItem.new(nil, @RM::Paragraph.new("five")),
@RM::ListItem.new(nil, @RM::Paragraph.new("six"))))
assert_equal expected, parse(list)
end
def test_parse_lists_nest
list = <<-LIST
(1) one
(1) two
* three
* four
(1) five
(1) six
LIST
expected =
doc(
@RM::List.new(:NUMBER,
@RM::ListItem.new(nil, @RM::Paragraph.new("one")),
@RM::ListItem.new(nil,
@RM::Paragraph.new("two"),
@RM::List.new(:BULLET,
@RM::ListItem.new(nil, @RM::Paragraph.new("three")),
@RM::ListItem.new(nil, @RM::Paragraph.new("four")))),
@RM::ListItem.new(nil, @RM::Paragraph.new("five")),
@RM::ListItem.new(nil, @RM::Paragraph.new("six"))))
assert_equal expected, parse(list)
end
def test_parse_lists_nest_verbatim
list = <<-LIST
(1) one
(1) two
* three
* four
verbatim
(1) five
(1) six
LIST
expected =
doc(
@RM::List.new(:NUMBER,
@RM::ListItem.new(nil, @RM::Paragraph.new("one")),
@RM::ListItem.new(nil,
@RM::Paragraph.new("two"),
@RM::List.new(:BULLET,
@RM::ListItem.new(nil, @RM::Paragraph.new("three")),
@RM::ListItem.new(nil, @RM::Paragraph.new("four"))),
@RM::Verbatim.new("verbatim\n")),
@RM::ListItem.new(nil, @RM::Paragraph.new("five")),
@RM::ListItem.new(nil, @RM::Paragraph.new("six"))))
assert_equal expected, parse(list)
end
def test_parse_lists_nest_verbatim2
list = <<-LIST
(1) one
(1) two
* three
* four
verbatim
(1) five
(1) six
LIST
expected =
doc(
@RM::List.new(:NUMBER,
@RM::ListItem.new(nil, @RM::Paragraph.new("one")),
@RM::ListItem.new(nil,
@RM::Paragraph.new("two"),
@RM::List.new(:BULLET,
@RM::ListItem.new(nil, @RM::Paragraph.new("three")),
@RM::ListItem.new(nil, @RM::Paragraph.new("four"))),
@RM::Verbatim.new("verbatim\n")),
@RM::ListItem.new(nil, @RM::Paragraph.new("five")),
@RM::ListItem.new(nil, @RM::Paragraph.new("six"))))
assert_equal expected, parse(list)
end
def test_parse_methodlist
list = <<-LIST
--- Array#each {|i| ... }
yield block for each item.
--- Array#index(val)
return index of first item which equals with val. if it hasn't
same item, return nil.
LIST
expected =
doc(
@RM::List.new(:LABEL,
@RM::ListItem.new(
"Array#each {|i| ... }",
@RM::Paragraph.new("yield block for each item.")),
@RM::ListItem.new(
"Array#index(val)",
@RM::Paragraph.new("return index of first item which equals with val. if it hasn't same item, return nil."))))
assert_equal expected, parse(list)
end
def test_parse_methodlist_empty
list = <<-LIST
--- A#b
LIST
expected =
doc(
@RM::List.new(:LABEL,
@RM::ListItem.new("A#b")))
assert_equal expected, parse(list)
end
def test_parse_methodlist_paragraph
list = <<-LIST
--- A#b
one
LIST
expected =
doc(
@RM::List.new(:LABEL,
@RM::ListItem.new(
"A#b",
@RM::Paragraph.new("one"))))
assert_equal expected, parse(list)
end
def test_parse_methodlist_paragraph2
list = <<-LIST.chomp
--- A#b
one
two
LIST
expected =
doc(
@RM::List.new(:LABEL,
@RM::ListItem.new(
"A#b",
@RM::Paragraph.new("one"))),
@RM::Paragraph.new("two"))
assert_equal expected, parse(list)
end
def test_parse_methodlist_paragraph_verbatim
list = <<-LIST.chomp
--- A#b
text
verbatim
LIST
expected =
doc(
@RM::List.new(:LABEL,
@RM::ListItem.new(
"A#b",
@RM::Paragraph.new("text"),
@RM::Verbatim.new("verbatim\n"))))
assert_equal expected, parse(list)
end
def test_parse_verbatim
assert_equal doc(@RM::Verbatim.new("verbatim\n")), parse(" verbatim")
end
def test_parse_verbatim_blankline
expected = doc(@RM::Verbatim.new("one\n", "\n", "two\n"))
verbatim = <<-VERBATIM
one
two
VERBATIM
assert_equal expected, parse(verbatim)
end
def test_parse_verbatim_indent
expected = doc(@RM::Verbatim.new("one\n", " two\n"))
verbatim = <<-VERBATIM
one
two
VERBATIM
assert_equal expected, parse(verbatim)
end
def test_parse_verbatim_multi
expected = doc(@RM::Verbatim.new("one\n", "two\n"))
verbatim = <<-VERBATIM
one
two
VERBATIM
assert_equal expected, parse(verbatim)
end
def test_parse_textblock
assert_equal doc(@RM::Paragraph.new("text")), parse("text")
end
def test_parse_textblock_multi
expected = doc(@RM::Paragraph.new("one two"))
assert_equal expected, parse("one\ntwo")
end
def parse text
text = ["=begin", text, "=end"].join "\n"
doc = @block_parser.parse text.lines.to_a
assert_equal @RM::BlankLine.new, doc.parts.shift, "=begin blankline"
assert_equal @RM::BlankLine.new, doc.parts.pop, "=end blankline"
doc
end
end