(root)/
Python-3.11.7/
Lib/
test/
test_future_stmt/
test_future_flags.py
       1  import unittest
       2  import __future__
       3  
       4  GOOD_SERIALS = ("alpha", "beta", "candidate", "final")
       5  
       6  features = __future__.all_feature_names
       7  
       8  class ESC[4;38;5;81mFutureTest(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
       9  
      10      def test_names(self):
      11          # Verify that all_feature_names appears correct.
      12          given_feature_names = features[:]
      13          for name in dir(__future__):
      14              obj = getattr(__future__, name, None)
      15              if obj is not None and isinstance(obj, __future__._Feature):
      16                  self.assertTrue(
      17                      name in given_feature_names,
      18                      "%r should have been in all_feature_names" % name
      19                  )
      20                  given_feature_names.remove(name)
      21          self.assertEqual(len(given_feature_names), 0,
      22                 "all_feature_names has too much: %r" % given_feature_names)
      23  
      24      def test_attributes(self):
      25          for feature in features:
      26              value = getattr(__future__, feature)
      27  
      28              optional = value.getOptionalRelease()
      29              mandatory = value.getMandatoryRelease()
      30  
      31              a = self.assertTrue
      32              e = self.assertEqual
      33              def check(t, name):
      34                  a(isinstance(t, tuple), "%s isn't tuple" % name)
      35                  e(len(t), 5, "%s isn't 5-tuple" % name)
      36                  (major, minor, micro, level, serial) = t
      37                  a(isinstance(major, int), "%s major isn't int"  % name)
      38                  a(isinstance(minor, int), "%s minor isn't int" % name)
      39                  a(isinstance(micro, int), "%s micro isn't int" % name)
      40                  a(isinstance(level, str),
      41                      "%s level isn't string" % name)
      42                  a(level in GOOD_SERIALS,
      43                         "%s level string has unknown value" % name)
      44                  a(isinstance(serial, int), "%s serial isn't int" % name)
      45  
      46              check(optional, "optional")
      47              if mandatory is not None:
      48                  check(mandatory, "mandatory")
      49                  a(optional < mandatory,
      50                         "optional not less than mandatory, and mandatory not None")
      51  
      52              a(hasattr(value, "compiler_flag"),
      53                     "feature is missing a .compiler_flag attr")
      54              # Make sure the compile accepts the flag.
      55              compile("", "<test>", "exec", value.compiler_flag)
      56              a(isinstance(getattr(value, "compiler_flag"), int),
      57                     ".compiler_flag isn't int")
      58  
      59  
      60  if __name__ == "__main__":
      61      unittest.main()