1require File.expand_path '../xref_test_case', __FILE__
2
3class TestRDocTopLevel < XrefTestCase
4
5  def setup
6    super
7
8    @top_level = @store.add_file 'path/top_level.rb'
9    @top_level.parser = RDoc::Parser::Ruby
10  end
11
12  def test_initialize
13    t = RDoc::TopLevel.new 'path/file.rb'
14
15    assert_equal 'path/file.rb', t.absolute_name
16    assert_equal 'path/file.rb', t.relative_name
17  end
18
19  def test_initialize_relative
20    t = RDoc::TopLevel.new 'path/file.rb', 'file.rb'
21
22    assert_equal 'path/file.rb', t.absolute_name
23    assert_equal 'file.rb',      t.relative_name
24  end
25
26  def test_add_alias
27    a = RDoc::Alias.new nil, 'old', 'new', nil
28    @top_level.add_alias a
29
30    object = @store.find_class_named 'Object'
31    expected = { '#old' => [a] }
32    assert_equal expected, object.unmatched_alias_lists
33    assert_includes object.in_files, @top_level
34  end
35
36  def test_add_alias_nodoc
37    @top_level.document_self = false
38
39    a = RDoc::Alias.new nil, 'old', 'new', nil
40    @top_level.add_alias a
41
42    object = @store.find_class_named('Object')
43    assert_empty object.unmatched_alias_lists
44    assert_includes object.in_files, @top_level
45  end
46
47  def test_add_constant
48    const = RDoc::Constant.new 'C', nil, nil
49    @top_level.add_constant const
50
51    object = @store.find_class_named 'Object'
52    assert_equal [const], object.constants
53    assert_includes object.in_files, @top_level
54  end
55
56  def test_add_constant_nodoc
57    @top_level.document_self = false
58
59    const = RDoc::Constant.new 'C', nil, nil
60    @top_level.add_constant const
61
62    object = @store.find_class_named 'Object'
63    assert_empty object.constants
64    assert_includes object.in_files, @top_level
65  end
66
67  def test_add_include
68    include = RDoc::Include.new 'C', nil
69    @top_level.add_include include
70
71    object = @store.find_class_named 'Object'
72    assert_equal [include], object.includes
73    assert_includes object.in_files, @top_level
74  end
75
76  def test_add_include_nodoc
77    @top_level.document_self = false
78
79    include = RDoc::Include.new 'C', nil
80    @top_level.add_include include
81
82    object = @store.find_class_named('Object')
83    assert_empty object.includes
84    assert_includes object.in_files, @top_level
85  end
86
87  def test_add_method
88    method = RDoc::AnyMethod.new nil, 'm'
89    @top_level.add_method method
90
91    object = @store.find_class_named 'Object'
92    assert_equal [method], object.method_list
93    assert_includes object.in_files, @top_level
94  end
95
96  def test_add_method_stopdoc
97    @top_level.document_self = false
98
99    method = RDoc::AnyMethod.new nil, 'm'
100    @top_level.add_method method
101
102    object = @store.find_class_named('Object')
103    assert_empty object.method_list
104    assert_includes object.in_files, @top_level
105  end
106
107  def test_base_name
108    assert_equal 'top_level.rb', @top_level.base_name
109  end
110
111  def test_display_eh
112    refute @top_level.display?
113
114    page = @store.add_file 'README.txt'
115    page.parser = RDoc::Parser::Simple
116
117    assert page.display?
118  end
119
120  def test_eql_eh
121    top_level2 = @store.add_file 'path/top_level.rb'
122    other_level = @store.add_file 'path/other_level.rb'
123
124    assert_operator @top_level, :eql?, top_level2
125
126    refute_operator other_level, :eql?, @top_level
127  end
128
129  def test_equals2
130    top_level2 = @store.add_file 'path/top_level.rb'
131    other_level = @store.add_file 'path/other_level.rb'
132
133    assert_equal @top_level, top_level2
134
135    refute_equal other_level, @top_level
136  end
137
138  def test_find_class_or_module
139    assert_equal @c1,    @xref_data.find_class_or_module('C1')
140    assert_equal @c2_c3, @xref_data.find_class_or_module('C2::C3')
141    assert_equal @c4,    @xref_data.find_class_or_module('C4')
142    assert_equal @m1_m2, @xref_data.find_class_or_module('M1::M2')
143  end
144
145  def test_full_name
146    assert_equal 'path/top_level.rb', @top_level.full_name
147  end
148
149  def test_hash
150    tl2 = @store.add_file 'path/top_level.rb'
151    tl3 = @store.add_file 'other/top_level.rb'
152
153    assert_equal @top_level.hash, tl2.hash
154    refute_equal @top_level.hash, tl3.hash
155  end
156
157  def test_http_url
158    assert_equal 'prefix/path/top_level_rb.html', @top_level.http_url('prefix')
159  end
160
161  def test_last_modified
162    assert_equal nil, @top_level.last_modified
163    stat = Object.new
164    def stat.mtime() 0 end
165    @top_level.file_stat = stat
166    assert_equal 0, @top_level.last_modified
167  end
168
169  def test_marshal_dump
170    page = @store.add_file 'README.txt'
171    page.parser = RDoc::Parser::Simple
172    page.comment = RDoc::Comment.new 'This is a page', page
173
174    loaded = Marshal.load Marshal.dump page
175
176    comment = RDoc::Markup::Document.new(
177                RDoc::Markup::Paragraph.new('This is a page'))
178    comment.file = loaded
179
180    assert_equal page, loaded
181
182    assert_equal 'README.txt', loaded.absolute_name
183    assert_equal 'README.txt', loaded.relative_name
184
185    assert_equal RDoc::Parser::Simple, loaded.parser
186
187    assert_equal comment, loaded.comment
188  end
189
190  def test_marshal_load_version_0
191    loaded = Marshal.load "\x04\bU:\x13RDoc::TopLevel" +
192                          "[\ti\x00I\"\x0FREADME.txt\x06:\x06EF" +
193                          "c\x19RDoc::Parser::Simple" +
194                          "o:\eRDoc::Markup::Document\a:\v@parts" +
195                          "[\x06o:\x1CRDoc::Markup::Paragraph\x06;\b" +
196                          "[\x06I\"\x13This is a page\x06;\x06F:\n@file@\a"
197
198    comment = RDoc::Markup::Document.new(
199                RDoc::Markup::Paragraph.new('This is a page'))
200    comment.file = loaded
201
202    assert_equal 'README.txt', loaded.absolute_name
203    assert_equal 'README.txt', loaded.relative_name
204
205    assert_equal RDoc::Parser::Simple, loaded.parser
206
207    assert_equal comment, loaded.comment
208
209    assert loaded.display?
210  end
211
212  def test_name
213    assert_equal 'top_level.rb', @top_level.name
214  end
215
216  def test_page_name
217    assert_equal 'top_level', @top_level.page_name
218
219    tl = @store.add_file 'README.ja'
220
221    assert_equal 'README.ja', tl.page_name
222
223    tl = @store.add_file 'Rakefile'
224
225    assert_equal 'Rakefile', tl.page_name
226  end
227
228  def test_page_name_trim_extension
229    tl = @store.add_file 'README.ja.rdoc'
230
231    assert_equal 'README.ja', tl.page_name
232
233    tl = @store.add_file 'README.ja.md'
234
235    assert_equal 'README.ja', tl.page_name
236
237    tl = @store.add_file 'README.txt'
238
239    assert_equal 'README', tl.page_name
240  end
241
242  def test_search_record
243    assert_nil @xref_data.search_record
244  end
245
246  def test_search_record_page
247    page = @store.add_file 'README.txt'
248    page.parser = RDoc::Parser::Simple
249    page.comment = 'This is a comment.'
250
251    expected = [
252      'README',
253      '',
254      'README',
255      '',
256      'README_txt.html',
257      '',
258      "<p>This is a comment.\n",
259    ]
260
261    assert_equal expected, page.search_record
262  end
263
264  def test_text_eh
265    refute @xref_data.text?
266
267    rd = @store.add_file 'rd_format.rd'
268    rd.parser = RDoc::Parser::RD
269
270    assert rd.text?
271
272    simple = @store.add_file 'simple.txt'
273    simple.parser = RDoc::Parser::Simple
274
275    assert simple.text?
276  end
277
278  def test_text_eh_no_parser
279    refute @xref_data.text?
280
281    rd = @store.add_file 'rd_format.rd'
282
283    refute rd.text?
284  end
285
286end
287
288