| 1 | n/a | import test.support, unittest |
|---|
| 2 | n/a | from test.support import TESTFN, unlink, unload |
|---|
| 3 | n/a | import importlib, os, sys |
|---|
| 4 | n/a | |
|---|
| 5 | n/a | class CodingTest(unittest.TestCase): |
|---|
| 6 | n/a | def test_bad_coding(self): |
|---|
| 7 | n/a | module_name = 'bad_coding' |
|---|
| 8 | n/a | self.verify_bad_module(module_name) |
|---|
| 9 | n/a | |
|---|
| 10 | n/a | def test_bad_coding2(self): |
|---|
| 11 | n/a | module_name = 'bad_coding2' |
|---|
| 12 | n/a | self.verify_bad_module(module_name) |
|---|
| 13 | n/a | |
|---|
| 14 | n/a | def verify_bad_module(self, module_name): |
|---|
| 15 | n/a | self.assertRaises(SyntaxError, __import__, 'test.' + module_name) |
|---|
| 16 | n/a | |
|---|
| 17 | n/a | path = os.path.dirname(__file__) |
|---|
| 18 | n/a | filename = os.path.join(path, module_name + '.py') |
|---|
| 19 | n/a | with open(filename, "rb") as fp: |
|---|
| 20 | n/a | bytes = fp.read() |
|---|
| 21 | n/a | self.assertRaises(SyntaxError, compile, bytes, filename, 'exec') |
|---|
| 22 | n/a | |
|---|
| 23 | n/a | def test_exec_valid_coding(self): |
|---|
| 24 | n/a | d = {} |
|---|
| 25 | n/a | exec('# coding: cp949\na = 5\n', d) |
|---|
| 26 | n/a | self.assertEqual(d['a'], 5) |
|---|
| 27 | n/a | |
|---|
| 28 | n/a | def test_file_parse(self): |
|---|
| 29 | n/a | # issue1134: all encodings outside latin-1 and utf-8 fail on |
|---|
| 30 | n/a | # multiline strings and long lines (>512 columns) |
|---|
| 31 | n/a | unload(TESTFN) |
|---|
| 32 | n/a | sys.path.insert(0, os.curdir) |
|---|
| 33 | n/a | filename = TESTFN + ".py" |
|---|
| 34 | n/a | f = open(filename, "w") |
|---|
| 35 | n/a | try: |
|---|
| 36 | n/a | f.write("# -*- coding: cp1252 -*-\n") |
|---|
| 37 | n/a | f.write("'''A short string\n") |
|---|
| 38 | n/a | f.write("'''\n") |
|---|
| 39 | n/a | f.write("'A very long string %s'\n" % ("X" * 1000)) |
|---|
| 40 | n/a | f.close() |
|---|
| 41 | n/a | |
|---|
| 42 | n/a | importlib.invalidate_caches() |
|---|
| 43 | n/a | __import__(TESTFN) |
|---|
| 44 | n/a | finally: |
|---|
| 45 | n/a | f.close() |
|---|
| 46 | n/a | unlink(filename) |
|---|
| 47 | n/a | unlink(filename + "c") |
|---|
| 48 | n/a | unload(TESTFN) |
|---|
| 49 | n/a | del sys.path[0] |
|---|
| 50 | n/a | |
|---|
| 51 | n/a | def test_error_from_string(self): |
|---|
| 52 | n/a | # See http://bugs.python.org/issue6289 |
|---|
| 53 | n/a | input = "# coding: ascii\n\N{SNOWMAN}".encode('utf-8') |
|---|
| 54 | n/a | with self.assertRaises(SyntaxError) as c: |
|---|
| 55 | n/a | compile(input, "<string>", "exec") |
|---|
| 56 | n/a | expected = "'ascii' codec can't decode byte 0xe2 in position 16: " \ |
|---|
| 57 | n/a | "ordinal not in range(128)" |
|---|
| 58 | n/a | self.assertTrue(c.exception.args[0].startswith(expected)) |
|---|
| 59 | n/a | |
|---|
| 60 | n/a | |
|---|
| 61 | n/a | def test_main(): |
|---|
| 62 | n/a | test.support.run_unittest(CodingTest) |
|---|
| 63 | n/a | |
|---|
| 64 | n/a | if __name__ == "__main__": |
|---|
| 65 | n/a | test_main() |
|---|