3 from test
import test_support
6 GOOD_SERIALS
= ("alpha", "beta", "candidate", "final")
8 features
= __future__
.all_feature_names
10 class FutureTest(unittest
.TestCase
):
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
):
19 name
in given_feature_names
,
20 "%r should have been in all_feature_names" % name
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
)
26 def test_attributes(self
):
27 for feature
in features
:
28 value
= getattr(__future__
, feature
)
30 optional
= value
.getOptionalRelease()
31 mandatory
= value
.getMandatoryRelease()
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
)
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")
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")
63 test_support
.run_unittest(FutureTest
)
65 if __name__
== "__main__":