GTEMatchExpression_test.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. "use strict";
  2. if (!module.parent) return require.cache[__filename] = 0, (new(require("mocha"))()).addFile(__filename).ui("exports").run(process.exit);
  3. var assert = require("assert"),
  4. BSON = require("bson"),
  5. ErrorCodes = require("../../../lib/errors").ErrorCodes,
  6. MatchDetails = require("../../../lib/matcher/MatchDetails"),
  7. GTEMatchExpression = require("../../../lib/matcher/GTEMatchExpression");
  8. exports.GTEMatchExpression = {
  9. "should match scalars and strings properly": function() {
  10. var e = new GTEMatchExpression();
  11. var s = e.init("",5);
  12. assert.strictEqual(s.code, ErrorCodes.OK);
  13. assert.ok( e.matchesSingleElement(5.5) );
  14. assert.ok( e.matchesSingleElement(5) );
  15. assert.ok( ! e.matchesSingleElement(4) );
  16. assert.ok( ! e.matchesSingleElement( "foo" ) );
  17. },
  18. "should handle invalid End of Object Operand": function testInvalidEooOperand() {
  19. var e = new GTEMatchExpression();
  20. var s = e.init("",{});
  21. assert.strictEqual(s.code, "BAD_VALUE");
  22. },
  23. "should match a pathed number":function() {
  24. var e = new GTEMatchExpression();
  25. var s = e.init("a",5);
  26. assert.strictEqual(s.code, ErrorCodes.OK);
  27. assert.ok( e.matchesJSON({"a":5.5}) );
  28. assert.ok( ! e.matchesJSON({"a":4}) );
  29. },
  30. "should match stuff in an array": function() {
  31. var e = new GTEMatchExpression();
  32. var s = e.init("a",5);
  33. assert.strictEqual(s.code, ErrorCodes.OK);
  34. assert.ok( e.matchesJSON({"a":[4,5.5]}) );
  35. assert.ok( ! e.matchesJSON({"a":[1,2]}) );
  36. },
  37. "should not match full array" : function() {
  38. var e = new GTEMatchExpression();
  39. var s = e.init("a",[5]);
  40. assert.strictEqual(s.code, ErrorCodes.OK);
  41. assert.ok( ! e.matchesJSON({"a":[4]}) );
  42. assert.ok( e.matchesJSON({"a":[5]}) );
  43. assert.ok( e.matchesJSON({"a":[6]}) );
  44. },
  45. "should not match null" : function() {
  46. var e = new GTEMatchExpression();
  47. var s = e.init("a",null);
  48. assert.strictEqual(s.code, ErrorCodes.OK);
  49. assert.ok( e.matchesJSON({}) );
  50. assert.ok( e.matchesJSON({"a":null}) );
  51. assert.ok( ! e.matchesJSON({"a":4}) );
  52. assert.ok( e.matchesJSON({"b":4}) );
  53. },
  54. "should match dot notation nulls": function() {
  55. var e = new GTEMatchExpression();
  56. var s = e.init("a.b",null);
  57. assert.strictEqual(s.code, ErrorCodes.OK);
  58. assert.ok(e.matchesJSON({}));
  59. assert.ok(e.matchesJSON({a:null}));
  60. assert.ok(e.matchesJSON({a:{}}));
  61. assert.ok(e.matchesJSON({a:[{b: null}]}));
  62. assert.ok(e.matchesJSON({a:[{a:4}, {b:4}]}));
  63. assert.ok(!e.matchesJSON({a:[4]}));
  64. assert.ok(!e.matchesJSON({a:[{b:4}]}));
  65. },
  66. "should match MinKey": function() {
  67. var operand = {a:new BSON.MinKey()},
  68. e = new GTEMatchExpression();
  69. var s = e.init("a",operand.a);
  70. assert.strictEqual(s.code, ErrorCodes.OK);
  71. assert.ok(e.matchesJSON({"a":new BSON.MinKey()}, null));
  72. assert.ok(e.matchesJSON({"a":new BSON.MaxKey()}, null));
  73. assert.ok(e.matchesJSON({"a":4}), null);
  74. },
  75. "should match MaxKey": function() {
  76. var operand = {a:new BSON.MaxKey()},
  77. e = new GTEMatchExpression();
  78. var s = e.init("a",operand.a);
  79. assert.strictEqual(s.code, ErrorCodes.OK);
  80. assert.ok(e.matchesJSON({"a":new BSON.MaxKey()}, null));
  81. assert.ok(!e.matchesJSON({"a":new BSON.MinKey()}, null));
  82. assert.ok(!e.matchesJSON({"a":4}), null);
  83. },
  84. "should handle elemMatchKey":function() {
  85. var e = new GTEMatchExpression();
  86. var s = e.init("a",5);
  87. var m = new MatchDetails();
  88. m.requestElemMatchKey();
  89. assert.strictEqual( s.code, ErrorCodes.OK );
  90. assert.ok( ! e.matchesJSON({"a":4}, m) );
  91. assert.ok( ! m.hasElemMatchKey() );
  92. assert.ok( e.matchesJSON({"a":6}, m) );
  93. assert.ok( ! m.hasElemMatchKey() );
  94. assert.ok( e.matchesJSON({"a":[2,6,5]}, m));
  95. assert.ok( m.hasElemMatchKey());
  96. assert.strictEqual("1", m.elemMatchKey());
  97. },
  98. };