mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 10:28:47 +00:00
94 lines
2.8 KiB
JavaScript
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]);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
});
|