import { autolink } from '../autolink'; import { some } from '../../../combinator'; import { input } from '../../context'; import { inspect } from '../../../debug.test'; describe('Unit: parser/inline/autolink/url', () => { describe('url', () => { const parser: typeof autolink = (input, output) => some(autolink)((++input.position, input), output); it('invalid', () => { //assert.deepStrictEqual(inspect(parser, input('')), undefined); assert.deepStrictEqual(inspect(parser, input(' ')), undefined); assert.deepStrictEqual(inspect(parser, input(' http')), undefined); assert.deepStrictEqual(inspect(parser, input(' http://')), undefined); assert.deepStrictEqual(inspect(parser, input(' http://[')), undefined); assert.deepStrictEqual(inspect(parser, input(' http://]')), undefined); assert.deepStrictEqual(inspect(parser, input(' Http://host')), undefined); assert.deepStrictEqual(inspect(parser, input(' http://[::ffff:0:0%1]')), [['http://[::ffff:0:0%1]'], '']); assert.deepStrictEqual(inspect(parser, input(' http://[::ffff:0:0/96]')), [['http://[::ffff:0:0/96]'], '']); }); it('basic', () => { assert.deepStrictEqual(inspect(parser, input(' http://a')), [['http://a'], '']); assert.deepStrictEqual(inspect(parser, input(' http://a/')), [['http://a/'], '']); assert.deepStrictEqual(inspect(parser, input(' http://a:80')), [['http://a:80'], '']); assert.deepStrictEqual(inspect(parser, input(' http://a.b')), [['http://a.b'], '']); assert.deepStrictEqual(inspect(parser, input(` http://a?#${encodeURIComponent(':/[]()<>?#=& ')}`)), [['http://a?#%3A%2F[]()<>%3F%23%3D%26%20'], '']); assert.deepStrictEqual(inspect(parser, input(' http://a#()')), [['http://a#()'], '']); assert.deepStrictEqual(inspect(parser, input(' http://a#( )')), [['http://a#'], '( )']); assert.deepStrictEqual(inspect(parser, input(' http://a#(\n)')), [['http://a#'], '(\n)']); assert.deepStrictEqual(inspect(parser, input(' http://[::]')), [['http://[::]'], '']); assert.deepStrictEqual(inspect(parser, input('\rhttp://a#\\')), [['http://a#\\'], '']); assert.deepStrictEqual(inspect(parser, input('\nhttp://a#\\')), [['http://a#\\'], '']); }); it('trailing symbols', () => { assert.deepStrictEqual(inspect(parser, input(' http://host ')), [['http://host'], ' ']); assert.deepStrictEqual(inspect(parser, input(' http://host\n')), [['http://host'], '\n']); assert.deepStrictEqual(inspect(parser, input(' http://host\\')), [['http://host'], '\\']); assert.deepStrictEqual(inspect(parser, input(' http://host\\a')), [['http://host'], '\\a']); assert.deepStrictEqual(inspect(parser, input(' http://host\\ ')), [['http://host'], '\\ ']); assert.deepStrictEqual(inspect(parser, input(' http://host\\\n')), [['http://host'], '\\\n']); assert.deepStrictEqual(inspect(parser, input(' http://host. ')), [['http://host'], '. ']); assert.deepStrictEqual(inspect(parser, input(' http://host.\n')), [['http://host'], '.\n']); assert.deepStrictEqual(inspect(parser, input(' http://host.\\')), [['http://host'], '.\\']); assert.deepStrictEqual(inspect(parser, input(' http://host.\\ ')), [['http://host'], '.\\ ']); assert.deepStrictEqual(inspect(parser, input(' http://host.\\\n')), [['http://host'], '.\\\n']); assert.deepStrictEqual(inspect(parser, input(' http://host,')), [['http://host'], ',']); assert.deepStrictEqual(inspect(parser, input(' http://host;')), [['http://host'], ';']); assert.deepStrictEqual(inspect(parser, input(' http://host.')), [['http://host'], '.']); assert.deepStrictEqual(inspect(parser, input(' http://host:')), [['http://host'], ':']); assert.deepStrictEqual(inspect(parser, input(' http://host!')), [['http://host'], '!']); assert.deepStrictEqual(inspect(parser, input(' http://host?')), [['http://host'], '?']); assert.deepStrictEqual(inspect(parser, input(' http://host+')), [['http://host'], '+']); assert.deepStrictEqual(inspect(parser, input(' http://host-')), [['http://host'], '-']); assert.deepStrictEqual(inspect(parser, input(' http://host*')), [['http://host'], '*']); assert.deepStrictEqual(inspect(parser, input(' http://host=')), [['http://host'], '=']); assert.deepStrictEqual(inspect(parser, input(' http://host~')), [['http://host'], '~']); assert.deepStrictEqual(inspect(parser, input(' http://host^')), [['http://host'], '^']); assert.deepStrictEqual(inspect(parser, input(' http://host_')), [['http://host'], '_']); assert.deepStrictEqual(inspect(parser, input(' http://host/')), [['http://host/'], '']); assert.deepStrictEqual(inspect(parser, input(' http://host//')), [['http://host//'], '']); assert.deepStrictEqual(inspect(parser, input(' http://host///')), [['http://host'], '///']); assert.deepStrictEqual(inspect(parser, input(` http://host'`)), [[`http://host'`], '']); assert.deepStrictEqual(inspect(parser, input(' http://host"')), [['http://host'], '"']); assert.deepStrictEqual(inspect(parser, input(' http://host`')), [['http://host'], '`']); assert.deepStrictEqual(inspect(parser, input(' http://host|')), [['http://host'], '|']); assert.deepStrictEqual(inspect(parser, input(' http://host&')), [['http://host&'], '']); assert.deepStrictEqual(inspect(parser, input(' http://host$')), [['http://host'], '$']); assert.deepStrictEqual(inspect(parser, input(' http://host#"$"')), [['http://host#'], '"$"']); assert.deepStrictEqual(inspect(parser, input(' http://host#($)')), [['http://host#'], '($)']); assert.deepStrictEqual(inspect(parser, input(' http://host#(($))')), [['http://host#'], '(($))']); assert.deepStrictEqual(inspect(parser, input(' http://user@host')), [['http://user@host'], '']); assert.deepStrictEqual(inspect(parser, input(' http://host#@')), [['http://host#@'], '']); assert.deepStrictEqual(inspect(parser, input(' http://host[')), [['http://host'], '[']); assert.deepStrictEqual(inspect(parser, input(' http://host]')), [['http://host'], ']']); assert.deepStrictEqual(inspect(parser, input(' http://host(')), [['http://host'], '(']); assert.deepStrictEqual(inspect(parser, input(' http://host)')), [['http://host'], ')']); assert.deepStrictEqual(inspect(parser, input(' http://host{')), [['http://host'], '{']); assert.deepStrictEqual(inspect(parser, input(' http://host}')), [['http://host'], '}']); assert.deepStrictEqual(inspect(parser, input(' http://host<')), [['http://host'], '<']); assert.deepStrictEqual(inspect(parser, input(' http://host>')), [['http://host'], '>']); assert.deepStrictEqual(inspect(parser, input(' http://host(')), [['http://host'], '(']); assert.deepStrictEqual(inspect(parser, input(' http://host)')), [['http://host'], ')']); assert.deepStrictEqual(inspect(parser, input(` http://host${'+'.repeat(5e5)}`)), [['http://host'], '+'.repeat(5e5)]); }); it('trailing entities', () => { assert.deepStrictEqual(inspect(parser, input(' http://host?&hl;')), [['http://host?&hl'], ';']); assert.deepStrictEqual(inspect(parser, input(' http://host?&hl;&hl;')), [['http://host?&hl;&hl'], ';']); }); it('protocol', () => { assert.deepStrictEqual(inspect(parser, input(' http://host')), [['http://host'], '']); assert.deepStrictEqual(inspect(parser, input(' https://host')), [['https://host'], '']); }); }); });