ModMatchExpression_test.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. ErrorCodes = require("../../../lib/errors").ErrorCodes,
  5. ModMatchExpression = require("../../../lib/matcher/ModMatchExpression"),
  6. MatchDetails = require("../../../lib/matcher/MatchDetails");
  7. exports.ModMatchExpression = {
  8. "should match a number": function (){
  9. var e = new ModMatchExpression();
  10. var s = e.init("",3,1);
  11. assert.strictEqual(s.code, ErrorCodes.OK);
  12. assert.ok( e.matches(1) );
  13. assert.ok( e.matches(4.0) );
  14. assert.ok( e.matches(68719476736) );
  15. assert.ok( ! e.matches(6) );
  16. assert.ok( ! e.matches(-2) );
  17. },
  18. "should fail init with a zero divisor": function() {
  19. var e = new ModMatchExpression();
  20. var s = e.init("", 0, 1);
  21. assert.strictEqual(s.code, ErrorCodes.BAD_VALUE);
  22. },
  23. "should match more numbers": function() {
  24. var e = new ModMatchExpression();
  25. var s = e.init("a", 5,2);
  26. assert.strictEqual(s.code, ErrorCodes.OK);
  27. assert.ok( e.matches({"a":7.0}) );
  28. assert.ok( ! e.matches({"a":4}) );
  29. },
  30. "should match an array": function() {
  31. var e = new ModMatchExpression();
  32. var s = e.init("a",5,2);
  33. assert.strictEqual(s.code, ErrorCodes.OK);
  34. assert.ok( e.matches({"a":[5,12]}) );
  35. assert.ok( ! e.matches({"a":[6,8]}) );
  36. },
  37. "should not match null": function() {
  38. var e = new ModMatchExpression();
  39. var s = e.init("a",5,2);
  40. assert.strictEqual(s.code, ErrorCodes.OK);
  41. assert.ok( ! e.matches({}) );
  42. assert.ok( ! e.matches({"a":null}) );
  43. },
  44. "should yield an elemMatchKey": function() {
  45. var e = new ModMatchExpression();
  46. var s = e.init("a", 5,2);
  47. var m = new MatchDetails();
  48. m.requestElemMatchKey();
  49. assert.strictEqual(s.code, ErrorCodes.OK);
  50. assert.ok( ! e.matches({"a":4}, m) );
  51. assert.ok( ! m.hasElemMatchKey() );
  52. assert.ok( e.matches({"a":2}));
  53. assert.ok( ! m.hasElemMatchKey() );
  54. assert.ok( e.matches({"a":[1,2,5]}, m) );
  55. assert.ok( m.hasElemMatchKey() );
  56. assert.strictEqual("1", m.elemMatchKey() );
  57. },
  58. "should handle equivalence": function() {
  59. var e = new ModMatchExpression();
  60. var s = e.init("a",1,2);
  61. var b = new ModMatchExpression();
  62. var c = new ModMatchExpression();
  63. var d = new ModMatchExpression();
  64. assert.strictEqual(s.code, ErrorCodes.OK);
  65. s = b.init("a",2,2);
  66. assert.strictEqual(s.code, ErrorCodes.OK);
  67. s = c.init("a",1,1);
  68. assert.strictEqual(s.code, ErrorCodes.OK);
  69. s = d.init("b",1,2);
  70. assert.strictEqual(s.code, ErrorCodes.OK);
  71. assert.ok( e.equivalent(e) );
  72. assert.ok( ! e.equivalent(b) );
  73. assert.ok( ! e.equivalent(c) );
  74. assert.ok( ! e.equivalent(d) );
  75. },
  76. };