blob: 6f73c7fddfda391d4babc05415dc573e63dcc056 [file] [log] [blame]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001import unittest
Benjamin Petersonee8712c2008-05-20 21:35:26 +00002from test import support
Tim Petersffc215a2001-02-26 21:14:49 +00003import __future__
4
5GOOD_SERIALS = ("alpha", "beta", "candidate", "final")
6
Tim Petersde642bd2001-08-17 19:49:02 +00007features = __future__.all_feature_names
Tim Petersaa320702001-08-18 20:18:49 +00008
Thomas Wouters89f507f2006-12-13 04:49:30 +00009class FutureTest(unittest.TestCase):
Tim Petersaa320702001-08-18 20:18:49 +000010
Thomas Wouters89f507f2006-12-13 04:49:30 +000011 def test_names(self):
12 # Verify that all_feature_names appears correct.
13 given_feature_names = features[:]
14 for name in dir(__future__):
15 obj = getattr(__future__, name, None)
16 if obj is not None and isinstance(obj, __future__._Feature):
Benjamin Petersonc9c0f202009-06-30 23:06:06 +000017 self.assertTrue(
Thomas Wouters89f507f2006-12-13 04:49:30 +000018 name in given_feature_names,
19 "%r should have been in all_feature_names" % name
20 )
21 given_feature_names.remove(name)
22 self.assertEqual(len(given_feature_names), 0,
23 "all_feature_names has too much: %r" % given_feature_names)
Tim Petersffc215a2001-02-26 21:14:49 +000024
Thomas Wouters89f507f2006-12-13 04:49:30 +000025 def test_attributes(self):
26 for feature in features:
27 value = getattr(__future__, feature)
Tim Petersffc215a2001-02-26 21:14:49 +000028
Thomas Wouters89f507f2006-12-13 04:49:30 +000029 optional = value.getOptionalRelease()
30 mandatory = value.getMandatoryRelease()
Tim Petersffc215a2001-02-26 21:14:49 +000031
Benjamin Petersonc9c0f202009-06-30 23:06:06 +000032 a = self.assertTrue
Thomas Wouters89f507f2006-12-13 04:49:30 +000033 e = self.assertEqual
34 def check(t, name):
35 a(isinstance(t, tuple), "%s isn't tuple" % name)
36 e(len(t), 5, "%s isn't 5-tuple" % name)
37 (major, minor, micro, level, serial) = t
38 a(isinstance(major, int), "%s major isn't int" % name)
39 a(isinstance(minor, int), "%s minor isn't int" % name)
40 a(isinstance(micro, int), "%s micro isn't int" % name)
Guido van Rossum3172c5d2007-10-16 18:12:55 +000041 a(isinstance(level, str),
Thomas Wouters89f507f2006-12-13 04:49:30 +000042 "%s level isn't string" % name)
43 a(level in GOOD_SERIALS,
44 "%s level string has unknown value" % name)
45 a(isinstance(serial, int), "%s serial isn't int" % name)
Tim Petersde642bd2001-08-17 19:49:02 +000046
Thomas Wouters89f507f2006-12-13 04:49:30 +000047 check(optional, "optional")
48 if mandatory is not None:
49 check(mandatory, "mandatory")
50 a(optional < mandatory,
51 "optional not less than mandatory, and mandatory not None")
52
53 a(hasattr(value, "compiler_flag"),
54 "feature is missing a .compiler_flag attr")
Benjamin Petersonbceae0c2009-07-02 21:55:39 +000055 # Make sure the compile accepts the flag.
56 compile("", "<test>", "exec", value.compiler_flag)
Thomas Wouters89f507f2006-12-13 04:49:30 +000057 a(isinstance(getattr(value, "compiler_flag"), int),
58 ".compiler_flag isn't int")
59
Benjamin Petersonbceae0c2009-07-02 21:55:39 +000060
Thomas Wouters89f507f2006-12-13 04:49:30 +000061def test_main():
Benjamin Petersonee8712c2008-05-20 21:35:26 +000062 support.run_unittest(FutureTest)
Thomas Wouters89f507f2006-12-13 04:49:30 +000063
64if __name__ == "__main__":
65 test_main()