Change a variable type to avoid signed overflow; replace repeated '19999' constant...
[python.git] / Lib / test / test_future.py
blob81d0a3ed2a092646c0a14c021debdf6d28d58003
1 # Test various flavors of legal and illegal future statements
3 import unittest
4 from test import test_support
5 import re
7 rx = re.compile('\((\S+).py, line (\d+)')
9 def get_error_location(msg):
10 mo = rx.search(str(msg))
11 return mo.group(1, 2)
13 class FutureTest(unittest.TestCase):
15 def test_future1(self):
16 test_support.unload('test_future1')
17 from test import test_future1
18 self.assertEqual(test_future1.result, 6)
20 def test_future2(self):
21 test_support.unload('test_future2')
22 from test import test_future2
23 self.assertEqual(test_future2.result, 6)
25 def test_future3(self):
26 test_support.unload('test_future3')
27 from test import test_future3
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")
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")
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")
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")
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")
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")
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")
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")
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")
105 def test_multiple_features(self):
106 test_support.unload("test.test_future5")
107 from test import test_future5
109 def test_unicode_literals_exec(self):
110 scope = {}
111 exec "from __future__ import unicode_literals; x = ''" in scope
112 self.assertTrue(isinstance(scope["x"], unicode))
115 def test_main():
116 test_support.run_unittest(FutureTest)
118 if __name__ == "__main__":
119 test_main()