]>
Commit | Line | Data |
---|---|---|
4710c53d | 1 | import unittest\r |
2 | from test import test_support\r | |
3 | \r | |
4 | import time\r | |
5 | \r | |
6 | class StructSeqTest(unittest.TestCase):\r | |
7 | \r | |
8 | def test_tuple(self):\r | |
9 | t = time.gmtime()\r | |
10 | astuple = tuple(t)\r | |
11 | self.assertEqual(len(t), len(astuple))\r | |
12 | self.assertEqual(t, astuple)\r | |
13 | \r | |
14 | # Check that slicing works the same way; at one point, slicing t[i:j] with\r | |
15 | # 0 < i < j could produce NULLs in the result.\r | |
16 | for i in xrange(-len(t), len(t)):\r | |
17 | self.assertEqual(t[i:], astuple[i:])\r | |
18 | for j in xrange(-len(t), len(t)):\r | |
19 | self.assertEqual(t[i:j], astuple[i:j])\r | |
20 | \r | |
21 | for j in xrange(-len(t), len(t)):\r | |
22 | self.assertEqual(t[:j], astuple[:j])\r | |
23 | \r | |
24 | self.assertRaises(IndexError, t.__getitem__, -len(t)-1)\r | |
25 | self.assertRaises(IndexError, t.__getitem__, len(t))\r | |
26 | for i in xrange(-len(t), len(t)-1):\r | |
27 | self.assertEqual(t[i], astuple[i])\r | |
28 | \r | |
29 | def test_repr(self):\r | |
30 | t = time.gmtime()\r | |
31 | self.assertTrue(repr(t))\r | |
32 | t = time.gmtime(0)\r | |
33 | self.assertEqual(repr(t),\r | |
34 | "time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, "\r | |
35 | "tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)")\r | |
36 | \r | |
37 | def test_concat(self):\r | |
38 | t1 = time.gmtime()\r | |
39 | t2 = t1 + tuple(t1)\r | |
40 | for i in xrange(len(t1)):\r | |
41 | self.assertEqual(t2[i], t2[i+len(t1)])\r | |
42 | \r | |
43 | def test_repeat(self):\r | |
44 | t1 = time.gmtime()\r | |
45 | t2 = 3 * t1\r | |
46 | for i in xrange(len(t1)):\r | |
47 | self.assertEqual(t2[i], t2[i+len(t1)])\r | |
48 | self.assertEqual(t2[i], t2[i+2*len(t1)])\r | |
49 | \r | |
50 | def test_contains(self):\r | |
51 | t1 = time.gmtime()\r | |
52 | for item in t1:\r | |
53 | self.assertIn(item, t1)\r | |
54 | self.assertNotIn(-42, t1)\r | |
55 | \r | |
56 | def test_hash(self):\r | |
57 | t1 = time.gmtime()\r | |
58 | self.assertEqual(hash(t1), hash(tuple(t1)))\r | |
59 | \r | |
60 | def test_cmp(self):\r | |
61 | t1 = time.gmtime()\r | |
62 | t2 = type(t1)(t1)\r | |
63 | self.assertEqual(t1, t2)\r | |
64 | self.assertTrue(not (t1 < t2))\r | |
65 | self.assertTrue(t1 <= t2)\r | |
66 | self.assertTrue(not (t1 > t2))\r | |
67 | self.assertTrue(t1 >= t2)\r | |
68 | self.assertTrue(not (t1 != t2))\r | |
69 | \r | |
70 | def test_fields(self):\r | |
71 | t = time.gmtime()\r | |
72 | self.assertEqual(len(t), t.n_fields)\r | |
73 | self.assertEqual(t.n_fields, t.n_sequence_fields+t.n_unnamed_fields)\r | |
74 | \r | |
75 | def test_constructor(self):\r | |
76 | t = time.struct_time\r | |
77 | \r | |
78 | self.assertRaises(TypeError, t)\r | |
79 | self.assertRaises(TypeError, t, None)\r | |
80 | self.assertRaises(TypeError, t, "123")\r | |
81 | self.assertRaises(TypeError, t, "123", dict={})\r | |
82 | self.assertRaises(TypeError, t, "123456789", dict=None)\r | |
83 | \r | |
84 | s = "123456789"\r | |
85 | self.assertEqual("".join(t(s)), s)\r | |
86 | \r | |
87 | def test_eviltuple(self):\r | |
88 | class Exc(Exception):\r | |
89 | pass\r | |
90 | \r | |
91 | # Devious code could crash structseqs' contructors\r | |
92 | class C:\r | |
93 | def __getitem__(self, i):\r | |
94 | raise Exc\r | |
95 | def __len__(self):\r | |
96 | return 9\r | |
97 | \r | |
98 | self.assertRaises(Exc, time.struct_time, C())\r | |
99 | \r | |
100 | def test_reduce(self):\r | |
101 | t = time.gmtime()\r | |
102 | x = t.__reduce__()\r | |
103 | \r | |
104 | def test_extended_getslice(self):\r | |
105 | # Test extended slicing by comparing with list slicing.\r | |
106 | t = time.gmtime()\r | |
107 | L = list(t)\r | |
108 | indices = (0, None, 1, 3, 19, 300, -1, -2, -31, -300)\r | |
109 | for start in indices:\r | |
110 | for stop in indices:\r | |
111 | # Skip step 0 (invalid)\r | |
112 | for step in indices[1:]:\r | |
113 | self.assertEqual(list(t[start:stop:step]),\r | |
114 | L[start:stop:step])\r | |
115 | \r | |
116 | def test_main():\r | |
117 | test_support.run_unittest(StructSeqTest)\r | |
118 | \r | |
119 | if __name__ == "__main__":\r | |
120 | test_main()\r |