import { text } from './text'; import { some } from '../../combinator'; import { input } from '../context'; import { inspect } from '../../debug.test'; describe('Unit: parser/source/text', () => { describe('text', () => { const parser = some(text); it('invalid', () => { assert.deepStrictEqual(inspect(parser, input('')), undefined); }); it('basic', () => { assert.deepStrictEqual(inspect(parser, input('a')), [['a'], '']); assert.deepStrictEqual(inspect(parser, input('ab')), [['ab'], '']); assert.deepStrictEqual(inspect(parser, input('a b c')), [['a b c'], '']); assert.deepStrictEqual(inspect(parser, input('09あいAZaz')), [['09あいAZaz'], '']); assert.deepStrictEqual(inspect(parser, input('a\nb')), [['a', '
', 'b'], '']); }); it('escape', () => { 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('\\0')), [['0'], '']); assert.deepStrictEqual(inspect(parser, input('\\a')), [['a'], '']); assert.deepStrictEqual(inspect(parser, input('\\\\a')), [['\\', 'a'], '']); assert.deepStrictEqual(inspect(parser, input('\\ ')), [[' '], '']); assert.deepStrictEqual(inspect(parser, input('\\。')), [['。'], '']); }); it('space', () => { assert.deepStrictEqual(inspect(parser, input(' ')), [[], '']); assert.deepStrictEqual(inspect(parser, input(' ')), [[], '']); assert.deepStrictEqual(inspect(parser, input(' ')), [[], '']); assert.deepStrictEqual(inspect(parser, input(' \n')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input(' \r\n')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input(' \n')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input(' \r\n')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input(' \\\n')), [[' ', '
'], '']); assert.deepStrictEqual(inspect(parser, input(' \\\n')), [[' ', ' ', '
'], '']); 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 \n')), [['a', '
'], '']); assert.deepStrictEqual(inspect(parser, input('a \r\n')), [['a', '
'], '']); assert.deepStrictEqual(inspect(parser, input('a \n')), [['a', '
'], '']); assert.deepStrictEqual(inspect(parser, input('a \r\n')), [['a', '
'], '']); assert.deepStrictEqual(inspect(parser, input('a \\\n')), [['a', ' ', '
'], '']); assert.deepStrictEqual(inspect(parser, input('a \\\n')), [['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'], '']); }); it('hardbreak', () => { assert.deepStrictEqual(inspect(parser, input('\n')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('\n ')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input(' \n')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('\n\n')), [['
', '
'], '']); assert.deepStrictEqual(inspect(parser, input(' \n\n')), [['
', '
'], '']); assert.deepStrictEqual(inspect(parser, input('\n \n')), [['
', '
'], '']); assert.deepStrictEqual(inspect(parser, input('\n\n ')), [['
', '
'], '']); assert.deepStrictEqual(inspect(parser, input('。\n')), [['。', '
'], '']); }); it('softbreak', () => { assert.deepStrictEqual(inspect(parser, input('\\\n')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('\\\n ')), [['
'], '']); assert.deepStrictEqual(inspect(parser, input('\\\na')), [['
', 'a'], '']); assert.deepStrictEqual(inspect(parser, input('a\\\n')), [['a', '
'], '']); assert.deepStrictEqual(inspect(parser, input('a\\\nb\\\n')), [['a', '
', 'b', '
'], '']); assert.deepStrictEqual(inspect(parser, input('\\\\\\\n')), [['\\', '
'], '']); }); it('account', () => { assert.deepStrictEqual(inspect(parser, input('@0')), [['@0'], '']); assert.deepStrictEqual(inspect(parser, input('_@0')), [['_', '@0'], '']); assert.deepStrictEqual(inspect(parser, input('$@0')), [['$', '@0'], '']); assert.deepStrictEqual(inspect(parser, input('+@0')), [['+', '@0'], '']); assert.deepStrictEqual(inspect(parser, input('-@0')), [['-', '@0'], '']); assert.deepStrictEqual(inspect(parser, input('0@0')), [['0', '@0'], '']); assert.deepStrictEqual(inspect(parser, input('a@0')), [['a', '@0'], '']); assert.deepStrictEqual(inspect(parser, input('A@0')), [['A', '@0'], '']); assert.deepStrictEqual(inspect(parser, input('aA@0')), [['aA', '@0'], '']); assert.deepStrictEqual(inspect(parser, input(' @0')), [[' ', '@0'], '']); assert.deepStrictEqual(inspect(parser, input('@@0')), [['@', '@0'], '']); }); it('hashtag', () => { assert.deepStrictEqual(inspect(parser, input('#0')), [['#0'], '']); assert.deepStrictEqual(inspect(parser, input('_#0')), [['_', '#0'], '']); assert.deepStrictEqual(inspect(parser, input('$#0')), [['$', '#0'], '']); assert.deepStrictEqual(inspect(parser, input('+#0')), [['+', '#0'], '']); assert.deepStrictEqual(inspect(parser, input('-#0')), [['-', '#0'], '']); assert.deepStrictEqual(inspect(parser, input('0#0')), [['0', '#0'], '']); assert.deepStrictEqual(inspect(parser, input('a#0')), [['a', '#0'], '']); assert.deepStrictEqual(inspect(parser, input('A#0')), [['A', '#0'], '']); assert.deepStrictEqual(inspect(parser, input('aA#0')), [['aA', '#0'], '']); assert.deepStrictEqual(inspect(parser, input(' #0')), [[' ', '#0'], '']); assert.deepStrictEqual(inspect(parser, input('##0')), [['#', '#0'], '']); }); it('anchor', () => { assert.deepStrictEqual(inspect(parser, input('>>0')), [['>', '>0'], '']); assert.deepStrictEqual(inspect(parser, input('_>>0')), [['_', '>', '>0'], '']); assert.deepStrictEqual(inspect(parser, input('$>>0')), [['$', '>', '>0'], '']); assert.deepStrictEqual(inspect(parser, input('+>>0')), [['+', '>', '>0'], '']); assert.deepStrictEqual(inspect(parser, input('->>0')), [['-', '>', '>0'], '']); assert.deepStrictEqual(inspect(parser, input('0>>0')), [['0', '>', '>0'], '']); assert.deepStrictEqual(inspect(parser, input('a>>0')), [['a', '>', '>0'], '']); assert.deepStrictEqual(inspect(parser, input('A>>0')), [['A', '>', '>0'], '']); assert.deepStrictEqual(inspect(parser, input('aA>>0')), [['aA', '>', '>0'], '']); assert.deepStrictEqual(inspect(parser, input(' >>0')), [[' ', '>', '>0'], '']); assert.deepStrictEqual(inspect(parser, input('>>>>0')), [['>', '>', '>', '>0'], '']); }); }); });