|
@@ -6,8 +6,13 @@ var assert = require("assert"),
|
|
|
|
|
|
|
|
|
function assertEqualJson(actual, expected, message){
|
|
|
- //assert.strictEqual(message + ": " + JSON.stringify(actual), message + ": " + JSON.stringify(expected));
|
|
|
- assert.deepEqual(actual, expected, message);
|
|
|
+ if(actual.sort) {
|
|
|
+ actual.sort();
|
|
|
+ if(expected.sort) {
|
|
|
+ expected.sort();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ assert.strictEqual(message + ": " + JSON.stringify(actual), message + ": " + JSON.stringify(expected));
|
|
|
}
|
|
|
|
|
|
/// An assertion for `ObjectExpression` instances based on Mongo's `ExpectedResultBase` class
|
|
@@ -26,8 +31,8 @@ function assertExpectedResult(args) {
|
|
|
// run implementation
|
|
|
var result = args.expression.addToDocument({}, args.source, args.source);
|
|
|
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
|
|
|
+ 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");
|
|
|
assertEqualJson(args.expression.toJson(true), args.expectedJsonRepresentation, "unexpected JSON representation");
|
|
|
assertEqualJson(args.expression.getIsSimple(), args.expectedIsSimple, "unexpected isSimple status");
|
|
@@ -54,20 +59,20 @@ module.exports = {
|
|
|
/** Dependencies for non inclusion expressions. */
|
|
|
var expr = new ObjectExpression();
|
|
|
expr.addField("a", new ConstantExpression(5));
|
|
|
- assertEqualJson(expr.addDependencies({}, [/*FAKING: includePath=true*/]), {"_id":1}, "unexpected dependencies (including _id)");
|
|
|
- assertEqualJson(expr.addDependencies({}), {}, "unexpected dependencies (excluding _id)");
|
|
|
+ assertEqualJson(expr.addDependencies([], [/*FAKING: includePath=true*/]), ["_id"], "unexpected dependencies (including _id)");
|
|
|
+ assertEqualJson(expr.addDependencies([]), [], "unexpected dependencies (excluding _id)");
|
|
|
expr.addField("b", new FieldPathExpression("c.d"));
|
|
|
- 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)");
|
|
|
+ assertEqualJson(expr.addDependencies([], [/*FAKING: includePath=true*/]), ["c.d", "_id"], "unexpected dependencies (including _id)");
|
|
|
+ assertEqualJson(expr.addDependencies([]), ["c.d"], "unexpected dependencies (excluding _id)");
|
|
|
},
|
|
|
|
|
|
"should be able to get dependencies for inclusion expressions": function testInclusionDependencies(){
|
|
|
/** Dependencies for inclusion expressions. */
|
|
|
var expr = new ObjectExpression();
|
|
|
expr.includePath( "a" );
|
|
|
- assertEqualJson(expr.addDependencies({}, [/*FAKING: includePath=true*/]), {"_id":1, "a":1}, "unexpected dependencies (including _id)");
|
|
|
+ assertEqualJson(expr.addDependencies([], [/*FAKING: includePath=true*/]), ["_id", "a"], "unexpected dependencies (including _id)");
|
|
|
assert.throws(function(){
|
|
|
- expr.addDependencies({});
|
|
|
+ expr.addDependencies([]);
|
|
|
}, Error);
|
|
|
},
|
|
|
|
|
@@ -108,7 +113,7 @@ module.exports = {
|
|
|
assertExpectedResult({
|
|
|
expression: expr,
|
|
|
expected: {"_id":0},
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {},
|
|
|
});
|
|
|
},
|
|
@@ -120,7 +125,7 @@ module.exports = {
|
|
|
assertExpectedResult({
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":1},
|
|
|
- expectedDependencies: {"_id":1, "a":1},
|
|
|
+ expectedDependencies: ["_id", "a"],
|
|
|
expectedJsonRepresentation: {"a":true},
|
|
|
});
|
|
|
},
|
|
@@ -133,7 +138,7 @@ module.exports = {
|
|
|
source: {"_id":0, "b":2},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0},
|
|
|
- expectedDependencies: {"_id":1, "a":1},
|
|
|
+ expectedDependencies: ["_id", "a"],
|
|
|
expectedJsonRepresentation: {"a":true},
|
|
|
});
|
|
|
},
|
|
@@ -145,7 +150,7 @@ module.exports = {
|
|
|
assertExpectedResult({
|
|
|
expression: expr,
|
|
|
expected: {"_id":0},
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {"_id":true},
|
|
|
});
|
|
|
},
|
|
@@ -158,7 +163,7 @@ module.exports = {
|
|
|
assertExpectedResult({
|
|
|
expression: expr,
|
|
|
expected: {"b":2},
|
|
|
- expectedDependencies: {"b":1},
|
|
|
+ expectedDependencies: ["b"],
|
|
|
expectedJsonRepresentation: {"_id":false, "b":true},
|
|
|
});
|
|
|
},
|
|
@@ -171,7 +176,7 @@ module.exports = {
|
|
|
assertExpectedResult({
|
|
|
expression: expr,
|
|
|
get expected() { return this.source; },
|
|
|
- expectedDependencies: {"_id":1, "a":1, "b":1},
|
|
|
+ expectedDependencies: ["_id", "a", "b"],
|
|
|
expectedJsonRepresentation: {"b":true, "a":true},
|
|
|
});
|
|
|
},
|
|
@@ -184,7 +189,7 @@ module.exports = {
|
|
|
source: {"_id":0, "a":{ "b":5, "c":6}, "z":2 },
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":{ "b":5} },
|
|
|
- expectedDependencies: {"_id":1, "a.b":1},
|
|
|
+ expectedDependencies: ["_id", "a.b"],
|
|
|
expectedJsonRepresentation: {"a":{ "b":true} },
|
|
|
});
|
|
|
},
|
|
@@ -198,7 +203,7 @@ module.exports = {
|
|
|
source: {"_id":0, "a":{ "b":5, "c":6}, "z":2 },
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":{ "b":5, "c":6} },
|
|
|
- expectedDependencies: {"_id":1, "a.b":1, "a.c":1},
|
|
|
+ expectedDependencies: ["_id", "a.b", "a.c"],
|
|
|
expectedJsonRepresentation: {"a":{ "b":true, "c":true} },
|
|
|
});
|
|
|
},
|
|
@@ -212,7 +217,7 @@ module.exports = {
|
|
|
source: {"_id":0, "a":{ "b":5 }, "c":{"d":6} },
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":{ "b":5}, "c":{"d":6} },
|
|
|
- expectedDependencies: {"_id":1, "a.b":1, "c.d":1},
|
|
|
+ expectedDependencies: ["_id", "a.b", "c.d"],
|
|
|
expectedJsonRepresentation: {"a":{"b":true}, "c":{"d":true} }
|
|
|
});
|
|
|
},
|
|
@@ -225,7 +230,7 @@ module.exports = {
|
|
|
source: {"_id":0, "a":{ "c":6}, "z":2 },
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":{} },
|
|
|
- expectedDependencies: {"_id":1, "a.b":1},
|
|
|
+ expectedDependencies: ["_id", "a.b"],
|
|
|
expectedJsonRepresentation: {"a":{ "b":true} },
|
|
|
});
|
|
|
},
|
|
@@ -238,7 +243,7 @@ module.exports = {
|
|
|
source: {"_id":0, "a":2, "z":2},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0},
|
|
|
- expectedDependencies: {"_id":1, "a.b":1},
|
|
|
+ expectedDependencies: ["_id", "a.b"],
|
|
|
expectedJsonRepresentation: {"a":{ "b":true} },
|
|
|
});
|
|
|
},
|
|
@@ -251,7 +256,7 @@ module.exports = {
|
|
|
source: {_id:0,a:[{b:5,c:6},{b:2,c:9},{c:7},[],2],z:1},
|
|
|
expression: expr,
|
|
|
expected: {_id:0,a:[{b:5},{b:2},{}]},
|
|
|
- expectedDependencies: {"_id":1, "a.b":1},
|
|
|
+ expectedDependencies: ["_id", "a.b"],
|
|
|
expectedJsonRepresentation: {"a":{ "b":true} },
|
|
|
});
|
|
|
},
|
|
@@ -264,7 +269,7 @@ module.exports = {
|
|
|
source: {"_id":0, "a":{ "_id":1, "b":1} },
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":{ "b":1} },
|
|
|
- expectedDependencies: {"_id":1, "a.b":1},
|
|
|
+ expectedDependencies: ["_id", "a.b"],
|
|
|
expectedJsonRepresentation: {"a":{ "b":true} },
|
|
|
});
|
|
|
},
|
|
@@ -277,7 +282,7 @@ module.exports = {
|
|
|
source: {"_id":0},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":5},
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {"a":{ "$const":5} },
|
|
|
expectedIsSimple: false
|
|
|
});
|
|
@@ -291,7 +296,7 @@ module.exports = {
|
|
|
source: {"_id":0, "a":99},
|
|
|
expression: expr,
|
|
|
expected: {"_id": 0, "a": 5},
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {"a": {"$const": 5}},
|
|
|
expectedIsSimple: false
|
|
|
});
|
|
@@ -305,7 +310,7 @@ module.exports = {
|
|
|
source: {"_id":0},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0},
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {a:{$const:undefined}},
|
|
|
expectedIsSimple: false
|
|
|
});
|
|
@@ -319,7 +324,7 @@ module.exports = {
|
|
|
source: {"_id":0, "a":99},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":5},
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {"a":{"$const":5}},
|
|
|
expectedIsSimple: false
|
|
|
});
|
|
@@ -333,7 +338,7 @@ module.exports = {
|
|
|
source: {"_id":0},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":null},
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {"a":{"$const":null}},
|
|
|
expectedIsSimple: false
|
|
|
});
|
|
@@ -347,7 +352,7 @@ module.exports = {
|
|
|
source: {"_id":0},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":{"b":5}},
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {"a":{"b":{"$const":5}}},
|
|
|
expectedIsSimple: false
|
|
|
});
|
|
@@ -361,7 +366,7 @@ module.exports = {
|
|
|
source: {"_id":0, "x":4},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":4},
|
|
|
- expectedDependencies: {"_id":1, "x":1},
|
|
|
+ expectedDependencies: ["_id", "x"],
|
|
|
expectedJsonRepresentation: {"a":"$x"},
|
|
|
expectedIsSimple: false
|
|
|
});
|
|
@@ -375,7 +380,7 @@ module.exports = {
|
|
|
source: {"_id":0, "x":{"y":4}},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":{"b":4}},
|
|
|
- expectedDependencies: {"_id":1, "x.y":1},
|
|
|
+ expectedDependencies: ["_id", "x.y"],
|
|
|
expectedJsonRepresentation: {"a":{"b":"$x.y"}},
|
|
|
expectedIsSimple: false
|
|
|
});
|
|
@@ -392,7 +397,7 @@ module.exports = {
|
|
|
source: {"_id":0},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0},
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {a:{b:{$const:undefined}}},
|
|
|
expectedIsSimple: false
|
|
|
});
|
|
@@ -409,7 +414,7 @@ module.exports = {
|
|
|
source: {"_id":0},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":{ "b":6} },
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {a:{b:{$const:6}}},
|
|
|
expectedIsSimple: false
|
|
|
});
|
|
@@ -424,7 +429,7 @@ module.exports = {
|
|
|
source: {"_id":0},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":{ "b":6, "c":7} },
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
|
|
|
expectedIsSimple: false
|
|
|
});
|
|
@@ -441,7 +446,7 @@ module.exports = {
|
|
|
source: {"_id":0},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":{ "b":6, "c":7} },
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
|
|
|
expectedIsSimple: false
|
|
|
});
|
|
@@ -458,7 +463,7 @@ module.exports = {
|
|
|
source: {"_id":0},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":{ "b":6, "c":7} },
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
|
|
|
expectedIsSimple: false
|
|
|
});
|
|
@@ -477,7 +482,7 @@ module.exports = {
|
|
|
source: {"_id":0},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":{ "b":6, "c":7} },
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
|
|
|
expectedIsSimple: false
|
|
|
});
|
|
@@ -496,7 +501,7 @@ module.exports = {
|
|
|
source: {"_id":0},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":{ "b":6, "d":7, "c":8} },
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {a:{b:{$const:6},d:{$const:7},c:{$const:8}}},
|
|
|
expectedIsSimple: false
|
|
|
});
|
|
@@ -515,7 +520,7 @@ module.exports = {
|
|
|
source: {"_id":0},
|
|
|
expression: expr,
|
|
|
expected: {"_id":0, "a":{ "b":{ "c":6, "d":7}}},
|
|
|
- expectedDependencies: {"_id":1},
|
|
|
+ expectedDependencies: ["_id"],
|
|
|
expectedJsonRepresentation: {a:{b:{c:{$const:6},d:{$const:7}}}},
|
|
|
expectedIsSimple: false
|
|
|
});
|