import { emstrong } from './emstrong';
import { some } from '../../combinator';
import { input } from '../context';
import { inspect } from '../../debug.test';
describe('Unit: parser/inline/emstrong', () => {
describe('emstrong', () => {
const parser = some(emstrong);
it('invalid', () => {
assert.deepStrictEqual(inspect(parser, input('***')), [['***'], '']);
assert.deepStrictEqual(inspect(parser, input('***a')), [['***a'], '']);
assert.deepStrictEqual(inspect(parser, input('***a ***')), [['***a ', '***'], '']);
assert.deepStrictEqual(inspect(parser, input('***a ***')), [['***a', ' ', '***'], '']);
assert.deepStrictEqual(inspect(parser, input('***a\n***')), [['***a', '
', '***'], '']);
assert.deepStrictEqual(inspect(parser, input('***a\\ ***')), [['***a', ' ', '***'], '']);
assert.deepStrictEqual(inspect(parser, input('***a\\\n***')), [['***a', '
', '***'], '']);
assert.deepStrictEqual(inspect(parser, input('*** ***')), undefined);
assert.deepStrictEqual(inspect(parser, input('*** a***')), undefined);
assert.deepStrictEqual(inspect(parser, input('*** a ***')), undefined);
assert.deepStrictEqual(inspect(parser, input('***\n***')), undefined);
assert.deepStrictEqual(inspect(parser, input('***\na***')), undefined);
assert.deepStrictEqual(inspect(parser, input('***\\ a***')), undefined);
assert.deepStrictEqual(inspect(parser, input('***\\\na***')), undefined);
assert.deepStrictEqual(inspect(parser, input('***a***')), undefined);
assert.deepStrictEqual(inspect(parser, input(' ***a***')), undefined);
});
it('basic', () => {
assert.deepStrictEqual(inspect(parser, input('***a***')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('***ab***')), [['ab'], '']);
assert.deepStrictEqual(inspect(parser, input('***a****')), [['a'], '*']);
assert.deepStrictEqual(inspect(parser, input('***a\nb***')), [['a
b'], '']);
assert.deepStrictEqual(inspect(parser, input('***a\\\nb***')), [['a
b'], '']);
});
it('nest', () => {
assert.deepStrictEqual(inspect(parser, input('***`a`***')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('***(*a*)***')), [['(a)'], '']);
assert.deepStrictEqual(inspect(parser, input('***(**a**)***')), [['(a)'], '']);
assert.deepStrictEqual(inspect(parser, input('***(***a***)***')), [['(a)'], '']);
assert.deepStrictEqual(inspect(parser, input('***a*')), [['**', 'a'], '']);
assert.deepStrictEqual(inspect(parser, input('***a*b')), [['**', 'a', 'b'], '']);
assert.deepStrictEqual(inspect(parser, input('***a*b*')), [['**', 'a', 'b'], '*']);
assert.deepStrictEqual(inspect(parser, input('***a*b*c')), [['**', 'a', 'b', '*', 'c'], '']);
assert.deepStrictEqual(inspect(parser, input('***a*b*c*')), [['**', 'a', 'b', 'c'], '']);
assert.deepStrictEqual(inspect(parser, input('***a*b*c**')), [['**', 'a', 'b', 'c'], '*']);
assert.deepStrictEqual(inspect(parser, input('***a*b*c***')), [['abc'], '']);
assert.deepStrictEqual(inspect(parser, input('***a*b**')), [['ab'], '']);
assert.deepStrictEqual(inspect(parser, input('***a*b**c')), [['ab'], 'c']);
assert.deepStrictEqual(inspect(parser, input('***a**')), [['*', 'a'], '']);
assert.deepStrictEqual(inspect(parser, input('***a**b')), [['*', 'a', 'b'], '']);
assert.deepStrictEqual(inspect(parser, input('***a**b*')), [['ab'], '']);
assert.deepStrictEqual(inspect(parser, input('***a**b**')), [['ab'], '*']);
assert.deepStrictEqual(inspect(parser, input('***a**b**c')), [['*', 'a', 'b', '**', 'c'], '']);
assert.deepStrictEqual(inspect(parser, input('***a**b**c*')), [['ab**c'], '']);
assert.deepStrictEqual(inspect(parser, input('***a**b**c**')), [['*', 'a', 'b', 'c'], '']);
assert.deepStrictEqual(inspect(parser, input('***a**b**c***')), [['abc'], '']);
assert.deepStrictEqual(inspect(parser, input('***a *b****')), [['a b'], '']);
assert.deepStrictEqual(inspect(parser, input('***a\\ *b****')), [['a b'], '']);
assert.deepStrictEqual(inspect(parser, input('***a	*b****')), [['a\tb'], '']);
assert.deepStrictEqual(inspect(parser, input('***a*b****')), [['ab'], '']);
assert.deepStrictEqual(inspect(parser, input('***a *b****')), [['a b'], '']);
assert.deepStrictEqual(inspect(parser, input('***a* **b****')), [['a b'], '']);
assert.deepStrictEqual(inspect(parser, input('***a*\\ **b****')), [['a b'], '']);
assert.deepStrictEqual(inspect(parser, input('***a*	**b****')), [['a\tb'], '']);
assert.deepStrictEqual(inspect(parser, input('***a***b****')), [['ab'], '']);
assert.deepStrictEqual(inspect(parser, input('***a*b **')), [['**', 'a', 'b ', '**'], '']);
assert.deepStrictEqual(inspect(parser, input('***a*b\\ **')), [['**', 'a', 'b', ' ', '**'], '']);
assert.deepStrictEqual(inspect(parser, input('***a**b*')), [['ab'], '']);
assert.deepStrictEqual(inspect(parser, input('***a**b*c')), [['ab'], 'c']);
assert.deepStrictEqual(inspect(parser, input('***a**b*c**')), [['ab'], 'c**']);
assert.deepStrictEqual(inspect(parser, input('***a**b**c***')), [['abc'], '']);
assert.deepStrictEqual(inspect(parser, input('***a**b**c***d')), [['abc'], 'd']);
assert.deepStrictEqual(inspect(parser, input('***a** *b**')), [['a b'], '']);
assert.deepStrictEqual(inspect(parser, input('***a**\\ *b**')), [['a b'], '']);
assert.deepStrictEqual(inspect(parser, input('***a**	*b**')), [['a\tb'], '']);
assert.deepStrictEqual(inspect(parser, input('***a***b**')), [['ab'], '']);
assert.deepStrictEqual(inspect(parser, input('***a**b *')), [['*', 'a', 'b ', '*'], '']);
assert.deepStrictEqual(inspect(parser, input('***a**b\\ *')), [['*', 'a', 'b', ' ', '*'], '']);
assert.deepStrictEqual(inspect(parser, input('***a*')), [['**', 'a'], '']);
assert.deepStrictEqual(inspect(parser, input('***a**')), [['*', 'a'], '']);
assert.deepStrictEqual(inspect(parser, input('***a***')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('***a***b')), [['a'], 'b']);
assert.deepStrictEqual(inspect(parser, input('***a****')), [['a'], '*']);
assert.deepStrictEqual(inspect(parser, input('***a*****')), [['a'], '**']);
assert.deepStrictEqual(inspect(parser, input('***a******')), [['a', '***'], '']);
assert.deepStrictEqual(inspect(parser, input('****a***')), [['*', 'a'], '']);
assert.deepStrictEqual(inspect(parser, input('****a***b')), [['*', 'a', 'b'], '']);
assert.deepStrictEqual(inspect(parser, input('****a***b*')), [['ab'], '']);
assert.deepStrictEqual(inspect(parser, input('****a****')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('****a****b')), [['a'], 'b']);
assert.deepStrictEqual(inspect(parser, input('*****a***')), [['**', 'a'], '']);
assert.deepStrictEqual(inspect(parser, input('*****a***b')), [['**', 'a', 'b'], '']);
assert.deepStrictEqual(inspect(parser, input('*****a***b**')), [['ab'], '']);
assert.deepStrictEqual(inspect(parser, input('*****a****')), [['*', 'a'], '']);
assert.deepStrictEqual(inspect(parser, input('*****a****b')), [['*', 'a', 'b'], '']);
assert.deepStrictEqual(inspect(parser, input('*****a****b*')), [['ab'], '']);
assert.deepStrictEqual(inspect(parser, input('*****a*****')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('******a***')), [['***', 'a'], '']);
assert.deepStrictEqual(inspect(parser, input('******a***b')), [['***', 'a', 'b'], '']);
assert.deepStrictEqual(inspect(parser, input('******a****')), [['**', 'a'], '']);
assert.deepStrictEqual(inspect(parser, input('******a****b')), [['**', 'a', 'b'], '']);
assert.deepStrictEqual(inspect(parser, input('******a****b**')), [['ab'], '']);
assert.deepStrictEqual(inspect(parser, input('******a*****')), [['*', 'a'], '']);
assert.deepStrictEqual(inspect(parser, input('******a*****b')), [['*', 'a', 'b'], '']);
assert.deepStrictEqual(inspect(parser, input('******a*****b*')), [['ab'], '']);
assert.deepStrictEqual(inspect(parser, input('******a******')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('******a******b')), [['a'], 'b']);
assert.deepStrictEqual(inspect(parser, input('******a*b')), [['*****', 'a', 'b'], '']);
assert.deepStrictEqual(inspect(parser, input('******a*b *')), [['*****', 'a', 'b ', '*'], '']);
assert.deepStrictEqual(inspect(parser, input('******a*b **')), [['*****', 'a', 'b ', '**'], '']);
assert.deepStrictEqual(inspect(parser, input('******a*b ***')), [['*****', 'a', 'b ', '***'], '']);
assert.deepStrictEqual(inspect(parser, input('******a*b ****')), [['*****', 'a', 'b ', '****'], '']);
assert.deepStrictEqual(inspect(parser, input('******a*b *****')), [['*****', 'a', 'b ', '*****'], '']);
assert.deepStrictEqual(inspect(parser, input('******a*** b***')), [['a b'], '']);
});
});
});