157 lines
7.5 KiB
JavaScript
157 lines
7.5 KiB
JavaScript
|
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 });
|