Skip to content

Commit 654ec7f

Browse files
committed
Relax type comparision in BasicDBObject#equals
Allow comparison against other BSONObject types JAVA-2841
1 parent 4030340 commit 654ec7f

File tree

2 files changed

+28
-8
lines changed

2 files changed

+28
-8
lines changed

driver-core/src/main/com/mongodb/BasicDBObject.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -201,22 +201,22 @@ public boolean equals(final Object o) {
201201
return true;
202202
}
203203

204-
if (!(o instanceof DBObject)) {
204+
if (!(o instanceof BSONObject)) {
205205
return false;
206206
}
207207

208-
DBObject other = (DBObject) o;
208+
BSONObject other = (BSONObject) o;
209209

210210
if (!keySet().equals(other.keySet())) {
211211
return false;
212212
}
213213

214-
return Arrays.equals(toBson(canonicalizeDBObject(this)), toBson(canonicalizeDBObject(other)));
214+
return Arrays.equals(toBson(canonicalizeBSONObject(this)), toBson(canonicalizeBSONObject(other)));
215215
}
216216

217217
@Override
218218
public int hashCode() {
219-
return Arrays.hashCode(toBson(canonicalizeDBObject(this)));
219+
return Arrays.hashCode(toBson(canonicalizeBSONObject(this)));
220220
}
221221

222222
private static byte[] toBson(final DBObject dbObject) {
@@ -275,7 +275,7 @@ public <TDocument> BsonDocument toBsonDocument(final Class<TDocument> documentCl
275275
@SuppressWarnings("unchecked")
276276
private static Object canonicalize(final Object from) {
277277
if (from instanceof BSONObject && !(from instanceof BasicBSONList)) {
278-
return canonicalizeDBObject((DBObject) from);
278+
return canonicalizeBSONObject((BSONObject) from);
279279
} else if (from instanceof List) {
280280
return canonicalizeList((List<Object>) from);
281281
} else if (from instanceof Map) {
@@ -295,7 +295,7 @@ private static Map<String, Object> canonicalizeMap(final Map<String, Object> fro
295295
return canonicalized;
296296
}
297297

298-
private static DBObject canonicalizeDBObject(final DBObject from) {
298+
private static DBObject canonicalizeBSONObject(final BSONObject from) {
299299
BasicDBObject canonicalized = new BasicDBObject();
300300
TreeSet<String> keysInOrder = new TreeSet<String>(from.keySet());
301301
for (String key : keysInOrder) {

driver-core/src/test/unit/com/mongodb/BasicDBObjectTest.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@
1616

1717
package com.mongodb;
1818

19+
import org.bson.BSONObject;
20+
import org.bson.BasicBSONObject;
1921
import org.bson.codecs.Codec;
2022
import org.bson.json.JsonMode;
2123
import org.bson.json.JsonWriterSettings;
24+
import org.bson.types.BasicBSONList;
2225
import org.bson.types.ObjectId;
2326
import org.junit.Assert;
2427
import org.junit.Test;
@@ -165,48 +168,65 @@ public void testEqualsAndHashCode() {
165168
assertEquality(new BasicDBObject(), new BasicDBObject());
166169

167170
assertEquality(new BasicDBObject("x", 1), new BasicDBObject("x", 1));
171+
assertEquality(new BasicDBObject("x", 1), new BasicBSONObject("x", 1));
168172

169173
assertInequality(new BasicDBObject("x", 1), new BasicDBObject("x", 2));
174+
assertInequality(new BasicDBObject("x", 1), new BasicBSONObject("x", 2));
170175

171176
assertInequality(new BasicDBObject("x", 1), new BasicDBObject("y", 1));
177+
assertInequality(new BasicDBObject("x", 1), new BasicBSONObject("y", 1));
172178

173179
assertEquality(new BasicDBObject("x", asList(1, 2, 3)), new BasicDBObject("x", new int[]{1, 2, 3}));
180+
assertEquality(new BasicDBObject("x", asList(1, 2, 3)), new BasicBSONObject("x", asList(1, 2, 3)));
174181

175182
BasicDBList list = new BasicDBList();
176183
list.put(0, 1);
177184
list.put(1, 2);
178185
list.put(2, 3);
179186

180187
assertEquality(new BasicDBObject("x", asList(1, 2, 3)), new BasicDBObject("x", list));
188+
assertEquality(new BasicDBObject("x", asList(1, 2, 3)), new BasicBSONObject("x", list));
189+
181190

182191
assertEquality(new BasicDBObject("x", 1).append("y", 2), new BasicDBObject("y", 2).append("x", 1));
192+
assertEquality(new BasicDBObject("x", 1).append("y", 2), new BasicBSONObject("y", 2).append("x", 1));
183193

184194
assertEquality(new BasicDBObject("a", new BasicDBObject("y", 2).append("x", 1)),
185195
new BasicDBObject("a", new BasicDBObject("x", 1).append("y", 2)));
196+
assertEquality(new BasicDBObject("a", new BasicDBObject("y", 2).append("x", 1)),
197+
new BasicBSONObject("a", new BasicBSONObject("x", 1).append("y", 2)));
186198

187199
assertEquality(new BasicDBObject("a", asList(new BasicDBObject("y", 2).append("x", 1))),
188200
new BasicDBObject("a", asList(new BasicDBObject("x", 1).append("y", 2))));
201+
assertEquality(new BasicDBObject("a", asList(new BasicDBObject("y", 2).append("x", 1))),
202+
new BasicBSONObject("a", asList(new BasicBSONObject("x", 1).append("y", 2))));
189203

190204
assertEquality(new BasicDBObject("a", new BasicDBList().put(1, new BasicDBObject("y", 2).append("x", 1))),
191205
new BasicDBObject("a", new BasicDBList().put(1, new BasicDBObject("x", 1).append("y", 2))));
206+
assertEquality(new BasicDBObject("a", new BasicDBList().put(1, new BasicDBObject("y", 2).append("x", 1))),
207+
new BasicBSONObject("a", new BasicBSONList().put(1, new BasicBSONObject("x", 1).append("y", 2))));
192208

193209
Map<String, Object> first = new HashMap<String, Object>();
194210
first.put("1", new BasicDBObject("y", 2).append("x", 1));
195211
first.put("2", new BasicDBObject("a", 2).append("b", 1));
196212
Map<String, Object> second = new TreeMap<String, Object>();
197213
second.put("2", new BasicDBObject("b", 1).append("a", 2));
198214
second.put("1", new BasicDBObject("x", 1).append("y", 2));
215+
Map<String, Object> third = new TreeMap<String, Object>();
216+
third.put("2", new BasicBSONObject("a", 2).append("b", 1));
217+
third.put("1", new BasicBSONObject("x", 1).append("y", 2));
199218

200219
assertEquality(new BasicDBObject("a", first), new BasicDBObject("a", second));
220+
assertEquality(new BasicDBObject("a", first), new BasicBSONObject("a", third));
201221
}
202222

203-
void assertEquality(final BasicDBObject x, final BasicDBObject y) {
223+
void assertEquality(final BSONObject x, final BSONObject y) {
204224
assertEquals(x, y);
205225
assertEquals(y, x);
206226
assertEquals(x.hashCode(), y.hashCode());
207227
}
208228

209-
void assertInequality(final BasicDBObject x, final BasicDBObject y) {
229+
void assertInequality(final BSONObject x, final BSONObject y) {
210230
assertThat(x, not(y));
211231
assertThat(y, not(x));
212232
assertThat(x.hashCode(), not(y.hashCode()));

0 commit comments

Comments
 (0)