Ajout FishPeper
This commit is contained in:
135
cncjs/test/evaluate-assignment-expression.js
Normal file
135
cncjs/test/evaluate-assignment-expression.js
Normal file
@@ -0,0 +1,135 @@
|
||||
import { test } from 'tap';
|
||||
import evaluateAssignmentExpression from '../src/server/lib/evaluate-assignment-expression';
|
||||
|
||||
test('exceptions', (t) => {
|
||||
// Unexpected identifier
|
||||
evaluateAssignmentExpression('Not a valid expression');
|
||||
|
||||
t.end();
|
||||
});
|
||||
|
||||
test('expressions', (t) => {
|
||||
{ // Evaluates expressions with variables
|
||||
const vars = {
|
||||
wposx: 10,
|
||||
wposy: 20,
|
||||
wposz: 30,
|
||||
};
|
||||
|
||||
// Evaluate assignment expression
|
||||
evaluateAssignmentExpression('value = 0.1', vars);
|
||||
t.same(vars, {
|
||||
wposx: 10,
|
||||
wposy: 20,
|
||||
wposz: 30,
|
||||
value: 0.1,
|
||||
});
|
||||
|
||||
// Evaluate sequence expression
|
||||
evaluateAssignmentExpression(' _x=(wposx+5), _y = wposy + 5, _z = (wposz+1*5) ', vars);
|
||||
t.same(vars, {
|
||||
wposx: 10,
|
||||
wposy: 20,
|
||||
wposz: 30,
|
||||
value: 0.1,
|
||||
_x: 15,
|
||||
_y: 25,
|
||||
_z: 35,
|
||||
});
|
||||
}
|
||||
|
||||
{ // Evaluates expressions containing template literals
|
||||
const bar = '0';
|
||||
const baz = 1;
|
||||
|
||||
t.test(t => {
|
||||
const vars = evaluateAssignmentExpression('bar = "0", baz = 1, foo[bar][baz] = `${bar}${baz}`', { bar, baz }); // eslint-disable-line no-template-curly-in-string
|
||||
t.equal(vars.bar, bar);
|
||||
t.equal(vars.baz, baz);
|
||||
t.equal(vars.foo[bar][baz], '01');
|
||||
t.end();
|
||||
});
|
||||
|
||||
t.test(t => {
|
||||
const vars = evaluateAssignmentExpression('bar = "0", baz = 1, foo[1][`baz`] = baz', { bar, baz });
|
||||
t.equal(vars.foo[1].baz, baz);
|
||||
t.end();
|
||||
});
|
||||
|
||||
t.test(t => {
|
||||
const vars = evaluateAssignmentExpression('bar = "0", baz = 1, foo[bar][baz] = `${bar}${baz}`', { bar, baz }); // eslint-disable-line no-template-curly-in-string
|
||||
t.equal(vars.foo[bar][baz], `${bar}${baz}`);
|
||||
t.end();
|
||||
});
|
||||
|
||||
t.test(t => {
|
||||
const vars = evaluateAssignmentExpression('bar = "0", baz = 1, foo.bar.baz = `${bar}${baz}`', { bar, baz }); // eslint-disable-line no-template-curly-in-string
|
||||
t.equal(vars.foo.bar.baz, `${bar}${baz}`);
|
||||
t.end();
|
||||
});
|
||||
}
|
||||
|
||||
// Set object values with a path string
|
||||
t.test(t => {
|
||||
const vars = evaluateAssignmentExpression('x.y.z.a.b.c = 1');
|
||||
t.equal(vars.x.y.z.a.b.c, 1);
|
||||
t.end();
|
||||
});
|
||||
|
||||
// Boolean
|
||||
t.test(t => {
|
||||
const vars = evaluateAssignmentExpression('ok = Boolean(1), notOk = Boolean(0)', { Boolean });
|
||||
t.equal(vars.ok, true);
|
||||
t.equal(vars.notOk, false);
|
||||
t.end();
|
||||
});
|
||||
|
||||
// Number
|
||||
t.test(t => {
|
||||
const vars = evaluateAssignmentExpression('dx = 4000, dy = 3000, dz = 1000, object.volume = Number(dx * dy * dz) || 0', { Number });
|
||||
t.equal(vars.dx, 4000);
|
||||
t.equal(vars.dy, 3000);
|
||||
t.equal(vars.dz, 1000);
|
||||
t.equal(vars.object.volume, 4000 * 3000 * 1000);
|
||||
t.end();
|
||||
});
|
||||
|
||||
// String
|
||||
t.test(t => {
|
||||
const vars = evaluateAssignmentExpression('value = String(100)', { String });
|
||||
t.equal(vars.value, '100');
|
||||
t.end();
|
||||
});
|
||||
|
||||
// Date
|
||||
t.test(t => {
|
||||
const now = Date.now();
|
||||
const vars = evaluateAssignmentExpression('now = Date.now()', { Date });
|
||||
t.ok(vars.now >= now);
|
||||
t.end();
|
||||
});
|
||||
|
||||
// JSON
|
||||
t.test(t => {
|
||||
const vars = evaluateAssignmentExpression('global.state.pos = JSON.stringify({ x: 0, y: 0, z: 0 })', { JSON });
|
||||
t.equal(vars.global.state.pos, '{"x":0,"y":0,"z":0}');
|
||||
t.end();
|
||||
});
|
||||
|
||||
// Math
|
||||
t.test(t => {
|
||||
const vars = evaluateAssignmentExpression('global.value = Math.floor(4.003)', { Math });
|
||||
t.equal(vars.global.value, 4);
|
||||
t.end();
|
||||
});
|
||||
|
||||
// parseInt
|
||||
t.test(t => {
|
||||
const vars = evaluateAssignmentExpression('binaryValue = parseInt("10000", 2), decimalValue = parseInt("325mm", 10)', { parseInt });
|
||||
t.equal(vars.binaryValue, 16);
|
||||
t.equal(vars.decimalValue, 325);
|
||||
t.end();
|
||||
});
|
||||
|
||||
t.end();
|
||||
});
|
||||
Reference in New Issue
Block a user