SetExpectedResultBase.js 2.4 KB

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