2
require 'minitest/autorun'
3
require File.expand_path '../xref_test_case', __FILE__
5
class TestRDocCrossReference < XrefTestCase
10
@xref = RDoc::CrossReference.new @c1
13
def assert_ref expected, name
14
assert_equal expected, @xref.resolve(name, 'fail')
18
assert_equal name, @xref.resolve(name, name)
22
@xref = RDoc::CrossReference.new @c2
26
assert_ref @c1__m, 'C1::m'
27
assert_ref @c2_c3, 'C2::C3'
28
assert_ref @c2_c3_m, 'C2::C3#m'
29
assert_ref @c2_c3_h1, 'C3::H1'
32
assert_ref @c3_h2, 'C3::H2'
36
def test_resolve_C2_C3
37
@xref = RDoc::CrossReference.new @c2_c3
39
assert_ref @c2_c3_m, '#m'
41
assert_ref @c2_c3, 'C3'
42
assert_ref @c2_c3_m, 'C3#m'
44
assert_ref @c2_c3_h1, 'H1'
45
assert_ref @c2_c3_h1, 'C3::H1'
49
assert_ref @c3_h2, 'C3::H2'
53
@xref = RDoc::CrossReference.new @c3
60
assert_ref @c3_h1, 'H1'
62
assert_ref @c3_h1, 'C3::H1'
63
assert_ref @c3_h2, 'C3::H2'
69
@xref = RDoc::CrossReference.new @c4
71
# C4 ref inside a C4 containing a C4 should resolve to the contained class
72
assert_ref @c4_c4, 'C4'
75
def test_resolve_C4_C4
76
@xref = RDoc::CrossReference.new @c4_c4
78
# A C4 reference inside a C4 class contained within a C4 class should
79
# resolve to the inner C4 class.
80
assert_ref @c4_c4, 'C4'
83
def test_resolve_class
88
assert_ref @c2_c3, 'C2::C3'
89
assert_ref @c2_c3_h1, 'C2::C3::H1'
91
assert_ref @c3, '::C3'
92
assert_ref @c3_h1, '::C3::H1'
94
assert_ref @c4_c4, 'C4::C4'
98
assert_ref @xref_data, 'xref_data.rb'
101
def test_resolve_method
102
assert_ref @c1__m, 'm'
103
assert_ref @c1_m, '#m'
104
assert_ref @c1__m, '::m'
106
assert_ref @c1_m, 'C1#m'
107
assert_ref @c1__m, 'C1.m'
108
assert_ref @c1__m, 'C1::m'
110
assert_ref @c1_m, 'C1#m'
111
assert_ref @c1_m, 'C1#m()'
112
assert_ref @c1_m, 'C1#m(*)'
114
assert_ref @c1__m, 'C1.m'
115
assert_ref @c1__m, 'C1.m()'
116
assert_ref @c1__m, 'C1.m(*)'
118
assert_ref @c1__m, 'C1::m'
119
assert_ref @c1__m, 'C1::m()'
120
assert_ref @c1__m, 'C1::m(*)'
122
assert_ref @c2_c3_m, 'C2::C3#m'
124
assert_ref @c2_c3_m, 'C2::C3.m'
126
# TODO stop escaping - HTML5 allows anything but space
127
assert_ref @c2_c3_h1_meh, 'C2::C3::H1#m?'
129
assert_ref @c2_c3_m, '::C2::C3#m'
130
assert_ref @c2_c3_m, '::C2::C3#m()'
131
assert_ref @c2_c3_m, '::C2::C3#m(*)'
134
def test_resolve_no_ref
135
assert_equal '', @xref.resolve('', '')
137
assert_equal "bogus", @xref.resolve("bogus", "bogus")
138
assert_equal "\\bogus", @xref.resolve("\\bogus", "\\bogus")
139
assert_equal "\\\\bogus", @xref.resolve("\\\\bogus", "\\\\bogus")
141
assert_equal "\\#n", @xref.resolve("\\#n", "fail")
142
assert_equal "\\#n()", @xref.resolve("\\#n()", "fail")
143
assert_equal "\\#n(*)", @xref.resolve("\\#n(*)", "fail")
145
assert_equal "C1", @xref.resolve("\\C1", "fail")
146
assert_equal "::C3", @xref.resolve("\\::C3", "fail")
148
assert_equal "succeed", @xref.resolve("::C3::H1#n", "succeed")
149
assert_equal "succeed", @xref.resolve("::C3::H1#n(*)", "succeed")
150
assert_equal "\\::C3::H1#n", @xref.resolve("\\::C3::H1#n", "fail")