瀏覽代碼

Refs #2068. Migrated addDependencies to use objects as a poor man's set.

Updated test cases to account for this change as well.
Spencer Rathbun 12 年之前
父節點
當前提交
d6d336dfdc

+ 1 - 1
lib/pipeline/expressions/FieldPathExpression.js

@@ -76,7 +76,7 @@ var FieldPathExpression = module.exports = (function(){
 	};
 	};
 
 
 	proto.addDependencies = function addDependencies(deps){
 	proto.addDependencies = function addDependencies(deps){
-		deps.push(this.path.getPath());
+		deps[this.path.getPath()] = 1;
 		return deps;
 		return deps;
 	};
 	};
 
 

+ 4 - 1
lib/pipeline/expressions/ObjectExpression.js

@@ -100,7 +100,10 @@ var ObjectExpression = module.exports = (function(){
 				depsSet[pathStr + key] = 1;
 				depsSet[pathStr + key] = 1;
 			}
 			}
 		}
 		}
-		Array.prototype.push.apply(deps, Object.getOwnPropertyNames(depsSet));
+		//Array.prototype.push.apply(deps, Object.getOwnPropertyNames(depsSet));
+		for(key in depsSet) {
+			deps[key] = 1;
+		}
 		return deps;	// NOTE: added to munge as a convenience
 		return deps;	// NOTE: added to munge as a convenience
 	};
 	};
 
 

+ 8 - 8
test/lib/pipeline/documentSources/ProjectDocumentSource.js

@@ -206,14 +206,14 @@ module.exports = {
                 var cwc = new CursorDocumentSource.CursorWithContext();
                 var cwc = new CursorDocumentSource.CursorWithContext();
                 var input = {a:true,x:'$b',y:{$and:['$c','$d']}};
                 var input = {a:true,x:'$b',y:{$and:['$c','$d']}};
                 var pds = createProject(input);
                 var pds = createProject(input);
-                var deps = [];
-                assert.equal(DocumentSource.GetDepsReturn.EXHAUSTIVE, pds.getDependencies(deps));
-                assert.equal(5, deps.length);
-                assert.equal(1, deps.filter(function(val) { return "_id" == val; }).length);
-                assert.equal(1, deps.filter(function(val) { return "a" == val; }).length);
-                assert.equal(1, deps.filter(function(val) { return "b" == val; }).length);
-                assert.equal(1, deps.filter(function(val) { return "c" == val; }).length);
-                assert.equal(1, deps.filter(function(val) { return "d" == val; }).length);
+                var dependencies = {};
+                assert.equal(DocumentSource.GetDepsReturn.EXHAUSTIVE, pds.getDependencies(dependencies));
+                assert.equal(5, Object.keys(dependencies).length);
+                assert.ok(dependencies._id);
+                assert.ok(dependencies.a);
+                assert.ok(dependencies.b);
+                assert.ok(dependencies.c);
+                assert.ok(dependencies.d);
             }
             }
 
 
         }
         }

+ 4 - 4
test/lib/pipeline/documentSources/SortDocumentSource.js

@@ -336,11 +336,11 @@ module.exports = {
 				var sds = new SortDocumentSource();
 				var sds = new SortDocumentSource();
 				sds.addKey("a", true);
 				sds.addKey("a", true);
 				sds.addKey("b.c", false);
 				sds.addKey("b.c", false);
-				var deps = [];
+				var deps = {};
 				assert.equal("SEE_NEXT", sds.getDependencies(deps));
 				assert.equal("SEE_NEXT", sds.getDependencies(deps));
-				assert.equal(2, deps.length);
-				assert.equal(1, deps.filter(function(val) { return "a" == val; }).length);
-				assert.equal(1, deps.filter(function(val) { return "a" == val; }).length);
+				assert.equal(2, Object.keys(deps).length);
+				assert.ok(deps.a);
+				assert.ok(deps["b.c"]);
 			}
 			}
 		}
 		}
 
 

+ 3 - 3
test/lib/pipeline/expressions/CoerceToBoolExpression.js

@@ -37,9 +37,9 @@ module.exports = {
 
 
 			"should forward dependencies of nested expression": function testDependencies(){
 			"should forward dependencies of nested expression": function testDependencies(){
 				var expr = new CoerceToBoolExpression(new FieldPathExpression('a.b')),
 				var expr = new CoerceToBoolExpression(new FieldPathExpression('a.b')),
-					deps = expr.addDependencies([]);
-				assert.equal(deps.length, 1);
-				assert.equal(deps[0], 'a.b');
+					deps = expr.addDependencies({});
+				assert.equal(Object.keys(deps).length, 1);
+				assert.ok(deps['a.b']);
 			}
 			}
 
 
 		},
 		},

+ 5 - 3
test/lib/pipeline/expressions/FieldPathExpression.js

@@ -109,9 +109,11 @@ module.exports = {
 		"#addDependencies()": {
 		"#addDependencies()": {
 
 
 			"should return the field path itself as a dependency": function testDependencies(){
 			"should return the field path itself as a dependency": function testDependencies(){
-				var deps = new FieldPathExpression('a.b').addDependencies([]);
-				assert.strictEqual(deps.length, 1);
-				assert.strictEqual(deps[0], 'a.b');
+				var deps = {};
+				var fpe = new FieldPathExpression('a.b');
+				fpe.addDependencies(deps);
+				assert.strictEqual(Object.keys(deps).length, 1);
+				assert.ok(deps['a.b']);
 			}
 			}
 
 
 		},
 		},

+ 3 - 3
test/lib/pipeline/expressions/FieldRangeExpression.js

@@ -119,9 +119,9 @@ module.exports = {
 		"#addDependencies()": {
 		"#addDependencies()": {
 
 
 			"should return the range's path as a dependency": function testDependencies(){
 			"should return the range's path as a dependency": function testDependencies(){
-				var deps = new FieldRangeExpression(new FieldPathExpression("a.b.c"), "$eq", 0).addDependencies([]);
-				assert.strictEqual(deps.length, 1);
-				assert.strictEqual(deps[0], "a.b.c");
+				var deps = new FieldRangeExpression(new FieldPathExpression("a.b.c"), "$eq", 0).addDependencies({});
+				assert.strictEqual(Object.keys(deps).length, 1);
+				assert.ok(deps['a.b.c']);
 			}
 			}
 
 
 		},
 		},

+ 4 - 4
test/lib/pipeline/expressions/NaryExpression.js

@@ -129,19 +129,19 @@ module.exports = {
 			var testableExpr = new TestableExpression();
 			var testableExpr = new TestableExpression();
 
 
 			// no arguments
 			// no arguments
-			assert.deepEqual(testableExpr.addDependencies([]), []);
+			assert.deepEqual(testableExpr.addDependencies({}), {});
 
 
 			// add a constant argument
 			// add a constant argument
 			testableExpr.addOperand(new ConstantExpression(1));
 			testableExpr.addOperand(new ConstantExpression(1));
-			assert.deepEqual(testableExpr.addDependencies([]), []);
+			assert.deepEqual(testableExpr.addDependencies({}), {});
 
 
 			// add a field path argument
 			// add a field path argument
 			testableExpr.addOperand(new FieldPathExpression("ab.c"));
 			testableExpr.addOperand(new FieldPathExpression("ab.c"));
-			assert.deepEqual(testableExpr.addDependencies([]), ["ab.c"]);
+			assert.deepEqual(testableExpr.addDependencies({}), {"ab.c":1});
 
 
 			// add an object expression
 			// add an object expression
 			testableExpr.addOperand(Expression.parseObject({a:"$x",q:"$r"}, new Expression.ObjectCtx({isDocumentOk:1})));
 			testableExpr.addOperand(Expression.parseObject({a:"$x",q:"$r"}, new Expression.ObjectCtx({isDocumentOk:1})));
-			assert.deepEqual(testableExpr.addDependencies([]), ["ab.c", "x", "r"]);
+			assert.deepEqual(testableExpr.addDependencies({}), {"ab.c":1, "x":1, "r":1});
 		}
 		}
 
 
 	}
 	}

+ 38 - 38
test/lib/pipeline/expressions/ObjectExpression.js

@@ -32,9 +32,9 @@ function assertExpectedResult(args) {
 	// run implementation
 	// run implementation
 	var result = args.expression.addToDocument({}, args.source, args.source);
 	var result = args.expression.addToDocument({}, args.source, args.source);
 	assertEqualJson(result, args.expected, "unexpected results");
 	assertEqualJson(result, args.expected, "unexpected results");
-	var dependencies = args.expression.addDependencies([], [/*FAKING: includePath=true*/]);
-	dependencies.sort(), args.expectedDependencies.sort();	// NOTE: this is a minor hack added for munge because I'm pretty sure order doesn't matter for this anyhow
-	assertEqualJson(dependencies, args.expectedDependencies, "unexpected dependencies");
+	var dependencies = args.expression.addDependencies({}, [/*FAKING: includePath=true*/]);
+	//dependencies.sort(), args.expectedDependencies.sort();	// NOTE: this is a minor hack added for munge because I'm pretty sure order doesn't matter for this anyhow
+	assertEqualJson(Object.keys(dependencies).sort(), Object.keys(args.expectedDependencies).sort(), "unexpected dependencies");
 	assertEqualJson(args.expression.toJson(true), args.expectedJsonRepresentation, "unexpected JSON representation");
 	assertEqualJson(args.expression.toJson(true), args.expectedJsonRepresentation, "unexpected JSON representation");
 	assertEqualJson(args.expression.getIsSimple(), args.expectedIsSimple, "unexpected isSimple status");
 	assertEqualJson(args.expression.getIsSimple(), args.expectedIsSimple, "unexpected isSimple status");
 }
 }
@@ -60,20 +60,20 @@ module.exports = {
 				/** Dependencies for non inclusion expressions. */
 				/** Dependencies for non inclusion expressions. */
 				var expr = new ObjectExpression();
 				var expr = new ObjectExpression();
 				expr.addField("a", new ConstantExpression(5));
 				expr.addField("a", new ConstantExpression(5));
-				assertEqualJson(expr.addDependencies([], [/*FAKING: includePath=true*/]), ["_id"], "unexpected dependencies (including _id)");
-				assertEqualJson(expr.addDependencies([]), [], "unexpected dependencies (excluding _id)");
+				assertEqualJson(expr.addDependencies({}, [/*FAKING: includePath=true*/]), {"_id":1}, "unexpected dependencies (including _id)");
+				assertEqualJson(expr.addDependencies({}), {}, "unexpected dependencies (excluding _id)");
 				expr.addField("b", new FieldPathExpression("c.d"));
 				expr.addField("b", new FieldPathExpression("c.d"));
-				assertEqualJson(expr.addDependencies([], [/*FAKING: includePath=true*/]), ["c.d", "_id"], "unexpected dependencies (including _id)");
-				assertEqualJson(expr.addDependencies([]), ["c.d"], "unexpected dependencies (excluding _id)");
+				assertEqualJson(expr.addDependencies({}, [/*FAKING: includePath=true*/]), {"c.d":1, "_id":1}, "unexpected dependencies (including _id)");
+				assertEqualJson(expr.addDependencies({}), {"c.d":1}, "unexpected dependencies (excluding _id)");
 			},
 			},
 
 
 			"should be able to get dependencies for inclusion expressions": function testInclusionDependencies(){
 			"should be able to get dependencies for inclusion expressions": function testInclusionDependencies(){
 				/** Dependencies for inclusion expressions. */
 				/** Dependencies for inclusion expressions. */
 				var expr = new ObjectExpression();
 				var expr = new ObjectExpression();
 				expr.includePath( "a" );
 				expr.includePath( "a" );
-				assertEqualJson(expr.addDependencies([], [/*FAKING: includePath=true*/]), ["_id", "a"], "unexpected dependencies (including _id)");
+				assertEqualJson(expr.addDependencies({}, [/*FAKING: includePath=true*/]), {"_id":1, "a":1}, "unexpected dependencies (including _id)");
 				assert.throws(function(){
 				assert.throws(function(){
-					expr.addDependencies([]);
+					expr.addDependencies({});
 				}, Error);
 				}, Error);
 			},
 			},
 
 
@@ -114,7 +114,7 @@ module.exports = {
 				assertExpectedResult({
 				assertExpectedResult({
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0},
 					expected: {"_id":0},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {},
 					expectedJsonRepresentation: {},
 				});
 				});
 			},
 			},
@@ -126,7 +126,7 @@ module.exports = {
 				assertExpectedResult({
 				assertExpectedResult({
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":1},
 					expected: {"_id":0, "a":1},
-					expectedDependencies: ["_id", "a"],
+					expectedDependencies: {"_id":1, "a":1},
 					expectedJsonRepresentation: {"a":true},
 					expectedJsonRepresentation: {"a":true},
 				});
 				});
 			},
 			},
@@ -139,7 +139,7 @@ module.exports = {
 					source: {"_id":0, "b":2},
 					source: {"_id":0, "b":2},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0},
 					expected: {"_id":0},
-					expectedDependencies: ["_id", "a"],
+					expectedDependencies: {"_id":1, "a":1},
 					expectedJsonRepresentation: {"a":true},
 					expectedJsonRepresentation: {"a":true},
 				});
 				});
 			},
 			},
@@ -151,7 +151,7 @@ module.exports = {
 				assertExpectedResult({
 				assertExpectedResult({
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0},
 					expected: {"_id":0},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {"_id":true},
 					expectedJsonRepresentation: {"_id":true},
 				});
 				});
 			},
 			},
@@ -164,7 +164,7 @@ module.exports = {
 				assertExpectedResult({
 				assertExpectedResult({
 					expression: expr,
 					expression: expr,
 					expected: {"b":2},
 					expected: {"b":2},
-					expectedDependencies: ["b"],
+					expectedDependencies: {"b":1},
 					expectedJsonRepresentation: {"_id":false, "b":true},
 					expectedJsonRepresentation: {"_id":false, "b":true},
 				});
 				});
 			},
 			},
@@ -177,7 +177,7 @@ module.exports = {
 				assertExpectedResult({
 				assertExpectedResult({
 					expression: expr,
 					expression: expr,
 					get expected() { return this.source; },
 					get expected() { return this.source; },
-					expectedDependencies: ["_id", "a", "b"],
+					expectedDependencies: {"_id":1, "a":1, "b":1},
 					expectedJsonRepresentation: {"b":true, "a":true},
 					expectedJsonRepresentation: {"b":true, "a":true},
 				});
 				});
 			},
 			},
@@ -190,7 +190,7 @@ module.exports = {
 					source: {"_id":0, "a":{ "b":5, "c":6}, "z":2 },
 					source: {"_id":0, "a":{ "b":5, "c":6}, "z":2 },
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":5} },
 					expected: {"_id":0, "a":{ "b":5} },
-					expectedDependencies: ["_id", "a.b"],
+					expectedDependencies: {"_id":1, "a.b":1},
 					expectedJsonRepresentation: {"a":{ "b":true} },
 					expectedJsonRepresentation: {"a":{ "b":true} },
 				});
 				});
 			},
 			},
@@ -204,7 +204,7 @@ module.exports = {
 					source: {"_id":0, "a":{ "b":5, "c":6}, "z":2 },
 					source: {"_id":0, "a":{ "b":5, "c":6}, "z":2 },
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":5, "c":6} },
 					expected: {"_id":0, "a":{ "b":5, "c":6} },
-					expectedDependencies: ["_id", "a.b", "a.c"],
+					expectedDependencies: {"_id":1, "a.b":1, "a.c":1},
 					expectedJsonRepresentation: {"a":{ "b":true, "c":true} },
 					expectedJsonRepresentation: {"a":{ "b":true, "c":true} },
 				});
 				});
 			},
 			},
@@ -218,7 +218,7 @@ module.exports = {
 					source: {"_id":0, "a":{ "b":5 }, "c":{"d":6} },
 					source: {"_id":0, "a":{ "b":5 }, "c":{"d":6} },
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":5}, "c":{"d":6} },
 					expected: {"_id":0, "a":{ "b":5}, "c":{"d":6} },
-					expectedDependencies: ["_id", "a.b", "c.d"],
+					expectedDependencies: {"_id":1, "a.b":1, "c.d":1},
 					expectedJsonRepresentation: {"a":{"b":true}, "c":{"d":true} }
 					expectedJsonRepresentation: {"a":{"b":true}, "c":{"d":true} }
 				});
 				});
 			},
 			},
@@ -231,7 +231,7 @@ module.exports = {
 					source: {"_id":0, "a":{ "c":6}, "z":2 },
 					source: {"_id":0, "a":{ "c":6}, "z":2 },
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":{} },
 					expected: {"_id":0, "a":{} },
-					expectedDependencies: ["_id", "a.b"],
+					expectedDependencies: {"_id":1, "a.b":1},
 					expectedJsonRepresentation: {"a":{ "b":true} },
 					expectedJsonRepresentation: {"a":{ "b":true} },
 				});
 				});
 			},
 			},
@@ -244,7 +244,7 @@ module.exports = {
 					source: {"_id":0, "a":2, "z":2},
 					source: {"_id":0, "a":2, "z":2},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0},
 					expected: {"_id":0},
-					expectedDependencies: ["_id", "a.b"],
+					expectedDependencies: {"_id":1, "a.b":1},
 					expectedJsonRepresentation: {"a":{ "b":true} },
 					expectedJsonRepresentation: {"a":{ "b":true} },
 				});
 				});
 			},
 			},
@@ -257,7 +257,7 @@ module.exports = {
 					source: {_id:0,a:[{b:5,c:6},{b:2,c:9},{c:7},[],2],z:1},
 					source: {_id:0,a:[{b:5,c:6},{b:2,c:9},{c:7},[],2],z:1},
 					expression: expr,
 					expression: expr,
 					expected: {_id:0,a:[{b:5},{b:2},{}]},
 					expected: {_id:0,a:[{b:5},{b:2},{}]},
-					expectedDependencies: ["_id", "a.b"],
+					expectedDependencies: {"_id":1, "a.b":1},
 					expectedJsonRepresentation: {"a":{ "b":true} },
 					expectedJsonRepresentation: {"a":{ "b":true} },
 				});
 				});
 			},
 			},
@@ -270,7 +270,7 @@ module.exports = {
 					source: {"_id":0, "a":{ "_id":1, "b":1} },
 					source: {"_id":0, "a":{ "_id":1, "b":1} },
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":1} },
 					expected: {"_id":0, "a":{ "b":1} },
-					expectedDependencies: ["_id", "a.b"],
+					expectedDependencies: {"_id":1, "a.b":1},
 					expectedJsonRepresentation: {"a":{ "b":true} },
 					expectedJsonRepresentation: {"a":{ "b":true} },
 				});
 				});
 			},
 			},
@@ -283,7 +283,7 @@ module.exports = {
 					source: {"_id":0},
 					source: {"_id":0},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":5},
 					expected: {"_id":0, "a":5},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {"a":{ "$const":5} },
 					expectedJsonRepresentation: {"a":{ "$const":5} },
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});
@@ -297,7 +297,7 @@ module.exports = {
 					source: {"_id":0, "a":99},
 					source: {"_id":0, "a":99},
 					expression: expr,
 					expression: expr,
 					expected: {"_id": 0, "a": 5},
 					expected: {"_id": 0, "a": 5},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {"a": {"$const": 5}},
 					expectedJsonRepresentation: {"a": {"$const": 5}},
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});
@@ -311,7 +311,7 @@ module.exports = {
 					source: {"_id":0},
 					source: {"_id":0},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0},
 					expected: {"_id":0},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{$const:undefined}},
 					expectedJsonRepresentation: {a:{$const:undefined}},
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});
@@ -325,7 +325,7 @@ module.exports = {
 					source: {"_id":0, "a":99},
 					source: {"_id":0, "a":99},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":5},
 					expected: {"_id":0, "a":5},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {"a":{"$const":5}},
 					expectedJsonRepresentation: {"a":{"$const":5}},
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});
@@ -339,7 +339,7 @@ module.exports = {
 					source: {"_id":0},
 					source: {"_id":0},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":null},
 					expected: {"_id":0, "a":null},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {"a":{"$const":null}},
 					expectedJsonRepresentation: {"a":{"$const":null}},
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});
@@ -353,7 +353,7 @@ module.exports = {
 					source: {"_id":0},
 					source: {"_id":0},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":{"b":5}},
 					expected: {"_id":0, "a":{"b":5}},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {"a":{"b":{"$const":5}}},
 					expectedJsonRepresentation: {"a":{"b":{"$const":5}}},
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});
@@ -367,7 +367,7 @@ module.exports = {
 					source: {"_id":0, "x":4},
 					source: {"_id":0, "x":4},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":4},
 					expected: {"_id":0, "a":4},
-					expectedDependencies: ["_id", "x"],
+					expectedDependencies: {"_id":1, "x":1},
 					expectedJsonRepresentation: {"a":"$x"},
 					expectedJsonRepresentation: {"a":"$x"},
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});
@@ -381,7 +381,7 @@ module.exports = {
 					source: {"_id":0, "x":{"y":4}},
 					source: {"_id":0, "x":{"y":4}},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":{"b":4}},
 					expected: {"_id":0, "a":{"b":4}},
-					expectedDependencies: ["_id", "x.y"],
+					expectedDependencies: {"_id":1, "x.y":1},
 					expectedJsonRepresentation: {"a":{"b":"$x.y"}},
 					expectedJsonRepresentation: {"a":{"b":"$x.y"}},
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});
@@ -398,7 +398,7 @@ module.exports = {
 					source: {"_id":0},
 					source: {"_id":0},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0},
 					expected: {"_id":0},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{$const:undefined}}},
 					expectedJsonRepresentation: {a:{b:{$const:undefined}}},
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});
@@ -415,7 +415,7 @@ module.exports = {
 					source: {"_id":0},
 					source: {"_id":0},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":6} },
 					expected: {"_id":0, "a":{ "b":6} },
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{$const:6}}},
 					expectedJsonRepresentation: {a:{b:{$const:6}}},
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});
@@ -430,7 +430,7 @@ module.exports = {
 					source: {"_id":0},
 					source: {"_id":0},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":6, "c":7} },
 					expected: {"_id":0, "a":{ "b":6, "c":7} },
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
 					expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});
@@ -447,7 +447,7 @@ module.exports = {
 					source: {"_id":0},
 					source: {"_id":0},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":6, "c":7} },
 					expected: {"_id":0, "a":{ "b":6, "c":7} },
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
 					expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});
@@ -464,7 +464,7 @@ module.exports = {
 					source: {"_id":0},
 					source: {"_id":0},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":6, "c":7} },
 					expected: {"_id":0, "a":{ "b":6, "c":7} },
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
 					expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});
@@ -483,7 +483,7 @@ module.exports = {
 					source: {"_id":0},
 					source: {"_id":0},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":6, "c":7} },
 					expected: {"_id":0, "a":{ "b":6, "c":7} },
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
 					expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});
@@ -502,7 +502,7 @@ module.exports = {
 					source: {"_id":0},
 					source: {"_id":0},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":6, "d":7, "c":8} },
 					expected: {"_id":0, "a":{ "b":6, "d":7, "c":8} },
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{$const:6},d:{$const:7},c:{$const:8}}},
 					expectedJsonRepresentation: {a:{b:{$const:6},d:{$const:7},c:{$const:8}}},
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});
@@ -521,7 +521,7 @@ module.exports = {
 					source: {"_id":0},
 					source: {"_id":0},
 					expression: expr,
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":{ "c":6, "d":7}}},
 					expected: {"_id":0, "a":{ "b":{ "c":6, "d":7}}},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{c:{$const:6},d:{$const:7}}}},
 					expectedJsonRepresentation: {a:{b:{c:{$const:6},d:{$const:7}}}},
 					expectedIsSimple: false
 					expectedIsSimple: false
 				});
 				});