SubtractExpression_test.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. "use strict";
  2. var assert = require("assert"),
  3. SubtractExpression = require("../../../../lib/pipeline/expressions/SubtractExpression"),
  4. Expression = require("../../../../lib/pipeline/expressions/Expression"),
  5. VariablesIdGenerator = require("../../../../lib/pipeline/expressions/VariablesIdGenerator"),
  6. VariablesParseState = require("../../../../lib/pipeline/expressions/VariablesParseState");
  7. // Mocha one-liner to make these tests self-hosted
  8. if(!module.parent)return(require.cache[__filename]=null,(new(require("mocha"))({ui:"exports",reporter:"spec",grep:process.env.TEST_GREP})).addFile(__filename).run(process.exit));
  9. exports.SubtractExpression = {
  10. "constructor()": {
  11. "should not throw Error when constructing without args": function() {
  12. assert.doesNotThrow(function() {
  13. new SubtractExpression();
  14. });
  15. },
  16. },
  17. "#getOpName()": {
  18. "should return the correct op name; $subtract": function() {
  19. assert.equal(new SubtractExpression().getOpName(), "$subtract");
  20. },
  21. },
  22. "#evaluateInternal()": {
  23. "should return the result of subtraction between two numbers": function() {
  24. var idGenerator = new VariablesIdGenerator(),
  25. vps = new VariablesParseState(idGenerator),
  26. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  27. result = expr.evaluate({a:2, b:1}),
  28. expected = 1;
  29. assert.strictEqual(result, expected);
  30. },
  31. "should return null if left is null": function() {
  32. var idGenerator = new VariablesIdGenerator(),
  33. vps = new VariablesParseState(idGenerator),
  34. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  35. result = expr.evaluate({a:null, b:1}),
  36. expected = null;
  37. assert.strictEqual(result, expected);
  38. },
  39. "should return null if left is undefined": function() {
  40. var idGenerator = new VariablesIdGenerator(),
  41. vps = new VariablesParseState(idGenerator),
  42. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  43. result = expr.evaluate({a:undefined, b:1}),
  44. expected = null;
  45. assert.strictEqual(result, expected);
  46. },
  47. "should return null if right is null": function() {
  48. var idGenerator = new VariablesIdGenerator(),
  49. vps = new VariablesParseState(idGenerator),
  50. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  51. result = expr.evaluate({a:2, b:null}),
  52. expected = null;
  53. assert.strictEqual(result, expected);
  54. },
  55. "should return null if right is undefined": function() {
  56. var idGenerator = new VariablesIdGenerator(),
  57. vps = new VariablesParseState(idGenerator),
  58. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  59. result = expr.evaluate({a:2, b:undefined}),
  60. expected = null;
  61. assert.strictEqual(result, expected);
  62. },
  63. "should subtract 2 dates": function() {
  64. var idGenerator = new VariablesIdGenerator(),
  65. vps = new VariablesParseState(idGenerator),
  66. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  67. date2 = new Date("Jan 3 1990"),
  68. date1 = new Date("Jan 1 1990"),
  69. result = expr.evaluate({a:date2, b:date1}),
  70. expected = date2 - date1;
  71. assert.strictEqual(result, expected);
  72. },
  73. "should subtract a number of millis from a date": function() {
  74. var idGenerator = new VariablesIdGenerator(),
  75. vps = new VariablesParseState(idGenerator),
  76. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  77. date2 = new Date("Jan 3 1990"),
  78. millis = 24 * 60 * 60 * 1000,
  79. result = expr.evaluate({a:date2, b:millis}),
  80. expected = date2 - millis;
  81. assert.strictEqual(
  82. JSON.stringify(result),
  83. JSON.stringify(expected)
  84. );
  85. },
  86. "should throw if left is not a date or number": function() {
  87. var idGenerator = new VariablesIdGenerator(),
  88. vps = new VariablesParseState(idGenerator),
  89. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  90. date2 = {},
  91. date1 = new Date();
  92. assert.throws(function() {
  93. expr.evaluate({a:date2, b:date1});
  94. });
  95. },
  96. "should throw if right is not a date or number": function() {
  97. var idGenerator = new VariablesIdGenerator(),
  98. vps = new VariablesParseState(idGenerator),
  99. expr = Expression.parseOperand({$subtract:["$a", "$b"]}, vps),
  100. date2 = new Date(),
  101. date1 = {};
  102. assert.throws(function() {
  103. expr.evaluate({a:date2, b:date1});
  104. });
  105. },
  106. },
  107. };
  108. if (!module.parent)(new(require("mocha"))()).ui("exports").reporter("spec").addFile(__filename).run(process.exit);