Files
bun.sh/test/js/node/url/url-parse-query.test.js
2024-02-16 11:32:08 -08:00

94 lines
2.8 KiB
JavaScript

import { describe, test } from "bun:test";
import assert from "node:assert";
import url from "node:url";
describe("url.parse", () => {
// TODO: Support correct prototype and null values.
test.todo("with query string", () => {
function createWithNoPrototype(properties = []) {
const noProto = { __proto__: null };
properties.forEach(property => {
noProto[property.key] = property.value;
});
return noProto;
}
function check(actual, expected) {
assert.notStrictEqual(Object.getPrototypeOf(actual), Object.prototype);
assert.deepStrictEqual(Object.keys(actual).sort(), Object.keys(expected).sort());
Object.keys(expected).forEach(function (key) {
assert.deepStrictEqual(actual[key], expected[key]);
});
}
const parseTestsWithQueryString = {
"/foo/bar?baz=quux#frag": {
href: "/foo/bar?baz=quux#frag",
hash: "#frag",
search: "?baz=quux",
query: createWithNoPrototype([{ key: "baz", value: "quux" }]),
pathname: "/foo/bar",
path: "/foo/bar?baz=quux",
},
"http://example.com": {
href: "http://example.com/",
protocol: "http:",
slashes: true,
host: "example.com",
hostname: "example.com",
query: createWithNoPrototype(),
search: null,
pathname: "/",
path: "/",
},
"/example": {
protocol: null,
slashes: null,
auth: undefined,
host: null,
port: null,
hostname: null,
hash: null,
search: null,
query: createWithNoPrototype(),
pathname: "/example",
path: "/example",
href: "/example",
},
"/example?query=value": {
protocol: null,
slashes: null,
auth: undefined,
host: null,
port: null,
hostname: null,
hash: null,
search: "?query=value",
query: createWithNoPrototype([{ key: "query", value: "value" }]),
pathname: "/example",
path: "/example?query=value",
href: "/example?query=value",
},
};
for (const u in parseTestsWithQueryString) {
const actual = url.parse(u, true);
const expected = Object.assign(new url.Url(), parseTestsWithQueryString[u]);
for (const i in actual) {
if (actual[i] === null && expected[i] === undefined) {
expected[i] = null;
}
}
const properties = Object.keys(actual).sort();
assert.deepStrictEqual(properties, Object.keys(expected).sort());
properties.forEach(property => {
if (property === "query") {
check(actual[property], expected[property]);
} else {
assert.deepStrictEqual(actual[property], expected[property]);
}
});
}
});
});