优化
This commit is contained in:
+71
-1
@@ -4,7 +4,7 @@
|
||||
|
||||
const { describe, it } = require("node:test");
|
||||
const assert = require("node:assert/strict");
|
||||
const { isDomainMatch, escapeHtml } = require("../dist/utils.js");
|
||||
const { isDomainMatch, escapeHtml, toMatchPatterns } = require("../dist/utils.js");
|
||||
|
||||
describe("isDomainMatch - 纯 hostname 匹配", () => {
|
||||
it("精确域名匹配", () => {
|
||||
@@ -81,6 +81,76 @@ describe("isDomainMatch - hostname + path 匹配", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("toMatchPatterns - 配置域名转 match pattern", () => {
|
||||
it("纯域名同时生成 http / https 两条", () => {
|
||||
assert.deepEqual(toMatchPatterns("example.com"), [
|
||||
"http://example.com/*",
|
||||
"https://example.com/*",
|
||||
]);
|
||||
});
|
||||
|
||||
it("带协议前缀的配置会被剥离", () => {
|
||||
assert.deepEqual(toMatchPatterns("https://example.com"), [
|
||||
"http://example.com/*",
|
||||
"https://example.com/*",
|
||||
]);
|
||||
});
|
||||
|
||||
it("子域名通配符 *.example.com 保持原样", () => {
|
||||
assert.deepEqual(toMatchPatterns("*.example.com"), [
|
||||
"http://*.example.com/*",
|
||||
"https://*.example.com/*",
|
||||
]);
|
||||
});
|
||||
|
||||
it("路径规则按前缀截断到第一个 *", () => {
|
||||
assert.deepEqual(toMatchPatterns("oa.com/login/*"), [
|
||||
"http://oa.com/login/*",
|
||||
"https://oa.com/login/*",
|
||||
]);
|
||||
// 中间通配无法表达,截断成前缀(放宽注入范围,精度仍由 isDomainMatch 把关)
|
||||
assert.deepEqual(toMatchPatterns("site.com/a/*/b"), [
|
||||
"http://site.com/a/*",
|
||||
"https://site.com/a/*",
|
||||
]);
|
||||
});
|
||||
|
||||
it("无通配的路径补上结尾 *", () => {
|
||||
assert.deepEqual(toMatchPatterns("oa.com/admin"), [
|
||||
"http://oa.com/admin*",
|
||||
"https://oa.com/admin*",
|
||||
]);
|
||||
});
|
||||
|
||||
it("去掉端口(match pattern 不支持端口)", () => {
|
||||
assert.deepEqual(toMatchPatterns("example.com:8080/app"), [
|
||||
"http://example.com/app*",
|
||||
"https://example.com/app*",
|
||||
]);
|
||||
});
|
||||
|
||||
it("中文域名转成 punycode", () => {
|
||||
assert.deepEqual(toMatchPatterns("中文域名.中国"), [
|
||||
"http://xn--fiq06l2rdsvs.xn--fiqs8s/*",
|
||||
"https://xn--fiq06l2rdsvs.xn--fiqs8s/*",
|
||||
]);
|
||||
});
|
||||
|
||||
it("query / hash 会被忽略", () => {
|
||||
assert.deepEqual(toMatchPatterns("oa.com/login?next=/home#x"), [
|
||||
"http://oa.com/login*",
|
||||
"https://oa.com/login*",
|
||||
]);
|
||||
});
|
||||
|
||||
it("无法表达的规则返回空数组", () => {
|
||||
assert.deepEqual(toMatchPatterns(""), []);
|
||||
assert.deepEqual(toMatchPatterns(null), []);
|
||||
assert.deepEqual(toMatchPatterns("*"), []); // 裸通配
|
||||
assert.deepEqual(toMatchPatterns("a.*.b.com"), []); // 中间通配的 host
|
||||
});
|
||||
});
|
||||
|
||||
describe("escapeHtml", () => {
|
||||
it("转义 5 个特殊字符", () => {
|
||||
assert.equal(escapeHtml("<"), "<");
|
||||
|
||||
Reference in New Issue
Block a user