import { html, TAGS } from './html';
import { Output } from '../../combinator/parser';
import { some } from '../../combinator';
import { input } from '../context';
import { inspect } from '../../debug.test';
describe('Unit: parser/inline/html', () => {
describe('html', () => {
const parser = some(html);
it('hash', () => {
assert(TAGS.every(tag => parser(input(`<${tag}>`), new Output())));
});
it('xss', () => {
assert.deepStrictEqual(inspect(parser, input('')), [['<script>alert()</script>'], '']);
assert.deepStrictEqual(inspect(parser, input('')), [['<bdi onclick="alert()">'], '']);
assert.deepStrictEqual(inspect(parser, input('')), [['<bdi onclick="alert()"></bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdi onclick="alert()">a</bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdi onclick="alert()">a</bdi>'], '']);
});
it('invalid', () => {
assert.deepStrictEqual(inspect(parser, input('')), undefined);
assert.deepStrictEqual(inspect(parser, input('<0>')), undefined);
assert.deepStrictEqual(inspect(parser, input('')), [['<aT>'], '']);
assert.deepStrictEqual(inspect(parser, input('')), undefined);
assert.deepStrictEqual(inspect(parser, input('')), undefined);
assert.deepStrictEqual(inspect(parser, input('')), [['<T>'], '']);
assert.deepStrictEqual(inspect(parser, input('')), undefined);
assert.deepStrictEqual(inspect(parser, input('')), [['<wbr />'], '']);
assert.deepStrictEqual(inspect(parser, input('')), [['<bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('z')), [['<bdi>z'], '']);
assert.deepStrictEqual(inspect(parser, input('')), [['<bdi></bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input(' ')), [['<bdi> </bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input(' \n')), [['<bdi> \n</bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input(' \na')), [['<bdi> \na</bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('\\ ')), [['<bdi>\\ </bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('	')), [['<bdi>	</bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('')), [['<bdi><wbr></bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('\n')), [['<bdi>\n</bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('\na')), [['<bdi>\na</bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('\\\na')), [['<bdi>\\\na</bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdi>a'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdi>a</BDI>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<BDI>'], 'a']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<BDI>'], 'a']);
assert.deepStrictEqual(inspect(parser, input('')), undefined);
assert.deepStrictEqual(inspect(parser, input('')), undefined);
assert.deepStrictEqual(inspect(parser, input('')), [['<bdi />'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<b><b><b>a</b></b></b>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('<x a="*b*"'], '']);
assert.deepStrictEqual(inspect(parser, input('')), [['<x a="*b*">'], '']);
assert.deepStrictEqual(inspect(parser, input('c')), [['<x a="*b*">'], 'c']);
assert.deepStrictEqual(inspect(parser, input('<bdi a="*b*"'], '']);
assert.deepStrictEqual(inspect(parser, input('')), [['<bdi a="*b*">'], '']);
assert.deepStrictEqual(inspect(parser, input('c')), [['<bdi a="*b*">c'], '']);
assert.deepStrictEqual(inspect(parser, input('<bdi a b="*" *c*'], '']);
assert.deepStrictEqual(inspect(parser, input('')), [['<bdi a b="*" *c*>'], '']);
assert.deepStrictEqual(inspect(parser, input('d')), [['<bdi a b="*" *c*>d</bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('*c*')), [['<bdi a b="*" *>*c*'], '']);
assert.deepStrictEqual(inspect(parser, input('*c*')), [['<bdi a b="*" *>*c*</bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input(' a')), undefined);
});
it('basic', () => {
assert.deepStrictEqual(inspect(parser, input('')), [[''], '']);
assert.deepStrictEqual(inspect(parser, input('')), [[''], '']);
assert.deepStrictEqual(inspect(parser, input('')), [['<wbr '], ' >']);
assert.deepStrictEqual(inspect(parser, input('a')), [[''], 'a']);
assert.deepStrictEqual(inspect(parser, input('a')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdi >a</bdi>'], '']);
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')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('aa')), [['a'], 'a']);
assert.deepStrictEqual(inspect(parser, input('a ')), [['a '], '']);
assert.deepStrictEqual(inspect(parser, input('a \n ')), [['a '], '']);
assert.deepStrictEqual(inspect(parser, input('a\n')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('a\n ')), [['a '], '']);
assert.deepStrictEqual(inspect(parser, input('a\n')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('a\nb')), [['a
b'], '']);
});
it('nest', () => {
assert.deepStrictEqual(inspect(parser, input('[% ')), [['<bdi>[% </bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('abc')), [['abc'], '']);
assert.deepStrictEqual(inspect(parser, input('`a`')), [['a'], '']);
});
it('escape', () => {
assert.deepStrictEqual(inspect(parser, input('')), [['<a>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<a>a</a>'], '']);
assert.deepStrictEqual(inspect(parser, input('abc')), [['a<a>b</a>c'], '']);
assert.deepStrictEqual(inspect(parser, input('
')), [['<img>'], '']);
assert.deepStrictEqual(inspect(parser, input('
')), [['<img>'], '']);
});
it('attribute', () => {
assert.deepStrictEqual(inspect(parser, input('a')), undefined);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdi \n>a</bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdi __proto__>a</bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdi constructor>a</bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdi toString>a</bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdi X>a</bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdi x>a</bdi>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdo>a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdo >a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdo __proto__>a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdo constructor>a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdo toString>a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdo X>a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdo x>a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdo dir>a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdo dir=>a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdo dir=rtl>a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('<bdo dir=">a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdo dir="">a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdo dir="rtl" dir="rtl">a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdo diR="rtl">a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['a'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdo dir="rtl" >a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('a')), [['<bdo dir="rtl">a</bdo>'], '']);
assert.deepStrictEqual(inspect(parser, input('')), undefined);
assert.deepStrictEqual(inspect(parser, input('')), [['<wbr '], '\n>']);
assert.deepStrictEqual(inspect(parser, input('')), [['<wbr constructor>'], '']);
assert.deepStrictEqual(inspect(parser, input('')), [['<wbr X>'], '']);
assert.deepStrictEqual(inspect(parser, input('')), [['<wbr x>'], '']);
});
});
});