~justin-fathomdb/nova/justinsb-openstack-api-volumes

« back to all changes in this revision

Viewing changes to vendor/Twisted-10.0.0/twisted/test/test_compat.py

  • Committer: Jesse Andrews
  • Date: 2010-05-28 06:05:26 UTC
  • Revision ID: git-v1:bf6e6e718cdc7488e2da87b21e258ccc065fe499
initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (c) 2001-2008 Twisted Matrix Laboratories.
 
2
# See LICENSE for details.
 
3
 
 
4
 
 
5
"""
 
6
Tests for L{twisted.python.compat}.
 
7
"""
 
8
 
 
9
import types, socket
 
10
 
 
11
from twisted.trial import unittest
 
12
 
 
13
from twisted.python.compat import set, frozenset, reduce
 
14
 
 
15
 
 
16
 
 
17
class IterableCounter:
 
18
    def __init__(self, lim=0):
 
19
        self.lim = lim
 
20
        self.i = -1
 
21
 
 
22
    def __iter__(self):
 
23
        return self
 
24
 
 
25
    def next(self):
 
26
        self.i += 1
 
27
        if self.i >= self.lim:
 
28
            raise StopIteration
 
29
        return self.i
 
30
 
 
31
class CompatTestCase(unittest.TestCase):
 
32
    def testDict(self):
 
33
        d1 = {'a': 'b'}
 
34
        d2 = dict(d1)
 
35
        self.assertEquals(d1, d2)
 
36
        d1['a'] = 'c'
 
37
        self.assertNotEquals(d1, d2)
 
38
        d2 = dict(d1.items())
 
39
        self.assertEquals(d1, d2)
 
40
 
 
41
    def testBool(self):
 
42
        self.assertEquals(bool('hi'), True)
 
43
        self.assertEquals(bool(True), True)
 
44
        self.assertEquals(bool(''), False)
 
45
        self.assertEquals(bool(False), False)
 
46
 
 
47
    def testIteration(self):
 
48
        lst1, lst2 = range(10), []
 
49
 
 
50
        for i in iter(lst1):
 
51
            lst2.append(i)
 
52
        self.assertEquals(lst1, lst2)
 
53
        del lst2[:]
 
54
 
 
55
        try:
 
56
            iterable = iter(lst1)
 
57
            while 1:
 
58
                lst2.append(iterable.next())
 
59
        except StopIteration:
 
60
            pass
 
61
        self.assertEquals(lst1, lst2)
 
62
        del lst2[:]
 
63
 
 
64
        for i in iter(IterableCounter(10)):
 
65
            lst2.append(i)
 
66
        self.assertEquals(lst1, lst2)
 
67
        del lst2[:]
 
68
 
 
69
        try:
 
70
            iterable = iter(IterableCounter(10))
 
71
            while 1:
 
72
                lst2.append(iterable.next())
 
73
        except StopIteration:
 
74
            pass
 
75
        self.assertEquals(lst1, lst2)
 
76
        del lst2[:]
 
77
 
 
78
        for i in iter(IterableCounter(20).next, 10):
 
79
            lst2.append(i)
 
80
        self.assertEquals(lst1, lst2)
 
81
 
 
82
    def testIsinstance(self):
 
83
        self.assert_(isinstance(u'hi', types.StringTypes))
 
84
        self.assert_(isinstance(self, unittest.TestCase))
 
85
        # I'm pretty sure it's impossible to implement this
 
86
        # without replacing isinstance on 2.2 as well :(
 
87
        # self.assert_(isinstance({}, dict))
 
88
 
 
89
    def testStrip(self):
 
90
        self.assertEquals(' x '.lstrip(' '), 'x ')
 
91
        self.assertEquals(' x x'.lstrip(' '), 'x x')
 
92
        self.assertEquals(' x '.rstrip(' '), ' x')
 
93
        self.assertEquals('x x '.rstrip(' '), 'x x')
 
94
 
 
95
        self.assertEquals('\t x '.lstrip('\t '), 'x ')
 
96
        self.assertEquals(' \tx x'.lstrip('\t '), 'x x')
 
97
        self.assertEquals(' x\t '.rstrip(' \t'), ' x')
 
98
        self.assertEquals('x x \t'.rstrip(' \t'), 'x x')
 
99
 
 
100
        self.assertEquals('\t x '.strip('\t '), 'x')
 
101
        self.assertEquals(' \tx x'.strip('\t '), 'x x')
 
102
        self.assertEquals(' x\t '.strip(' \t'), 'x')
 
103
        self.assertEquals('x x \t'.strip(' \t'), 'x x')
 
104
 
 
105
    def testNToP(self):
 
106
        from twisted.python.compat import inet_ntop
 
107
 
 
108
        f = lambda a: inet_ntop(socket.AF_INET6, a)
 
109
        g = lambda a: inet_ntop(socket.AF_INET, a)
 
110
 
 
111
        self.assertEquals('::', f('\x00' * 16))
 
112
        self.assertEquals('::1', f('\x00' * 15 + '\x01'))
 
113
        self.assertEquals(
 
114
            'aef:b01:506:1001:ffff:9997:55:170',
 
115
            f('\x0a\xef\x0b\x01\x05\x06\x10\x01\xff\xff\x99\x97\x00\x55\x01\x70'))
 
116
 
 
117
        self.assertEquals('1.0.1.0', g('\x01\x00\x01\x00'))
 
118
        self.assertEquals('170.85.170.85', g('\xaa\x55\xaa\x55'))
 
119
        self.assertEquals('255.255.255.255', g('\xff\xff\xff\xff'))
 
120
 
 
121
        self.assertEquals('100::', f('\x01' + '\x00' * 15))
 
122
        self.assertEquals('100::1', f('\x01' + '\x00' * 14 + '\x01'))
 
123
 
 
124
    def testPToN(self):
 
125
        from twisted.python.compat import inet_pton
 
126
 
 
127
        f = lambda a: inet_pton(socket.AF_INET6, a)
 
128
        g = lambda a: inet_pton(socket.AF_INET, a)
 
129
 
 
130
        self.assertEquals('\x00\x00\x00\x00', g('0.0.0.0'))
 
131
        self.assertEquals('\xff\x00\xff\x00', g('255.0.255.0'))
 
132
        self.assertEquals('\xaa\xaa\xaa\xaa', g('170.170.170.170'))
 
133
 
 
134
        self.assertEquals('\x00' * 16, f('::'))
 
135
        self.assertEquals('\x00' * 16, f('0::0'))
 
136
        self.assertEquals('\x00\x01' + '\x00' * 14, f('1::'))
 
137
        self.assertEquals(
 
138
            '\x45\xef\x76\xcb\x00\x1a\x56\xef\xaf\xeb\x0b\xac\x19\x24\xae\xae',
 
139
            f('45ef:76cb:1a:56ef:afeb:bac:1924:aeae'))
 
140
 
 
141
        self.assertEquals('\x00' * 14 + '\x00\x01', f('::1'))
 
142
        self.assertEquals('\x00' * 12 + '\x01\x02\x03\x04', f('::1.2.3.4'))
 
143
        self.assertEquals(
 
144
            '\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x01\x02\x03\xff',
 
145
            f('1:2:3:4:5:6:1.2.3.255'))
 
146
 
 
147
        for badaddr in ['1:2:3:4:5:6:7:8:', ':1:2:3:4:5:6:7:8', '1::2::3',
 
148
                        '1:::3', ':::', '1:2', '::1.2', '1.2.3.4::',
 
149
                        'abcd:1.2.3.4:abcd:abcd:abcd:abcd:abcd',
 
150
                        '1234:1.2.3.4:1234:1234:1234:1234:1234:1234',
 
151
                        '1.2.3.4']:
 
152
            self.assertRaises(ValueError, f, badaddr)
 
153
 
 
154
    def test_set(self):
 
155
        """
 
156
        L{set} should behave like the expected set interface.
 
157
        """
 
158
        a = set()
 
159
        a.add('b')
 
160
        a.add('c')
 
161
        a.add('a')
 
162
        b = list(a)
 
163
        b.sort()
 
164
        self.assertEquals(b, ['a', 'b', 'c'])
 
165
        a.remove('b')
 
166
        b = list(a)
 
167
        b.sort()
 
168
        self.assertEquals(b, ['a', 'c'])
 
169
 
 
170
        a.discard('d')
 
171
 
 
172
        b = set(['r', 's'])
 
173
        d = a.union(b)
 
174
        b = list(d)
 
175
        b.sort()
 
176
        self.assertEquals(b, ['a', 'c', 'r', 's'])
 
177
 
 
178
 
 
179
    def test_frozenset(self):
 
180
        """
 
181
        L{frozenset} should behave like the expected frozenset interface.
 
182
        """
 
183
        a = frozenset(['a', 'b'])
 
184
        self.assertRaises(AttributeError, getattr, a, "add")
 
185
        self.assertEquals(list(a), ['a', 'b'])
 
186
 
 
187
        b = frozenset(['r', 's'])
 
188
        d = a.union(b)
 
189
        b = list(d)
 
190
        b.sort()
 
191
        self.assertEquals(b, ['a', 'b', 'r', 's'])
 
192
 
 
193
 
 
194
    def test_reduce(self):
 
195
        """
 
196
        L{reduce} should behave like the builtin reduce.
 
197
        """
 
198
        self.assertEquals(15, reduce(lambda x, y: x + y, [1, 2, 3, 4, 5]))
 
199
        self.assertEquals(16, reduce(lambda x, y: x + y, [1, 2, 3, 4, 5], 1))