import { escsource } from './escapable';
import { some } from '../../combinator';
import { input } from '../context';
import { inspect } from '../../debug.test';
describe('Unit: parser/source/escsource', () => {
describe('escsource', () => {
const parser = some(escsource);
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'], '']);
});
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(' \n')), [[' ', '
'], '']);
assert.deepStrictEqual(inspect(parser, input(' \n')), [[' ', '
'], '']);
});
it('linebreak', () => {
assert.deepStrictEqual(inspect(parser, input('\n\n')), [['
', '
'], '']);
});
it('\\', () => {
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('\\$')), [['\\$'], '']);
assert.deepStrictEqual(inspect(parser, input('\\ ')), [['\\ '], '']);
assert.deepStrictEqual(inspect(parser, input('\\\n')), [['\\', '
'], '']);
});
});
});