mirror of
https://github.com/fosrl/pangolin.git
synced 2026-01-28 22:00:51 +00:00
248 lines
6.6 KiB
TypeScript
248 lines
6.6 KiB
TypeScript
import { isValidUrlGlobPattern } from "./validators";
|
|
import { assertEquals } from "@test/assert";
|
|
|
|
function runTests() {
|
|
console.log("Running URL pattern validation tests...");
|
|
|
|
// Test valid patterns
|
|
assertEquals(
|
|
isValidUrlGlobPattern("simple"),
|
|
true,
|
|
"Simple path segment should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("simple/path"),
|
|
true,
|
|
"Simple path with slash should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("/leading/slash"),
|
|
true,
|
|
"Path with leading slash should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path/"),
|
|
true,
|
|
"Path with trailing slash should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path/*"),
|
|
true,
|
|
"Path with wildcard segment should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("*"),
|
|
true,
|
|
"Single wildcard should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("*/subpath"),
|
|
true,
|
|
"Wildcard with subpath should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path/*/more"),
|
|
true,
|
|
"Path with wildcard in the middle should be valid"
|
|
);
|
|
|
|
// Test with special characters
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path-with-dash"),
|
|
true,
|
|
"Path with dash should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path_with_underscore"),
|
|
true,
|
|
"Path with underscore should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path.with.dots"),
|
|
true,
|
|
"Path with dots should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path~with~tilde"),
|
|
true,
|
|
"Path with tilde should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path!with!exclamation"),
|
|
true,
|
|
"Path with exclamation should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path$with$dollar"),
|
|
true,
|
|
"Path with dollar should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path&with&ersand"),
|
|
true,
|
|
"Path with ampersand should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path'with'quote"),
|
|
true,
|
|
"Path with quote should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path(with)parentheses"),
|
|
true,
|
|
"Path with parentheses should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path+with+plus"),
|
|
true,
|
|
"Path with plus should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path,with,comma"),
|
|
true,
|
|
"Path with comma should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path;with;semicolon"),
|
|
true,
|
|
"Path with semicolon should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path=with=equals"),
|
|
true,
|
|
"Path with equals should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path:with:colon"),
|
|
true,
|
|
"Path with colon should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path@with@at"),
|
|
true,
|
|
"Path with at should be valid"
|
|
);
|
|
|
|
// Test with percent encoding
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path%20with%20spaces"),
|
|
true,
|
|
"Path with percent-encoded spaces should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path%2Fwith%2Fencoded%2Fslashes"),
|
|
true,
|
|
"Path with percent-encoded slashes should be valid"
|
|
);
|
|
|
|
// Test with wildcards in segments (the fixed functionality)
|
|
assertEquals(
|
|
isValidUrlGlobPattern("padbootstrap*"),
|
|
true,
|
|
"Path with wildcard at the end of segment should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("pad*bootstrap"),
|
|
true,
|
|
"Path with wildcard in the middle of segment should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("*bootstrap"),
|
|
true,
|
|
"Path with wildcard at the start of segment should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("multiple*wildcards*in*segment"),
|
|
true,
|
|
"Path with multiple wildcards in segment should be valid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("wild*/cards/in*/different/seg*ments"),
|
|
true,
|
|
"Path with wildcards in different segments should be valid"
|
|
);
|
|
|
|
// Test invalid patterns
|
|
assertEquals(
|
|
isValidUrlGlobPattern(""),
|
|
false,
|
|
"Empty string should be invalid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("//double/slash"),
|
|
false,
|
|
"Path with double slash should be invalid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("path//end"),
|
|
false,
|
|
"Path with double slash in the middle should be invalid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("invalid<char>"),
|
|
false,
|
|
"Path with invalid characters should be invalid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("invalid|char"),
|
|
false,
|
|
"Path with invalid pipe character should be invalid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern('invalid"char'),
|
|
false,
|
|
"Path with invalid quote character should be invalid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("invalid`char"),
|
|
false,
|
|
"Path with invalid backtick character should be invalid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("invalid^char"),
|
|
false,
|
|
"Path with invalid caret character should be invalid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("invalid\\char"),
|
|
false,
|
|
"Path with invalid backslash character should be invalid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("invalid[char]"),
|
|
false,
|
|
"Path with invalid square brackets should be invalid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("invalid{char}"),
|
|
false,
|
|
"Path with invalid curly braces should be invalid"
|
|
);
|
|
|
|
// Test invalid percent encoding
|
|
assertEquals(
|
|
isValidUrlGlobPattern("invalid%2"),
|
|
false,
|
|
"Path with incomplete percent encoding should be invalid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("invalid%GZ"),
|
|
false,
|
|
"Path with invalid hex in percent encoding should be invalid"
|
|
);
|
|
assertEquals(
|
|
isValidUrlGlobPattern("invalid%"),
|
|
false,
|
|
"Path with isolated percent sign should be invalid"
|
|
);
|
|
|
|
console.log("All tests passed!");
|
|
}
|
|
|
|
// Run all tests
|
|
try {
|
|
runTests();
|
|
} catch (error) {
|
|
console.error("Test failed:", error);
|
|
}
|