import { bracket } from './bracket';
import { some } from '../../combinator';
import { input } from '../context';
import { inspect } from '../../debug.test';
describe('Unit: parser/inline/bracket', () => {
describe('bracket', () => {
const parser = some(bracket);
it('(', () => {
assert.deepStrictEqual(inspect(parser, input('(')), [['('], '']);
assert.deepStrictEqual(inspect(parser, input('()')), [['()'], '']);
assert.deepStrictEqual(inspect(parser, input('(a')), [['(a'], '']);
assert.deepStrictEqual(inspect(parser, input('(0)')), [['(0)'], '']);
assert.deepStrictEqual(inspect(parser, input('(1)')), [['(1)'], '']);
assert.deepStrictEqual(inspect(parser, input('(10)')), [['(10)'], '']);
assert.deepStrictEqual(inspect(parser, input('(2000)')), [['(2000)'], '']);
assert.deepStrictEqual(inspect(parser, input('(0-1)')), [['(0-1)'], '']);
assert.deepStrictEqual(inspect(parser, input('(0)-1')), [['(0)'], '-1']);
assert.deepStrictEqual(inspect(parser, input('(0.1)')), [['(0.1)'], '']);
assert.deepStrictEqual(inspect(parser, input('(0.1.2)')), [['(0.1.2)'], '']);
assert.deepStrictEqual(inspect(parser, input('(1, 2)')), [['(1, 2)'], '']);
assert.deepStrictEqual(inspect(parser, input('(1.1-1.2)')), [['(1.1-1.2)'], '']);
assert.deepStrictEqual(inspect(parser, input('(1.1, 1.2)')), [['(1.1, 1.2)'], '']);
assert.deepStrictEqual(inspect(parser, input('(1 2)')), [['(1 2)'], '']);
assert.deepStrictEqual(inspect(parser, input('(1a)')), [['(1a)'], '']);
assert.deepStrictEqual(inspect(parser, input('(a)')), [['(a)'], '']);
assert.deepStrictEqual(inspect(parser, input('(a1)')), [['(a1)'], '']);
assert.deepStrictEqual(inspect(parser, input('(a-1)')), [['(a-1)'], '']);
assert.deepStrictEqual(inspect(parser, input('(a.1)')), [['(a.1)'], '']);
assert.deepStrictEqual(inspect(parser, input('(a b)')), [['(a b)'], '']);
assert.deepStrictEqual(inspect(parser, input('(word)')), [['(word)'], '']);
assert.deepStrictEqual(inspect(parser, input('(word word)')), [['(word word)'], '']);
assert.deepStrictEqual(inspect(parser, input('(word, word)')), [['(word, word)'], '']);
assert.deepStrictEqual(inspect(parser, input('(A)')), [['(A)'], '']);
assert.deepStrictEqual(inspect(parser, input('(Name)')), [['(Name)'], '']);
assert.deepStrictEqual(inspect(parser, input('(Word word)')), [['(Word word)'], '']);
assert.deepStrictEqual(inspect(parser, input('(Word Word)')), [['(Word Word)'], '']);
assert.deepStrictEqual(inspect(parser, input('(Name, Name)')), [['(Name, Name)'], '']);
assert.deepStrictEqual(inspect(parser, input('(ABBR)')), [['(ABBR)'], '']);
assert.deepStrictEqual(inspect(parser, input('(ABBR, ABBR)')), [['(ABBR, ABBR)'], '']);
assert.deepStrictEqual(inspect(parser, input(`(${'0'.repeat(16)})`)), [[`(${'0'.repeat(16)})`], '']);
assert.deepStrictEqual(inspect(parser, input(`(${'0'.repeat(17)})`)), [[`(${'0'.repeat(17)})`], '']);
assert.deepStrictEqual(inspect(parser, input('(\\a)')), [['(a)'], '']);
assert.deepStrictEqual(inspect(parser, input('(==)')), [['(==)'], '']);
assert.deepStrictEqual(inspect(parser, input('(()')), [['(()'], '']);
assert.deepStrictEqual(inspect(parser, input('("(\n))"(")')), [['("(
)'], ')"(")']);
assert.deepStrictEqual(inspect(parser, input('($)$')), [['($)$'], '']);
assert.deepStrictEqual(inspect(parser, input(')')), undefined);
assert.deepStrictEqual(inspect(parser, input('(1,2)')), [['(1,2)'], '']);
assert.deepStrictEqual(inspect(parser, input('(0-1)')), [['(0-1)'], '']);
assert.deepStrictEqual(inspect(parser, input('(0.1)')), [['(0.1)'], '']);
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\\\nb)')), [['(a
b)'], '']);
assert.deepStrictEqual(inspect(parser, input('([% a\\\nb %])')), [['()'], '']);
assert.deepStrictEqual(inspect(parser, input('({{\\\n}})')), [['({{\\
}})'], '']);
});
it('[', () => {
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('[==]')), [['[', '==', ']'], '']);
assert.deepStrictEqual(inspect(parser, input('[$]$')), [['[', '$]$'], '']);
assert.deepStrictEqual(inspect(parser, input(']')), undefined);
});
it('{', () => {
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('{==}')), [['{', '==', '}'], '']);
assert.deepStrictEqual(inspect(parser, input('}')), undefined);
});
it('"', () => {
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('"(")"')), [['"', '(', '"'], ')"']);
assert.deepStrictEqual(inspect(parser, input('"(("')), [['"', '((', '"'], '']);
assert.deepStrictEqual(inspect(parser, input('"(\\")"')), [['"', '(")', '"'], '']);
assert.deepStrictEqual(inspect(parser, input('"(\n)"(")')), [['"', '('], '\n)"(")']);
assert.deepStrictEqual(inspect(parser, input('"\n"')), [['"'], '\n"']);
assert.deepStrictEqual(inspect(parser, input('"\n"(")')), [['"'], '\n"(")']);
});
});
});