LTEMatchExpression.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. "use strict";
  2. var assert = require("assert"),
  3. MatchDetails = require("../../../../lib/pipeline/matcher/MatchDetails"),
  4. LTEMatchExpression = require("../../../../lib/pipeline/matcher/LTEMatchExpression");
  5. module.exports = {
  6. "LTEMatchExpression": {
  7. "should match element": function (){
  8. var operand = {$lte:5},
  9. match = {a:4.5},
  10. equalMatch = {a:5},
  11. notMatch = {a:6},
  12. notMatchWrongType = {a:"foo"},
  13. lte = new LTEMatchExpression();
  14. var s = lte.init("",operand.$lte);
  15. assert.strictEqual(s.code, "OK");
  16. assert.ok(lte.matchesSingleElement(match));
  17. assert.ok(lte.matchesSingleElement(equalMatch));
  18. assert.ok(!lte.matchesSingleElement(notMatch));
  19. assert.ok(!lte.matchesSingleElement(notMatchWrongType));
  20. },
  21. "should not work for invalid eoo operand": function(){
  22. var operand = {},
  23. lte = new LTEMatchExpression();
  24. assert.ok(lte.init("", operand).code !== "OK");
  25. },
  26. "should match scalars properly": function (){
  27. var operand = {$lte:5},
  28. lte = new LTEMatchExpression();
  29. var s = lte.init("a",operand.$lte);
  30. assert.strictEqual(s.code, "OK");
  31. assert.ok(lte.matchesJSON({"a":4.5}, null));
  32. assert.ok(!lte.matchesJSON({"a":6}), null);
  33. },
  34. "should handle invalid End of Object Operand": function testInvalidEooOperand(){
  35. var e = new LTEMatchExpression();
  36. var s = e.init("",{});
  37. assert.strictEqual(s.code, "BAD_VALUE");
  38. },
  39. "should match a pathed number":function() {
  40. var e = new LTEMatchExpression();
  41. var s = e.init("a",5);
  42. assert.strictEqual(s.code, "OK");
  43. assert.ok( e.matches({"a":4.5}) );
  44. assert.ok( ! e.matches({"a":6}) );
  45. },
  46. "should match stuff in an array": function() {
  47. var e = new LTEMatchExpression();
  48. var s = e.init("a",5);
  49. assert.strictEqual(s.code, "OK");
  50. assert.ok( e.matches({"a":[6,4.5]}) );
  51. assert.ok( ! e.matches({"a":[6,7]}) );
  52. },
  53. "should not match full array" : function() {
  54. var e = new LTEMatchExpression();
  55. var s = e.init("a",[5]);
  56. assert.strictEqual(s.code, "OK");
  57. assert.ok(e.matches({"a":[4]}) );
  58. },
  59. "should not match null" : function() {
  60. var e = new LTEMatchExpression();
  61. var s = e.init("a",null);
  62. assert.strictEqual(s.code, "OK");
  63. assert.ok( e.matches({}) );
  64. assert.ok( e.matches({"a":null}) );
  65. assert.ok( ! e.matches({"a":4}) );
  66. },
  67. "should handle elemMatchKey":function() {
  68. var e = new LTEMatchExpression();
  69. var s = e.init("a",5);
  70. var m = new MatchDetails();
  71. m.requestElemMatchKey();
  72. assert.strictEqual( s.code, "OK" );
  73. assert.ok( ! e.matches({"a":6}, m) );
  74. assert.ok( ! m.hasElemMatchKey() );
  75. assert.ok( e.matches({"a":4}, m) );
  76. assert.ok( ! m.hasElemMatchKey() );
  77. assert.ok( e.matches({"a":[6,2,5]}, m));
  78. assert.ok( m.hasElemMatchKey());
  79. assert.strictEqual("1", m.elemMatchKey());
  80. }
  81. }
  82. };
  83. if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);