1require 'rdoc/test_case'
2
3class TestAttributeManager < RDoc::TestCase # HACK fix test name
4
5  def setup
6    super
7
8    @options = RDoc::Options.new
9
10    @am = RDoc::Markup::AttributeManager.new
11    @klass = RDoc::Markup::AttributeManager
12    @formatter = RDoc::Markup::Formatter.new @options
13    @formatter.add_tag :BOLD, '<B>', '</B>'
14    @formatter.add_tag :EM, '<EM>', '</EM>'
15    @formatter.add_tag :TT, '<CODE>', '</CODE>'
16  end
17
18  def test_convert_attrs_ignores_code
19    assert_equal 'foo <CODE>__send__</CODE> bar', output('foo <code>__send__</code> bar')
20  end
21
22  def test_convert_attrs_ignores_tt
23    assert_equal 'foo <CODE>__send__</CODE> bar', output('foo <tt>__send__</tt> bar')
24  end
25
26  def test_convert_attrs_preserves_double
27    assert_equal 'foo.__send__ :bar', output('foo.__send__ :bar')
28    assert_equal 'use __FILE__ to', output('use __FILE__ to')
29  end
30
31  def test_convert_attrs_does_not_ignore_after_tt
32    assert_equal 'the <CODE>IF:</CODE><EM>key</EM> directive', output('the <tt>IF:</tt>_key_ directive')
33  end
34
35  def test_initial_word_pairs
36    word_pairs = @am.matching_word_pairs
37    assert word_pairs.is_a?(Hash)
38    assert_equal(3, word_pairs.size)
39  end
40
41  def test_initial_html
42    html_tags = @am.html_tags
43    assert html_tags.is_a?(Hash)
44    assert_equal(5, html_tags.size)
45  end
46
47  def test_add_matching_word_pair
48    @am.add_word_pair("x","x", :TEST)
49    word_pairs = @am.matching_word_pairs
50    assert_equal(4,word_pairs.size)
51    assert(word_pairs.has_key?("x"))
52  end
53
54  def test_add_invalid_word_pair
55    assert_raises ArgumentError do
56      @am.add_word_pair("<", "<", :TEST)
57    end
58  end
59
60  def test_add_word_pair_map
61    @am.add_word_pair("x", "y", :TEST)
62    word_pair_map = @am.word_pair_map
63    assert_equal(1,word_pair_map.size)
64    assert_equal(word_pair_map. keys.first.source, "(x)(\\S+)(y)")
65  end
66
67  def test_add_html_tag
68    @am.add_html("Test", :TEST)
69    tags = @am.html_tags
70    assert_equal(6, tags.size)
71    assert(tags.has_key?("test"))
72  end
73
74  def test_add_special
75    @am.add_special "WikiWord", :WIKIWORD
76    specials = @am.special
77
78    assert_equal 1, specials.size
79    assert specials.assoc "WikiWord"
80  end
81
82  def test_escapes
83    assert_equal '<CODE>text</CODE>',   output('<tt>text</tt>')
84    assert_equal '<tt>text</tt>',       output('\\<tt>text</tt>')
85    assert_equal '<tt>',                output('\\<tt>')
86    assert_equal '<CODE><tt></CODE>',   output('<tt>\\<tt></tt>')
87    assert_equal '<CODE>\\<tt></CODE>', output('<tt>\\\\<tt></tt>')
88    assert_equal '<B>text</B>',         output('*text*')
89    assert_equal '*text*',              output('\\*text*')
90    assert_equal '\\',                  output('\\')
91    assert_equal '\\text',              output('\\text')
92    assert_equal '\\\\text',            output('\\\\text')
93    assert_equal 'text \\ text',        output('text \\ text')
94
95    assert_equal 'and <CODE>\\s</CODE> matches space',
96                 output('and <tt>\\s</tt> matches space')
97    assert_equal 'use <CODE><tt>text</CODE></tt> for code',
98                 output('use <tt>\\<tt>text</tt></tt> for code')
99    assert_equal 'use <CODE><tt>text</tt></CODE> for code',
100                 output('use <tt>\\<tt>text\\</tt></tt> for code')
101    assert_equal 'use <tt><tt>text</tt></tt> for code',
102                 output('use \\<tt>\\<tt>text</tt></tt> for code')
103    assert_equal 'use <tt><CODE>text</CODE></tt> for code',
104                 output('use \\<tt><tt>text</tt></tt> for code')
105    assert_equal 'use <CODE>+text+</CODE> for code',
106                 output('use <tt>\\+text+</tt> for code')
107    assert_equal 'use <tt><CODE>text</CODE></tt> for code',
108                 output('use \\<tt>+text+</tt> for code')
109    assert_equal 'illegal <tag>not</tag> changed',
110                 output('illegal <tag>not</tag> changed')
111    assert_equal 'unhandled <p>tag</p> unchanged',
112                 output('unhandled <p>tag</p> unchanged')
113  end
114
115  def output str
116    @formatter.convert_flow @am.flow str
117  end
118
119end
120
121