summaryrefslogtreecommitdiff
path: root/src/mongo/dbtests/extensions_callback_real_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/dbtests/extensions_callback_real_test.cpp')
-rw-r--r--src/mongo/dbtests/extensions_callback_real_test.cpp73
1 files changed, 12 insertions, 61 deletions
diff --git a/src/mongo/dbtests/extensions_callback_real_test.cpp b/src/mongo/dbtests/extensions_callback_real_test.cpp
index bdc84eb61bd..ae2287ac77a 100644
--- a/src/mongo/dbtests/extensions_callback_real_test.cpp
+++ b/src/mongo/dbtests/extensions_callback_real_test.cpp
@@ -240,72 +240,23 @@ TEST_F(ExtensionsCallbackRealTest, TextDiacriticSensitiveAndCaseSensitiveTrue) {
//
// $where parsing tests.
//
+const NamespaceString kTestNss = NamespaceString("db.dummy");
-TEST_F(ExtensionsCallbackRealTest, WhereExpressionsWithSameScopeHaveSameBSONRepresentation) {
- const char code[] = "function(){ return a; }";
+TEST_F(ExtensionsCallbackRealTest, WhereExpressionDesugarsToExprAndInternalJs) {
+ auto query1 = fromjson("{$where: 'function() { return this.x == 10; }'}");
+ boost::intrusive_ptr<ExpressionContext> expCtx(
+ new ExpressionContext(&_opCtx, nullptr, kTestNss));
- BSONObj query1 = BSON("$where" << BSONCodeWScope(code, BSON("a" << true)));
auto expr1 = unittest::assertGet(
- ExtensionsCallbackReal(&_opCtx, &_nss).parseWhere(query1.firstElement()));
- BSONObjBuilder builder1;
- expr1->serialize(&builder1);
+ ExtensionsCallbackReal(&_opCtx, &_nss).parseWhere(expCtx, query1.firstElement()));
- BSONObj query2 = BSON("$where" << BSONCodeWScope(code, BSON("a" << true)));
- auto expr2 = unittest::assertGet(
- ExtensionsCallbackReal(&_opCtx, &_nss).parseWhere(query2.firstElement()));
- BSONObjBuilder builder2;
- expr2->serialize(&builder2);
+ BSONObjBuilder gotMatch;
+ expr1->serialize(&gotMatch);
- ASSERT_BSONOBJ_EQ(builder1.obj(), builder2.obj());
-}
-
-TEST_F(ExtensionsCallbackRealTest,
- WhereExpressionsWithDifferentScopesHaveDifferentBSONRepresentations) {
- const char code[] = "function(){ return a; }";
-
- BSONObj query1 = BSON("$where" << BSONCodeWScope(code, BSON("a" << true)));
- auto expr1 = unittest::assertGet(
- ExtensionsCallbackReal(&_opCtx, &_nss).parseWhere(query1.firstElement()));
- BSONObjBuilder builder1;
- expr1->serialize(&builder1);
-
- BSONObj query2 = BSON("$where" << BSONCodeWScope(code, BSON("a" << false)));
- auto expr2 = unittest::assertGet(
- ExtensionsCallbackReal(&_opCtx, &_nss).parseWhere(query2.firstElement()));
- BSONObjBuilder builder2;
- expr2->serialize(&builder2);
-
- ASSERT_BSONOBJ_NE(builder1.obj(), builder2.obj());
-}
-
-TEST_F(ExtensionsCallbackRealTest, WhereExpressionsWithSameScopeAreEquivalent) {
- const char code[] = "function(){ return a; }";
-
- BSONObj query1 = BSON("$where" << BSONCodeWScope(code, BSON("a" << true)));
- auto expr1 = unittest::assertGet(
- ExtensionsCallbackReal(&_opCtx, &_nss).parseWhere(query1.firstElement()));
-
- BSONObj query2 = BSON("$where" << BSONCodeWScope(code, BSON("a" << true)));
- auto expr2 = unittest::assertGet(
- ExtensionsCallbackReal(&_opCtx, &_nss).parseWhere(query2.firstElement()));
-
- ASSERT(expr1->equivalent(expr2.get()));
- ASSERT(expr2->equivalent(expr1.get()));
-}
-
-TEST_F(ExtensionsCallbackRealTest, WhereExpressionsWithDifferentScopesAreNotEquivalent) {
- const char code[] = "function(){ return a; }";
-
- BSONObj query1 = BSON("$where" << BSONCodeWScope(code, BSON("a" << true)));
- auto expr1 = unittest::assertGet(
- ExtensionsCallbackReal(&_opCtx, &_nss).parseWhere(query1.firstElement()));
-
- BSONObj query2 = BSON("$where" << BSONCodeWScope(code, BSON("a" << false)));
- auto expr2 = unittest::assertGet(
- ExtensionsCallbackReal(&_opCtx, &_nss).parseWhere(query2.firstElement()));
-
- ASSERT_FALSE(expr1->equivalent(expr2.get()));
- ASSERT_FALSE(expr2->equivalent(expr1.get()));
+ auto expectedMatch = fromjson(
+ "{$expr: {$function: {'body': 'function() { return this.x == 10; }', 'args': "
+ "['$$CURRENT'], 'lang': 'js', '_internalSetObjToThis': true}}}");
+ ASSERT_BSONOBJ_EQ(gotMatch.obj(), expectedMatch);
}
} // namespace