Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/**
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
const { matchDomains, mergeDedupe } = ChromeUtils.importESModule(
"moz-src:///browser/components/aiwindow/models/SearchBrowsingHistoryDomainBoost.sys.mjs"
);
add_task(async function test_matchDomains_games_and_boundary_behavior() {
// Positive: should match games category
const domains = matchDomains("video games");
Assert.ok(
domains?.includes("store.steampowered.com"),
"Should include store.steampowered.com for games"
);
// Negative: should not match substrings inside words ("endgame" should not trigger "game")
const domains2 = matchDomains("endgame");
Assert.equal(domains2, null, "Should not match 'game' inside 'endgame'");
});
add_task(async function test_matchDomains_prefers_longer_phrases() {
// "tech news" should match tech_news (not generic news)
const domains = matchDomains("tech news");
Assert.ok(
domains?.includes("techcrunch.com"),
"Should match tech_news domains"
);
Assert.ok(
!domains.includes("reuters.com"),
"Should not fall back to generic news domains"
);
});
add_task(async function test_mergeDedupe_semantic_first_then_topup() {
const primary = [
{ id: 1, url: "https://example.com/a", title: "A" },
{ id: 2, url: "https://example.com/b", title: "B" },
];
const secondary = [
{ id: 3, url: "https://example.com/b", title: "B dup" }, // dup by url
{ id: 4, url: "https://example.com/c", title: "C" },
];
const out = mergeDedupe(primary, secondary, 10);
Assert.deepEqual(
out.map(r => r.url),
"Should keep primary order and de-dupe by url"
);
});