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