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