|
1 | 1 | import copy
|
2 | 2 | import os
|
3 | 3 | import pickle
|
| 4 | +import re |
4 | 5 | import time
|
5 | 6 | import unittest
|
6 | 7 |
|
@@ -91,10 +92,69 @@ def test_constructor(self):
|
91 | 92 | self.assertRaises(TypeError, t, "123")
|
92 | 93 | self.assertRaises(TypeError, t, "123", dict={})
|
93 | 94 | self.assertRaises(TypeError, t, "123456789", dict=None)
|
| 95 | + self.assertRaises(TypeError, t, seq="123456789", dict={}) |
| 96 | + |
| 97 | + self.assertEqual(t("123456789"), tuple("123456789")) |
| 98 | + self.assertEqual(t("123456789", {}), tuple("123456789")) |
| 99 | + self.assertEqual(t("123456789", dict={}), tuple("123456789")) |
| 100 | + self.assertEqual(t(sequence="123456789", dict={}), tuple("123456789")) |
| 101 | + |
| 102 | + self.assertEqual(t("1234567890"), tuple("123456789")) |
| 103 | + self.assertEqual(t("1234567890").tm_zone, "0") |
| 104 | + self.assertEqual(t("123456789", {"tm_zone": "some zone"}), tuple("123456789")) |
| 105 | + self.assertEqual(t("123456789", {"tm_zone": "some zone"}).tm_zone, "some zone") |
94 | 106 |
|
95 | 107 | s = "123456789"
|
96 | 108 | self.assertEqual("".join(t(s)), s)
|
97 | 109 |
|
| 110 | + def test_constructor_with_duplicate_fields(self): |
| 111 | + t = time.struct_time |
| 112 | + |
| 113 | + error_message = re.escape("got duplicate or unexpected field name(s)") |
| 114 | + with self.assertRaisesRegex(TypeError, error_message): |
| 115 | + t("1234567890", dict={"tm_zone": "some zone"}) |
| 116 | + with self.assertRaisesRegex(TypeError, error_message): |
| 117 | + t("1234567890", dict={"tm_zone": "some zone", "tm_mon": 1}) |
| 118 | + with self.assertRaisesRegex(TypeError, error_message): |
| 119 | + t("1234567890", dict={"error": 0, "tm_zone": "some zone"}) |
| 120 | + with self.assertRaisesRegex(TypeError, error_message): |
| 121 | + t("1234567890", dict={"error": 0, "tm_zone": "some zone", "tm_mon": 1}) |
| 122 | + |
| 123 | + def test_constructor_with_duplicate_unnamed_fields(self): |
| 124 | + assert os.stat_result.n_unnamed_fields > 0 |
| 125 | + n_visible_fields = os.stat_result.n_sequence_fields |
| 126 | + |
| 127 | + r = os.stat_result(range(n_visible_fields), {'st_atime': -1.0}) |
| 128 | + self.assertEqual(r.st_atime, -1.0) |
| 129 | + self.assertEqual(r, tuple(range(n_visible_fields))) |
| 130 | + |
| 131 | + r = os.stat_result((*range(n_visible_fields), -1.0)) |
| 132 | + self.assertEqual(r.st_atime, -1.0) |
| 133 | + self.assertEqual(r, tuple(range(n_visible_fields))) |
| 134 | + |
| 135 | + with self.assertRaisesRegex(TypeError, |
| 136 | + re.escape("got duplicate or unexpected field name(s)")): |
| 137 | + os.stat_result((*range(n_visible_fields), -1.0), {'st_atime': -1.0}) |
| 138 | + |
| 139 | + def test_constructor_with_unknown_fields(self): |
| 140 | + t = time.struct_time |
| 141 | + |
| 142 | + error_message = re.escape("got duplicate or unexpected field name(s)") |
| 143 | + with self.assertRaisesRegex(TypeError, error_message): |
| 144 | + t("123456789", dict={"tm_year": 0}) |
| 145 | + with self.assertRaisesRegex(TypeError, error_message): |
| 146 | + t("123456789", dict={"tm_year": 0, "tm_mon": 1}) |
| 147 | + with self.assertRaisesRegex(TypeError, error_message): |
| 148 | + t("123456789", dict={"tm_zone": "some zone", "tm_mon": 1}) |
| 149 | + with self.assertRaisesRegex(TypeError, error_message): |
| 150 | + t("123456789", dict={"tm_zone": "some zone", "error": 0}) |
| 151 | + with self.assertRaisesRegex(TypeError, error_message): |
| 152 | + t("123456789", dict={"error": 0, "tm_zone": "some zone", "tm_mon": 1}) |
| 153 | + with self.assertRaisesRegex(TypeError, error_message): |
| 154 | + t("123456789", dict={"error": 0}) |
| 155 | + with self.assertRaisesRegex(TypeError, error_message): |
| 156 | + t("123456789", dict={"tm_zone": "some zone", "error": 0}) |
| 157 | + |
98 | 158 | def test_eviltuple(self):
|
99 | 159 | class Exc(Exception):
|
100 | 160 | pass
|
|
0 commit comments