ModMatchExpression.js 2.6 KB

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