14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm#! /usr/bin/env python 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test import test_support 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport __future__ 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmGOOD_SERIALS = ("alpha", "beta", "candidate", "final") 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfeatures = __future__.all_feature_names 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass FutureTest(unittest.TestCase): 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_names(self): 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Verify that all_feature_names appears correct. 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm given_feature_names = features[:] 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for name in dir(__future__): 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm obj = getattr(__future__, name, None) 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if obj is not None and isinstance(obj, __future__._Feature): 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertTrue( 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm name in given_feature_names, 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "%r should have been in all_feature_names" % name 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ) 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm given_feature_names.remove(name) 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(len(given_feature_names), 0, 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "all_feature_names has too much: %r" % given_feature_names) 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_attributes(self): 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for feature in features: 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm value = getattr(__future__, feature) 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm optional = value.getOptionalRelease() 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm mandatory = value.getMandatoryRelease() 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a = self.assertTrue 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm e = self.assertEqual 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def check(t, name): 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a(isinstance(t, tuple), "%s isn't tuple" % name) 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm e(len(t), 5, "%s isn't 5-tuple" % name) 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm (major, minor, micro, level, serial) = t 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a(isinstance(major, int), "%s major isn't int" % name) 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a(isinstance(minor, int), "%s minor isn't int" % name) 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a(isinstance(micro, int), "%s micro isn't int" % name) 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a(isinstance(level, basestring), 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "%s level isn't string" % name) 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a(level in GOOD_SERIALS, 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "%s level string has unknown value" % name) 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a(isinstance(serial, int), "%s serial isn't int" % name) 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check(optional, "optional") 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if mandatory is not None: 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm check(mandatory, "mandatory") 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a(optional < mandatory, 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "optional not less than mandatory, and mandatory not None") 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a(hasattr(value, "compiler_flag"), 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm "feature is missing a .compiler_flag attr") 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Make sure the compile accepts the flag. 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm compile("", "<test>", "exec", value.compiler_flag) 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a(isinstance(getattr(value, "compiler_flag"), int), 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ".compiler_flag isn't int") 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_main(): 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_support.run_unittest(FutureTest) 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == "__main__": 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_main() 67