Skip to content

Commit 8a35c8f

Browse files
authored
Merge pull request RustPython#2009 from ohgree/test/future
Added CPython 3.8.3's test___future__.py.
2 parents 2d31f4e + 7169541 commit 8a35c8f

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

Lib/test/test___future__.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import unittest
2+
import __future__
3+
4+
GOOD_SERIALS = ("alpha", "beta", "candidate", "final")
5+
6+
features = __future__.all_feature_names
7+
8+
class FutureTest(unittest.TestCase):
9+
10+
def test_names(self):
11+
# Verify that all_feature_names appears correct.
12+
given_feature_names = features[:]
13+
for name in dir(__future__):
14+
obj = getattr(__future__, name, None)
15+
if obj is not None and isinstance(obj, __future__._Feature):
16+
self.assertTrue(
17+
name in given_feature_names,
18+
"%r should have been in all_feature_names" % name
19+
)
20+
given_feature_names.remove(name)
21+
self.assertEqual(len(given_feature_names), 0,
22+
"all_feature_names has too much: %r" % given_feature_names)
23+
24+
def test_attributes(self):
25+
for feature in features:
26+
value = getattr(__future__, feature)
27+
28+
optional = value.getOptionalRelease()
29+
mandatory = value.getMandatoryRelease()
30+
31+
a = self.assertTrue
32+
e = self.assertEqual
33+
def check(t, name):
34+
a(isinstance(t, tuple), "%s isn't tuple" % name)
35+
e(len(t), 5, "%s isn't 5-tuple" % name)
36+
(major, minor, micro, level, serial) = t
37+
a(isinstance(major, int), "%s major isn't int" % name)
38+
a(isinstance(minor, int), "%s minor isn't int" % name)
39+
a(isinstance(micro, int), "%s micro isn't int" % name)
40+
a(isinstance(level, str),
41+
"%s level isn't string" % name)
42+
a(level in GOOD_SERIALS,
43+
"%s level string has unknown value" % name)
44+
a(isinstance(serial, int), "%s serial isn't int" % name)
45+
46+
check(optional, "optional")
47+
if mandatory is not None:
48+
check(mandatory, "mandatory")
49+
a(optional < mandatory,
50+
"optional not less than mandatory, and mandatory not None")
51+
52+
a(hasattr(value, "compiler_flag"),
53+
"feature is missing a .compiler_flag attr")
54+
# Make sure the compile accepts the flag.
55+
compile("", "<test>", "exec", value.compiler_flag)
56+
a(isinstance(getattr(value, "compiler_flag"), int),
57+
".compiler_flag isn't int")
58+
59+
60+
if __name__ == "__main__":
61+
unittest.main()

0 commit comments

Comments
 (0)