1# coding: US-ASCII 2 3require 'rdoc/test_case' 4 5class TestRDocEncoding < RDoc::TestCase 6 7 def setup 8 super 9 10 @tempfile = Tempfile.new 'test_rdoc_encoding' 11 end 12 13 def test_class_read_file 14 @tempfile.write "hi everybody" 15 @tempfile.flush 16 17 assert_equal "hi everybody", RDoc::Encoding.read_file(@tempfile.path, nil) 18 end 19 20 def test_class_read_file_encoding 21 skip "Encoding not implemented" unless Object.const_defined? :Encoding 22 23 expected = "# coding: utf-8\nhi everybody" 24 25 @tempfile.write expected 26 @tempfile.flush 27 28 contents = RDoc::Encoding.read_file @tempfile.path, Encoding::UTF_8 29 assert_equal "hi everybody", contents 30 assert_equal Encoding::UTF_8, contents.encoding 31 end 32 33 def test_class_read_file_encoding_convert 34 skip "Encoding not implemented" unless Object.const_defined? :Encoding 35 36 content = "" 37 content.encode! 'ISO-8859-1' 38 content << "# coding: ISO-8859-1\nhi \xE9verybody" 39 40 @tempfile.write content 41 @tempfile.flush 42 43 contents = RDoc::Encoding.read_file @tempfile.path, Encoding::UTF_8 44 assert_equal Encoding::UTF_8, contents.encoding 45 assert_equal "hi \u00e9verybody", contents.sub("\r", '') 46 end 47 48 def test_class_read_file_encoding_fail 49 skip "Encoding not implemented" unless Object.const_defined? :Encoding 50 51 @tempfile.write "# coding: utf-8\n\317\200" # pi 52 @tempfile.flush 53 54 contents = :junk 55 56 _, err = verbose_capture_io do 57 contents = RDoc::Encoding.read_file @tempfile.path, Encoding::US_ASCII 58 end 59 60 assert_nil contents 61 62 assert_match %r%^unable to convert%, err 63 end 64 65 def test_class_read_file_encoding_fancy 66 skip "Encoding not implemented" unless Object.const_defined? :Encoding 67 68 expected = "# -*- coding: utf-8; fill-column: 74 -*-\nhi everybody" 69 expected.encode! Encoding::UTF_8 70 71 @tempfile.write expected 72 @tempfile.flush 73 74 contents = RDoc::Encoding.read_file @tempfile.path, Encoding::UTF_8 75 assert_equal "hi everybody", contents 76 assert_equal Encoding::UTF_8, contents.encoding 77 end 78 79 def test_class_read_file_encoding_force_transcode 80 skip "Encoding not implemented" unless Object.const_defined? :Encoding 81 82 @tempfile.write "# coding: utf-8\n\317\200" # pi 83 @tempfile.flush 84 85 contents = RDoc::Encoding.read_file @tempfile.path, Encoding::US_ASCII, true 86 87 assert_equal '?', contents 88 assert_equal Encoding::US_ASCII, contents.encoding 89 end 90 91 def test_class_read_file_encoding_guess 92 skip "Encoding not implemented" unless Object.const_defined? :Encoding 93 94 path = File.expand_path '../test.ja.txt', __FILE__ 95 content = RDoc::Encoding.read_file path, Encoding::UTF_8 96 97 assert_equal Encoding::UTF_8, content.encoding 98 end 99 100 def test_class_read_file_encoding_invalid 101 skip "Encoding not implemented" unless Object.const_defined? :Encoding 102 103 @tempfile.write "# coding: ascii\nM\xE4r" 104 @tempfile.flush 105 106 contents = :junk 107 _, err = verbose_capture_io do 108 contents = RDoc::Encoding.read_file @tempfile.path, Encoding::UTF_8 109 end 110 111 assert_equal "unable to convert \"\\xE4\" on US-ASCII for #{@tempfile.path}, skipping\n", err 112 113 assert_nil contents 114 end 115 116 def test_class_read_file_encoding_with_signature 117 skip "Encoding not implemented" unless defined? ::Encoding 118 119 @tempfile.write "\xEF\xBB\xBFhi everybody" 120 @tempfile.flush 121 122 bug3360 = '[ruby-dev:41452]' 123 content = RDoc::Encoding.read_file @tempfile.path, Encoding::UTF_8 124 assert_equal Encoding::UTF_8, content.encoding, bug3360 125 assert_equal "hi everybody", content, bug3360 126 end 127 128 def test_class_set_encoding 129 s = "# coding: UTF-8\n" 130 RDoc::Encoding.set_encoding s 131 132 # sanity check for 1.8 133 134 skip "Encoding not implemented" unless Object.const_defined? :Encoding 135 136 assert_equal Encoding::UTF_8, s.encoding 137 138 s = "#!/bin/ruby\n# coding: UTF-8\n" 139 RDoc::Encoding.set_encoding s 140 141 assert_equal Encoding::UTF_8, s.encoding 142 143 s = "<?xml version='1.0' encoding='UTF-8'?>\n" 144 expected = s.encoding 145 RDoc::Encoding.set_encoding s 146 147 assert_equal Encoding::UTF_8, s.encoding 148 149 s = "<?xml version='1.0' encoding=\"UTF-8\"?>\n" 150 expected = s.encoding 151 RDoc::Encoding.set_encoding s 152 153 assert_equal Encoding::UTF_8, s.encoding 154 end 155 156 def test_class_set_encoding_strip 157 s = "# coding: UTF-8\n# more comments" 158 159 RDoc::Encoding.set_encoding s 160 161 assert_equal "# more comments", s 162 163 s = "#!/bin/ruby\n# coding: UTF-8\n# more comments" 164 165 RDoc::Encoding.set_encoding s 166 167 assert_equal "#!/bin/ruby\n# more comments", s 168 end 169 170 def test_class_set_encoding_bad 171 skip "Encoding not implemented" unless Object.const_defined? :Encoding 172 173 s = "" 174 expected = s.encoding 175 RDoc::Encoding.set_encoding s 176 177 assert_equal expected, s.encoding 178 179 s = "# vim:set fileencoding=utf-8:\n" 180 expected = s.encoding 181 RDoc::Encoding.set_encoding s 182 183 assert_equal expected, s.encoding 184 185 s = "# vim:set fileencoding=utf-8:\n" 186 expected = s.encoding 187 RDoc::Encoding.set_encoding s 188 189 assert_equal expected, s.encoding 190 191 assert_raises ArgumentError do 192 RDoc::Encoding.set_encoding "# -*- encoding: undecided -*-\n" 193 end 194 end 195 196 def test_sanity 197 skip "Encoding not implemented" unless Object.const_defined? :Encoding 198 199 assert_equal Encoding::US_ASCII, ''.encoding, 200 'If this file is not ASCII tests may incorrectly pass' 201 end 202 203end 204 205