-
-
Notifications
You must be signed in to change notification settings - Fork 16
/
test.js
129 lines (110 loc) · 4.03 KB
/
test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import assert from 'node:assert/strict'
import test from 'node:test'
import {retext} from 'retext'
import retextProfanitiesFrench from 'retext-profanities/fr'
import retextProfanities from 'retext-profanities'
test('profanities', async function (t) {
await t.test('should expose the public api', async function () {
assert.deepEqual(Object.keys(await import('retext-profanities')).sort(), [
'default'
])
})
await t.test('should emit messages w/ metadata', async function () {
const file = await retext().use(retextProfanities).process('Shit!')
assert.deepEqual(JSON.parse(JSON.stringify(file.messages)), [
{
column: 1,
fatal: false,
message: 'Don’t use `Shit`, it’s profane',
line: 1,
name: '1:1-1:5',
place: {
start: {line: 1, column: 1, offset: 0},
end: {line: 1, column: 5, offset: 4}
},
reason: 'Don’t use `Shit`, it’s profane',
ruleId: 'shit',
source: 'retext-profanities',
profanitySeverity: 2,
actual: 'Shit',
expected: [],
url: 'https://github.com/retextjs/retext-profanities#readme'
}
])
})
await t.test('should support other languages', async function () {
const file = await retext().use(retextProfanitiesFrench).process('Merde!')
assert.deepEqual(file.messages.map(String), [
'1:1-1:6: Don’t use `Merde`, it’s profane'
])
})
await t.test('should warn about profanities', async function () {
const file = await retext()
.use(retextProfanities)
.process(
[
'He’s pretty set on beating your butt for sheriff.',
'What an asshat.',
'The kidnapper was the mother, an addict.'
].join('\n')
)
assert.deepEqual(file.messages.map(String), [
'1:33-1:37: Be careful with `butt`, it’s profane in some cases',
'2:9-2:15: Don’t use `asshat`, it’s profane',
'3:34-3:40: Reconsider using `addict`, it may be profane'
])
})
await t.test('should not warn for `ignore`d phrases', async function () {
const file = await retext()
.use(retextProfanities, {ignore: ['butt']})
.process('He’s pretty set on beating your butt for sheriff.')
assert.deepEqual(file.messages.map(String), [])
})
await t.test('should correctly depend on apostrophes', async function () {
const file = await retext()
.use(retextProfanities)
.process('When he’ll freeze over, hell freezes over.')
assert.deepEqual(file.messages.map(String), [
'1:25-1:29: Be careful with `hell`, it’s profane in some cases'
])
})
await t.test('should support plurals and singulars', async function () {
const file = await retext().use(retextProfanities).process('slave slaves')
assert.deepEqual(file.messages.map(String), [
'1:1-1:6: Don’t use `slave`, it’s profane',
'1:7-1:13: Don’t use `slaves`, it’s profane'
])
})
await t.test('should warn about profanities', async function () {
const file = await retext()
.use(retextProfanities, {sureness: 1})
.process(
[
'He’s pretty set on beating your butt for sheriff.',
'What an asshat.',
'The kidnapper was the mother, an addict.'
].join('\n')
)
assert.deepEqual(file.messages.map(String), [
'2:9-2:15: Don’t use `asshat`, it’s profane',
'3:34-3:40: Reconsider using `addict`, it may be profane'
])
})
await t.test(
'should not warn about `who are` contractions',
async function () {
const file = await retext()
.use(retextProfanities)
.process(["who're", 'who’re', 'whore'].join('\n'))
assert.deepEqual(file.messages.map(String), [
'3:1-3:6: Don’t use `whore`, it’s profane'
])
}
)
await t.test('should not warn about `remain`', async function () {
const file = await retext()
.use(retextProfanities)
.process('Only two minutes still remain in the game.')
assert.deepEqual(file.messages.map(String), [])
})
})