move sections
[python/dscho.git] / Lib / test / test___future__.py
blob1d8f8e6852503264e96411d9e98be4e1875bfa07
1 #! /usr/bin/env python
2 import unittest
3 from test import test_support
4 import __future__
6 GOOD_SERIALS = ("alpha", "beta", "candidate", "final")
8 features = __future__.all_feature_names
10 class FutureTest(unittest.TestCase):
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
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()
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)
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")
62 def test_main():
63 test_support.run_unittest(FutureTest)
65 if __name__ == "__main__":
66 test_main()