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