import { annotation } from './annotation';
import { some } from '../../combinator';
import { input } from '../context';
import { inspect } from '../../debug.test';
describe('Unit: parser/inline/annotation', () => {
describe('annotation', () => {
const parser = some(annotation);
it('invalid', () => {
assert.deepStrictEqual(inspect(parser, input('')), undefined);
assert.deepStrictEqual(inspect(parser, input('(')), [['('], '']);
assert.deepStrictEqual(inspect(parser, input('()')), [ [ '()' ], '' ]);
assert.deepStrictEqual(inspect(parser, input('((')), [ [ '((' ], '' ]);
assert.deepStrictEqual(inspect(parser, input('(())')), [['(())'], '']);
assert.deepStrictEqual(inspect(parser, input('(()))')), [['(())'], ')']);
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)b)')), [['((a)b)'], '']);
assert.deepStrictEqual(inspect(parser, input('(([))')), [['(([))'], '']);
assert.deepStrictEqual(inspect(parser, input('(([%))')), [['(([%))'], '']);
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('((\\ 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('((\\\na))')), undefined);
assert.deepStrictEqual(inspect(parser, input('((a\n))')), [['((a
))'], '']);
assert.deepStrictEqual(inspect(parser, input('((a\\\n))')), [['((a
))'], '']);
assert.deepStrictEqual(inspect(parser, input('((a\nb))')), [['((a
b))'], '']);
assert.deepStrictEqual(inspect(parser, input('((a\\\nb))')), [['((a
b))'], '']);
assert.deepStrictEqual(inspect(parser, input('((*a\nb*))')), [['((a
b))'], '']);
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)))b)))')), [['((a)b)'], '']);
assert.deepStrictEqual(inspect(parser, input('(((((((a)))b)))')), [['(((a)b)'], '']);
assert.deepStrictEqual(inspect(parser, input(' ((a))')), undefined);
});
it('basic', () => {
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('((ab))')), [['ab'], '']);
});
it('nest', () => {
assert.deepStrictEqual(inspect(parser, input('((`a`))')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('((@a))')), [['@a'], '']);
assert.deepStrictEqual(inspect(parser, input('((http://host))')), [['http://host'], '']);
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))))')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('(([[a]]))')), [['a'], '']);
assert.deepStrictEqual(
inspect(parser, input(`${'(('.repeat(2)}0${'))'.repeat(2)}`)),
[['0'], '']);
assert.deepStrictEqual(
inspect(parser, input(`${'(('.repeat(3)}0${'))'.repeat(3)}`)),
[['0'], '']);
assert.deepStrictEqual(
inspect(parser, input(`(${'(('.repeat(2)}0${'))'.repeat(2)}`)),
[['(0'], '']);
assert.deepStrictEqual(
inspect(parser, input(`(${'(('.repeat(3)}0${'))'.repeat(3)}`)),
[['(0'], '']);
assert.deepStrictEqual(
inspect(parser, input(`${'(('.repeat(2)}0${'))'.repeat(2)}${'(('.repeat(2)}0${'))'.repeat(2)}`)),
[['0', '0'], '']);
assert.deepStrictEqual(
inspect(parser, input(`${'(('.repeat(2)}0${'))'.repeat(2)}${'(('.repeat(3)}0${'))'.repeat(2)}`)),
[['0', '((0'], '']);
assert.deepStrictEqual(
inspect(parser, input(`${'(('.repeat(2)}0${'))'.repeat(2)}${'(('.repeat(3)}0${'))'.repeat(3)}`)),
[['0', '0'], '']);
assert.deepStrictEqual(
inspect(parser, input(`${'(('.repeat(3)}0))((1))))))`)),
[['01'], '']);
assert.deepStrictEqual(
inspect(parser, input(`${'(0'.repeat(4)}((0${'))'.repeat(3)}${'(('.repeat(2)}0${'))'.repeat(2)}`)),
[['(0(0(0(00))))', '0'], '']);
});
});
});