1require 'rdoc/test_case'
2
3class TestRDocContextSection < RDoc::TestCase
4
5  def setup
6    super
7
8    @top_level = @store.add_file 'file.rb'
9
10    @klass = @top_level.add_class RDoc::NormalClass, 'Object'
11
12    @S = RDoc::Context::Section
13    @s = @S.new @klass, 'section', comment('# comment', @top_level)
14  end
15
16  def mu_pp obj
17    s = ''
18    s = PP.pp obj, s
19    s.force_encoding Encoding.default_external if defined? Encoding
20    s.chomp
21  end
22
23  def test_add_comment
24    file1 = @store.add_file 'file1.rb'
25
26    klass = file1.add_class RDoc::NormalClass, 'Klass'
27
28    c1 = RDoc::Comment.new "# :section: section\n", file1
29    c2 = RDoc::Comment.new "# hello\n",             file1
30    c3 = RDoc::Comment.new "# world\n",             file1
31
32    s = @S.new klass, 'section', c1
33
34    assert_empty s.comments
35
36    s.add_comment nil
37
38    assert_empty s.comments
39
40    s.add_comment c2
41
42    assert_equal [c2], s.comments
43
44    s.add_comment c3
45
46    assert_equal [c2, c3], s.comments
47  end
48
49  def test_aref
50    assert_equal 'section', @s.aref
51
52    assert_equal '5Buntitled-5D', @S.new(nil, nil, nil).aref
53
54    assert_equal 'one+two', @S.new(nil, 'one two', nil).aref
55  end
56
57  def test_extract_comment
58    assert_equal '',    @s.extract_comment(comment('')).text
59    assert_equal '',    @s.extract_comment(comment("# :section: b\n")).text
60    assert_equal '# c', @s.extract_comment(comment("# :section: b\n# c")).text
61    assert_equal '# c',
62                 @s.extract_comment(comment("# a\n# :section: b\n# c")).text
63  end
64
65  def test_marshal_dump
66    loaded = Marshal.load Marshal.dump @s
67
68    expected = RDoc::Comment.new('comment', @top_level).parse
69    expected = doc(expected)
70
71    assert_equal 'section', loaded.title
72    assert_equal expected,  loaded.comments
73    assert_nil              loaded.parent, 'parent is set manually'
74  end
75
76  def test_marshal_dump_no_comment
77    s = @S.new @klass, 'section', comment('')
78
79    loaded = Marshal.load Marshal.dump s
80
81    assert_equal 'section', loaded.title
82    assert_empty            loaded.comments
83    assert_nil              loaded.parent, 'parent is set manually'
84  end
85
86  def test_marshal_load_version_0
87    loaded = Marshal.load "\x04\bU:\eRDoc::Context::Section" +
88                          "[\bi\x00I\"\fsection\x06:\x06EFo" +
89                          ":\eRDoc::Markup::Document\a:\v@parts" +
90                          "[\x06o;\a\a;\b[\x06o" +
91                          ":\x1CRDoc::Markup::Paragraph\x06;\b" +
92                          "[\x06I\"\fcomment\x06;\x06F:\n@fileI" +
93                          "\"\ffile.rb\x06;\x06F;\n0"
94
95    expected = doc RDoc::Comment.new('comment', @top_level).parse
96
97    assert_equal 'section', loaded.title
98    assert_equal expected,  loaded.comments
99    assert_nil              loaded.parent, 'parent is set manually'
100  end
101
102  def test_remove_comment_array
103    other = @store.add_file 'other.rb'
104
105    other_comment = comment('bogus', other)
106
107    @s.add_comment other_comment
108
109    @s.remove_comment comment('bogus', @top_level)
110
111    assert_equal [other_comment], @s.comments
112  end
113
114  def test_remove_comment_document
115    other = @store.add_file 'other.rb'
116
117    other_comment = comment('bogus', other)
118
119    @s.add_comment other_comment
120
121    loaded = Marshal.load Marshal.dump @s
122
123    loaded.remove_comment comment('bogus', @top_level)
124
125    assert_equal doc(other_comment.parse), loaded.comments
126  end
127
128  def test_sequence
129    _, err = verbose_capture_io do
130      assert_match(/\ASEC\d{5}\Z/, @s.sequence)
131    end
132
133    assert_equal "#{@S}#sequence is deprecated, use #aref\n", err
134  end
135
136end
137
138