1717except 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
2222import six
2323
2424class 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