Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e8e6be4

Browse files
committed
Add test for copy.replace() for struct sequence objects
1 parent 5ee97a8 commit e8e6be4

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

Lib/test/test_copy.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import copyreg
55
import weakref
66
import abc
7+
import os
8+
import time
79
from operator import le, lt, ge, gt, eq, ne, attrgetter
810

911
import unittest
@@ -945,6 +947,28 @@ def test_namedtuple(self):
945947
with self.assertRaisesRegex(ValueError, 'unexpected field name'):
946948
copy.replace(p, x=1, error=2)
947949

950+
def test_structseq(self):
951+
t = time.gmtime(0)
952+
self.assertEqual(copy.replace(t), (1970, 1, 1, 0, 0, 0, 3, 1, 0))
953+
self.assertEqual(copy.replace(t, tm_year=2000),
954+
(2000, 1, 1, 0, 0, 0, 3, 1, 0))
955+
self.assertEqual(copy.replace(t, tm_mon=2),
956+
(1970, 2, 1, 0, 0, 0, 3, 1, 0))
957+
self.assertEqual(copy.replace(t, tm_year=2000, tm_mon=2),
958+
(2000, 2, 1, 0, 0, 0, 3, 1, 0))
959+
with self.assertRaisesRegex(ValueError, 'unexpected field name'):
960+
copy.replace(t, tm_year=2000, error=2)
961+
962+
assert os.stat_result.n_unnamed_fields > 0
963+
r = os.stat_result(range(os.stat_result.n_sequence_fields), {'st_atime_ns': -1})
964+
self.assertHasAttr(r, 'st_atime_ns')
965+
self.assertEqual(r.st_atime_ns, -1)
966+
with self.assertRaisesRegex(AttributeError, 'readonly attribute'):
967+
r.st_atime_ns = -2
968+
r2 = copy.replace(r, st_atime_ns=-3)
969+
self.assertHasAttr(r2, 'st_atime_ns')
970+
self.assertEqual(r2.st_atime_ns, -3)
971+
948972
def test_dataclass(self):
949973
from dataclasses import dataclass
950974
@dataclass

Objects/structseq.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*/
99

1010
#include "Python.h"
11-
#include "pycore_dict.h" // _PyDict_Pop(()
11+
#include "pycore_dict.h" // _PyDict_Pop()
1212
#include "pycore_tuple.h" // _PyTuple_FromArray()
1313
#include "pycore_object.h" // _PyObject_GC_TRACK()
1414

0 commit comments

Comments
 (0)