'use strict';
require('../common');
const assert = require('assert');
const { URLPattern } = require('url');
{
assert.deepStrictEqual(
Object.getOwnPropertyDescriptor(URLPattern.prototype, Symbol.toStringTag),
{
configurable: true,
enumerable: false,
value: 'URLPattern',
writable: false,
});
assert.strictEqual(
Object.prototype.toString.call(new URLPattern()),
'[object URLPattern]');
}
// Verify that if an error is thrown while accessing any of the
// init options, the error is appropriately propagated.
assert.throws(() => {
new URLPattern({
get protocol() {
throw new Error('boom');
}
});
}, {
message: 'boom',
});
// Verify that if an error is thrown while accessing the ignoreCase
// option, the error is appropriately propagated.
assert.throws(() => {
new URLPattern({}, { get ignoreCase() {
throw new Error('boom');
} });
}, {
message: 'boom'
});
{
const result = new URLPattern({ pathname: '/:value' })
.exec('https://example.com/test');
assert.deepStrictEqual(Object.keys(result), [
'hash',
'hostname',
'inputs',
'password',
'pathname',
'port',
'protocol',
'search',
'username',
]);
assert.deepStrictEqual(Object.keys(result.pathname), [
'groups',
'input',
]);
assert.strictEqual(result.hostname.input, 'example.com');
assert.strictEqual(result.pathname.input, '/test');
assert.strictEqual(result.pathname.groups.value, 'test');
}
{
const accessed = [];
const expected = [
'baseURL',
'hash',
'hostname',
'password',
'pathname',
'port',
'protocol',
'search',
'username',
];
const init = new Proxy({}, {
get(target, name, receiver) {
accessed.push(name);
return Reflect.get(target, name, receiver);
},
});
new URLPattern(init);
assert.deepStrictEqual(accessed, expected);
}
{
const input = new URLPattern({ pathname: '/x' })
.exec({
protocol: 'https',
pathname: '/x',
username: undefined,
}).inputs[0];
assert.deepStrictEqual(Object.keys(input), ['pathname', 'protocol']);
assert.strictEqual('username' in input, false);
assert.deepStrictEqual({ ...input }, {
pathname: '/x',
protocol: 'https',
});
}