(root)/
Python-3.12.0/
Lib/
test/
test_structseq.py
       1  import os
       2  import time
       3  import unittest
       4  
       5  
       6  class ESC[4;38;5;81mStructSeqTest(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
       7  
       8      def test_tuple(self):
       9          t = time.gmtime()
      10          self.assertIsInstance(t, tuple)
      11          astuple = tuple(t)
      12          self.assertEqual(len(t), len(astuple))
      13          self.assertEqual(t, astuple)
      14  
      15          # Check that slicing works the same way; at one point, slicing t[i:j] with
      16          # 0 < i < j could produce NULLs in the result.
      17          for i in range(-len(t), len(t)):
      18              self.assertEqual(t[i:], astuple[i:])
      19              for j in range(-len(t), len(t)):
      20                  self.assertEqual(t[i:j], astuple[i:j])
      21  
      22          for j in range(-len(t), len(t)):
      23              self.assertEqual(t[:j], astuple[:j])
      24  
      25          self.assertRaises(IndexError, t.__getitem__, -len(t)-1)
      26          self.assertRaises(IndexError, t.__getitem__, len(t))
      27          for i in range(-len(t), len(t)-1):
      28              self.assertEqual(t[i], astuple[i])
      29  
      30      def test_repr(self):
      31          t = time.gmtime()
      32          self.assertTrue(repr(t))
      33          t = time.gmtime(0)
      34          self.assertEqual(repr(t),
      35              "time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, "
      36              "tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)")
      37          # os.stat() gives a complicated struct sequence.
      38          st = os.stat(__file__)
      39          rep = repr(st)
      40          self.assertTrue(rep.startswith("os.stat_result"))
      41          self.assertIn("st_mode=", rep)
      42          self.assertIn("st_ino=", rep)
      43          self.assertIn("st_dev=", rep)
      44  
      45      def test_concat(self):
      46          t1 = time.gmtime()
      47          t2 = t1 + tuple(t1)
      48          for i in range(len(t1)):
      49              self.assertEqual(t2[i], t2[i+len(t1)])
      50  
      51      def test_repeat(self):
      52          t1 = time.gmtime()
      53          t2 = 3 * t1
      54          for i in range(len(t1)):
      55              self.assertEqual(t2[i], t2[i+len(t1)])
      56              self.assertEqual(t2[i], t2[i+2*len(t1)])
      57  
      58      def test_contains(self):
      59          t1 = time.gmtime()
      60          for item in t1:
      61              self.assertIn(item, t1)
      62          self.assertNotIn(-42, t1)
      63  
      64      def test_hash(self):
      65          t1 = time.gmtime()
      66          self.assertEqual(hash(t1), hash(tuple(t1)))
      67  
      68      def test_cmp(self):
      69          t1 = time.gmtime()
      70          t2 = type(t1)(t1)
      71          self.assertEqual(t1, t2)
      72          self.assertTrue(not (t1 < t2))
      73          self.assertTrue(t1 <= t2)
      74          self.assertTrue(not (t1 > t2))
      75          self.assertTrue(t1 >= t2)
      76          self.assertTrue(not (t1 != t2))
      77  
      78      def test_fields(self):
      79          t = time.gmtime()
      80          self.assertEqual(len(t), t.n_sequence_fields)
      81          self.assertEqual(t.n_unnamed_fields, 0)
      82          self.assertEqual(t.n_fields, time._STRUCT_TM_ITEMS)
      83  
      84      def test_constructor(self):
      85          t = time.struct_time
      86  
      87          self.assertRaises(TypeError, t)
      88          self.assertRaises(TypeError, t, None)
      89          self.assertRaises(TypeError, t, "123")
      90          self.assertRaises(TypeError, t, "123", dict={})
      91          self.assertRaises(TypeError, t, "123456789", dict=None)
      92  
      93          s = "123456789"
      94          self.assertEqual("".join(t(s)), s)
      95  
      96      def test_eviltuple(self):
      97          class ESC[4;38;5;81mExc(ESC[4;38;5;149mException):
      98              pass
      99  
     100          # Devious code could crash structseqs' constructors
     101          class ESC[4;38;5;81mC:
     102              def __getitem__(self, i):
     103                  raise Exc
     104              def __len__(self):
     105                  return 9
     106  
     107          self.assertRaises(Exc, time.struct_time, C())
     108  
     109      def test_reduce(self):
     110          t = time.gmtime()
     111          x = t.__reduce__()
     112  
     113      def test_extended_getslice(self):
     114          # Test extended slicing by comparing with list slicing.
     115          t = time.gmtime()
     116          L = list(t)
     117          indices = (0, None, 1, 3, 19, 300, -1, -2, -31, -300)
     118          for start in indices:
     119              for stop in indices:
     120                  # Skip step 0 (invalid)
     121                  for step in indices[1:]:
     122                      self.assertEqual(list(t[start:stop:step]),
     123                                       L[start:stop:step])
     124  
     125      def test_match_args(self):
     126          expected_args = ('tm_year', 'tm_mon', 'tm_mday', 'tm_hour', 'tm_min',
     127                           'tm_sec', 'tm_wday', 'tm_yday', 'tm_isdst')
     128          self.assertEqual(time.struct_time.__match_args__, expected_args)
     129  
     130      def test_match_args_with_unnamed_fields(self):
     131          expected_args = ('st_mode', 'st_ino', 'st_dev', 'st_nlink', 'st_uid',
     132                           'st_gid', 'st_size')
     133          self.assertEqual(os.stat_result.n_unnamed_fields, 3)
     134          self.assertEqual(os.stat_result.__match_args__, expected_args)
     135  
     136  
     137  if __name__ == "__main__":
     138      unittest.main()