Files
cinny/src/app/plugins/bad-words.test.ts
T

62 lines
2.4 KiB
TypeScript
Raw Normal View History

import { test } from 'node:test';
import assert from 'node:assert/strict';
import { testBadWords, BAD_WORDS_REGEX } from './bad-words';
test('testBadWords returns false for clean text', () => {
assert.equal(testBadWords('hello world'), false);
assert.equal(testBadWords('this is clean text'), false);
assert.equal(testBadWords(''), false);
});
test('testBadWords matches custom additions', () => {
// 'torture' and 't0rture' are appended in additionalBadWords
assert.equal(testBadWords('torture'), true);
assert.equal(testBadWords('t0rture'), true);
});
test('testBadWords is case-insensitive', () => {
assert.equal(testBadWords('Torture'), true);
assert.equal(testBadWords('TORTURE'), true);
assert.equal(testBadWords('DamN'), true);
});
test('testBadWords matches words from the base list', () => {
assert.equal(testBadWords('damn'), true);
assert.equal(testBadWords('hell'), true);
assert.equal(testBadWords('crap'), true);
});
test('testBadWords respects word boundaries (no match inside a larger word)', () => {
// alphanumeric extension on either side prevents a match
assert.equal(testBadWords('tortured'), false);
assert.equal(testBadWords('tortures'), false);
assert.equal(testBadWords('damning'), false);
assert.equal(testBadWords('hello'), false);
assert.equal(testBadWords('shell'), false);
assert.equal(testBadWords('crappy'), false);
});
test('testBadWords does not match a bad word as a substring of an unrelated word', () => {
assert.equal(testBadWords('class'), false);
assert.equal(testBadWords('pass'), false);
assert.equal(testBadWords('grass'), false);
});
test('underscore acts as a word boundary', () => {
// surrounding underscores still allow a match, since `_` is a boundary char
assert.equal(testBadWords('word_torture_word'), true);
// but an alphanumeric char glued directly to the word still blocks it
assert.equal(testBadWords('tor_ture'), false);
});
test('testBadWords matches a bad word embedded in a sentence with spaces', () => {
assert.equal(testBadWords('what the hell is this'), true);
assert.equal(testBadWords('I think this is fine'), false);
});
test('BAD_WORDS_REGEX is a global regex; reuse it via String.match', () => {
// testBadWords lowercases the input before matching
assert.ok('torture'.toLowerCase().match(BAD_WORDS_REGEX));
assert.equal('innocent'.toLowerCase().match(BAD_WORDS_REGEX), null);
});