1 | # Test various flavors of legal and illegal future statements
|
---|
2 |
|
---|
3 | import unittest
|
---|
4 | from test import test_support
|
---|
5 | import re
|
---|
6 |
|
---|
7 | rx = re.compile('\((\S+).py, line (\d+)')
|
---|
8 |
|
---|
9 | def get_error_location(msg):
|
---|
10 | mo = rx.search(str(msg))
|
---|
11 | return mo.group(1, 2)
|
---|
12 |
|
---|
13 | class FutureTest(unittest.TestCase):
|
---|
14 |
|
---|
15 | def test_future1(self):
|
---|
16 | test_support.unload('test_future1')
|
---|
17 | from test import test_future1
|
---|
18 | self.assertEqual(test_future1.result, 6)
|
---|
19 |
|
---|
20 | def test_future2(self):
|
---|
21 | test_support.unload('test_future2')
|
---|
22 | from test import test_future2
|
---|
23 | self.assertEqual(test_future2.result, 6)
|
---|
24 |
|
---|
25 | def test_future3(self):
|
---|
26 | test_support.unload('test_future3')
|
---|
27 | from test import test_future3
|
---|
28 |
|
---|
29 | def test_badfuture3(self):
|
---|
30 | try:
|
---|
31 | from test import badsyntax_future3
|
---|
32 | except SyntaxError, msg:
|
---|
33 | self.assertEqual(get_error_location(msg), ("badsyntax_future3", '3'))
|
---|
34 | else:
|
---|
35 | self.fail("expected exception didn't occur")
|
---|
36 |
|
---|
37 | def test_badfuture4(self):
|
---|
38 | try:
|
---|
39 | from test import badsyntax_future4
|
---|
40 | except SyntaxError, msg:
|
---|
41 | self.assertEqual(get_error_location(msg), ("badsyntax_future4", '3'))
|
---|
42 | else:
|
---|
43 | self.fail("expected exception didn't occur")
|
---|
44 |
|
---|
45 | def test_badfuture5(self):
|
---|
46 | try:
|
---|
47 | from test import badsyntax_future5
|
---|
48 | except SyntaxError, msg:
|
---|
49 | self.assertEqual(get_error_location(msg), ("badsyntax_future5", '4'))
|
---|
50 | else:
|
---|
51 | self.fail("expected exception didn't occur")
|
---|
52 |
|
---|
53 | def test_badfuture6(self):
|
---|
54 | try:
|
---|
55 | from test import badsyntax_future6
|
---|
56 | except SyntaxError, msg:
|
---|
57 | self.assertEqual(get_error_location(msg), ("badsyntax_future6", '3'))
|
---|
58 | else:
|
---|
59 | self.fail("expected exception didn't occur")
|
---|
60 |
|
---|
61 | def test_badfuture7(self):
|
---|
62 | try:
|
---|
63 | from test import badsyntax_future7
|
---|
64 | except SyntaxError, msg:
|
---|
65 | self.assertEqual(get_error_location(msg), ("badsyntax_future7", '3'))
|
---|
66 | else:
|
---|
67 | self.fail("expected exception didn't occur")
|
---|
68 |
|
---|
69 | def test_badfuture8(self):
|
---|
70 | try:
|
---|
71 | from test import badsyntax_future8
|
---|
72 | except SyntaxError, msg:
|
---|
73 | self.assertEqual(get_error_location(msg), ("badsyntax_future8", '3'))
|
---|
74 | else:
|
---|
75 | self.fail("expected exception didn't occur")
|
---|
76 |
|
---|
77 | def test_badfuture9(self):
|
---|
78 | try:
|
---|
79 | from test import badsyntax_future9
|
---|
80 | except SyntaxError, msg:
|
---|
81 | self.assertEqual(get_error_location(msg), ("badsyntax_future9", '3'))
|
---|
82 | else:
|
---|
83 | self.fail("expected exception didn't occur")
|
---|
84 |
|
---|
85 | def test_parserhack(self):
|
---|
86 | # test that the parser.c::future_hack function works as expected
|
---|
87 | # Note: although this test must pass, it's not testing the original
|
---|
88 | # bug as of 2.6 since the with statement is not optional and
|
---|
89 | # the parser hack disabled. If a new keyword is introduced in
|
---|
90 | # 2.6, change this to refer to the new future import.
|
---|
91 | try:
|
---|
92 | exec "from __future__ import print_function; print 0"
|
---|
93 | except SyntaxError:
|
---|
94 | pass
|
---|
95 | else:
|
---|
96 | self.fail("syntax error didn't occur")
|
---|
97 |
|
---|
98 | try:
|
---|
99 | exec "from __future__ import (print_function); print 0"
|
---|
100 | except SyntaxError:
|
---|
101 | pass
|
---|
102 | else:
|
---|
103 | self.fail("syntax error didn't occur")
|
---|
104 |
|
---|
105 | def test_multiple_features(self):
|
---|
106 | test_support.unload("test.test_future5")
|
---|
107 | from test import test_future5
|
---|
108 |
|
---|
109 | def test_unicode_literals_exec(self):
|
---|
110 | scope = {}
|
---|
111 | exec "from __future__ import unicode_literals; x = ''" in scope
|
---|
112 | self.assertIsInstance(scope["x"], unicode)
|
---|
113 |
|
---|
114 |
|
---|
115 | def test_main():
|
---|
116 | test_support.run_unittest(FutureTest)
|
---|
117 |
|
---|
118 | if __name__ == "__main__":
|
---|
119 | test_main()
|
---|