[d24f17c] | 1 | 'use strict';
|
---|
| 2 | var fails = require('../internals/fails');
|
---|
| 3 | var wellKnownSymbol = require('../internals/well-known-symbol');
|
---|
| 4 | var DESCRIPTORS = require('../internals/descriptors');
|
---|
| 5 | var IS_PURE = require('../internals/is-pure');
|
---|
| 6 |
|
---|
| 7 | var ITERATOR = wellKnownSymbol('iterator');
|
---|
| 8 |
|
---|
| 9 | module.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 | });
|
---|