import { olist } from './olist'; import { some } from '../../combinator'; import { input } from '../context'; import { inspect } from '../../debug.test'; describe('Unit: parser/block/olist', () => { describe('olist', () => { const parser = some(olist); it('invalid', () => { assert.deepStrictEqual(inspect(parser, input('')), undefined); assert.deepStrictEqual(inspect(parser, input('\n')), undefined); assert.deepStrictEqual(inspect(parser, input('1a. ')), undefined); assert.deepStrictEqual(inspect(parser, input('a1. ')), undefined); assert.deepStrictEqual(inspect(parser, input('aZ. ')), undefined); assert.deepStrictEqual(inspect(parser, input('Az. ')), undefined); assert.deepStrictEqual(inspect(parser, input('1')), undefined); assert.deepStrictEqual(inspect(parser, input('1 ')), undefined); assert.deepStrictEqual(inspect(parser, input('1\n')), undefined); assert.deepStrictEqual(inspect(parser, input('1.')), undefined); assert.deepStrictEqual(inspect(parser, input('1.a')), undefined); assert.deepStrictEqual(inspect(parser, input('1')), undefined); assert.deepStrictEqual(inspect(parser, input('1 ')), undefined); assert.deepStrictEqual(inspect(parser, input('1\n')), undefined); assert.deepStrictEqual(inspect(parser, input('1.')), undefined); assert.deepStrictEqual(inspect(parser, input('1.1')), undefined); assert.deepStrictEqual(inspect(parser, input('1.1.')), undefined); assert.deepStrictEqual(inspect(parser, input('1.a')), undefined); assert.deepStrictEqual(inspect(parser, input('1.\n')), undefined); assert.deepStrictEqual(inspect(parser, input('1.\n1. a')), undefined); assert.deepStrictEqual(inspect(parser, input('(1)')), undefined); assert.deepStrictEqual(inspect(parser, input('(1)\n')), undefined); assert.deepStrictEqual(inspect(parser, input('(1)\n(1) a')), undefined); assert.deepStrictEqual(inspect(parser, input('I. ')), undefined); assert.deepStrictEqual(inspect(parser, input('A. ')), undefined); assert.deepStrictEqual(inspect(parser, input('(I) ')), undefined); assert.deepStrictEqual(inspect(parser, input('(A) ')), undefined); assert.deepStrictEqual(inspect(parser, input(' 1. ')), undefined); }); it('single', () => { // pending assert.deepStrictEqual(inspect(parser, input('1. ')), [['
'], '']); // filled assert.deepStrictEqual(inspect(parser, input('1. \\')), [['
  1. \\
'], '']); assert.deepStrictEqual(inspect(parser, input('1. \\\n')), [['
  1. \\
'], '']); assert.deepStrictEqual(inspect(parser, input('1. -')), [['
  1. -
'], '']); assert.deepStrictEqual(inspect(parser, input('1. -\n')), [['
  1. -
'], '']); // pending assert.deepStrictEqual(inspect(parser, input('(1) ')), [['
'], '']); // filled assert.deepStrictEqual(inspect(parser, input('(1) a')), [['
  1. a
'], '']); }); it('multiple', () => { // pending assert.deepStrictEqual(inspect(parser, input('0. \n0')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('0. \n0\n')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('0. \n0.')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('0. \n0. ')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('0. \n0.\n')), [['
'], '']); // filled assert.deepStrictEqual(inspect(parser, input('0. 1\n0. 2')), [['
  1. 1
  2. 2
'], '']); assert.deepStrictEqual(inspect(parser, input('0. 1\n0. 2\n0. 3')), [['
  1. 1
  2. 2
  3. 3
'], '']); // pending assert.deepStrictEqual(inspect(parser, input('(1) \n(')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('(1) \n(\n')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('(1) \n(1')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('(1) \n(1\n')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('(1) \n(1)')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('(1) \n(1)\n')), [['
'], '']); // filled assert.deepStrictEqual(inspect(parser, input('(1) \n(1) ')), [['
'], '']); // invalid assert.deepStrictEqual(inspect(parser, input('0. \n0 ')), [['
  1. 0
'], '']); }); it('nest', () => { assert.deepStrictEqual(inspect(parser, input('0. \n 0')), [['

'], '']); assert.deepStrictEqual(inspect(parser, input('0. 1\n 0')), [['
  1. 1
'], '']); assert.deepStrictEqual(inspect(parser, input('0. 1\n 0.')), [['
  1. 1
'], '']); assert.deepStrictEqual(inspect(parser, input('0. 1\n 0. ')), [['
  1. 1
'], '']); assert.deepStrictEqual(inspect(parser, input('0. 1\n 0.\n')), [['
  1. 1
'], '']); assert.deepStrictEqual(inspect(parser, input('0. 1\n 0. 2')), [['
  1. 1
    1. 2
'], '']); assert.deepStrictEqual(inspect(parser, input('0. 1\n 0. 2\n0. 3')), [['
  1. 1
    1. 2
  2. 3
'], '']); assert.deepStrictEqual(inspect(parser, input('0. 1\n 0. 2\n 0. 3')), [['
  1. 1
    1. 2
    2. 3
'], '']); assert.deepStrictEqual(inspect(parser, input('0. 1\n 0. 2\n 0. 3')), [['
  1. 1
    1. 2
      1. 3
'], '']); assert.deepStrictEqual(inspect(parser, input('0. 1\n 0. 2\n 0. 3')), [['
  1. 1
    1. 2
  2. 0. 3
'], '']); assert.deepStrictEqual(inspect(parser, input('0. a [#b]')), [['
  1. a b
'], '']); assert.deepStrictEqual(inspect(parser, input('0. http://host\\')), [['
  1. http://host\\
'], '']); assert.deepStrictEqual(inspect(parser, input('0. !http://host')), [['
  1. !http://host
'], '']); }); it('index', () => { assert.deepStrictEqual(inspect(parser, input('1. ')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('9. ')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('00. ')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('01. ')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('0. \n1')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('8. \n9')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('9. \n9')), [['
'], '']); }); it('branch', () => { assert.deepStrictEqual(inspect(parser, input('1-1. ')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('1-1-1. ')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('1. \n1-')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('1. \n1-1')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('(1)-1 ')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('(1)-1-1 ')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('(1) \n(1)-')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('(1) \n(1)-1')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('1. \n1--')), [['
  1. 1--
'], '']); assert.deepStrictEqual(inspect(parser, input('1. \n1--. ')), [['
  1. 1--.
'], '']); assert.deepStrictEqual(inspect(parser, input('(1) \n(1)--')), [['
  1. (1)--
'], '']); assert.deepStrictEqual(inspect(parser, input('(1) \n(1)-- ')), [['
  1. (1)--
'], '']); assert.deepStrictEqual(inspect(parser, input('1-1. 1')), [['
  1. 1
'], '']); }); it('type', () => { assert.deepStrictEqual(inspect(parser, input('1. \n i. ')), [['

'], '']); assert.deepStrictEqual(inspect(parser, input('1. \n a. ')), [['

'], '']); assert.deepStrictEqual(inspect(parser, input('1. \n I. ')), [['

'], '']); assert.deepStrictEqual(inspect(parser, input('1. \n A. ')), [['

'], '']); assert.deepStrictEqual(inspect(parser, input('1. \n a. \n 1.\n c')), [['

'], '']); assert.deepStrictEqual(inspect(parser, input('1. \n i. 1')), [['

    1. 1
'], '']); }); it('checkbox', () => { assert.deepStrictEqual(inspect(parser, input('1. [ ]')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('1. [x]')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('1. [X]')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('1. [X] 1')), [['
  1. 1
'], '']); }); it('indexer', () => { assert.deepStrictEqual(inspect(parser, input('1. [|a]')), [['
  1. [|a]
'], '']); assert.deepStrictEqual(inspect(parser, input('1. a [|]')), [['
  1. a
'], '']); assert.deepStrictEqual(inspect(parser, input('1. a [|b]')), [['
  1. a
'], '']); assert.deepStrictEqual(inspect(parser, input('1. - [|]')), [['
  1. -
'], '']); assert.deepStrictEqual(inspect(parser, input('1. [ ] [|a]')), [['
  1. [|a]
'], '']); assert.deepStrictEqual(inspect(parser, input('1. [ ] a [|b]')), [['
  1. a
'], '']); assert.deepStrictEqual(inspect(parser, input('1. a [|]\n 1. c [|d]')), [['
  1. a
    1. c
'], '']); assert.deepStrictEqual(inspect(parser, input('1. a [|b]\n 1. c [|d]')), [['
  1. a
    1. c
'], '']); }); }); });