GTEMatchExpression.js 3.6 KB

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