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