require 'test/unit' require 'rd/rd2html-lib' require 'rd/tree' require 'rd/element' require 'rd/block-element' require 'rd/list' require 'rd/desclist' require 'rd/methodlist' require 'rd/inline-element' require 'rd/rd-struct' include RD class TestRD2HTMLVisitor < Test::Unit::TestCase def setup @vis = RD2HTMLVisitor.new @vis.class.module_eval { public :xml_decl public :forward_links, :backward_links public :document_title public :html_content_type public :html_title public :html_open_tag public :link_to_css public :prepare_footnotes public :make_foottext } @ch1 = ["a"] @ch2 = ["a", "b"] @ch3 = ["a\n"] @ch0 = [] @tr_fn = Tree.new_with_document_struct(DocumentStructure::RD) @tr_fn.root = DocumentElement.new fn1, fn2 = nil @tr_fn.root.build do new TextBlock do fn1 = new Footnote do new StringElement, "footnote 1" end fn2 = new Footnote do new StringElement, "footnote 2" end end end @fn1_fn = fn1 @fn2_fn = fn2 @tr2_fn = Tree.new_with_document_struct(DocumentStructure::RD) @tr2_fn.root = DocumentElement.new @tr2_fn.root.build do new Headline, 1 new TextBlock do new StringElement, "string" end end end def test_xml_decl vis_with_charset = RD2HTMLVisitor.new vis_with_charset.charset = "CharSet" assert_equal(%||, vis_with_charset.xml_decl) vis_no_charset = RD2HTMLVisitor.new assert_equal(%||, vis_no_charset.xml_decl) end def test_html_open_tag vis_with_lang = RD2HTMLVisitor.new vis_with_lang.lang = "Language" assert_equal(%||, vis_with_lang.html_open_tag) vis_no_lang = RD2HTMLVisitor.new assert_equal(%||, vis_no_lang.html_open_tag) end def test_html_title vis_with_title = RD2HTMLVisitor.new vis_with_title.title = "Title" assert_equal("Title", vis_with_title.html_title) vis_no_title = RD2HTMLVisitor.new assert_equal("Untitled", vis_no_title.html_title) end def test_html_content_type vis_with_charset = RD2HTMLVisitor.new vis_with_charset.charset = "CharSet" assert_equal(%|", vis_with_charset.html_content_type) vis_no_charset = RD2HTMLVisitor.new assert_equal(nil, vis_no_charset.html_content_type) end def test_link_to_css vis_with_css = RD2HTMLVisitor.new vis_with_css.css = "CSS.css" assert_equal(%|", vis_with_css.link_to_css) vis_no_css = RD2HTMLVisitor.new assert_equal(nil, vis_no_css.link_to_css) end def test_forward_links vis_rel1 = RD2HTMLVisitor.new vis_rel1.html_link_rel["rel1"] = "REL1" assert_equal('', vis_rel1.forward_links) vis_rel2 = vis_rel1 vis_rel2.html_link_rel["rel2"] = "REL2" assert_equal('' + "\n" + '', vis_rel2.forward_links) vis_no_rel = RD2HTMLVisitor.new assert_equal(nil, vis_no_rel.forward_links) end def test_backward_links vis_rev1 = RD2HTMLVisitor.new vis_rev1.html_link_rev["rev1"] = "REV1" assert_equal('', vis_rev1.backward_links) vis_rev2 = vis_rev1 vis_rev2.html_link_rev["rev2"] = "REV2" assert_equal('' + "\n" + '', vis_rev2.backward_links) vis_no_rev = RD2HTMLVisitor.new assert_equal(nil, vis_no_rev.backward_links) end def test_document_title vis_titled = RD2HTMLVisitor.new vis_titled.title = "Title" assert_equal("Title", vis_titled.document_title) vis_with_filename = RD2HTMLVisitor.new vis_with_filename.filename = "FileName" assert_equal("FileName", vis_with_filename.document_title) vis_untitled = RD2HTMLVisitor.new assert_equal("Untitled", vis_untitled.document_title) end def test_apply_to_Headline tr = Tree.new_with_document_struct(DocumentStructure::RD) tr.root = DocumentElement.new hl1, hl2 = nil tr.root.build do hl1 = new Headline, 1 do new StringElement, "headline 1" end hl2 = new Headline, 2 do new StringElement, "headline 2" end end @vis.prepare_labels(tr, "label:") assert_equal(expect_for_hl1(@ch1), @vis.apply_to_Headline(hl1, @ch1)) assert_equal(expect_for_hl1(@ch2), @vis.apply_to_Headline(hl1, @ch2)) assert_equal(expect_for_hl1(@ch0), @vis.apply_to_Headline(hl1, @ch0)) assert_equal(expect_for_hl2(@ch1), @vis.apply_to_Headline(hl2, @ch1)) assert_equal(expect_for_hl2(@ch2), @vis.apply_to_Headline(hl2, @ch2)) assert_equal(expect_for_hl2(@ch0), @vis.apply_to_Headline(hl2, @ch0)) end def expect_for_hl1(children) %|

#{children.join('')}

| end def expect_for_hl2(children) %|

#{children.join('')}

| end def test_apply_to_TextBlock tb = TextBlock.new assert_equal("

a

", @vis.apply_to_TextBlock(tb, @ch1)) assert_equal("

ab

", @vis.apply_to_TextBlock(tb, @ch2)) assert_equal("

a

", @vis.apply_to_TextBlock(tb, @ch3)) assert_equal("

", @vis.apply_to_TextBlock(tb, @ch0)) tb_in_list = TextBlock.new li = ItemListItem.new li.add_child_under_document_struct(tb_in_list, DocumentStructure::RD) assert_equal("a", @vis.apply_to_TextBlock(tb_in_list, @ch1)) assert_equal("ab", @vis.apply_to_TextBlock(tb_in_list, @ch2)) assert_equal("a", @vis.apply_to_TextBlock(tb_in_list, @ch3)) assert_equal("", @vis.apply_to_TextBlock(tb_in_list, @ch0)) tb1_in_list2 = TextBlock.new tb2_in_list2 = TextBlock.new li2 = ItemListItem.new li2.add_children_under_document_struct([tb1_in_list2, tb2_in_list2], DocumentStructure::RD) assert_equal("

a

", @vis.apply_to_TextBlock(tb1_in_list2, @ch1)) assert_equal("

ab

", @vis.apply_to_TextBlock(tb1_in_list2, @ch2)) assert_equal("

a

", @vis.apply_to_TextBlock(tb1_in_list2, @ch3)) assert_equal("

", @vis.apply_to_TextBlock(tb1_in_list2, @ch0)) end def test_apply_to_Verbatim verb1 = Verbatim.new "aaa" assert_equal("
aaa
", @vis.apply_to_Verbatim(verb1)) verb2 = Verbatim.new "aaa\n" assert_equal("
aaa
", @vis.apply_to_Verbatim(verb2)) verb3 = Verbatim.new "aaa\nbbb" assert_equal("
aaa\nbbb
", @vis.apply_to_Verbatim(verb3)) verb_empty = Verbatim.new "" assert_equal("
", @vis.apply_to_Verbatim(verb_empty))
    verb_amp = Verbatim.new "&"
    assert_equal("
&
", @vis.apply_to_Verbatim(verb_amp)) verb_lt = Verbatim.new "<" assert_equal("
<
", @vis.apply_to_Verbatim(verb_lt)) verb_gt = Verbatim.new ">" assert_equal("
>
", @vis.apply_to_Verbatim(verb_gt)) verb3 = Verbatim.new ["aaa\n", "bbb"] assert_equal("
aaa\nbbb
", @vis.apply_to_Verbatim(verb3)) end def test_apply_to_ItemList list = ItemList.new assert_equal("", @vis.apply_to_ItemList(list, @ch1)) assert_equal("", @vis.apply_to_ItemList(list, @ch2)) assert_equal("", @vis.apply_to_ItemList(list, @ch3)) assert_equal("", @vis.apply_to_ItemList(list, @ch0)) end def test_apply_to_EnumList list = EnumList.new assert_equal("
    \na\n
", @vis.apply_to_EnumList(list, @ch1)) assert_equal("
    \na\nb\n
", @vis.apply_to_EnumList(list, @ch2)) assert_equal("
    \na\n
", @vis.apply_to_EnumList(list, @ch3)) assert_equal("
    \n\n
", @vis.apply_to_EnumList(list, @ch0)) end def test_apply_to_DescList list = DescList.new assert_equal("
\na\n
", @vis.apply_to_DescList(list, @ch1)) assert_equal("
\na\nb\n
", @vis.apply_to_DescList(list, @ch2)) assert_equal("
\na\n
", @vis.apply_to_DescList(list, @ch3)) assert_equal("
\n\n
", @vis.apply_to_DescList(list, @ch0)) end def test_apply_to_MethodList list = MethodList.new assert_equal("
\na\n
", @vis.apply_to_MethodList(list, @ch1)) assert_equal("
\na\nb\n
", @vis.apply_to_MethodList(list, @ch2)) assert_equal("
\na\n
", @vis.apply_to_MethodList(list, @ch3)) assert_equal("
\n\n
", @vis.apply_to_MethodList(list, @ch0)) end def test_apply_to_ItemListItem item = ItemListItem.new assert_equal("
  • a
  • ", @vis.apply_to_ItemListItem(item, @ch1)) assert_equal("
  • a\nb
  • ", @vis.apply_to_ItemListItem(item, @ch2)) assert_equal("
  • a
  • ", @vis.apply_to_ItemListItem(item, @ch3)) assert_equal("
  • ", @vis.apply_to_ItemListItem(item, @ch0)) end def test_apply_to_EnumListItem item = EnumListItem.new assert_equal("
  • a
  • ", @vis.apply_to_EnumListItem(item, @ch1)) assert_equal("
  • a\nb
  • ", @vis.apply_to_EnumListItem(item, @ch2)) assert_equal("
  • a
  • ", @vis.apply_to_EnumListItem(item, @ch3)) assert_equal("
  • ", @vis.apply_to_EnumListItem(item, @ch0)) end def test_apply_to_DescListItem tr = Tree.new_with_document_struct(DocumentStructure::RD) tr.root = DocumentElement.new di1, di2 = nil tr.root.build do new DescList do di1 = new DescListItem do make_term do new StringElement, "desclist 1" end end di2 = new DescListItem do make_term do new StringElement, "desclist 2" end end end end @vis.prepare_labels(tr, "label:") assert_equal(expect_for_di1_with_child("term1", @ch1), @vis.apply_to_DescListItem(di1, ["term1"], @ch1)) assert_equal(expect_for_di1_with_child("term1term2", @ch1), @vis.apply_to_DescListItem(di1, ["term1", "term2"], @ch1)) assert_equal(expect_for_di1_with_child("term1", @ch2), @vis.apply_to_DescListItem(di1, ["term1"], @ch2)) assert_equal(expect_for_di1_with_child("term1", @ch3), @vis.apply_to_DescListItem(di1, ["term1"], @ch3)) assert_equal(expect_for_di1_no_child("term1"), @vis.apply_to_DescListItem(di1, ["term1"], @ch0)) assert_equal(expect_for_di1_no_child("term1term2"), @vis.apply_to_DescListItem(di1, ["term1", "term2"], @ch0)) assert_equal(expect_for_di2_with_child("term1", @ch1), @vis.apply_to_DescListItem(di2, ["term1"], @ch1)) assert_equal(expect_for_di2_no_child("term1"), @vis.apply_to_DescListItem(di2, ["term1"], @ch0)) end def expect_for_di1_with_child(term, children) %|
    #{term}
    \n| + %|
    \n#{children.join("\n").chomp}\n
    | end def expect_for_di1_no_child(term) %|
    #{term}
    | end def expect_for_di2_with_child(term, children) %|
    #{term}
    \n| + %|
    \n#{children.join("\n").chomp}\n
    | end def expect_for_di2_no_child(term) %|
    #{term}
    | end # MethodListItem ... def check_apply_to_NonterminalInline(type, tag) element = type.new name = type.to_s.sub(/RD::/, "") assert_equal("<#{tag}>a", @vis.send("apply_to_#{name}", element, @ch1)) assert_equal("<#{tag}>ab", @vis.send("apply_to_#{name}", element, @ch2)) assert_equal("<#{tag}>a\n", @vis.send("apply_to_#{name}", element, @ch3)) assert_equal("<#{tag}>", @vis.send("apply_to_#{name}", element, @ch0)) end def test_apply_to_Emphasis check_apply_to_NonterminalInline(Emphasis, "em") end def test_apply_to_Code check_apply_to_NonterminalInline(Code, "code") end def test_apply_to_Var check_apply_to_NonterminalInline(Var, "var") end def test_apply_to_Keyboard check_apply_to_NonterminalInline(Keyboard, "kbd") end def test_apply_to_StringElement se1 = StringElement.new "a" assert_equal("a", @vis.apply_to_StringElement(se1)) se2 = StringElement.new "a\nb" assert_equal("a\nb", @vis.apply_to_StringElement(se2)) se_empty = StringElement.new "" assert_equal("", @vis.apply_to_StringElement(se_empty)) se_ws = StringElement.new " " assert_equal(" ", @vis.apply_to_StringElement(se_ws)) se_lt = StringElement.new "<" assert_equal("<", @vis.apply_to_StringElement(se_lt)) se_gt = StringElement.new ">" assert_equal(">", @vis.apply_to_StringElement(se_gt)) se_amp = StringElement.new "&" assert_equal("&", @vis.apply_to_StringElement(se_amp)) end def test_apply_to_Verb verb1 = Verb.new "a" assert_equal("a", @vis.apply_to_Verb(verb1)) verb2 = Verb.new "a\nb" assert_equal("a\nb", @vis.apply_to_Verb(verb2)) verb_empty = Verb.new "" assert_equal("", @vis.apply_to_Verb(verb_empty)) verb_ws = Verb.new " " assert_equal(" ", @vis.apply_to_Verb(verb_ws)) verb_lt = Verb.new "<" assert_equal("<", @vis.apply_to_Verb(verb_lt)) verb_gt = Verb.new ">" assert_equal(">", @vis.apply_to_Verb(verb_gt)) verb_amp = Verb.new "&" assert_equal("&", @vis.apply_to_Verb(verb_amp)) end def test_apply_to_Footnote @vis.prepare_footnotes(@tr_fn) assert_equal([], @vis.foottexts) assert_equal(expect_for_footnote(1), @vis.apply_to_Footnote(@fn1_fn, ["footnote 1"])) assert_equal([["footnote 1"]], @vis.foottexts) assert_equal(expect_for_footnote(2), @vis.apply_to_Footnote(@fn2_fn, ["footnote", " 2"])) assert_equal([["footnote 1"], ["footnote", " 2"]], @vis.foottexts) @vis.prepare_footnotes(@tr2_fn) assert_raises(ArgumentError) do @vis.apply_to_Footnote(@fn2_fn, []) end end def expect_for_footnote(num) %Q||+ %Q|*#{num}| end def test_get_footnote_num @vis.prepare_footnotes(@tr_fn) assert_equal(1, @vis.get_footnote_num(@fn1_fn)) assert_equal(2, @vis.get_footnote_num(@fn2_fn)) assert_equal(nil, @vis.get_footnote_num(Footnote.new)) @vis.prepare_footnotes(@tr2_fn) assert_equal(nil, @vis.get_footnote_num(@fn1_fn)) assert_raises(ArgumentError) do @vis.get_footnote_num(Headline.new(1)) end end def test_prepare_footnotes @vis.prepare_footnotes(@tr_fn) assert_equal([@fn1_fn, @fn2_fn], @vis.footnotes) @vis.prepare_footnotes(@tr2_fn) assert_equal([], @vis.footnotes) end def test_add_foottext @vis.prepare_footnotes(@tr_fn) assert_equal([], @vis.foottexts) @vis.add_foottext(@vis.get_footnote_num(@fn1_fn), ["footnote 1"]) assert_equal([["footnote 1"]], @vis.foottexts) @vis.add_foottext(@vis.get_footnote_num(@fn2_fn), ["footnote", "2"]) assert_equal([["footnote 1"], ["footnote", "2"]], @vis.foottexts) assert_raises(ArgumentError) do @vis.add_foottext(3, "footnote 3") end end def test_apply_to_Foottext @vis.prepare_footnotes(@tr_fn) exp1 = %|| + %|*1| + %|footnote 1
    | assert_equal(exp1, @vis.apply_to_Foottext(@fn1_fn, ["footnote 1"])) exp2 = %|| + %|*2| + %|footnote 2
    | assert_equal(exp2, @vis.apply_to_Foottext(@fn2_fn, ["footnote", " 2"])) @vis.prepare_footnotes(@tr2_fn) assert_raises(ArgumentError) do @vis.apply_to_Foottext(@fn1_fn, ["footnote 1"]) end end def test_make_foottext @vis.prepare_footnotes(@tr_fn) ft1 = ["footnote 1"] ft2 = ["footnote", " 2"] @vis.add_foottext(@vis.get_footnote_num(@fn1_fn), ft1) @vis.add_foottext(@vis.get_footnote_num(@fn2_fn), ft2) exp1 = @vis.apply_to_Foottext(@fn1_fn, ft1) exp2 = @vis.apply_to_Foottext(@fn2_fn, ft2) assert_equal(%|
    \n

    \n#{exp1}\n#{exp2}\n

    |, @vis.make_foottext) @vis.prepare_footnotes(@tr2_fn) assert_equal(nil, @vis.make_foottext) end def test_hyphen_escape assert_equal("­­", @vis.hyphen_escape("--")) assert_equal("-", @vis.hyphen_escape("-")) assert_equal("­­-", @vis.hyphen_escape("---")) assert_equal("- -", @vis.hyphen_escape("- -")) assert_equal("aa­­bb", @vis.hyphen_escape("aa--bb")) assert_equal("", @vis.hyphen_escape("")) end end