Created
July 30, 2025 16:08
-
-
Save jimniels/147f6e084b22863f3fb4104d76b0c6fc to your computer and use it in GitHub Desktop.
href resolution test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const assertions = [ | |
// Preserves search string but strips hash | |
// x -> { search: '?...', hash: '' } | |
{ href: '', location: '/path', resolves_to: '/path' }, | |
{ href: '', location: '/path/', resolves_to: '/path/' }, | |
{ href: '', location: '/path/#foo', resolves_to: '/path/' }, | |
{ href: '', location: '/path/?id=foo', resolves_to: '/path/?id=foo' }, | |
{ href: '', location: '/path/?id=foo#bar', resolves_to: '/path/?id=foo' }, | |
// Strips search and hash strings | |
// x -> { search: '', hash: '' } | |
{ href: '.', location: '/path', resolves_to: '/' }, | |
{ href: '.', location: `/path#foo`, resolves_to: `/` }, | |
{ href: '.', location: `/path?id=foo`, resolves_to: `/` }, | |
{ href: '.', location: `/path/`, resolves_to: `/path/` }, | |
{ href: '.', location: `/path/#foo`, resolves_to: `/path/` }, | |
{ href: '.', location: `/path/?id=foo`, resolves_to: `/path/` }, | |
{ href: '.', location: `/path/index.html`, resolves_to: `/path/` }, | |
// Strips search parameters and hash string, | |
// but preserves search delimeter (`?`) | |
// x -> { search: '?', hash: '' } | |
{ href: '?', location: '/path', resolves_to: '/path?' }, | |
{ href: '?', location: '/path#foo', resolves_to: '/path?' }, | |
{ href: '?', location: '/path?id=foo', resolves_to: '/path?' }, | |
{ href: '?', location: '/path/', resolves_to: '/path/?' }, | |
{ href: '?', location: '/path/?id=foo#bar', resolves_to: '/path/?' }, | |
{ href: '?', location: '/index.html#foo', resolves_to: '/index.html?'} | |
]; | |
const assertions_evaluated = assertions.map(({ href, location, resolves_to }) => { | |
const domain = 'https://example.com'; | |
const expected = new URL(href, domain + location).toString(); | |
const received = new URL(domain + resolves_to).toString(); | |
return { | |
href, | |
location, | |
expected: expected.replace(domain, ''), | |
received: received.replace(domain, ''), | |
passed: expected === received | |
}; | |
}); | |
console.table(assertions_evaluated); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment