# frozen_string_literal: true
require 'rdoc/test_case'
class TestRDocMarkupFormatter < RDoc::TestCase
class ToTest < RDoc::Markup::Formatter
def initialize markup
super nil, markup
add_tag :TT, '', '
'
end
def accept_paragraph paragraph
@res += attributes(paragraph.text)
end
def attributes text
convert_flow @am.flow text.dup
end
def handle_special_CAPS special
"handled #{special.text}"
end
def start_accepting
@res = ""
end
def end_accepting
@res
end
end
def setup
super
@markup = @RM.new
@markup.add_special(/[A-Z]+/, :CAPS)
@attribute_manager = @markup.attribute_manager
@attributes = @attribute_manager.attributes
@to = ToTest.new @markup
@caps = @attributes.bitmap_for :CAPS
@special = @attributes.bitmap_for :_SPECIAL_
@tt = @attributes.bitmap_for :TT
end
def test_class_gen_relative_url
def gen(from, to)
RDoc::Markup::ToHtml.gen_relative_url from, to
end
assert_equal 'a.html', gen('a.html', 'a.html')
assert_equal 'b.html', gen('a.html', 'b.html')
assert_equal 'd.html', gen('a/c.html', 'a/d.html')
assert_equal '../a.html', gen('a/c.html', 'a.html')
assert_equal 'a/c.html', gen('a.html', 'a/c.html')
end
def special_names
@attribute_manager.special.map do |_, mask|
@attributes.as_string mask
end
end
def test_add_special_RDOCLINK
@to.add_special_RDOCLINK
assert_includes special_names, 'RDOCLINK'
def @to.handle_special_RDOCLINK special
"<#{special.text}>"
end
document = doc(para('{foo}[rdoc-label:bar].'))
formatted = document.accept @to
assert_equal '{foo}[].', formatted
end
def test_add_special_TIDYLINK
@to.add_special_TIDYLINK
assert_includes special_names, 'TIDYLINK'
def @to.handle_special_TIDYLINK special
"<#{special.text}>"
end
document = doc(para('foo[rdoc-label:bar].'))
formatted = document.accept @to
assert_equal '.', formatted
document = doc(para('{foo}[rdoc-label:bar].'))
formatted = document.accept @to
assert_equal '<{foo}[rdoc-label:bar]>.', formatted
end
def test_parse_url
scheme, url, id = @to.parse_url 'example/foo'
assert_equal 'http', scheme
assert_equal 'example/foo', url
assert_equal nil, id
end
def test_parse_url_anchor
scheme, url, id = @to.parse_url '#foottext-1'
assert_equal nil, scheme
assert_equal '#foottext-1', url
assert_equal nil, id
end
def test_parse_url_link
scheme, url, id = @to.parse_url 'link:README.txt'
assert_equal 'link', scheme
assert_equal 'README.txt', url
assert_equal nil, id
end
def test_parse_url_link_id
scheme, url, id = @to.parse_url 'link:README.txt#label-foo'
assert_equal 'link', scheme
assert_equal 'README.txt#label-foo', url
assert_equal nil, id
end
def test_parse_url_rdoc_label
scheme, url, id = @to.parse_url 'rdoc-label:foo'
assert_equal 'link', scheme
assert_equal '#foo', url
assert_equal nil, id
scheme, url, id = @to.parse_url 'rdoc-label:foo:bar'
assert_equal 'link', scheme
assert_equal '#foo', url
assert_equal ' id="bar"', id
end
def test_parse_url_scheme
scheme, url, id = @to.parse_url 'http://example/foo'
assert_equal 'http', scheme
assert_equal 'http://example/foo', url
assert_equal nil, id
scheme, url, id = @to.parse_url 'https://example/foo'
assert_equal 'https', scheme
assert_equal 'https://example/foo', url
assert_equal nil, id
end
def test_convert_tt_special
converted = @to.convert 'AAA
'
assert_equal 'AAA
', converted
end
end