diff --git a/entrypoints/spte.content.js b/entrypoints/spte.content.js index bf16237..a716ccc 100644 --- a/entrypoints/spte.content.js +++ b/entrypoints/spte.content.js @@ -494,7 +494,10 @@ export function getGlossaryRegex(ctx, glossary) { const badWordsRegexPattern = ctx.rulesById.get('badWords').regex.source; // On duplique chaque mot avec un s final pour pouvoir traiter les pluriels. const glossaryWithPlurals = glossary.reduce((a, i) => a.concat(i, `${i}s`), []); - const glossaryRegexPattern = `${glossaryWithPlurals.join('(?=[\\s,:;"\']|$)|(?<=[\\s,:;"\']|^)(? { getGlossaryRegex(ctx, ['notice']); expect('Une Notice ici').toMatch(badWords.regex); }); + + // Issue #116 : « (uploads) » et « uploads. » n'étaient pas repérés (parenthèses et point final absents des bornes, + // point final accepté seulement pour le dernier terme de la liste). + describe('bornes du terme', () => { + const glossaryMatches = (text) => { + const badWords = { regex: /^original$/gm }; + const ctx = { rulesById: new Map([['badWords', badWords]]) }; + getGlossaryRegex(ctx, ['upload', 'widget', 'notice']); + return [...text.matchAll(badWords.regex)].map((m) => m[0]); + }; + it.each([ + ['entre parenthèses', 'le dossier de téléversement (uploads) est vide', ['uploads']], + ['avant un point final', 'dans le dossier uploads.', ['uploads']], + ['premier terme de la liste avant un point final', 'Un upload.', ['upload']], + ['terme du milieu avant un point final', 'Un widget.', ['widget']], + ['avant un point d’exclamation', 'Un widget!', ['widget']], + ['en début de chaîne', 'widget ici', ['widget']], + ['entre guillemets droits', 'Le "widget" ici', ['widget']], + ])('repère un terme %s', (_label, text, expected) => { + expect(glossaryMatches(text)).toEqual(expected); + }); + it.each([ + ['dans un nom de fichier', 'Voir widget.php pour le détail'], + ['dans un mot plus long', 'Un widgetisé ici'], + ['dans une citation « … »', 'On dit « widget » ici'], + ])('ne repère pas un terme %s', (_label, text) => { + expect(glossaryMatches(text)).toEqual([]); + }); + }); }); describe('getUnambiguousGlossaryTerms', () => {