eval.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. var test = require('tape');
  2. var evaluate = require('../');
  3. var parse = require('esprima').parse;
  4. test('resolved', function (t) {
  5. t.plan(1);
  6. var src = '[1,2,3+4*10+(n||6),foo(3+5),obj[""+"x"].y]';
  7. var ast = parse(src).body[0].expression;
  8. var res = evaluate(ast, {
  9. n: false,
  10. foo: function (x) { return x * 100 },
  11. obj: { x: { y: 555 } }
  12. });
  13. t.deepEqual(res, [ 1, 2, 49, 800, 555 ]);
  14. });
  15. test('unresolved', function (t) {
  16. t.plan(1);
  17. var src = '[1,2,3+4*10*z+n,foo(3+5),obj[""+"x"].y]';
  18. var ast = parse(src).body[0].expression;
  19. var res = evaluate(ast, {
  20. n: 6,
  21. foo: function (x) { return x * 100 },
  22. obj: { x: { y: 555 } }
  23. });
  24. t.equal(res, undefined);
  25. });
  26. test('boolean', function (t) {
  27. t.plan(1);
  28. var src = '[ 1===2+3-16/4, [2]==2, [2]!==2, [2]!==[2] ]';
  29. var ast = parse(src).body[0].expression;
  30. t.deepEqual(evaluate(ast), [ true, true, true, true ]);
  31. });
  32. test('array methods', function(t) {
  33. t.plan(1);
  34. var src = '[1, 2, 3].map(function(n) { return n * 2 })';
  35. var ast = parse(src).body[0].expression;
  36. t.deepEqual(evaluate(ast), [2, 4, 6]);
  37. });
  38. test('array methods with vars', function(t) {
  39. t.plan(1);
  40. var src = '[1, 2, 3].map(function(n) { return n * x })';
  41. var ast = parse(src).body[0].expression;
  42. t.deepEqual(evaluate(ast, {x: 2}), [2, 4, 6]);
  43. });
  44. test('evaluate this', function(t) {
  45. t.plan(1);
  46. var src = 'this.x + this.y.z';
  47. var ast = parse(src).body[0].expression;
  48. var res = evaluate(ast, {
  49. 'this': { x: 1, y: { z: 100 } }
  50. });
  51. t.equal(res, 101);
  52. });
  53. test('FunctionExpression unresolved', function(t) {
  54. t.plan(1);
  55. var src = '(function(){console.log("Not Good")})';
  56. var ast = parse(src).body[0].expression;
  57. var res = evaluate(ast, {});
  58. t.equal(res, undefined);
  59. });
  60. test('MemberExpressions from Functions unresolved', function(t) {
  61. t.plan(1);
  62. var src = '(function () {}).constructor';
  63. var ast = parse(src).body[0].expression;
  64. var res = evaluate(ast, {});
  65. t.equal(res, undefined);
  66. });