~ubuntu-branches/ubuntu/trusty/python3.4/trusty-proposed

« back to all changes in this revision

Viewing changes to Lib/test/test_structseq.py

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-11-25 09:44:27 UTC
  • Revision ID: package-import@ubuntu.com-20131125094427-lzxj8ap5w01lmo7f
Tags: upstream-3.4~b1
ImportĀ upstreamĀ versionĀ 3.4~b1

Show diffs side-by-side

added added

removed removed

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