import { media } from './media';
import { some } from '../../combinator';
import { input } from '../context';
import { inspect } from '../../debug.test';
describe('Unit: parser/inline/media', () => {
describe('media', () => {
const parser = some(media);
it('xss', () => {
assert.deepStrictEqual(inspect(parser, input('![]{javascript:alert}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{vbscript:alert}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{any:alert}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{"}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{\\}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![\\"]{/}')), [['
'], '']);
});
it('invalid', () => {
assert.deepStrictEqual(inspect(parser, input('')), undefined);
assert.deepStrictEqual(inspect(parser, input('{}')), undefined);
assert.deepStrictEqual(inspect(parser, input('[]')), undefined);
assert.deepStrictEqual(inspect(parser, input('!{}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![]')), undefined);
assert.deepStrictEqual(inspect(parser, input('![]{}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![]{ }')), [['![]{ }'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{ }')), undefined);
assert.deepStrictEqual(inspect(parser, input('![]{ }')), undefined);
assert.deepStrictEqual(inspect(parser, input('![]]{/}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![]{{}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![]{}}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![]{{}}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![]{{b}}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![]{b\nc}')), [['![]{b'], '\nc}']);
assert.deepStrictEqual(inspect(parser, input('![]{b\\\nc}')), [['![]{b\\'], '\nc}']);
assert.deepStrictEqual(inspect(parser, input('![]{ b}')), [['![]{ b}'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{ b\n}')), [['![]{ b'], '\n}']);
assert.deepStrictEqual(inspect(parser, input('![ ]{}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![ ]{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![ ]{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![ a]{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![ a ]{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![\\ a]{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![ \\ a]{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![\n]{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![\\ ]{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![\\\n]{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![	]{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![&a;]{b}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![[]{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![]]{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![a]{}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![a\nb]{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![a\\\nb]{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('![]{ttp://host}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{tel:1234567890}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{http://[::ffff:0:0%1]}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{http://[::ffff:0:0/96]}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{.}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{..}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{../}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{/../b}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input(' ![]{b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('[]{/}')), undefined);
});
it('basic', () => {
assert.deepStrictEqual(inspect(parser, input('![]{b}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{b }')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{b }')), [['![]{b'], ' }']);
assert.deepStrictEqual(inspect(parser, input('![]{ b }')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{ b }')), [['![]{ b'], ' }']);
assert.deepStrictEqual(inspect(parser, input('![]{ b }')), undefined);
assert.deepStrictEqual(inspect(parser, input('![]{ b }')), undefined);
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('![]{\\b}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{?/../}')), [[`
`], '']);
assert.deepStrictEqual(inspect(parser, input('![]{#/../}')), [[`
`], '']);
assert.deepStrictEqual(inspect(parser, input('![]{^/b}')), [[`
`], '']);
assert.deepStrictEqual(inspect(parser, input('![a ]{b}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![a ]{b}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![a b]{c}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![©]{b}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![©]{b}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('!{b}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('!{ ][ }')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('!{ }{ }')), [['
'], '']);
});
it('nest', () => {
assert.deepStrictEqual(inspect(parser, input('![\\[]{/}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![\\"]{"?"#"}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![*a*]{/}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{/}')), [['
'], '']);
});
it('external', () => {
assert.deepStrictEqual(inspect(parser, input('![]{//host}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{//[::]}')), [['
'], '']);
});
it('attribute', () => {
assert.deepStrictEqual(inspect(parser, input('![]{/ __proto__}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{/ constructor}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{/ aspect-ratio}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{/ nofollow}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{/ width="4" height="3"}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{/ 4x3}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{/ aspect-ratio="4/3"}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{/ aspect-ratio="4/3" nofollow}')), [['
'], '']);
assert.deepStrictEqual(inspect(parser, input('![]{/ 4:3}')), [['
'], '']);
});
});
});