a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 1 | import assert from 'node:assert/strict'; |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 2 | import { test } from 'node:test'; |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 3 | import { keywordPattern } from '../src/lib/keyword-pattern.ts'; |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 4 | |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 5 | test('keywords match whole words without case', () => { |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 6 | const pattern = keywordPattern(['bolt']); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 7 | assert.ok(pattern?.test('hey Bolt, look')); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 8 | assert.ok(pattern?.test('bolt')); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 9 | assert.equal(pattern?.test('thunderbolts'), false); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 10 | assert.equal(pattern?.test('bolt_two'), false); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 11 | }); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 12 | |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 13 | test('keywords treat regex syntax literally and globs as wildcards', () => { |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 14 | assert.ok(keywordPattern(['c++'])?.test('writing c++ today')); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 15 | assert.equal(keywordPattern(['a.b'])?.test('axb'), false); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 16 | assert.ok(keywordPattern(['deploy*'])?.test('deployment went out')); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 17 | assert.ok(keywordPattern(['gr?y'])?.test('grey skies')); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 18 | }); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 19 | |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 20 | test('keywords outside latin script still respect word edges', () => { |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 21 | const pattern = keywordPattern(['привет']); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 22 | assert.ok(pattern?.test('ну привет')); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 23 | assert.equal(pattern?.test('приветствую'), false); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 24 | }); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 25 | |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 26 | test('an empty list matches nothing', () => { |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 27 | assert.equal(keywordPattern([' ', '']), null); |
a4555a7eae2d | atagen | 2026-10-25 09:18 UTC | 28 | }); |