Odoo18-Base/addons/html_editor/static/tests/utils/regex.test.js

157 lines
7.5 KiB
JavaScript
Raw Permalink Normal View History

2025-01-06 10:57:38 +07:00
import { expect, test } from "@odoo/hoot";
import { URL_REGEX } from "@html_editor/utils/regex";
function testUrlRegex(content, { expectedUrl, insideText } = {}) {
const message = expectedUrl
? `should have the text be "${content}" with one link ${expectedUrl}`
: `should be a link: ${content}`;
test(message, () => {
if (insideText) {
expectedUrl = expectedUrl || content;
content = `abc ${content} abc`;
}
if (expectedUrl) {
const match = content.match(URL_REGEX);
expect(expectedUrl).toBe(match && match[0]);
} else {
expect(content).toMatch(URL_REGEX);
}
});
}
function testNotUrlRegex(content, { insideText } = {}) {
test(`should NOT be/content a link: ${content}`, () => {
if (insideText) {
content = `abc ${content} abc`;
}
expect(content).not.toMatch(URL_REGEX);
});
}
testUrlRegex("google.com");
testUrlRegex("a google.com b", { expectedUrl: "google.com" });
// Url separator
testUrlRegex("google.com/", { expectedUrl: "google.com/" });
testUrlRegex("google.com?", { expectedUrl: "google.com?" });
testUrlRegex("google.com#", { expectedUrl: "google.com#" });
testUrlRegex("google.com!", { expectedUrl: "google.com" });
testUrlRegex("google.com)", { expectedUrl: "google.com" });
testUrlRegex("google.com(", { expectedUrl: "google.com" });
testUrlRegex("google.com/ a", { expectedUrl: "google.com/" });
testUrlRegex("google.com. a", { expectedUrl: "google.com" });
testUrlRegex("google.com, a", { expectedUrl: "google.com" });
// Some special characters should not be included if at the end.
testUrlRegex("google.com/.", { expectedUrl: "google.com/" });
testUrlRegex("google.com/,", { expectedUrl: "google.com/" });
testUrlRegex("google.com/)", { expectedUrl: "google.com/" });
testUrlRegex("google.com/]", { expectedUrl: "google.com/" });
testUrlRegex("google.com/}", { expectedUrl: "google.com/" });
testUrlRegex("google.com/'", { expectedUrl: "google.com/" });
testUrlRegex('google.com/"', { expectedUrl: "google.com/" });
testUrlRegex("google.com#.", { expectedUrl: "google.com#" });
testUrlRegex("google.com#,", { expectedUrl: "google.com#" });
testUrlRegex("google.com#)", { expectedUrl: "google.com#" });
testUrlRegex("google.com#]", { expectedUrl: "google.com#" });
testUrlRegex("google.com#}", { expectedUrl: "google.com#" });
testUrlRegex("google.com#'", { expectedUrl: "google.com#" });
testUrlRegex('google.com#"', { expectedUrl: "google.com#" });
testUrlRegex("google.com?,", { expectedUrl: "google.com?" });
testUrlRegex("google.com?.", { expectedUrl: "google.com?" });
testUrlRegex("google.com?)", { expectedUrl: "google.com?" });
testUrlRegex("google.com?]", { expectedUrl: "google.com?" });
testUrlRegex("google.com?}", { expectedUrl: "google.com?" });
testUrlRegex("google.com?'", { expectedUrl: "google.com?" });
testUrlRegex('google.com?"', { expectedUrl: "google.com?" });
// The previous special character should be included when they are nt at the end.
testUrlRegex("google.com/.a", { expectedUrl: "google.com/.a" });
testUrlRegex("google.com/,a", { expectedUrl: "google.com/,a" });
testUrlRegex("google.com/)a", { expectedUrl: "google.com/)a" });
testUrlRegex("google.com/]a", { expectedUrl: "google.com/]a" });
testUrlRegex("google.com/}a", { expectedUrl: "google.com/}a" });
testUrlRegex("google.com/'a", { expectedUrl: "google.com/'a" });
testUrlRegex('google.com/"a', { expectedUrl: 'google.com/"a' });
// Other special character can be included at the end.
testUrlRegex("google.com/(", { expectedUrl: "google.com/(" });
testUrlRegex("google.com/[", { expectedUrl: "google.com/[" });
testUrlRegex("google.com/{", { expectedUrl: "google.com/{" });
testUrlRegex("google.com?(", { expectedUrl: "google.com?(" });
testUrlRegex("google.com?[", { expectedUrl: "google.com?[" });
testUrlRegex("google.com?{", { expectedUrl: "google.com?{" });
testUrlRegex("google.com#(", { expectedUrl: "google.com#(" });
testUrlRegex("google.com#[", { expectedUrl: "google.com#[" });
testUrlRegex("google.com#{", { expectedUrl: "google.com#{" });
testUrlRegex("google.co.uk");
testUrlRegex("google123.com");
testUrlRegex("http://google.com");
testUrlRegex("http://google123.com");
testUrlRegex("https://google.com");
testUrlRegex("https://google123.com");
testUrlRegex("https://www.google.com");
testUrlRegex("https://google.shop");
testNotUrlRegex("google.shop");
testUrlRegex("google.com/");
testUrlRegex("google.com/path/123/abc/4");
testUrlRegex("http://google.com/");
testUrlRegex("http://google.com/home");
testUrlRegex("http://google.com/home/");
testUrlRegex("https://google.com/");
testUrlRegex("https://google.co.uk/");
testUrlRegex("https://www.google.com/");
testNotUrlRegex("google.shop/");
testUrlRegex("http://google.com/foo#test");
testUrlRegex("http://google.com/#test");
testNotUrlRegex("a.bcd.ef");
testUrlRegex("a.bc.de");
testNotUrlRegex("a.bc.d");
testNotUrlRegex("a.b.bc");
testNotUrlRegex("20.08.2022");
testNotUrlRegex("31.12");
// Url data and anchors count as part of the url.
testUrlRegex("google.com?data=hello", { expectedUrl: "google.com?data=hello" });
testUrlRegex("google.com/?data=hello", { expectedUrl: "google.com/?data=hello" });
testUrlRegex("google.com/foo/?data=hello", { expectedUrl: "google.com/foo/?data=hello" });
testUrlRegex("google.com/foo/?data1=hello1&data2=hello2", {
expectedUrl: "google.com/foo/?data1=hello1&data2=hello2",
});
testUrlRegex("google.com/.?data=hello", { expectedUrl: "google.com/.?data=hello" });
testUrlRegex("google.com?data=hello#anchor", { expectedUrl: "google.com?data=hello#anchor" });
testUrlRegex("google.com/?data=hello#anchor", { expectedUrl: "google.com/?data=hello#anchor" });
testUrlRegex("google.com/.?data=hello#anchor", { expectedUrl: "google.com/.?data=hello#anchor" });
testUrlRegex("google.com/foo/?data=hello&data2=foo#anchor", {
expectedUrl: "google.com/foo/?data=hello&data2=foo#anchor",
});
// Url containing some special characters
testUrlRegex("www.google.com/path/1-2-3", { expectedUrl: "www.google.com/path/1-2-3" });
testUrlRegex("https://google.com/abc..def", { expectedUrl: "https://google.com/abc..def" });
testUrlRegex("https://google.com/a/b+c@d", { expectedUrl: "https://google.com/a/b+c@d" });
testUrlRegex("sub.example-website.com", { expectedUrl: "sub.example-website.com" });
testUrlRegex("http://sub.example-website.com", { expectedUrl: "http://sub.example-website.com" });
testUrlRegex("http://user:password@example.com", {
expectedUrl: "http://user:password@example.com",
});
testUrlRegex("http://google.com/a_b", { expectedUrl: "http://google.com/a_b" });
testUrlRegex("https://google.com?query=ab.cd", { expectedUrl: "https://google.com?query=ab.cd" });
testUrlRegex(`google.com/'ab'/cd`, { expectedUrl: "google.com/'ab'/cd" });
testUrlRegex(`www.google.com/a!b/c?d,e,f#g!i`, { expectedUrl: "www.google.com/a!b/c?d,e,f#g!i" });
testUrlRegex(`www.google.com/a%b%c`, { expectedUrl: "www.google.com/a%b%c" });
testUrlRegex(`http://google.com?a.b.c&d!e#e'f`, { expectedUrl: "http://google.com?a.b.c&d!e#e'f" });
// URL inside text
testUrlRegex("foo.com", { insideText: true });
testNotUrlRegex("foo.else", { insideText: true });
testUrlRegex("www.abc.abc", { insideText: true });
testUrlRegex("abc.abc.com", { insideText: true });
testNotUrlRegex("abc.abc.abc", { insideText: true });
testUrlRegex("http://abc.abc.abc", { insideText: true });
testUrlRegex("https://abc.abc.abc", { insideText: true });
testUrlRegex("1234-abc.runbot007.odoo.com/web#id=3&menu_id=221", { insideText: true });
testUrlRegex("https://1234-abc.runbot007.odoo.com/web#id=3&menu_id=221", { insideText: true });