1require File.expand_path '../xref_test_case', __FILE__
2
3class TestRDocConstant < XrefTestCase
4
5  def setup
6    super
7
8    @const = @c1.constants.first
9  end
10
11  def test_full_name
12    assert_equal 'C1::CONST', @const.full_name
13  end
14
15  def test_is_alias_for
16    top_level = @store.add_file 'file.rb'
17
18    c = RDoc::Constant.new 'CONST', nil, 'comment'
19    top_level.add_constant c
20
21    assert_nil c.is_alias_for
22
23    c.is_alias_for = 'C1'
24
25    assert_equal @c1, c.is_alias_for
26
27    c.is_alias_for = 'unknown'
28
29    assert_equal 'unknown', c.is_alias_for
30  end
31
32  def test_marshal_dump
33    top_level = @store.add_file 'file.rb'
34
35    c = RDoc::Constant.new 'CONST', nil, 'this is a comment'
36    c.record_location top_level
37
38    aliased = top_level.add_class RDoc::NormalClass, 'Aliased'
39    c.is_alias_for = aliased
40
41    cm = top_level.add_class RDoc::NormalClass, 'Klass'
42    cm.add_constant c
43
44    section = cm.sections.first
45
46    loaded = Marshal.load Marshal.dump c
47    loaded.store = @store
48
49    comment = doc(para('this is a comment'))
50
51    assert_equal c, loaded
52
53    assert_equal aliased,        loaded.is_alias_for
54    assert_equal comment,        loaded.comment
55    assert_equal top_level,      loaded.file
56    assert_equal 'Klass::CONST', loaded.full_name
57    assert_equal 'CONST',        loaded.name
58    assert_nil                   loaded.visibility
59    assert_equal cm,             loaded.parent
60    assert_equal section,        loaded.section
61  end
62
63  def test_marshal_load
64    top_level = @store.add_file 'file.rb'
65
66    c = RDoc::Constant.new 'CONST', nil, 'this is a comment'
67    c.record_location top_level
68
69    cm = top_level.add_class RDoc::NormalClass, 'Klass'
70    cm.add_constant c
71
72    section = cm.sections.first
73
74    loaded = Marshal.load Marshal.dump c
75    loaded.store = @store
76
77    comment = doc(para('this is a comment'))
78
79    assert_equal c, loaded
80
81    assert_nil                   loaded.is_alias_for
82    assert_equal comment,        loaded.comment
83    assert_equal top_level,      loaded.file
84    assert_equal 'Klass::CONST', loaded.full_name
85    assert_equal 'CONST',        loaded.name
86    assert_nil                   loaded.visibility
87    assert_equal cm,             loaded.parent
88    assert_equal section,        loaded.section
89
90    assert loaded.display?
91  end
92
93  def test_marshal_load_version_0
94    top_level = @store.add_file 'file.rb'
95
96    aliased = top_level.add_class RDoc::NormalClass, 'Aliased'
97    cm      = top_level.add_class RDoc::NormalClass, 'Klass'
98    section = cm.sections.first
99
100    loaded = Marshal.load "\x04\bU:\x13RDoc::Constant[\x0Fi\x00I" +
101                          "\"\nCONST\x06:\x06ETI\"\x11Klass::CONST\x06" +
102                          ";\x06T0I\"\fAliased\x06;\x06To" +
103                          ":\eRDoc::Markup::Document\a:\v@parts[\x06o" +
104                          ":\x1CRDoc::Markup::Paragraph\x06;\b[\x06I" +
105                          "\"\x16this is a comment\x06;\x06T:\n@file0I" +
106                          "\"\ffile.rb\x06;\x06TI\"\nKlass\x06" +
107                          ";\x06Tc\x16RDoc::NormalClass0"
108
109    loaded.store = @store
110
111    comment = doc(para('this is a comment'))
112
113    assert_equal aliased,        loaded.is_alias_for
114    assert_equal comment,        loaded.comment
115    assert_equal top_level,      loaded.file
116    assert_equal 'Klass::CONST', loaded.full_name
117    assert_equal 'CONST',        loaded.name
118    assert_nil                   loaded.visibility
119    assert_equal cm,             loaded.parent
120    assert_equal section,        loaded.section
121
122    assert loaded.display?
123  end
124
125  def test_marshal_round_trip
126    top_level = @store.add_file 'file.rb'
127
128    c = RDoc::Constant.new 'CONST', nil, 'this is a comment'
129    c.record_location top_level
130    c.is_alias_for = 'Unknown'
131
132    cm = top_level.add_class RDoc::NormalClass, 'Klass'
133    cm.add_constant c
134
135    section = cm.sections.first
136
137    loaded = Marshal.load Marshal.dump c
138    loaded.store = @store
139
140    reloaded = Marshal.load Marshal.dump loaded
141    reloaded.store = @store
142
143    assert_equal section,   reloaded.section
144    assert_equal 'Unknown', reloaded.is_alias_for
145  end
146
147  def test_path
148    assert_equal 'C1.html#CONST', @const.path
149  end
150
151end
152