Skip to content

Commit 5db579a

Browse files
authored
Merge pull request #114 from oracle/Issue#113-dict.update(PyOrderedDict)-not-working
Issue#113 dict.update(py ordered dict) not working
2 parents 211cb76 + 97f8ebf commit 5db579a

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

core/src/main/java/oracle/weblogic/deploy/util/PyOrderedDict.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public PyOrderedDict() {
5151
*/
5252
public PyOrderedDict(PyOrderedDict other) {
5353
this();
54+
super.update(other);
5455
update(other);
5556
}
5657

@@ -279,6 +280,9 @@ public void __setitem__(PyObject key, PyObject value) {
279280
synchronized (this.linkedHashMap) {
280281
this.linkedHashMap.put(key, value);
281282
}
283+
synchronized (super.table) {
284+
super.table.put(key, value);
285+
}
282286
}
283287

284288
/**
@@ -287,6 +291,7 @@ public void __setitem__(PyObject key, PyObject value) {
287291
@Override
288292
public void clear() {
289293
this.linkedHashMap.clear();
294+
super.table.clear();;
290295
}
291296

292297
/**
@@ -476,6 +481,7 @@ private void doUpdate(PyDictionary od) {
476481
for (int i = 0; i < pylist.size(); i++) {
477482
PyTuple tuple = (PyTuple) pylist.get(i);
478483
this.__setitem__(Py.java2py(tuple.get(0)), Py.java2py(tuple.get(1)));
484+
super.__setitem__(Py.java2py(tuple.get(0)), Py.java2py(tuple.get(1)));
479485
}
480486
}
481487

core/src/test/python/collections_test.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,5 +151,51 @@ def testCopyDeepcopyKeyOrdering(self):
151151
new_list.extend([6, 7, 8, 9, 10])
152152
self.assertEqual(len(my_list), 5, 'expected deepcopy to make a copy of my_list but it did not')
153153

154+
def testDictDictUpdate(self):
155+
dict1 = dict()
156+
dict1['entry1'] = 'you'
157+
dict2 = dict()
158+
dict2['entry2'] = 'me'
159+
print 'Before: dict() dict1=', dict1
160+
print ' dict() dict2=', dict2
161+
dict1.update(dict2)
162+
self.assertEqual('entry1' in dict1 and 'entry2' in dict1, True,
163+
"expected dict1 to contain 'entry1' and 'entry2' keys")
164+
165+
def testOrderedDictOrderedDictUpdate(self):
166+
dict1 = OrderedDict()
167+
dict1['entry1'] = 'you'
168+
dict2 = OrderedDict()
169+
dict2['entry2'] = 'me'
170+
print 'Before: OrderedDict() dict1=', dict1
171+
print ' OrderedDict() dict2=', dict2
172+
dict1.update(dict2)
173+
self.assertEqual('entry1' in dict1 and 'entry2' in dict1, True,
174+
"expected ordereddict1 to contain 'entry1' and 'entry2' keys")
175+
176+
def testOrderedDictDictUpdate(self):
177+
dict1 = OrderedDict()
178+
dict1['entry1'] = 'you'
179+
dict2 = dict()
180+
dict2['entry2'] = 'me'
181+
print 'Before: OrderedDict() dict1=', dict1
182+
print ' dict() dict2=', dict2
183+
print
184+
dict1.update(dict2)
185+
self.assertEqual('entry1' in dict1 and 'entry2' in dict1, True,
186+
"expected ordereddict1 to contain 'entry1' and 'entry2' keys")
187+
188+
def testDictOrderedDictUpdate(self):
189+
dict1 = dict()
190+
dict1['entry1'] = 'you'
191+
dict2 = OrderedDict()
192+
dict2['entry2'] = 'me'
193+
print 'Before: dict() dict1=', dict1
194+
print ' OrderedDict() dict2=', dict2
195+
print
196+
dict1.update(dict2)
197+
self.assertEqual('entry1' in dict1 and 'entry2' in dict1, True,
198+
"expected ordereddict1 to contain 'entry1' and 'entry2' keys")
199+
154200
if __name__ == '__main__':
155201
unittest.main()

0 commit comments

Comments
 (0)