import { dlist } from './dlist'; import { some } from '../../combinator'; import { input } from '../context'; import { inspect } from '../../debug.test'; describe('Unit: parser/block/dlist', () => { describe('dlist', () => { const parser = some(dlist); it('invalid', () => { assert.deepStrictEqual(inspect(parser, input('')), undefined); assert.deepStrictEqual(inspect(parser, input('\n')), undefined); assert.deepStrictEqual(inspect(parser, input('~')), undefined); assert.deepStrictEqual(inspect(parser, input('~ ')), undefined); assert.deepStrictEqual(inspect(parser, input('~ \n')), undefined); assert.deepStrictEqual(inspect(parser, input('~ \na')), undefined); assert.deepStrictEqual(inspect(parser, input('~~')), undefined); assert.deepStrictEqual(inspect(parser, input('~:')), undefined); assert.deepStrictEqual(inspect(parser, input('~0')), undefined); assert.deepStrictEqual(inspect(parser, input('~a')), undefined); assert.deepStrictEqual(inspect(parser, input('~a:b')), undefined); assert.deepStrictEqual(inspect(parser, input('~a\n:b')), undefined); assert.deepStrictEqual(inspect(parser, input('~a\n: b')), undefined); assert.deepStrictEqual(inspect(parser, input('~\n')), undefined); assert.deepStrictEqual(inspect(parser, input('~\n:')), undefined); assert.deepStrictEqual(inspect(parser, input('~\n:\n')), undefined); assert.deepStrictEqual(inspect(parser, input('~\n~\n')), undefined); assert.deepStrictEqual(inspect(parser, input('~\n~\n:')), undefined); assert.deepStrictEqual(inspect(parser, input('~\n:\n:')), undefined); assert.deepStrictEqual(inspect(parser, input('~\na')), undefined); assert.deepStrictEqual(inspect(parser, input(' ~ ')), undefined); }); it('single', () => { assert.deepStrictEqual(inspect(parser, input('~ a')), [['
a
'], '']); assert.deepStrictEqual(inspect(parser, input('~ \\')), [['
\\
'], '']); assert.deepStrictEqual(inspect(parser, input('~ \\ a')), [['
a
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\nb')), [['
a
b
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\nb\n')), [['
a
b
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\nb\nc')), [['
a
b
c
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\nb\n\\\nc')), [['
a
b
\\
c
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n~')), [['
a
~
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n~b')), [['
a
~b
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n~ b')), [['
a
b
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n:')), [['
a
:
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n: ')), [['
a
:
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n: \n')), [['
a
:
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n: \\')), [['
a
\\
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n:b')), [['
a
:b
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n: b')), [['
a
b
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n: b\n')), [['
a
b
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n: b\nc')), [['
a
b
c
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n: b\n\\\nc')), [['
a
b
\\
c
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a~ b')), [['
a~ b
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a: b')), [['
a: b
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a \n: b\nc ')), [['
a
b
c
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a \n: b\n c ')), [['
a
b
c
'], '']); }); it('multiple', () => { assert.deepStrictEqual(inspect(parser, input('~ a\n: b\n~ c\n: d')), [['
a
b
c
d
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n b\nc\n d')), [['
a
b
c
d
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n: b\nc\n: d')), [['
a
b
c
d
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n: b\nc\n~ d\n: e')), [['
a
b
c
d
e
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a\n: b\n~ c\n: d\n~ e\n: f')), [['
a
b
c
d
e
f
'], '']); }); it('indexer', () => { assert.deepStrictEqual(inspect(parser, input('~ a [|b]')), [['
a
'], '']); assert.deepStrictEqual(inspect(parser, input('~ a [|b]\\')), [['
a [|b]
'], '']); assert.deepStrictEqual(inspect(parser, input('~ - [|b]')), [['
-
'], '']); assert.deepStrictEqual(inspect(parser, input('~ *A*')), [['
A
'], '']); assert.deepStrictEqual(inspect(parser, input('~ `A`')), [['
A
'], '']); assert.deepStrictEqual(inspect(parser, input('~ ${A}$')), [['
${A}$
'], '']); }); }); });