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