mirror of
https://github.com/fosrl/pangolin.git
synced 2026-02-13 16:36:41 +00:00
Merge dev into fix/log-analytics-adjustments
This commit is contained in:
@@ -1,71 +1,247 @@
|
||||
import { isValidUrlGlobPattern } from "./validators";
|
||||
import { isValidUrlGlobPattern } from "./validators";
|
||||
import { assertEquals } from "@test/assert";
|
||||
|
||||
function runTests() {
|
||||
console.log('Running URL pattern validation tests...');
|
||||
|
||||
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');
|
||||
|
||||
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');
|
||||
|
||||
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');
|
||||
|
||||
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');
|
||||
|
||||
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');
|
||||
|
||||
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!');
|
||||
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);
|
||||
}
|
||||
console.error("Test failed:", error);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user