jssm
Version:
A Javascript state machine with a simple API. Well tested, and typed with Flowtype. MIT License.
116 lines (72 loc) • 3.81 kB
JavaScript
/* eslint-disable max-len */
import {describe} from 'ava-spec';
const jssm = require('../../../build/jssm.es5.js');
describe('arrow_direction', async it => {
it('<-', t => t.is('left', jssm.arrow_direction('<-') ) );
it('<=', t => t.is('left', jssm.arrow_direction('<=') ) );
it('<~', t => t.is('left', jssm.arrow_direction('<~') ) );
it('->', t => t.is('right', jssm.arrow_direction('->') ) );
it('=>', t => t.is('right', jssm.arrow_direction('=>') ) );
it('~>', t => t.is('right', jssm.arrow_direction('~>') ) );
it('<->', t => t.is('both', jssm.arrow_direction('<->') ) );
it('<=>', t => t.is('both', jssm.arrow_direction('<=>') ) );
it('<~>', t => t.is('both', jssm.arrow_direction('<~>') ) );
it('<-=>', t => t.is('both', jssm.arrow_direction('<-=>') ) );
it('<=->', t => t.is('both', jssm.arrow_direction('<=->') ) );
it('<-~>', t => t.is('both', jssm.arrow_direction('<-~>') ) );
it('<~->', t => t.is('both', jssm.arrow_direction('<~->') ) );
it('<=~>', t => t.is('both', jssm.arrow_direction('<=~>') ) );
it('<~=>', t => t.is('both', jssm.arrow_direction('<~=>') ) );
});
describe('arrow_left_kind', async it => {
it('->', t => t.is('none', jssm.arrow_left_kind('->') ) );
it('=>', t => t.is('none', jssm.arrow_left_kind('=>') ) );
it('~>', t => t.is('none', jssm.arrow_left_kind('~>') ) );
it('<-', t => t.is('legal', jssm.arrow_left_kind('<-') ) );
it('<->', t => t.is('legal', jssm.arrow_left_kind('<->') ) );
it('<-=>', t => t.is('legal', jssm.arrow_left_kind('<-=>') ) );
it('<-~>', t => t.is('legal', jssm.arrow_left_kind('<-~>') ) );
it('<=', t => t.is('main', jssm.arrow_left_kind('<=') ) );
it('<=>', t => t.is('main', jssm.arrow_left_kind('<=>') ) );
it('<=->', t => t.is('main', jssm.arrow_left_kind('<=->') ) );
it('<=~>', t => t.is('main', jssm.arrow_left_kind('<=~>') ) );
it('<~', t => t.is('forced', jssm.arrow_left_kind('<~') ) );
it('<~>', t => t.is('forced', jssm.arrow_left_kind('<~>') ) );
it('<~->', t => t.is('forced', jssm.arrow_left_kind('<~->') ) );
it('<~=>', t => t.is('forced', jssm.arrow_left_kind('<~=>') ) );
});
describe('arrow_right_kind', async it => {
it('<-', t => t.is('none', jssm.arrow_right_kind('<-') ) );
it('<=', t => t.is('none', jssm.arrow_right_kind('<=') ) );
it('<~', t => t.is('none', jssm.arrow_right_kind('<~') ) );
it('->', t => t.is('legal', jssm.arrow_right_kind('->') ) );
it('<->', t => t.is('legal', jssm.arrow_right_kind('<->') ) );
it('<=->', t => t.is('legal', jssm.arrow_right_kind('<=->') ) );
it('<~->', t => t.is('legal', jssm.arrow_right_kind('<~->') ) );
it('=>', t => t.is('main', jssm.arrow_right_kind('=>') ) );
it('<=>', t => t.is('main', jssm.arrow_right_kind('<=>') ) );
it('<-=>', t => t.is('main', jssm.arrow_right_kind('<-=>') ) );
it('<~=>', t => t.is('main', jssm.arrow_right_kind('<~=>') ) );
it('~>', t => t.is('forced', jssm.arrow_right_kind('~>') ) );
it('<~>', t => t.is('forced', jssm.arrow_right_kind('<~>') ) );
it('<-~>', t => t.is('forced', jssm.arrow_right_kind('<-~>') ) );
it('<=~>', t => t.is('forced', jssm.arrow_right_kind('<=~>') ) );
});
describe('error catchery', async _parse_it => {
describe('unknown arrow direction', async it => {
it('throws', t => t.throws( () => {
jssm.arrow_direction('boop');
} ));
});
describe('unknown arrow left kind', async it => {
it('throws', t => t.throws( () => {
jssm.arrow_left_kind('boop');
} ));
});
describe('unknown arrow right kind', async it => {
it('throws', t => t.throws( () => {
jssm.arrow_right_kind('boop');
} ));
});
});
// stochable