diff options
author | David Storch <david.storch@10gen.com> | 2017-01-30 14:21:21 -0500 |
---|---|---|
committer | David Storch <david.storch@10gen.com> | 2017-02-01 13:21:24 -0500 |
commit | 521a57162820b3b1100d20408f5ad0cd89fdc80e (patch) | |
tree | 6690d0272a1161148315f8f7e24134291905ef75 /src/mongo/db/bson | |
parent | ccb8949e7bdd9f1e6c9f1d249d2482e64b07cab3 (diff) | |
download | mongo-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.cpp | 36 |
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 |