62 lines
1.8 KiB
JavaScript
62 lines
1.8 KiB
JavaScript
import {Latus} from '@latus/core';
|
|
import {expect} from 'chai';
|
|
|
|
import {
|
|
buildCondition,
|
|
buildInvoke,
|
|
buildExpression,
|
|
buildValue,
|
|
} from '../src/builders';
|
|
import Context from '../src/context';
|
|
import compile from '../src/compilers/compile';
|
|
|
|
const {name} = require('../package.json');
|
|
|
|
describe(name, () => {
|
|
let latus;
|
|
let context;
|
|
beforeEach(async () => {
|
|
latus = Latus.mock([
|
|
['@avocado/behavior', `${__dirname}/../src`],
|
|
]);
|
|
await Promise.all(latus.invokeFlat('@latus/core/starting'));
|
|
context = new Context({}, latus);
|
|
});
|
|
describe('builders', () => {
|
|
it('can build conditions', async () => {
|
|
const condition = compile(buildCondition('is', [
|
|
buildValue(69),
|
|
buildValue(69),
|
|
]), latus);
|
|
expect(condition(context)).to.be.true;
|
|
});
|
|
it('can build expressions', async () => {
|
|
const test = {foo: 69};
|
|
context.add('test', test);
|
|
const expression = compile(buildExpression(['test', 'foo']), latus);
|
|
expect(expression(context)).to.equal(test.foo);
|
|
const expression2 = compile(buildExpression(['test', 'foo'], 420), latus);
|
|
expression2(context);
|
|
expect(test.foo).to.equal(420);
|
|
});
|
|
it('can build invocations', async () => {
|
|
const test = {foo: () => 69};
|
|
context.add('test', test);
|
|
const expression = compile(buildInvoke(['test', 'foo']), latus);
|
|
expect(expression(context)).to.equal(69);
|
|
});
|
|
it('can build values', async () => {
|
|
const passthroughs = [
|
|
buildCondition('is', []),
|
|
buildExpression([]),
|
|
buildValue(69),
|
|
];
|
|
for (let i = 0; i < passthroughs.length; i++) {
|
|
const passthrough = passthroughs[i];
|
|
expect(passthrough).to.equal(buildValue(passthrough));
|
|
}
|
|
expect(buildValue(420)).to.deep.equal({type: 'literal', value: 420});
|
|
});
|
|
});
|
|
});
|