SetExpectedResultBase.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. "use strict";
  2. var assert = require("assert"),
  3. SetDifferenceExpression = require("../../../../lib/pipeline/expressions/SetDifferenceExpression"), //jshint ignore:line
  4. SetIsSubsetExpression = require("../../../../lib/pipeline/expressions/SetIsSubsetExpression"), //jshint ignore:line
  5. VariablesIdGenerator = require("../../../../lib/pipeline/expressions/VariablesIdGenerator"),
  6. VariablesParseState = require("../../../../lib/pipeline/expressions/VariablesParseState"),
  7. Expression = require("../../../../lib/pipeline/expressions/Expression");
  8. // Mocha one-liner to make these tests self-hosted
  9. 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));
  10. var ExpectedResultBase = module.exports = (function() { //jshint ignore:line
  11. var klass = function ExpectedResultBase(overrides) {
  12. //NOTE: DEVIATION FROM MONGO: using this base class to make things easier to initialize
  13. for (var key in overrides)
  14. this[key] = overrides[key];
  15. }, proto = klass.prototype;
  16. proto.run = function() {
  17. var spec = this.getSpec,
  18. args = spec.input;
  19. if (spec.expected !== undefined && spec.expected !== null) {
  20. var fields = spec.expected;
  21. for (var fieldFirst in fields) {
  22. var fieldSecond = fields[fieldFirst],
  23. expected = fieldSecond;
  24. // obj = {<fieldFirst>: args}; //NOTE: DEVIATION FROM MONGO: see parseExpression below
  25. var idGenerator = new VariablesIdGenerator(),
  26. vps = new VariablesParseState(idGenerator),
  27. expr = Expression.parseExpression(fieldFirst, args, vps),
  28. result = expr.evaluate({});
  29. if (result instanceof Array){
  30. result.sort();
  31. }
  32. var errMsg = "for expression " + fieldFirst +
  33. " with argument " + JSON.stringify(args) +
  34. " full tree: " + JSON.stringify(expr.serialize(false)) +
  35. " expected: " + JSON.stringify(expected) +
  36. " but got: " + JSON.stringify(result);
  37. assert.deepEqual(result, expected, errMsg);
  38. //TODO test optimize here
  39. }
  40. }
  41. if (spec.error !== undefined && spec.error !== null) {
  42. var asserters = spec.error,
  43. n = asserters.length;
  44. for (var i = 0; i < n; ++i) {
  45. // var obj2 = {<asserters[i]>: args}; //NOTE: DEVIATION FROM MONGO: see parseExpression below
  46. var idGenerator2 = new VariablesIdGenerator(),
  47. vps2 = new VariablesParseState(idGenerator2);
  48. assert.throws(function() {
  49. // NOTE: parse and evaluatation failures are treated the same
  50. expr = Expression.parseExpression(asserters[i], args, vps2);
  51. expr.evaluate({});
  52. }); // jshint ignore:line
  53. }
  54. }
  55. };
  56. return klass;
  57. })();