1require File.expand_path '../xref_test_case', __FILE__ 2 3class TestRDocCrossReference < XrefTestCase 4 5 def setup 6 super 7 8 @xref = RDoc::CrossReference.new @c1 9 end 10 11 def assert_ref expected, name 12 assert_equal expected, @xref.resolve(name, 'fail') 13 end 14 15 def refute_ref name 16 assert_equal name, @xref.resolve(name, name) 17 end 18 19 def test_METHOD_REGEXP_STR 20 re = /#{RDoc::CrossReference::METHOD_REGEXP_STR}/ 21 22 re =~ '===' 23 24 assert_equal '===', $& 25 end 26 27 def test_resolve_C2 28 @xref = RDoc::CrossReference.new @c2 29 30 refute_ref '#m' 31 32 assert_ref @c1__m, 'C1::m' 33 assert_ref @c2_c3, 'C2::C3' 34 assert_ref @c2_c3_m, 'C2::C3#m' 35 assert_ref @c2_c3_h1, 'C3::H1' 36 assert_ref @c4, 'C4' 37 38 assert_ref @c3_h2, 'C3::H2' 39 refute_ref 'H1' 40 end 41 42 def test_resolve_C2_C3 43 @xref = RDoc::CrossReference.new @c2_c3 44 45 assert_ref @c2_c3_m, '#m' 46 47 assert_ref @c2_c3, 'C3' 48 assert_ref @c2_c3_m, 'C3#m' 49 50 assert_ref @c2_c3_h1, 'H1' 51 assert_ref @c2_c3_h1, 'C3::H1' 52 53 assert_ref @c4, 'C4' 54 55 assert_ref @c3_h2, 'C3::H2' 56 end 57 58 def test_resolve_C3 59 @xref = RDoc::CrossReference.new @c3 60 61 assert_ref @c3, 'C3' 62 63 refute_ref '#m' 64 refute_ref 'C3#m' 65 66 assert_ref @c3_h1, 'H1' 67 68 assert_ref @c3_h1, 'C3::H1' 69 assert_ref @c3_h2, 'C3::H2' 70 71 assert_ref @c4, 'C4' 72 end 73 74 def test_resolve_C4 75 @xref = RDoc::CrossReference.new @c4 76 77 # C4 ref inside a C4 containing a C4 should resolve to the contained class 78 assert_ref @c4_c4, 'C4' 79 end 80 81 def test_resolve_C4_C4 82 @xref = RDoc::CrossReference.new @c4_c4 83 84 # A C4 reference inside a C4 class contained within a C4 class should 85 # resolve to the inner C4 class. 86 assert_ref @c4_c4, 'C4' 87 end 88 89 def test_resolve_class 90 assert_ref @c1, 'C1' 91 refute_ref 'H1' 92 93 assert_ref @c2, 'C2' 94 assert_ref @c2_c3, 'C2::C3' 95 assert_ref @c2_c3_h1, 'C2::C3::H1' 96 97 assert_ref @c3, '::C3' 98 assert_ref @c3_h1, '::C3::H1' 99 100 assert_ref @c4_c4, 'C4::C4' 101 end 102 103 def test_resolve_file 104 refute_ref 'xref_data.rb' 105 end 106 107 def test_resolve_method 108 assert_ref @c1__m, 'm' 109 assert_ref @c1_m, '#m' 110 assert_ref @c1__m, '::m' 111 112 assert_ref @c1_m, 'C1#m' 113 assert_ref @c1__m, 'C1.m' 114 assert_ref @c1__m, 'C1::m' 115 116 assert_ref @c1_m, 'C1#m' 117 assert_ref @c1_m, 'C1#m()' 118 assert_ref @c1_m, 'C1#m(*)' 119 120 assert_ref @c1__m, 'C1.m' 121 assert_ref @c1__m, 'C1.m()' 122 assert_ref @c1__m, 'C1.m(*)' 123 124 assert_ref @c1__m, 'C1::m' 125 assert_ref @c1__m, 'C1::m()' 126 assert_ref @c1__m, 'C1::m(*)' 127 128 assert_ref @c2_c3_m, 'C2::C3#m' 129 130 assert_ref @c2_c3_m, 'C2::C3.m' 131 132 # TODO stop escaping - HTML5 allows anything but space 133 assert_ref @c2_c3_h1_meh, 'C2::C3::H1#m?' 134 135 assert_ref @c2_c3_m, '::C2::C3#m' 136 assert_ref @c2_c3_m, '::C2::C3#m()' 137 assert_ref @c2_c3_m, '::C2::C3#m(*)' 138 end 139 140 def test_resolve_method_equals3 141 m = RDoc::AnyMethod.new '', '===' 142 @c1.add_method m 143 144 assert_ref m, '===' 145 end 146 147 def test_resolve_page 148 page = @store.add_file 'README.txt' 149 page.parser = RDoc::Parser::Simple 150 151 assert_ref page, 'README' 152 end 153 154 def test_resolve_percent 155 i_percent = RDoc::AnyMethod.new nil, '%' 156 i_percent.singleton = false 157 @c1.add_method i_percent 158 159 c_percent = RDoc::AnyMethod.new nil, '%' 160 c_percent.singleton = true 161 @c1.add_method c_percent 162 163 assert_ref i_percent, '%' 164 assert_ref i_percent, '#%' 165 assert_ref c_percent, '::%' 166 167 assert_ref i_percent, 'C1#%' 168 assert_ref c_percent, 'C1::%' 169 end 170 171 def test_resolve_no_ref 172 assert_equal '', @xref.resolve('', '') 173 174 assert_equal "bogus", @xref.resolve("bogus", "bogus") 175 assert_equal "\\bogus", @xref.resolve("\\bogus", "\\bogus") 176 assert_equal "\\\\bogus", @xref.resolve("\\\\bogus", "\\\\bogus") 177 178 assert_equal "\\#n", @xref.resolve("\\#n", "fail") 179 assert_equal "\\#n()", @xref.resolve("\\#n()", "fail") 180 assert_equal "\\#n(*)", @xref.resolve("\\#n(*)", "fail") 181 182 assert_equal "C1", @xref.resolve("\\C1", "fail") 183 assert_equal "::C3", @xref.resolve("\\::C3", "fail") 184 185 assert_equal "succeed", @xref.resolve("::C3::H1#n", "succeed") 186 assert_equal "succeed", @xref.resolve("::C3::H1#n(*)", "succeed") 187 assert_equal "\\::C3::H1#n", @xref.resolve("\\::C3::H1#n", "fail") 188 end 189 190end 191 192