summaryrefslogtreecommitdiff
path: root/src/mongo/db/bson
diff options
context:
space:
mode:
authorDavid Storch <david.storch@10gen.com>2017-01-30 14:21:21 -0500
committerDavid Storch <david.storch@10gen.com>2017-02-01 13:21:24 -0500
commit521a57162820b3b1100d20408f5ad0cd89fdc80e (patch)
tree6690d0272a1161148315f8f7e24134291905ef75 /src/mongo/db/bson
parentccb8949e7bdd9f1e6c9f1d249d2482e64b07cab3 (diff)
downloadmongo-521a57162820b3b1100d20408f5ad0cd89fdc80e.tar.gz
SERVER-27392 fix bug in FTS index's check for indexed arrays
Diffstat (limited to 'src/mongo/db/bson')
-rw-r--r--src/mongo/db/bson/dotted_path_support_test.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/mongo/db/bson/dotted_path_support_test.cpp b/src/mongo/db/bson/dotted_path_support_test.cpp
index 341750a9777..dd0384c6cf0 100644
--- a/src/mongo/db/bson/dotted_path_support_test.cpp
+++ b/src/mongo/db/bson/dotted_path_support_test.cpp
@@ -570,5 +570,41 @@ TEST(ExtractAllElementsAlongPath, MidPathSingletonArrayIsConsideredAnArrayCompon
assertArrayComponentsAreEqual({1U}, actualArrayComponents);
}
+TEST(ExtractElementAtPathOrArrayAlongPath, ReturnsArrayEltWithEmptyPathWhenArrayIsAtEndOfPath) {
+ BSONObj obj(fromjson("{a: {b: {c: [1, 2, 3]}}}"));
+ StringData path("a.b.c");
+ const char* pathData = path.rawData();
+ auto resultElt = dps::extractElementAtPathOrArrayAlongPath(obj, pathData);
+ ASSERT_BSONELT_EQ(resultElt, fromjson("{c: [1, 2, 3]}").firstElement());
+ ASSERT(StringData(pathData).empty());
+}
+
+TEST(ExtractElementAtPathOrArrayAlongPath, ReturnsArrayEltWithNonEmptyPathForArrayInMiddleOfPath) {
+ BSONObj obj(fromjson("{a: {b: [{c: 1}, {c: 2}]}}"));
+ StringData path("a.b.c");
+ const char* pathData = path.rawData();
+ auto resultElt = dps::extractElementAtPathOrArrayAlongPath(obj, pathData);
+ ASSERT_BSONELT_EQ(resultElt, fromjson("{b: [{c: 1}, {c: 2}]}").firstElement());
+ ASSERT_EQ(StringData(pathData), StringData("c"));
+}
+
+TEST(ExtractElementAtPathOrArrayAlongPath, NumericalPathElementNotTreatedAsArrayIndex) {
+ BSONObj obj(fromjson("{a: [{'0': 'foo'}]}"));
+ StringData path("a.0");
+ const char* pathData = path.rawData();
+ auto resultElt = dps::extractElementAtPathOrArrayAlongPath(obj, pathData);
+ ASSERT_BSONELT_EQ(resultElt, obj.firstElement());
+ ASSERT_EQ(StringData(pathData), StringData("0"));
+}
+
+TEST(ExtractElementAtPathOrArrayAlongPath, NumericalPathElementTreatedAsFieldNameForNestedObject) {
+ BSONObj obj(fromjson("{a: {'0': 'foo'}}"));
+ StringData path("a.0");
+ const char* pathData = path.rawData();
+ auto resultElt = dps::extractElementAtPathOrArrayAlongPath(obj, pathData);
+ ASSERT_BSONELT_EQ(resultElt, fromjson("{'0': 'foo'}").firstElement());
+ ASSERT(StringData(pathData).empty());
+}
+
} // namespace
} // namespace mongo