91f3292ab5
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
47 lines
1.9 KiB
TypeScript
47 lines
1.9 KiB
TypeScript
/**
|
|
* Pure-part tests for the OS-proxy injection (no Electron runtime): PAC-result parsing
|
|
* and the "never override an existing variable" selection.
|
|
*/
|
|
import { describe, expect, it } from "vitest";
|
|
import { proxyUrlFromPacResult, unsetProxyVars } from "../src/os-proxy.js";
|
|
|
|
describe("proxyUrlFromPacResult", () => {
|
|
it("maps PROXY to an http:// URL and HTTPS to an https:// URL", () => {
|
|
expect(proxyUrlFromPacResult("PROXY 127.0.0.1:8888")).toBe("http://127.0.0.1:8888");
|
|
expect(proxyUrlFromPacResult("HTTPS proxy.corp.example:443")).toBe(
|
|
"https://proxy.corp.example:443",
|
|
);
|
|
expect(proxyUrlFromPacResult("proxy proxy.corp.example:3128")).toBe(
|
|
"http://proxy.corp.example:3128",
|
|
);
|
|
});
|
|
|
|
it("takes the first usable entry of a fallback list", () => {
|
|
expect(proxyUrlFromPacResult("PROXY 10.0.0.1:8080; DIRECT")).toBe("http://10.0.0.1:8080");
|
|
expect(proxyUrlFromPacResult("DIRECT; PROXY 10.0.0.1:8080")).toBe("http://10.0.0.1:8080");
|
|
});
|
|
|
|
it("yields nothing for DIRECT and for SOCKS entries (undici cannot speak SOCKS)", () => {
|
|
expect(proxyUrlFromPacResult("DIRECT")).toBeNull();
|
|
expect(proxyUrlFromPacResult("SOCKS5 127.0.0.1:1080")).toBeNull();
|
|
expect(proxyUrlFromPacResult("SOCKS 127.0.0.1:1080; DIRECT")).toBeNull();
|
|
expect(proxyUrlFromPacResult("")).toBeNull();
|
|
});
|
|
});
|
|
|
|
describe("unsetProxyVars", () => {
|
|
it("selects both variables on a clean environment", () => {
|
|
expect(unsetProxyVars({}).map((v) => v.name)).toEqual(["HTTP_PROXY", "HTTPS_PROXY"]);
|
|
});
|
|
|
|
it("skips a variable already present in either spelling (never overridden)", () => {
|
|
expect(unsetProxyVars({ HTTP_PROXY: "http://a:1" }).map((v) => v.name)).toEqual([
|
|
"HTTPS_PROXY",
|
|
]);
|
|
expect(unsetProxyVars({ https_proxy: "http://a:1" }).map((v) => v.name)).toEqual([
|
|
"HTTP_PROXY",
|
|
]);
|
|
expect(unsetProxyVars({ HTTP_PROXY: "http://a:1", https_proxy: "http://a:1" })).toEqual([]);
|
|
});
|
|
});
|