snapshot of https://github.com/zulip/zulip.git @ 48c69911c7dd4e03b20552eb3bd77ad8151c1357 (2026-09-15)
Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
This commit is contained in:
81
web/tests/linkifiers.test.cjs
Normal file
81
web/tests/linkifiers.test.cjs
Normal file
@@ -0,0 +1,81 @@
|
||||
"use strict";
|
||||
|
||||
const assert = require("node:assert/strict");
|
||||
|
||||
const {zrequire} = require("./lib/namespace.cjs");
|
||||
const {run_test} = require("./lib/test.cjs");
|
||||
const blueslip = require("./lib/zblueslip.cjs");
|
||||
|
||||
const linkifiers = zrequire("linkifiers");
|
||||
|
||||
linkifiers.initialize([]);
|
||||
|
||||
function get_linkifier_regexes() {
|
||||
return linkifiers.get_linkifier_map().keys().toArray();
|
||||
}
|
||||
|
||||
run_test("compile_linkifier", () => {
|
||||
// Verify basic pattern compilation with RE2JS.
|
||||
linkifiers.update_linkifier_rules([
|
||||
{
|
||||
pattern: "TICKET-(?P<id>\\d+)",
|
||||
url_template: "http://example1.example.com/{id}",
|
||||
id: 10,
|
||||
},
|
||||
]);
|
||||
let regexes = get_linkifier_regexes();
|
||||
assert.equal(regexes.length, 1);
|
||||
let matcher = regexes[0].matcher(" TICKET-42 ");
|
||||
assert.ok(matcher.find());
|
||||
assert.equal(matcher.group(2), "TICKET-42");
|
||||
assert.equal(matcher.group("id"), "42");
|
||||
|
||||
// Test case with multiple named groups.
|
||||
linkifiers.update_linkifier_rules([
|
||||
{
|
||||
pattern: "#cf(?P<contest>\\d+)(?P<problem>[A-Z][\\dA-Z]*)",
|
||||
url_template: "http://example3.example.com",
|
||||
id: 30,
|
||||
},
|
||||
]);
|
||||
regexes = get_linkifier_regexes();
|
||||
assert.equal(regexes.length, 1);
|
||||
matcher = regexes[0].matcher(" #cf100Z ");
|
||||
assert.ok(matcher.find());
|
||||
assert.equal(matcher.group(2), "#cf100Z");
|
||||
assert.equal(matcher.group("contest"), "100");
|
||||
assert.equal(matcher.group("problem"), "Z");
|
||||
|
||||
// Boundary matching: linkifier only matches after boundary characters.
|
||||
matcher = regexes[0].matcher("x#cf100Z ");
|
||||
assert.ok(!matcher.find());
|
||||
matcher = regexes[0].matcher("(#cf100Z)");
|
||||
assert.ok(matcher.find());
|
||||
assert.equal(matcher.group(2), "#cf100Z");
|
||||
|
||||
// Test incorrect syntaxes
|
||||
|
||||
// Just absolute garbage:
|
||||
blueslip.expect("error", "Failed to compile linkifier!", 1);
|
||||
linkifiers.update_linkifier_rules([
|
||||
{
|
||||
pattern: "!@#@(!#&((!&(@#(",
|
||||
url_template: "http://example4.example.com",
|
||||
id: 40,
|
||||
},
|
||||
]);
|
||||
blueslip.reset();
|
||||
assert.deepEqual(get_linkifier_regexes(), []);
|
||||
|
||||
// Python-only inline flags like (?L) are rejected by RE2JS.
|
||||
blueslip.expect("error", "Failed to compile linkifier!", 1);
|
||||
linkifiers.update_linkifier_rules([
|
||||
{
|
||||
pattern: "(?L)foo",
|
||||
url_template: "http://example2.example.com",
|
||||
id: 20,
|
||||
},
|
||||
]);
|
||||
blueslip.reset();
|
||||
assert.deepEqual(get_linkifier_regexes(), []);
|
||||
});
|
||||
Reference in New Issue
Block a user