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 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
|
# coding: US-ASCII
# frozen_string_literal: true
require_relative 'helper'
class TestRDocEncoding < RDoc::TestCase
def setup
super
@tempfile = Tempfile.new 'test_rdoc_encoding'
end
def teardown
@tempfile.close!
super
end
def test_class_read_file
@tempfile.write "hi everybody"
@tempfile.flush
assert_equal "hi everybody", RDoc::Encoding.read_file(@tempfile.path, nil)
end
def test_class_read_file_encoding
expected = "# coding: utf-8\nhi everybody"
@tempfile.write expected
@tempfile.flush
contents = RDoc::Encoding.read_file @tempfile.path, Encoding::UTF_8
assert_equal "# coding: utf-8\nhi everybody", contents
assert_equal Encoding::UTF_8, contents.encoding
end
def test_class_read_file_encoding_convert
content = ""
content = RDoc::Encoding.change_encoding content, 'ISO-8859-1'
content << "# coding: ISO-8859-1\nhi \xE9verybody"
@tempfile.write content
@tempfile.flush
contents = RDoc::Encoding.read_file @tempfile.path, Encoding::UTF_8
assert_equal Encoding::UTF_8, contents.encoding
assert_equal "# coding: ISO-8859-1\nhi \u00e9verybody", contents.sub("\r", '')
end
def test_class_read_file_encoding_fail
@tempfile.write "# coding: utf-8\n\317\200" # pi
@tempfile.flush
contents = :junk
_, err = verbose_capture_output do
contents = RDoc::Encoding.read_file @tempfile.path, Encoding::US_ASCII
end
assert_nil contents
assert_match %r%^unable to convert%, err
end
def test_class_read_file_encoding_fancy
expected = "# -*- coding: utf-8; fill-column: 74 -*-\nhi everybody"
expected = RDoc::Encoding.change_encoding expected, Encoding::UTF_8
@tempfile.write expected
@tempfile.flush
contents = RDoc::Encoding.read_file @tempfile.path, Encoding::UTF_8
assert_equal "# -*- coding: utf-8; fill-column: 74 -*-\nhi everybody", contents
assert_equal Encoding::UTF_8, contents.encoding
end
def test_class_read_file_encoding_force_transcode
@tempfile.write "# coding: utf-8\n\317\200" # pi
@tempfile.flush
contents = RDoc::Encoding.read_file @tempfile.path, Encoding::US_ASCII, true
assert_equal "# coding: utf-8\n?", contents
assert_equal Encoding::US_ASCII, contents.encoding
end
def test_class_read_file_encoding_guess
path = File.expand_path '../test.ja.txt', __FILE__
content = RDoc::Encoding.read_file path, Encoding::UTF_8
assert_equal Encoding::UTF_8, content.encoding
end
def test_class_read_file_encoding_invalid
@tempfile.write "# coding: ascii\nM\xE4r"
@tempfile.flush
contents = :junk
_, err = verbose_capture_output do
contents = RDoc::Encoding.read_file @tempfile.path, Encoding::UTF_8
end
assert_equal "unable to convert \"\\xE4\" on US-ASCII for #{@tempfile.path}, skipping\n", err
assert_nil contents
end
def test_class_read_file_encoding_with_signature
@tempfile.write "\xEF\xBB\xBFhi everybody"
@tempfile.flush
bug3360 = '[ruby-dev:41452]'
content = RDoc::Encoding.read_file @tempfile.path, Encoding::UTF_8
assert_equal Encoding::UTF_8, content.encoding, bug3360
assert_equal "hi everybody", content, bug3360
end
def test_class_read_file_encoding_iso_2022_jp
input = "# coding: ISO-2022-JP\n:\e$B%3%^%s%I\e(B:"
@tempfile.write input
@tempfile.flush
contents = RDoc::Encoding.read_file @tempfile.path, Encoding::UTF_8
expected = "# coding: ISO-2022-JP\n:\xe3\x82\xb3\xe3\x83\x9e\xe3\x83\xb3\xe3\x83\x89:"
expected = RDoc::Encoding.change_encoding expected, Encoding::UTF_8
assert_equal expected, contents
assert_equal Encoding::UTF_8, contents.encoding
end
def test_class_detect_encoding
s = "# coding: UTF-8\n"
encoding = RDoc::Encoding.detect_encoding s
# sanity check for 1.8
assert_equal Encoding::UTF_8, encoding
s = "#!/bin/ruby\n# coding: UTF-8\n"
encoding = RDoc::Encoding.detect_encoding s
assert_equal Encoding::UTF_8, encoding
s = "<?xml version='1.0' encoding='UTF-8'?>\n"
encoding = RDoc::Encoding.detect_encoding s
assert_equal Encoding::UTF_8, encoding
s = "<?xml version='1.0' encoding=\"UTF-8\"?>\n"
encoding = RDoc::Encoding.detect_encoding s
assert_equal Encoding::UTF_8, encoding
end
def test_class_set_encoding_bad
s = ""
encoding = RDoc::Encoding.detect_encoding s
assert_nil encoding
s = "# vim:set fileencoding=utf-8:\n"
encoding = RDoc::Encoding.detect_encoding s
assert_nil encoding
s = "# vim:set fileencoding=utf-8:\n"
encoding = RDoc::Encoding.detect_encoding s
assert_nil encoding
assert_raise ArgumentError do
s = RDoc::Encoding.detect_encoding "# -*- encoding: undecided -*-\n"
end
end
def test_sanity
assert_equal Encoding::US_ASCII, ''.encoding,
'If this file is not ASCII tests may incorrectly pass'
end
end
|