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

https://github.com/d5nguyenvan/mongo-java-driver · Java · 205 lines · 151 code · 39 blank · 15 comment · 4 complexity · 9130b43e33baa64419334186c2bc2cca MD5 · raw file

  1. /*
  2. * Copyright (c) 2008-2014 MongoDB, Inc.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.mongodb;
  17. import com.mongodb.util.JSON;
  18. import org.bson.BasicBSONObject;
  19. import org.bson.json.JsonMode;
  20. import org.bson.json.JsonWriterSettings;
  21. import org.bson.types.ObjectId;
  22. import org.junit.Test;
  23. import java.util.Date;
  24. import java.util.HashMap;
  25. import java.util.Map;
  26. import java.util.TreeMap;
  27. import static com.mongodb.MongoClient.getDefaultCodecRegistry;
  28. import static java.util.Arrays.asList;
  29. import static org.hamcrest.CoreMatchers.not;
  30. import static org.junit.Assert.assertEquals;
  31. import static org.junit.Assert.assertFalse;
  32. import static org.junit.Assert.assertThat;
  33. import static org.junit.Assert.assertTrue;
  34. public class BasicDBObjectTest {
  35. @Test
  36. public void testParse() {
  37. BasicDBObject document = BasicDBObject.parse("{ 'int' : 1, 'string' : 'abc' }");
  38. assertEquals(new BasicDBObject("int", 1).append("string", "abc"), document);
  39. document = BasicDBObject.parse("{ 'int' : 1, 'string' : 'abc' }", getDefaultCodecRegistry().get(BasicDBObject.class));
  40. assertEquals(new BasicDBObject("int", 1).append("string", "abc"), document);
  41. document = BasicDBObject.parse("{_id : ObjectId('5524094c2cf8fb61dede210c')}");
  42. assertEquals(new BasicDBObject("_id", new ObjectId("5524094c2cf8fb61dede210c")), document);
  43. }
  44. @Test
  45. public void testToJson() {
  46. BasicDBObject doc = new BasicDBObject("_id", new ObjectId("5522d5d12cf8fb556a991f45")).append("int", 1).append("string", "abc");
  47. assertEquals("{ \"_id\" : { \"$oid\" : \"5522d5d12cf8fb556a991f45\" }, \"int\" : 1, \"string\" : \"abc\" }", doc.toJson());
  48. assertEquals("{ \"_id\" : ObjectId(\"5522d5d12cf8fb556a991f45\"), \"int\" : 1, \"string\" : \"abc\" }",
  49. doc.toJson(JsonWriterSettings.builder().outputMode(JsonMode.SHELL).build()));
  50. assertEquals("{ \"_id\" : { \"$oid\" : \"5522d5d12cf8fb556a991f45\" }, \"int\" : 1, \"string\" : \"abc\" }",
  51. doc.toJson(getDefaultCodecRegistry().get(BasicDBObject.class)));
  52. assertEquals("{ \"_id\" : ObjectId(\"5522d5d12cf8fb556a991f45\"), \"int\" : 1, \"string\" : \"abc\" }",
  53. doc.toJson(JsonWriterSettings.builder().outputMode(JsonMode.SHELL).build(),
  54. getDefaultCodecRegistry().get(BasicDBObject.class)));
  55. }
  56. @Test
  57. public void testGetDate() {
  58. final Date date = new Date();
  59. BasicDBObject doc = new BasicDBObject("foo", date);
  60. assertTrue(doc.getDate("foo").equals(date));
  61. }
  62. @Test
  63. public void testGetDateWithDefault() {
  64. final Date date = new Date();
  65. BasicDBObject doc = new BasicDBObject("foo", date);
  66. assertTrue(doc.getDate("foo", new Date()).equals(date));
  67. assertTrue(doc.getDate("bar", date).equals(date));
  68. }
  69. @Test
  70. public void testGetObjectId() {
  71. final ObjectId objId = ObjectId.get();
  72. BasicDBObject doc = new BasicDBObject("foo", objId);
  73. assertTrue(doc.getObjectId("foo").equals(objId));
  74. }
  75. @Test
  76. public void testGetObjectIdWithDefault() {
  77. final ObjectId objId = ObjectId.get();
  78. BasicDBObject doc = new BasicDBObject("foo", objId);
  79. assertTrue(doc.getObjectId("foo", ObjectId.get()).equals(objId));
  80. assertTrue(doc.getObjectId("bar", objId).equals(objId));
  81. }
  82. @Test
  83. public void testGetLongWithDefault() {
  84. final long test = 100;
  85. BasicDBObject doc = new BasicDBObject("foo", test);
  86. assertTrue(doc.getLong("foo", 0L) == test);
  87. assertTrue(doc.getLong("bar", 0L) == 0L);
  88. }
  89. @Test
  90. public void testGetDoubleWithDefault() {
  91. BasicDBObject doc = new BasicDBObject("foo", Double.MAX_VALUE);
  92. assertTrue(doc.getDouble("foo", (double) 0) == Double.MAX_VALUE);
  93. assertTrue(doc.getDouble("bar", Double.MIN_VALUE) == Double.MIN_VALUE);
  94. }
  95. @Test
  96. public void testGetStringWithDefault() {
  97. BasicDBObject doc = new BasicDBObject("foo", "badmf");
  98. assertTrue(doc.getString("foo", "ID").equals("badmf"));
  99. assertTrue(doc.getString("bar", "DEFAULT").equals("DEFAULT"));
  100. }
  101. @Test
  102. public void testBuilderIsEmpty() {
  103. BasicDBObjectBuilder b = BasicDBObjectBuilder.start();
  104. assertTrue(b.isEmpty());
  105. b.append("a", 1);
  106. assertFalse(b.isEmpty());
  107. assertEquals(b.get(), new BasicDBObject("a", 1));
  108. }
  109. @Test
  110. public void testBuilderNested() {
  111. BasicDBObjectBuilder b = BasicDBObjectBuilder.start();
  112. b.add("a", 1);
  113. b.push("b").append("c", 2).pop();
  114. DBObject a = b.get();
  115. assertEquals(a, JSON.parse("{ 'a' : 1, 'b' : { 'c' : 2 } }"));
  116. }
  117. @Test
  118. public void testDown1() {
  119. BasicDBObjectBuilder b = BasicDBObjectBuilder.start();
  120. b.append("x", 1);
  121. b.push("y");
  122. b.append("a", 2);
  123. b.pop();
  124. b.push("z");
  125. b.append("b", 3);
  126. assertEquals(b.get(), JSON.parse("{ 'x' : 1 , 'y' : { 'a' : 2 } , 'z' : { 'b' : 3 } }"));
  127. }
  128. @Test
  129. public void testEqualsAndHashCode() {
  130. assertEquality(new BasicDBObject(), new BasicDBObject());
  131. assertEquality(new BasicDBObject("x", 1), new BasicDBObject("x", 1));
  132. assertEquality(new BasicBSONObject("x", 1), new BasicDBObject("x", 1));
  133. assertInequality(new BasicDBObject("x", 1), new BasicDBObject("x", 2));
  134. assertInequality(new BasicDBObject("x", 1), new BasicDBObject("y", 1));
  135. assertEquality(new BasicDBObject("x", asList(1, 2, 3)), new BasicDBObject("x", new int[]{1, 2, 3}));
  136. BasicDBList list = new BasicDBList();
  137. list.put(0, 1);
  138. list.put(1, 2);
  139. list.put(2, 3);
  140. assertEquality(new BasicDBObject("x", asList(1, 2, 3)), new BasicDBObject("x", list));
  141. assertEquality(new BasicDBObject("x", 1).append("y", 2), new BasicDBObject("y", 2).append("x", 1));
  142. assertEquality(new BasicDBObject("a", new BasicDBObject("y", 2).append("x", 1)),
  143. new BasicDBObject("a", new BasicDBObject("x", 1).append("y", 2)));
  144. assertEquality(new BasicDBObject("a", asList(new BasicDBObject("y", 2).append("x", 1))),
  145. new BasicDBObject("a", asList(new BasicDBObject("x", 1).append("y", 2))));
  146. assertEquality(new BasicDBObject("a", new BasicDBList().put(1, new BasicDBObject("y", 2).append("x", 1))),
  147. new BasicDBObject("a", new BasicDBList().put(1, new BasicDBObject("x", 1).append("y", 2))));
  148. Map<String, Object> first = new HashMap<String, Object>();
  149. first.put("1", new BasicDBObject("y", 2).append("x", 1));
  150. first.put("2", new BasicDBObject("a", 2).append("b", 1));
  151. Map<String, Object> second = new TreeMap<String, Object>();
  152. second.put("2", new BasicDBObject("b", 1).append("a", 2));
  153. second.put("1", new BasicDBObject("x", 1).append("y", 2));
  154. assertEquality(new BasicDBObject("a", first), new BasicDBObject("a", second));
  155. }
  156. void assertEquality(final BasicBSONObject x, final BasicBSONObject y) {
  157. assertEquals(x, y);
  158. assertEquals(y, x);
  159. assertEquals(x.hashCode(), y.hashCode());
  160. }
  161. void assertInequality(final BasicBSONObject x, final BasicBSONObject y) {
  162. assertThat(x, not(y));
  163. assertThat(y, not(x));
  164. assertThat(x.hashCode(), not(y.hashCode()));
  165. }
  166. }