Home | History | Annotate | Download | only in test
      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()
     67