"use strict"; if (!module.parent) return require.cache[__filename] = 0, (new(require("mocha"))()).addFile(__filename).ui("exports").run(process.exit); var assert = require("assert"), BSON = require("bson"), ErrorCodes = require("../../../lib/errors").ErrorCodes, MatchDetails = require("../../../lib/matcher/MatchDetails"), GTEMatchExpression = require("../../../lib/matcher/GTEMatchExpression"); exports.GTEMatchExpression = { "should match scalars and strings properly": function() { var e = new GTEMatchExpression(); var s = e.init("",5); assert.strictEqual(s.code, ErrorCodes.OK); assert.ok( e.matchesSingleElement(5.5) ); assert.ok( e.matchesSingleElement(5) ); assert.ok( ! e.matchesSingleElement(4) ); assert.ok( ! e.matchesSingleElement( "foo" ) ); }, "should handle invalid End of Object Operand": function testInvalidEooOperand() { var e = new GTEMatchExpression(); var s = e.init("",{}); assert.strictEqual(s.code, "BAD_VALUE"); }, "should match a pathed number":function() { var e = new GTEMatchExpression(); var s = e.init("a",5); assert.strictEqual(s.code, ErrorCodes.OK); assert.ok( e.matchesJSON({"a":5.5}) ); assert.ok( ! e.matchesJSON({"a":4}) ); }, "should match stuff in an array": function() { var e = new GTEMatchExpression(); var s = e.init("a",5); assert.strictEqual(s.code, ErrorCodes.OK); assert.ok( e.matchesJSON({"a":[4,5.5]}) ); assert.ok( ! e.matchesJSON({"a":[1,2]}) ); }, "should not match full array" : function() { var e = new GTEMatchExpression(); var s = e.init("a",[5]); assert.strictEqual(s.code, ErrorCodes.OK); assert.ok( ! e.matchesJSON({"a":[4]}) ); assert.ok( e.matchesJSON({"a":[5]}) ); assert.ok( e.matchesJSON({"a":[6]}) ); }, "should not match null" : function() { var e = new GTEMatchExpression(); var s = e.init("a",null); assert.strictEqual(s.code, ErrorCodes.OK); assert.ok( e.matchesJSON({}) ); assert.ok( e.matchesJSON({"a":null}) ); assert.ok( ! e.matchesJSON({"a":4}) ); assert.ok( e.matchesJSON({"b":4}) ); }, "should match dot notation nulls": function() { var e = new GTEMatchExpression(); var s = e.init("a.b",null); assert.strictEqual(s.code, ErrorCodes.OK); assert.ok(e.matchesJSON({})); assert.ok(e.matchesJSON({a:null})); assert.ok(e.matchesJSON({a:{}})); assert.ok(e.matchesJSON({a:[{b: null}]})); assert.ok(e.matchesJSON({a:[{a:4}, {b:4}]})); assert.ok(!e.matchesJSON({a:[4]})); assert.ok(!e.matchesJSON({a:[{b:4}]})); }, "should match MinKey": function() { var operand = {a:new BSON.MinKey()}, e = new GTEMatchExpression(); var s = e.init("a",operand.a); assert.strictEqual(s.code, ErrorCodes.OK); assert.ok(e.matchesJSON({"a":new BSON.MinKey()}, null)); assert.ok(e.matchesJSON({"a":new BSON.MaxKey()}, null)); assert.ok(e.matchesJSON({"a":4}), null); }, "should match MaxKey": function() { var operand = {a:new BSON.MaxKey()}, e = new GTEMatchExpression(); var s = e.init("a",operand.a); assert.strictEqual(s.code, ErrorCodes.OK); assert.ok(e.matchesJSON({"a":new BSON.MaxKey()}, null)); assert.ok(!e.matchesJSON({"a":new BSON.MinKey()}, null)); assert.ok(!e.matchesJSON({"a":4}), null); }, "should handle elemMatchKey":function() { var e = new GTEMatchExpression(); var s = e.init("a",5); var m = new MatchDetails(); m.requestElemMatchKey(); assert.strictEqual( s.code, ErrorCodes.OK ); assert.ok( ! e.matchesJSON({"a":4}, m) ); assert.ok( ! m.hasElemMatchKey() ); assert.ok( e.matchesJSON({"a":6}, m) ); assert.ok( ! m.hasElemMatchKey() ); assert.ok( e.matchesJSON({"a":[2,6,5]}, m)); assert.ok( m.hasElemMatchKey()); assert.strictEqual("1", m.elemMatchKey()); }, };