diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-03-20 20:29:40 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-03-20 20:29:40 (GMT) |
commit | cac1d236a24e2755c05103d485a3b42a884b5a45 (patch) | |
tree | 0a783f2aba3deeaaf6d69c0d2dd72c4b21488f82 /Lib/test/test_source_encoding.py | |
parent | 67818a1d702cab57bdbf849faf2272f3bf1e405f (diff) | |
download | cpython-cac1d236a24e2755c05103d485a3b42a884b5a45.zip cpython-cac1d236a24e2755c05103d485a3b42a884b5a45.tar.gz cpython-cac1d236a24e2755c05103d485a3b42a884b5a45.tar.bz2 |
Added new tests for detecting Python source code encoding.
Diffstat (limited to 'Lib/test/test_source_encoding.py')
-rw-r--r-- | Lib/test/test_source_encoding.py | 78 |
1 files changed, 75 insertions, 3 deletions
diff --git a/Lib/test/test_source_encoding.py b/Lib/test/test_source_encoding.py index 5ea8b8f..46f0040 100644 --- a/Lib/test/test_source_encoding.py +++ b/Lib/test/test_source_encoding.py @@ -1,9 +1,12 @@ # -*- coding: koi8-r -*- -import test.test_support, unittest +import unittest +from test.test_support import run_unittest, rmtree, captured_stdout +import script_helper import os +import tempfile -class SourceEncodingTest(unittest.TestCase): +class MiscSourceEncodingTest(unittest.TestCase): def test_pep263(self): self.assertEqual( @@ -90,8 +93,77 @@ class SourceEncodingTest(unittest.TestCase): self.assertTrue(c.exception.args[0].startswith(expected)) +class AbstractSourceEncodingTest: + + def test_first_coding_line(self): + src = ('#coding:iso8859-15\n' + 'print(repr(u"\xc3\xa4"))\n') + self.check_script_output(src, r"u'\xc3\u20ac'") + + def test_second_coding_line(self): + src = ('#\n' + '#coding:iso8859-15\n' + 'print(repr(u"\xc3\xa4"))\n') + self.check_script_output(src, r"u'\xc3\u20ac'") + + def test_double_coding_line(self): + # If the first line matches the second line is ignored. + src = ('#coding:iso8859-15\n' + '#coding:latin1\n' + 'print(repr(u"\xc3\xa4"))\n') + self.check_script_output(src, r"u'\xc3\u20ac'") + + def test_double_coding_same_line(self): + src = ('#coding:iso8859-15 coding:latin1\n' + 'print(repr(u"\xc3\xa4"))\n') + self.check_script_output(src, r"u'\xc3\u20ac'") + + def test_first_non_utf8_coding_line(self): + src = ('#coding:iso-8859-15 \xa4\n' + 'print(repr(u"\xc3\xa4"))\n') + self.check_script_output(src, r"u'\xc3\u20ac'") + + def test_second_non_utf8_coding_line(self): + src = ('\n' + '#coding:iso-8859-15 \xa4\n' + 'print(repr(u"\xc3\xa4"))\n') + self.check_script_output(src, r"u'\xc3\u20ac'") + + def test_utf8_bom(self): + src = ('\xef\xbb\xbfprint(repr(u"\xc3\xa4"))\n') + self.check_script_output(src, r"u'\xe4'") + + def test_utf8_bom_and_utf8_coding_line(self): + src = ('\xef\xbb\xbf#coding:utf-8\n' + 'print(repr(u"\xc3\xa4"))\n') + self.check_script_output(src, r"u'\xe4'") + + +class BytesSourceEncodingTest(AbstractSourceEncodingTest, unittest.TestCase): + + def check_script_output(self, src, expected): + with captured_stdout() as stdout: + exec(src) + out = stdout.getvalue().encode('latin1') + self.assertEqual(out.rstrip(), expected) + + +class FileSourceEncodingTest(AbstractSourceEncodingTest, unittest.TestCase): + + def check_script_output(self, src, expected): + tmpd = tempfile.mkdtemp() + try: + fn = os.path.join(tmpd, 'test.py') + with open(fn, 'wb') as fp: + fp.write(src) + rc, out, err = script_helper.assert_python_ok(fn) + finally: + rmtree(tmpd) + self.assertEqual(out.rstrip(), expected) + + def test_main(): - test.test_support.run_unittest(SourceEncodingTest) + run_unittest(MiscSourceEncodingTest, BytesSourceEncodingTest, FileSourceEncodingTest) if __name__ == "__main__": test_main() |