Skip to content

Commit 46b2474

Browse files
committed
Test OrderedMapSerializedKey
PYTHON-231
1 parent 760b195 commit 46b2474

1 file changed

Lines changed: 76 additions & 40 deletions

File tree

tests/unit/test_orderedmap.py

Lines changed: 76 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
except ImportError:
1818
import unittest # noqa
1919

20-
from cassandra.util import OrderedMap
21-
from cassandra.cqltypes import EMPTY
20+
from cassandra.util import OrderedMap, OrderedMapSerializedKey
21+
from cassandra.cqltypes import EMPTY, UTF8Type, lookup_casstype
2222
import six
2323

2424
class OrderedMapTest(unittest.TestCase):
@@ -37,90 +37,95 @@ def test_init(self):
3737
self.assertEqual(d['key1'], 'v1')
3838
self.assertEqual(d['key2'], 'v2')
3939

40+
with self.assertRaises(TypeError):
41+
OrderedMap('too', 'many', 'args')
42+
4043
def test_contains(self):
4144
keys = ['first', 'middle', 'last']
4245

43-
od = OrderedMap()
46+
om = OrderedMap()
4447

45-
od = OrderedMap(zip(keys, range(len(keys))))
48+
om = OrderedMap(zip(keys, range(len(keys))))
4649

4750
for k in keys:
48-
self.assertTrue(k in od)
49-
self.assertFalse(k not in od)
51+
self.assertTrue(k in om)
52+
self.assertFalse(k not in om)
5053

51-
self.assertTrue('notthere' not in od)
52-
self.assertFalse('notthere' in od)
54+
self.assertTrue('notthere' not in om)
55+
self.assertFalse('notthere' in om)
5356

5457
def test_keys(self):
5558
keys = ['first', 'middle', 'last']
56-
od = OrderedMap(zip(keys, range(len(keys))))
59+
om = OrderedMap(zip(keys, range(len(keys))))
5760

58-
self.assertListEqual(list(od.keys()), keys)
61+
self.assertListEqual(list(om.keys()), keys)
5962

6063
def test_values(self):
6164
keys = ['first', 'middle', 'last']
6265
values = list(range(len(keys)))
63-
od = OrderedMap(zip(keys, values))
66+
om = OrderedMap(zip(keys, values))
6467

65-
self.assertListEqual(list(od.values()), values)
68+
self.assertListEqual(list(om.values()), values)
6669

6770
def test_items(self):
6871
keys = ['first', 'middle', 'last']
6972
items = list(zip(keys, range(len(keys))))
70-
od = OrderedMap(items)
73+
om = OrderedMap(items)
7174

72-
self.assertListEqual(list(od.items()), items)
75+
self.assertListEqual(list(om.items()), items)
7376

7477
def test_get(self):
7578
keys = ['first', 'middle', 'last']
76-
od = OrderedMap(zip(keys, range(len(keys))))
79+
om = OrderedMap(zip(keys, range(len(keys))))
7780

7881
for v, k in enumerate(keys):
79-
self.assertEqual(od.get(k), v)
82+
self.assertEqual(om.get(k), v)
8083

81-
self.assertEqual(od.get('notthere', 'default'), 'default')
82-
self.assertIsNone(od.get('notthere'))
84+
self.assertEqual(om.get('notthere', 'default'), 'default')
85+
self.assertIsNone(om.get('notthere'))
8386

8487
def test_equal(self):
8588
d1 = {'one': 1}
8689
d12 = {'one': 1, 'two': 2}
87-
od1 = OrderedMap({'one': 1})
88-
od12 = OrderedMap([('one', 1), ('two', 2)])
89-
od21 = OrderedMap([('two', 2), ('one', 1)])
90-
91-
self.assertEqual(od1, d1)
92-
self.assertEqual(od12, d12)
93-
self.assertEqual(od21, d12)
94-
self.assertNotEqual(od1, od12)
95-
self.assertNotEqual(od12, od1)
96-
self.assertNotEqual(od12, od21)
97-
self.assertNotEqual(od1, d12)
98-
self.assertNotEqual(od12, d1)
99-
self.assertNotEqual(od1, EMPTY)
90+
om1 = OrderedMap({'one': 1})
91+
om12 = OrderedMap([('one', 1), ('two', 2)])
92+
om21 = OrderedMap([('two', 2), ('one', 1)])
93+
94+
self.assertEqual(om1, d1)
95+
self.assertEqual(om12, d12)
96+
self.assertEqual(om21, d12)
97+
self.assertNotEqual(om1, om12)
98+
self.assertNotEqual(om12, om1)
99+
self.assertNotEqual(om12, om21)
100+
self.assertNotEqual(om1, d12)
101+
self.assertNotEqual(om12, d1)
102+
self.assertNotEqual(om1, EMPTY)
103+
104+
self.assertFalse(OrderedMap([('three', 3), ('four', 4)]) == d12)
100105

101106
def test_getitem(self):
102107
keys = ['first', 'middle', 'last']
103-
od = OrderedMap(zip(keys, range(len(keys))))
108+
om = OrderedMap(zip(keys, range(len(keys))))
104109

105110
for v, k in enumerate(keys):
106-
self.assertEqual(od[k], v)
111+
self.assertEqual(om[k], v)
107112

108113
with self.assertRaises(KeyError):
109-
od['notthere']
114+
om['notthere']
110115

111116
def test_iter(self):
112117
keys = ['first', 'middle', 'last']
113118
values = list(range(len(keys)))
114119
items = list(zip(keys, values))
115-
od = OrderedMap(items)
120+
om = OrderedMap(items)
116121

117-
itr = iter(od)
122+
itr = iter(om)
118123
self.assertEqual(sum([1 for _ in itr]), len(keys))
119124
self.assertRaises(StopIteration, six.next, itr)
120125

121-
self.assertEqual(list(iter(od)), keys)
122-
self.assertEqual(list(six.iteritems(od)), items)
123-
self.assertEqual(list(six.itervalues(od)), values)
126+
self.assertEqual(list(iter(om)), keys)
127+
self.assertEqual(list(six.iteritems(om)), items)
128+
self.assertEqual(list(six.itervalues(om)), values)
124129

125130
def test_len(self):
126131
self.assertEqual(len(OrderedMap()), 0)
@@ -129,4 +134,35 @@ def test_len(self):
129134
def test_mutable_keys(self):
130135
d = {'1': 1}
131136
s = set([1, 2, 3])
132-
od = OrderedMap([(d, 'dict'), (s, 'set')])
137+
om = OrderedMap([(d, 'dict'), (s, 'set')])
138+
139+
def test_strings(self):
140+
# changes in 3.x
141+
d = {'map': 'inner'}
142+
s = set([1, 2, 3])
143+
self.assertEqual(repr(OrderedMap([('two', 2), ('one', 1), (d, 'value'), (s, 'another')])),
144+
"OrderedMap([('two', 2), ('one', 1), (%r, 'value'), (%r, 'another')])" % (d, s))
145+
146+
self.assertEqual(str(OrderedMap([('two', 2), ('one', 1), (d, 'value'), (s, 'another')])),
147+
"{'two': 2, 'one': 1, %r: 'value', %r: 'another'}" % (d, s))
148+
149+
150+
class OrderedMapSerializedKeyTest(unittest.TestCase):
151+
def test_init(self):
152+
om = OrderedMapSerializedKey(UTF8Type, 2)
153+
self.assertEqual(om, {})
154+
155+
def test_normalized_lookup(self):
156+
key_type = lookup_casstype('MapType(UTF8Type, Int32Type)')
157+
protocol_version = 3
158+
om = OrderedMapSerializedKey(key_type, protocol_version)
159+
key_ascii = {'one': 1}
160+
key_unicode = {u'two': 2}
161+
om._insert_unchecked(key_ascii, key_type.serialize(key_ascii, protocol_version), object())
162+
om._insert_unchecked(key_unicode, key_type.serialize(key_unicode, protocol_version), object())
163+
164+
# type lookup is normalized by key_type
165+
# PYTHON-231
166+
self.assertIs(om[{'one': 1}], om[{u'one': 1}])
167+
self.assertIs(om[{'two': 2}], om[{u'two': 2}])
168+
self.assertIsNot(om[{'one': 1}], om[{'two': 2}])

0 commit comments

Comments
 (0)