aboutsummaryrefslogtreecommitdiff
path: root/src/normalize-url.test.js
diff options
context:
space:
mode:
authorTravis Fischer <[email protected]>2021-06-02 13:59:27 -0400
committerTravis Fischer <[email protected]>2021-06-02 13:59:27 -0400
commitf6321fc3249d83a0059ef47978ed101d3c75375f (patch)
tree9da8b59a0c94c08f92506e57653b8c9f55fa85e8 /src/normalize-url.test.js
downloadcf-image-proxy-f6321fc3249d83a0059ef47978ed101d3c75375f.tar.xz
cf-image-proxy-f6321fc3249d83a0059ef47978ed101d3c75375f.zip
feat: import from notion2site repo
Diffstat (limited to 'src/normalize-url.test.js')
-rw-r--r--src/normalize-url.test.js156
1 files changed, 156 insertions, 0 deletions
diff --git a/src/normalize-url.test.js b/src/normalize-url.test.js
new file mode 100644
index 0000000..0d7a9da
--- /dev/null
+++ b/src/normalize-url.test.js
@@ -0,0 +1,156 @@
+import test from 'ava'
+import { normalizeUrl } from './normalize-url'
+
+test('main', (t) => {
+ t.is(normalizeUrl('http://sindresorhus.com'), 'https://sindresorhus.com')
+ t.is(normalizeUrl('http://sindresorhus.com '), 'https://sindresorhus.com')
+ t.is(normalizeUrl('http://sindresorhus.com.'), 'https://sindresorhus.com')
+ t.is(normalizeUrl('http://SindreSorhus.com'), 'https://sindresorhus.com')
+ t.is(normalizeUrl('http://sindresorhus.com'), 'https://sindresorhus.com')
+ t.is(normalizeUrl('HTTP://sindresorhus.com'), 'https://sindresorhus.com')
+
+ // TODO: why isn't this parsed correctly by Node.js URL?
+ // t.is(normalizeUrl('//sindresorhus.com'), 'https://sindresorhus.com')
+
+ t.is(normalizeUrl('http://sindresorhus.com'), 'https://sindresorhus.com')
+ t.is(normalizeUrl('http://sindresorhus.com:80'), 'https://sindresorhus.com')
+ t.is(normalizeUrl('https://sindresorhus.com:443'), 'https://sindresorhus.com')
+ t.is(normalizeUrl('ftp://sindresorhus.com:21'), 'ftp://sindresorhus.com')
+ t.is(
+ normalizeUrl('https://sindresorhus.com/foo/'),
+ 'https://sindresorhus.com/foo'
+ )
+ t.is(
+ normalizeUrl('http://sindresorhus.com/?foo=bar baz'),
+ 'https://sindresorhus.com/?foo=bar+baz'
+ )
+ t.is(
+ normalizeUrl('https://foo.com/https://bar.com'),
+ 'https://foo.com/https://bar.com'
+ )
+ t.is(
+ normalizeUrl('https://foo.com/https://bar.com/foo//bar'),
+ 'https://foo.com/https://bar.com/foo/bar'
+ )
+ t.is(
+ normalizeUrl('https://foo.com/http://bar.com'),
+ 'https://foo.com/http://bar.com'
+ )
+ t.is(
+ normalizeUrl('https://foo.com/http://bar.com/foo//bar'),
+ 'https://foo.com/http://bar.com/foo/bar'
+ )
+ t.is(
+ normalizeUrl('https://sindresorhus.com/%7Efoo/'),
+ 'https://sindresorhus.com/~foo',
+ 'decode URI octets'
+ )
+ t.is(normalizeUrl('https://sindresorhus.com/?'), 'https://sindresorhus.com')
+ t.is(normalizeUrl('https://êxample.com'), 'https://xn--xample-hva.com')
+ t.is(
+ normalizeUrl('https://sindresorhus.com/?b=bar&a=foo'),
+ 'https://sindresorhus.com/?a=foo&b=bar'
+ )
+ t.is(
+ normalizeUrl('https://sindresorhus.com/?foo=bar*|<>:"'),
+ 'https://sindresorhus.com/?foo=bar*%7C%3C%3E%3A%22'
+ )
+ t.is(
+ normalizeUrl('https://sindresorhus.com:5000'),
+ 'https://sindresorhus.com:5000'
+ )
+ t.is(
+ normalizeUrl('https://sindresorhus.com/foo#bar'),
+ 'https://sindresorhus.com/foo#bar'
+ )
+ t.is(
+ normalizeUrl('https://sindresorhus.com/foo/bar/../baz'),
+ 'https://sindresorhus.com/foo/baz'
+ )
+ t.is(
+ normalizeUrl('https://sindresorhus.com/foo/bar/./baz'),
+ 'https://sindresorhus.com/foo/bar/baz'
+ )
+ t.is(
+ normalizeUrl(
+ 'https://i.vimeocdn.com/filter/overlay?src0=https://i.vimeocdn.com/video/598160082_1280x720.jpg&src1=https://f.vimeocdn.com/images_v6/share/play_icon_overlay.png'
+ ),
+ 'https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F598160082_1280x720.jpg&src1=https%3A%2F%2Ff.vimeocdn.com%2Fimages_v6%2Fshare%2Fplay_icon_overlay.png'
+ )
+})
+
+test('removeTrailingSlash and removeDirectoryIndex options)', (t) => {
+ t.is(
+ normalizeUrl('https://sindresorhus.com/path/'),
+ 'https://sindresorhus.com/path'
+ )
+ t.is(
+ normalizeUrl('https://sindresorhus.com/#/path/'),
+ 'https://sindresorhus.com/#/path/'
+ )
+ t.is(
+ normalizeUrl('https://sindresorhus.com/foo/#/bar/'),
+ 'https://sindresorhus.com/foo#/bar/'
+ )
+})
+
+test('sortQueryParameters', (t) => {
+ t.is(
+ normalizeUrl('https://sindresorhus.com/?a=Z&b=Y&c=X&d=W'),
+ 'https://sindresorhus.com/?a=Z&b=Y&c=X&d=W'
+ )
+ t.is(
+ normalizeUrl('https://sindresorhus.com/?b=Y&c=X&a=Z&d=W'),
+ 'https://sindresorhus.com/?a=Z&b=Y&c=X&d=W'
+ )
+ t.is(
+ normalizeUrl('https://sindresorhus.com/?a=Z&d=W&b=Y&c=X'),
+ 'https://sindresorhus.com/?a=Z&b=Y&c=X&d=W'
+ )
+ t.is(normalizeUrl('https://sindresorhus.com/'), 'https://sindresorhus.com')
+})
+
+test('invalid urls', (t) => {
+ t.throws(() => {
+ normalizeUrl('http://')
+ }, 'Invalid URL: http://')
+
+ t.throws(() => {
+ normalizeUrl('/')
+ }, 'Invalid URL: /')
+
+ t.throws(() => {
+ normalizeUrl('/relative/path/')
+ }, 'Invalid URL: /relative/path/')
+})
+
+test('remove duplicate pathname slashes', (t) => {
+ t.is(
+ normalizeUrl('https://sindresorhus.com////foo/bar'),
+ 'https://sindresorhus.com/foo/bar'
+ )
+ t.is(
+ normalizeUrl('https://sindresorhus.com////foo////bar'),
+ 'https://sindresorhus.com/foo/bar'
+ )
+ t.is(
+ normalizeUrl('ftp://sindresorhus.com//foo'),
+ 'ftp://sindresorhus.com/foo'
+ )
+ t.is(
+ normalizeUrl('https://sindresorhus.com:5000///foo'),
+ 'https://sindresorhus.com:5000/foo'
+ )
+ t.is(
+ normalizeUrl('https://sindresorhus.com///foo'),
+ 'https://sindresorhus.com/foo'
+ )
+ t.is(
+ normalizeUrl('https://sindresorhus.com:5000//foo'),
+ 'https://sindresorhus.com:5000/foo'
+ )
+ t.is(
+ normalizeUrl('https://sindresorhus.com//foo'),
+ 'https://sindresorhus.com/foo'
+ )
+})