summaryrefslogtreecommitdiff
path: root/test/rdoc/test_rdoc_context_section.rb
blob: 24c68c49dd9f1adf6689f028d46b454d64d22534 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# frozen_string_literal: true
require_relative 'helper'

class TestRDocContextSection < RDoc::TestCase

  def setup
    super

    @top_level = @store.add_file 'file.rb'

    @klass = @top_level.add_class RDoc::NormalClass, 'Object'

    @S = RDoc::Context::Section
    @s = @S.new @klass, 'section', comment('# comment', @top_level, :ruby)
  end

  def test_add_comment
    file1 = @store.add_file 'file1.rb'

    klass = file1.add_class RDoc::NormalClass, 'Klass'

    c1 = RDoc::Comment.new "# :section: section\n", file1
    c2 = RDoc::Comment.new "# hello\n",             file1
    c3 = RDoc::Comment.new "# world\n",             file1

    s = @S.new klass, 'section', c1

    assert_empty s.comments

    s.add_comment nil

    assert_empty s.comments

    s.add_comment c2

    assert_equal [c2], s.comments

    s.add_comment c3

    assert_equal [c2, c3], s.comments
  end

  def test_aref
    assert_equal 'section', @s.aref

    assert_equal '5Buntitled-5D', @S.new(nil, nil, nil).aref

    assert_equal 'one+two', @S.new(nil, 'one two', nil).aref
  end

  def test_eql_eh
    other = @S.new @klass, 'other', comment('# comment', @top_level)

    assert @s.eql? @s
    assert @s.eql? @s.dup
    refute @s.eql? other
  end

  def test_equals
    other = @S.new @klass, 'other', comment('# comment', @top_level)

    assert_equal @s, @s
    assert_equal @s, @s.dup
    refute_equal @s, other
  end

  def test_extract_comment
    assert_equal '',    @s.extract_comment(comment('')).text
    assert_equal '',    @s.extract_comment(comment("# :section: b\n")).text
    assert_equal '# c', @s.extract_comment(comment("# :section: b\n# c")).text
    assert_equal '# c',
                 @s.extract_comment(comment("# a\n# :section: b\n# c")).text
  end

  def test_hash
    other = @S.new @klass, 'other', comment('# comment', @top_level)

    assert_equal @s.hash, @s.hash
    assert_equal @s.hash, @s.dup.hash
    refute_equal @s.hash, other.hash
  end

  def test_marshal_dump
    loaded = Marshal.load Marshal.dump @s

    expected = RDoc::Comment.new('comment', @top_level).parse
    expected = doc(expected)

    assert_equal 'section', loaded.title
    assert_equal expected,  loaded.comments
    assert_nil              loaded.parent, 'parent is set manually'
  end

  def test_marshal_dump_no_comment
    s = @S.new @klass, 'section', comment('')

    loaded = Marshal.load Marshal.dump s

    assert_equal 'section', loaded.title
    assert_empty            loaded.comments
    assert_nil              loaded.parent, 'parent is set manually'
  end

  def test_marshal_load_version_0
    loaded = Marshal.load "\x04\bU:\eRDoc::Context::Section" +
                          "[\bi\x00I\"\fsection\x06:\x06EFo" +
                          ":\eRDoc::Markup::Document\a:\v@parts" +
                          "[\x06o;\a\a;\b[\x06o" +
                          ":\x1CRDoc::Markup::Paragraph\x06;\b" +
                          "[\x06I\"\fcomment\x06;\x06F:\n@fileI" +
                          "\"\ffile.rb\x06;\x06F;\n0"

    expected = doc RDoc::Comment.new('comment', @top_level).parse

    assert_equal 'section', loaded.title
    assert_equal expected,  loaded.comments
    assert_nil              loaded.parent, 'parent is set manually'
  end

  def test_remove_comment_array
    other = @store.add_file 'other.rb'

    other_comment = comment('bogus', other)

    @s.add_comment other_comment

    @s.remove_comment comment('bogus', @top_level)

    assert_equal [other_comment], @s.comments
  end

  def test_remove_comment_document
    other = @store.add_file 'other.rb'

    other_comment = comment('bogus', other)

    @s.add_comment other_comment

    loaded = Marshal.load Marshal.dump @s

    loaded.remove_comment comment('bogus', @top_level)

    assert_equal doc(other_comment.parse), loaded.comments
  end

end