UNPKG

1.64 kBJavaScriptView Raw
1'use strict';
2var fails = require('../internals/fails');
3var wellKnownSymbol = require('../internals/well-known-symbol');
4var DESCRIPTORS = require('../internals/descriptors');
5var IS_PURE = require('../internals/is-pure');
6
7var ITERATOR = wellKnownSymbol('iterator');
8
9module.exports = !fails(function () {
10 // eslint-disable-next-line unicorn/relative-url-style -- required for testing
11 var url = new URL('b?a=1&b=2&c=3', 'http://a');
12 var params = url.searchParams;
13 var params2 = new URLSearchParams('a=1&a=2&b=3');
14 var result = '';
15 url.pathname = 'c%20d';
16 params.forEach(function (value, key) {
17 params['delete']('b');
18 result += key + value;
19 });
20 params2['delete']('a', 2);
21 // `undefined` case is a Chromium 117 bug
22 // https://bugs.chromium.org/p/v8/issues/detail?id=14222
23 params2['delete']('b', undefined);
24 return (IS_PURE && (!url.toJSON || !params2.has('a', 1) || params2.has('a', 2) || !params2.has('a', undefined) || params2.has('b')))
25 || (!params.size && (IS_PURE || !DESCRIPTORS))
26 || !params.sort
27 || url.href !== 'http://a/c%20d?a=1&c=3'
28 || params.get('c') !== '3'
29 || String(new URLSearchParams('?a=1')) !== 'a=1'
30 || !params[ITERATOR]
31 // throws in Edge
32 || new URL('https://a@b').username !== 'a'
33 || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'
34 // not punycoded in Edge
35 || new URL('http://тест').host !== 'xn--e1aybc'
36 // not escaped in Chrome 62-
37 || new URL('http://a#б').hash !== '#%D0%B1'
38 // fails in Chrome 66-
39 || result !== 'a1c3'
40 // throws in Safari
41 || new URL('http://x', undefined).host !== 'x';
42});