import {linkifyURLs, pathEscapeSegments, toOriginUrl} from './url.ts'; test('pathEscapeSegments', () => { expect(pathEscapeSegments('a/b/c')).toEqual('a/b/c'); expect(pathEscapeSegments('a/b/ c')).toEqual('a/b/%20c'); }); test('linkifyURLs', () => { const link = (url: string) => `${url}`; expect(linkifyURLs('https://example.com')).toEqual(link('https://example.com')); expect(linkifyURLs('https://dl.google.com/go/go1.23.6.linux-amd64.tar.gz')).toEqual(link('https://dl.google.com/go/go1.23.6.linux-amd64.tar.gz')); expect(linkifyURLs('https://example.com/path?query=1&b=2#frag')).toEqual(link('https://example.com/path?query=1&b=2#frag')); expect(linkifyURLs('visit https://example.com/repo for info')).toEqual(`visit ${link('https://example.com/repo')} for info`); expect(linkifyURLs('See https://example.com.')).toEqual(`See ${link('https://example.com')}.`); expect(linkifyURLs('https://example.com, and more')).toEqual(`${link('https://example.com')}, and more`); expect(linkifyURLs('https://proxy.golang.org/cached-only')).toEqual(`${link('https://proxy.golang.org/cached-only')}`); expect(linkifyURLs('https://registry.npmjs.org/@types/node')).toEqual(`${link('https://registry.npmjs.org/@types/node')}`); expect(linkifyURLs('https://a.com and https://b.org')).toEqual(`${link('https://a.com')} and ${link('https://b.org')}`); expect(linkifyURLs('no urls here')).toEqual('no urls here'); expect(linkifyURLs('http://example.com/path')).toEqual(link('http://example.com/path')); expect(linkifyURLs('http://localhost:3000/repo')).toEqual(link('http://localhost:3000/repo')); expect(linkifyURLs('https://')).toEqual('https://'); expect(linkifyURLs('Click here')).toEqual('Click here'); expect(linkifyURLs('Click here')).toEqual('Click here'); expect(linkifyURLs('https://example.com')).toEqual('https://example.com'); expect(linkifyURLs('https://evil.com/')).toEqual(`${link('https://evil.com/')}`); expect(linkifyURLs('https://evil.com/"onmouseover="alert(1)')).toEqual(`${link('https://evil.com/')}"onmouseover="alert(1)`); expect(linkifyURLs('javascript:alert(1)')).toEqual('javascript:alert(1)'); // eslint-disable-line no-script-url expect(linkifyURLs("https://evil.com/'onclick='alert(1)")).toEqual(`${link('https://evil.com/')}'onclick='alert(1)`); expect(linkifyURLs('data:text/html,')).toEqual('data:text/html,'); expect(linkifyURLs('https://evil.com/\nonclick=alert(1)')).toEqual(`${link('https://evil.com/')}\nonclick=alert(1)`); expect(linkifyURLs('https://evil.com/"onmouseover=alert(1)')).toEqual(`${link('https://evil.com/"onmouseover=alert')}(1)`); }); test('toOriginUrl', () => { const oldLocation = String(window.location); for (const origin of ['https://example.com', 'https://example.com:3000']) { window.location.assign(`${origin}/`); expect(toOriginUrl('/')).toEqual(`${origin}/`); expect(toOriginUrl('/org/repo.git')).toEqual(`${origin}/org/repo.git`); expect(toOriginUrl('https://another.com')).toEqual(`${origin}/`); expect(toOriginUrl('https://another.com/')).toEqual(`${origin}/`); expect(toOriginUrl('https://another.com/org/repo.git')).toEqual(`${origin}/org/repo.git`); expect(toOriginUrl('https://another.com:4000')).toEqual(`${origin}/`); expect(toOriginUrl('https://another.com:4000/')).toEqual(`${origin}/`); expect(toOriginUrl('https://another.com:4000/org/repo.git')).toEqual(`${origin}/org/repo.git`); } window.location.assign(oldLocation); });