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))')), [[''], '']); 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'], '']); }); }); });