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