You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.4 KiB
JavaScript
54 lines
1.4 KiB
JavaScript
7 years ago
|
var test = require('tape');
|
||
|
var evaluate = require('../');
|
||
|
var parse = require('esprima').parse;
|
||
|
|
||
|
test('resolved', function (t) {
|
||
|
t.plan(1);
|
||
|
|
||
|
var src = '[1,2,3+4*10+(n||6),foo(3+5),obj[""+"x"].y]';
|
||
|
var ast = parse(src).body[0].expression;
|
||
|
var res = evaluate(ast, {
|
||
|
n: false,
|
||
|
foo: function (x) { return x * 100 },
|
||
|
obj: { x: { y: 555 } }
|
||
|
});
|
||
|
t.deepEqual(res, [ 1, 2, 49, 800, 555 ]);
|
||
|
});
|
||
|
|
||
|
test('unresolved', function (t) {
|
||
|
t.plan(1);
|
||
|
|
||
|
var src = '[1,2,3+4*10*z+n,foo(3+5),obj[""+"x"].y]';
|
||
|
var ast = parse(src).body[0].expression;
|
||
|
var res = evaluate(ast, {
|
||
|
n: 6,
|
||
|
foo: function (x) { return x * 100 },
|
||
|
obj: { x: { y: 555 } }
|
||
|
});
|
||
|
t.equal(res, undefined);
|
||
|
});
|
||
|
|
||
|
test('boolean', function (t) {
|
||
|
t.plan(1);
|
||
|
|
||
|
var src = '[ 1===2+3-16/4, [2]==2, [2]!==2, [2]!==[2] ]';
|
||
|
var ast = parse(src).body[0].expression;
|
||
|
t.deepEqual(evaluate(ast), [ true, true, true, true ]);
|
||
|
});
|
||
|
|
||
|
test('array methods', function(t) {
|
||
|
t.plan(1);
|
||
|
|
||
|
var src = '[1, 2, 3].map(function(n) { return n * 2 })';
|
||
|
var ast = parse(src).body[0].expression;
|
||
|
t.deepEqual(evaluate(ast), [2, 4, 6]);
|
||
|
});
|
||
|
|
||
|
test('array methods with vars', function(t) {
|
||
|
t.plan(1);
|
||
|
|
||
|
var src = '[1, 2, 3].map(function(n) { return n * x })';
|
||
|
var ast = parse(src).body[0].expression;
|
||
|
t.deepEqual(evaluate(ast, {x: 2}), [2, 4, 6]);
|
||
|
});
|