Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 1d15ed8

Browse files
committedAug 12, 2020
Refactor test cases that use CLIEngine.
1 parent 7614169 commit 1d15ed8

File tree

2 files changed

+341
-532
lines changed

2 files changed

+341
-532
lines changed
 

‎tests/lib/rules/no-html-messages.ts

Lines changed: 51 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
/**
22
* @author kazuya kawaguchi (a.k.a. kazupon)
33
*/
4-
import { CLIEngine, RuleTester } from 'eslint'
5-
import { resolve, join } from 'path'
4+
import { RuleTester } from 'eslint'
5+
import { join } from 'path'
66
import fs from 'fs'
7-
import assert from 'assert'
87
import rule = require('../../../lib/rules/no-html-messages')
9-
import plugin = require('../../../lib/index')
10-
import { baseConfigPath } from '../test-utils'
8+
import { testOnFixtures } from '../test-utils'
119

1210
new RuleTester({
1311
parser: require.resolve('vue-eslint-parser'),
@@ -101,84 +99,64 @@ new RuleTester({
10199
})
102100

103101
describe('no-html-messages with fixtures', () => {
104-
const cwd = join(__dirname, '../../fixtures/no-html-messages')
105-
let originalCwd: string
106-
107-
before(() => {
108-
originalCwd = process.cwd()
109-
process.chdir(cwd)
110-
})
111-
112-
after(() => {
113-
process.chdir(originalCwd)
114-
})
102+
const cwdRoot = join(__dirname, '../../fixtures/no-html-messages')
115103

116104
describe('valid', () => {
117105
it('should be not detected html messages', () => {
118-
const linter = new CLIEngine({
119-
cwd,
120-
baseConfig: {
121-
extends: [baseConfigPath],
122-
settings: {
123-
'vue-i18n': {
124-
localeDir: `./valid/*.{json,yaml,yml}`
125-
}
126-
}
127-
},
128-
useEslintrc: false,
129-
parserOptions: {
130-
ecmaVersion: 2015
131-
},
132-
rules: {
133-
'@intlify/vue-i18n/no-html-messages': 'error'
106+
testOnFixtures(
107+
{
108+
cwd: join(cwdRoot, './valid'),
109+
localeDir: `*.{json,yaml,yml}`,
110+
ruleName: '@intlify/vue-i18n/no-html-messages'
134111
},
135-
extensions: ['.js', '.vue', '.json', '.yaml', '.yml']
136-
})
137-
138-
linter.addPlugin('@intlify/vue-i18n', plugin)
139-
const messages = linter.executeOnFiles(['.'])
140-
assert.equal(messages.errorCount, 0)
112+
{}
113+
)
141114
})
142115
})
143116

144117
describe('invalid', () => {
145118
it('should be detected html messages', () => {
146-
const linter = new CLIEngine({
147-
cwd,
148-
baseConfig: {
149-
extends: [baseConfigPath],
150-
settings: {
151-
'vue-i18n': {
152-
localeDir: `./invalid/*.{json,yaml,yml}`
153-
}
154-
}
155-
},
156-
useEslintrc: false,
157-
parserOptions: {
158-
ecmaVersion: 2015
159-
},
160-
rules: {
161-
'@intlify/vue-i18n/no-html-messages': 'error'
119+
testOnFixtures(
120+
{
121+
cwd: join(cwdRoot, './invalid'),
122+
localeDir: `*.{json,yaml,yml}`,
123+
ruleName: '@intlify/vue-i18n/no-html-messages'
162124
},
163-
extensions: ['.js', '.vue', '.json', '.yaml', '.yml']
164-
})
165-
linter.addPlugin('@intlify/vue-i18n', plugin)
166-
167-
const messages = linter.executeOnFiles(['.'])
168-
assert.equal(messages.errorCount, 6)
169-
170-
function checkRuleId(path: string) {
171-
const fullPath = resolve(__dirname, path)
172-
const result = messages.results.find(
173-
result => result.filePath === fullPath
174-
)!
175-
assert.equal(result.messages.length, 3)
176-
result.messages.forEach(message => {
177-
assert.equal(message.ruleId, '@intlify/vue-i18n/no-html-messages')
178-
})
179-
}
180-
checkRuleId('../../fixtures/no-html-messages/invalid/en.json')
181-
checkRuleId('../../fixtures/no-html-messages/invalid/en.yaml')
125+
{
126+
'en.json': {
127+
errors: [
128+
{
129+
line: 3,
130+
message: 'used HTML localization message'
131+
},
132+
{
133+
line: 5,
134+
message: 'used HTML localization message'
135+
},
136+
{
137+
line: 6,
138+
message: 'used HTML localization message'
139+
}
140+
]
141+
},
142+
'en.yaml': {
143+
errors: [
144+
{
145+
line: 2,
146+
message: 'used HTML localization message'
147+
},
148+
{
149+
line: 4,
150+
message: 'used HTML localization message'
151+
},
152+
{
153+
line: 5,
154+
message: 'used HTML localization message'
155+
}
156+
]
157+
}
158+
}
159+
)
182160
})
183161
})
184162
})

‎tests/lib/rules/no-unused-keys.ts

Lines changed: 290 additions & 459 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
11
/**
22
* @author kazuya kawaguchi (a.k.a. kazupon)
33
*/
4-
import { CLIEngine, RuleTester } from 'eslint'
5-
import { resolve, join } from 'path'
6-
import assert from 'assert'
7-
import plugin = require('../../../lib/index')
8-
9-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
10-
// @ts-ignore
11-
import linter = require('eslint/lib/linter')
4+
import { RuleTester } from 'eslint'
5+
import { join } from 'path'
126
import rule = require('../../../lib/rules/no-unused-keys')
13-
import { baseConfigPath } from '../test-utils'
14-
const { SourceCodeFixer } = linter
7+
import { testOnFixtures } from '../test-utils'
158

169
new RuleTester({
1710
parser: require.resolve('vue-eslint-parser'),
@@ -922,166 +915,90 @@ ${' '.repeat(6)}
922915
})
923916

924917
describe('no-unused-keys with fixtures', () => {
925-
const cwd = join(__dirname, '../../fixtures/no-unused-keys')
926-
let originalCwd: string
927-
928-
before(() => {
929-
originalCwd = process.cwd()
930-
process.chdir(cwd)
931-
})
932-
933-
after(() => {
934-
process.chdir(originalCwd)
935-
})
918+
const cwdRoot = join(__dirname, '../../fixtures/no-unused-keys')
936919

937920
describe('errors', () => {
938921
it('settings.vue-i18n.localeDir', () => {
939-
const linter = new CLIEngine({
940-
cwd: join(cwd, './valid'),
941-
baseConfig: {
942-
extends: [baseConfigPath]
943-
},
944-
useEslintrc: false,
945-
parserOptions: {
946-
ecmaVersion: 2015,
947-
sourceType: 'module'
948-
},
949-
rules: {
950-
'@intlify/vue-i18n/no-unused-keys': 'error'
922+
testOnFixtures(
923+
{
924+
cwd: join(cwdRoot, './valid'),
925+
ruleName: '@intlify/vue-i18n/no-unused-keys'
951926
},
952-
extensions: ['.js', '.vue', '.json', '.yaml', '.yml']
953-
})
954-
linter.addPlugin('@intlify/vue-i18n', plugin)
955-
956-
const messages = linter.executeOnFiles(['.'])
957-
assert.equal(messages.errorCount, 3)
958-
messages.results
959-
.map(result => {
960-
return result.messages.filter(
961-
message => message.ruleId === '@intlify/vue-i18n/no-unused-keys'
962-
)
963-
})
964-
.reduce((values, current) => values.concat(current), [])
965-
.forEach(message => {
966-
assert.equal(
967-
message.message,
968-
`You need to set 'localeDir' at 'settings', or '<i18n>' blocks. See the 'eslint-plugin-vue-i18n' documentation`
969-
)
970-
})
927+
{
928+
'constructor-option-format/locales/index.json': {
929+
output: null,
930+
errors: [
931+
{
932+
line: 1,
933+
message:
934+
"You need to set 'localeDir' at 'settings', or '<i18n>' blocks. See the 'eslint-plugin-vue-i18n' documentation"
935+
}
936+
]
937+
},
938+
'vue-cli-format/locales/en.json': {
939+
output: null,
940+
errors: [
941+
{
942+
line: 1,
943+
message:
944+
"You need to set 'localeDir' at 'settings', or '<i18n>' blocks. See the 'eslint-plugin-vue-i18n' documentation"
945+
}
946+
]
947+
},
948+
'vue-cli-format/locales/ja.yaml': {
949+
output: null,
950+
errors: [
951+
{
952+
line: 1,
953+
message:
954+
"You need to set 'localeDir' at 'settings', or '<i18n>' blocks. See the 'eslint-plugin-vue-i18n' documentation"
955+
}
956+
]
957+
}
958+
}
959+
)
971960
})
972961
})
973962

974963
describe('valid', () => {
975964
it('should be not detected unsued keys', () => {
976-
const linter = new CLIEngine({
977-
cwd: join(cwd, './valid/vue-cli-format'),
978-
baseConfig: {
979-
extends: [baseConfigPath],
980-
settings: {
981-
'vue-i18n': {
982-
localeDir: `./valid/vue-cli-format/locales/*.{json,yaml,yml}`
983-
}
984-
}
985-
},
986-
useEslintrc: false,
987-
parserOptions: {
988-
ecmaVersion: 2015,
989-
sourceType: 'module'
990-
},
991-
rules: {
992-
'@intlify/vue-i18n/no-unused-keys': [
993-
'error',
965+
testOnFixtures(
966+
{
967+
cwd: join(cwdRoot, './valid/vue-cli-format'),
968+
localeDir: `./locales/*.{json,yaml,yml}`,
969+
ruleName: '@intlify/vue-i18n/no-unused-keys',
970+
options: [
994971
{
995-
src: resolve(
996-
__dirname,
997-
'../../fixtures/no-unused-keys/valid/vue-cli-format'
998-
)
972+
src: '.'
999973
}
1000974
]
1001975
},
1002-
extensions: ['.js', '.vue', '.json', '.yaml', '.yml']
1003-
})
1004-
linter.addPlugin('@intlify/vue-i18n', plugin)
1005-
1006-
const messages = linter.executeOnFiles(['.'])
1007-
assert.equal(messages.errorCount, 0)
976+
{}
977+
)
1008978
})
1009979

1010980
it('should be not detected unsued keys for constructor-option-format', () => {
1011-
const linter = new CLIEngine({
1012-
cwd: join(cwd, './valid/constructor-option-format'),
1013-
baseConfig: {
1014-
extends: [baseConfigPath],
1015-
settings: {
1016-
'vue-i18n': {
1017-
localeDir: {
1018-
pattern: `./valid/constructor-option-format/locales/*.{json,yaml,yml}`,
1019-
localeKey: 'key'
1020-
}
1021-
}
1022-
}
1023-
},
1024-
useEslintrc: false,
1025-
parserOptions: {
1026-
ecmaVersion: 2015,
1027-
sourceType: 'module'
1028-
},
1029-
rules: {
1030-
'@intlify/vue-i18n/no-unused-keys': [
1031-
'error',
981+
testOnFixtures(
982+
{
983+
cwd: join(cwdRoot, './valid/constructor-option-format'),
984+
localeDir: {
985+
pattern: `./locales/*.{json,yaml,yml}`,
986+
localeKey: 'key'
987+
},
988+
ruleName: '@intlify/vue-i18n/no-unused-keys',
989+
options: [
1032990
{
1033-
src: resolve(
1034-
__dirname,
1035-
'../../fixtures/no-unused-keys/valid/constructor-option-format'
1036-
)
991+
src: '.'
1037992
}
1038993
]
1039994
},
1040-
extensions: ['.js', '.vue', '.json', '.yaml', '.yml']
1041-
})
1042-
linter.addPlugin('@intlify/vue-i18n', plugin)
1043-
1044-
const messages = linter.executeOnFiles(['.'])
1045-
assert.equal(messages.errorCount, 0)
995+
{}
996+
)
1046997
})
1047998
})
1048999

10491000
describe('invalid', () => {
10501001
it('should be detected unsued keys', () => {
1051-
const linter = new CLIEngine({
1052-
cwd: join(cwd, './invalid/vue-cli-format'),
1053-
baseConfig: {
1054-
extends: [baseConfigPath],
1055-
settings: {
1056-
'vue-i18n': {
1057-
localeDir: `./invalid/vue-cli-format/locales/*.{json,yaml,yml}`
1058-
}
1059-
}
1060-
},
1061-
useEslintrc: false,
1062-
parserOptions: {
1063-
ecmaVersion: 2015,
1064-
sourceType: 'module'
1065-
},
1066-
rules: {
1067-
'@intlify/vue-i18n/no-unused-keys': [
1068-
'error',
1069-
{
1070-
src: resolve(
1071-
__dirname,
1072-
'../../fixtures/no-unused-keys/invalid/vue-cli-format'
1073-
),
1074-
enableFix: true
1075-
}
1076-
]
1077-
},
1078-
extensions: ['.js', '.vue', '.json', '.yaml', '.yml']
1079-
})
1080-
linter.addPlugin('@intlify/vue-i18n', plugin)
1081-
1082-
const messages = linter.executeOnFiles(['.'])
1083-
assert.equal(messages.errorCount, 6)
1084-
10851002
const fixallEn = `{
10861003
"hello": "hello world",
10871004
"messages": {
@@ -1093,21 +1010,31 @@ describe('no-unused-keys with fixtures', () => {
10931010
"hello {name}": "hello {name}!"
10941011
}
10951012
`
1096-
assert.deepStrictEqual(
1097-
getResult(
1098-
messages,
1099-
'../../fixtures/no-unused-keys/invalid/vue-cli-format/locales/en.json'
1100-
),
1013+
const fixallJa = `hello: "ハローワールド"
1014+
messages:
1015+
hello: "こんにちは、DIO!"
1016+
nested: {}
1017+
hello_dio: "こんにちは、アンダースコア DIO!"
1018+
"hello {name}": "こんにちは、{name}!"
1019+
`
1020+
testOnFixtures(
11011021
{
1102-
output: fixallEn,
1103-
errors: [
1104-
{
1105-
message: "unused 'messages.link' key",
1106-
line: 5,
1107-
suggestions: [
1108-
{
1109-
desc: "Remove the 'messages.link' key.",
1110-
output: `{
1022+
cwd: join(cwdRoot, './invalid/vue-cli-format'),
1023+
localeDir: `./locales/*.{json,yaml,yml}`,
1024+
ruleName: '@intlify/vue-i18n/no-unused-keys',
1025+
options: [{ src: '.', enableFix: true }]
1026+
},
1027+
{
1028+
'locales/en.json': {
1029+
output: fixallEn,
1030+
errors: [
1031+
{
1032+
message: "unused 'messages.link' key",
1033+
line: 5,
1034+
suggestions: [
1035+
{
1036+
desc: "Remove the 'messages.link' key.",
1037+
output: `{
11111038
"hello": "hello world",
11121039
"messages": {
11131040
"hello": "hi DIO!",
@@ -1120,20 +1047,20 @@ describe('no-unused-keys with fixtures', () => {
11201047
"hello-dio": "hello hyphen DIO!"
11211048
}
11221049
`
1123-
},
1124-
{
1125-
desc: 'Remove all unused keys.',
1126-
output: fixallEn
1127-
}
1128-
]
1129-
},
1130-
{
1131-
message: "unused 'messages.nested.hello' key",
1132-
line: 7,
1133-
suggestions: [
1134-
{
1135-
desc: "Remove the 'messages.nested.hello' key.",
1136-
output: `{
1050+
},
1051+
{
1052+
desc: 'Remove all unused keys.',
1053+
output: fixallEn
1054+
}
1055+
]
1056+
},
1057+
{
1058+
message: "unused 'messages.nested.hello' key",
1059+
line: 7,
1060+
suggestions: [
1061+
{
1062+
desc: "Remove the 'messages.nested.hello' key.",
1063+
output: `{
11371064
"hello": "hello world",
11381065
"messages": {
11391066
"hello": "hi DIO!",
@@ -1146,20 +1073,20 @@ describe('no-unused-keys with fixtures', () => {
11461073
"hello-dio": "hello hyphen DIO!"
11471074
}
11481075
`
1149-
},
1150-
{
1151-
desc: 'Remove all unused keys.',
1152-
output: fixallEn
1153-
}
1154-
]
1155-
},
1156-
{
1157-
message: "unused 'hello-dio' key",
1158-
line: 12,
1159-
suggestions: [
1160-
{
1161-
desc: "Remove the 'hello-dio' key.",
1162-
output: `{
1076+
},
1077+
{
1078+
desc: 'Remove all unused keys.',
1079+
output: fixallEn
1080+
}
1081+
]
1082+
},
1083+
{
1084+
message: "unused 'hello-dio' key",
1085+
line: 12,
1086+
suggestions: [
1087+
{
1088+
desc: "Remove the 'hello-dio' key.",
1089+
output: `{
11631090
"hello": "hello world",
11641091
"messages": {
11651092
"hello": "hi DIO!",
@@ -1172,38 +1099,25 @@ describe('no-unused-keys with fixtures', () => {
11721099
"hello {name}": "hello {name}!"
11731100
}
11741101
`
1175-
},
1176-
{
1177-
desc: 'Remove all unused keys.',
1178-
output: fixallEn
1179-
}
1180-
]
1181-
}
1182-
]
1183-
}
1184-
)
1185-
const fixallJa = `hello: "ハローワールド"
1186-
messages:
1187-
hello: "こんにちは、DIO!"
1188-
nested: {}
1189-
hello_dio: "こんにちは、アンダースコア DIO!"
1190-
"hello {name}": "こんにちは、{name}!"
1191-
`
1192-
assert.deepStrictEqual(
1193-
getResult(
1194-
messages,
1195-
'../../fixtures/no-unused-keys/invalid/vue-cli-format/locales/ja.yaml'
1196-
),
1197-
{
1198-
output: fixallJa,
1199-
errors: [
1200-
{
1201-
message: "unused 'messages.link' key",
1202-
line: 4,
1203-
suggestions: [
1204-
{
1205-
desc: "Remove the 'messages.link' key.",
1206-
output: `hello: "ハローワールド"
1102+
},
1103+
{
1104+
desc: 'Remove all unused keys.',
1105+
output: fixallEn
1106+
}
1107+
]
1108+
}
1109+
]
1110+
},
1111+
'locales/ja.yaml': {
1112+
output: fixallJa,
1113+
errors: [
1114+
{
1115+
message: "unused 'messages.link' key",
1116+
line: 4,
1117+
suggestions: [
1118+
{
1119+
desc: "Remove the 'messages.link' key.",
1120+
output: `hello: "ハローワールド"
12071121
messages:
12081122
hello: "こんにちは、DIO!"
12091123
nested:
@@ -1212,20 +1126,20 @@ hello_dio: "こんにちは、アンダースコア DIO!"
12121126
"hello {name}": "こんにちは、{name}!"
12131127
hello-dio: "こんにちは、ハイフン DIO!"
12141128
`
1215-
},
1216-
{
1217-
desc: 'Remove all unused keys.',
1218-
output: fixallJa
1219-
}
1220-
]
1221-
},
1222-
{
1223-
message: "unused 'messages.nested.hello' key",
1224-
line: 6,
1225-
suggestions: [
1226-
{
1227-
desc: "Remove the 'messages.nested.hello' key.",
1228-
output: `hello: "ハローワールド"
1129+
},
1130+
{
1131+
desc: 'Remove all unused keys.',
1132+
output: fixallJa
1133+
}
1134+
]
1135+
},
1136+
{
1137+
message: "unused 'messages.nested.hello' key",
1138+
line: 6,
1139+
suggestions: [
1140+
{
1141+
desc: "Remove the 'messages.nested.hello' key.",
1142+
output: `hello: "ハローワールド"
12291143
messages:
12301144
hello: "こんにちは、DIO!"
12311145
link: "@:message.hello"
@@ -1234,20 +1148,20 @@ hello_dio: "こんにちは、アンダースコア DIO!"
12341148
"hello {name}": "こんにちは、{name}!"
12351149
hello-dio: "こんにちは、ハイフン DIO!"
12361150
`
1237-
},
1238-
{
1239-
desc: 'Remove all unused keys.',
1240-
output: fixallJa
1241-
}
1242-
]
1243-
},
1244-
{
1245-
message: "unused 'hello-dio' key",
1246-
line: 9,
1247-
suggestions: [
1248-
{
1249-
desc: "Remove the 'hello-dio' key.",
1250-
output: `hello: "ハローワールド"
1151+
},
1152+
{
1153+
desc: 'Remove all unused keys.',
1154+
output: fixallJa
1155+
}
1156+
]
1157+
},
1158+
{
1159+
message: "unused 'hello-dio' key",
1160+
line: 9,
1161+
suggestions: [
1162+
{
1163+
desc: "Remove the 'hello-dio' key.",
1164+
output: `hello: "ハローワールド"
12511165
messages:
12521166
hello: "こんにちは、DIO!"
12531167
link: "@:message.hello"
@@ -1256,56 +1170,20 @@ messages:
12561170
hello_dio: "こんにちは、アンダースコア DIO!"
12571171
"hello {name}": "こんにちは、{name}!"
12581172
`
1259-
},
1260-
{
1261-
desc: 'Remove all unused keys.',
1262-
output: fixallJa
1263-
}
1264-
]
1265-
}
1266-
]
1173+
},
1174+
{
1175+
desc: 'Remove all unused keys.',
1176+
output: fixallJa
1177+
}
1178+
]
1179+
}
1180+
]
1181+
}
12671182
}
12681183
)
12691184
})
12701185

12711186
it('should be detected unsued keys for constructor-option-format', () => {
1272-
const linter = new CLIEngine({
1273-
cwd: join(cwd, './invalid/constructor-option-format'),
1274-
baseConfig: {
1275-
extends: [baseConfigPath],
1276-
settings: {
1277-
'vue-i18n': {
1278-
localeDir: {
1279-
pattern: `./invalid/constructor-option-format/locales/*.{json,yaml,yml}`,
1280-
localeKey: 'key'
1281-
}
1282-
}
1283-
}
1284-
},
1285-
useEslintrc: false,
1286-
parserOptions: {
1287-
ecmaVersion: 2015,
1288-
sourceType: 'module'
1289-
},
1290-
rules: {
1291-
'@intlify/vue-i18n/no-unused-keys': [
1292-
'error',
1293-
{
1294-
src: resolve(
1295-
__dirname,
1296-
'../../fixtures/no-unused-keys/invalid/constructor-option-format'
1297-
),
1298-
enableFix: true
1299-
}
1300-
]
1301-
},
1302-
extensions: ['.js', '.vue', '.json', '.yaml', '.yml']
1303-
})
1304-
linter.addPlugin('@intlify/vue-i18n', plugin)
1305-
1306-
const messages = linter.executeOnFiles(['.'])
1307-
assert.equal(messages.errorCount, 6)
1308-
13091187
const fixall = `{
13101188
"en": {
13111189
"hello": "hello world",
@@ -1329,21 +1207,27 @@ hello_dio: "こんにちは、アンダースコア DIO!"
13291207
}
13301208
}
13311209
`
1332-
assert.deepStrictEqual(
1333-
getResult(
1334-
messages,
1335-
'../../fixtures/no-unused-keys/invalid/constructor-option-format/locales/index.json'
1336-
),
1210+
testOnFixtures(
13371211
{
1338-
output: fixall,
1339-
errors: [
1340-
{
1341-
message: "unused 'en.messages.link' key",
1342-
line: 6,
1343-
suggestions: [
1344-
{
1345-
desc: "Remove the 'en.messages.link' key.",
1346-
output: `{
1212+
cwd: join(cwdRoot, './invalid/constructor-option-format'),
1213+
localeDir: {
1214+
pattern: `./locales/*.{json,yaml,yml}`,
1215+
localeKey: 'key'
1216+
},
1217+
ruleName: '@intlify/vue-i18n/no-unused-keys',
1218+
options: [{ src: '.', enableFix: true }]
1219+
},
1220+
{
1221+
'locales/index.json': {
1222+
output: fixall,
1223+
errors: [
1224+
{
1225+
message: "unused 'en.messages.link' key",
1226+
line: 6,
1227+
suggestions: [
1228+
{
1229+
desc: "Remove the 'en.messages.link' key.",
1230+
output: `{
13471231
"en": {
13481232
"hello": "hello world",
13491233
"messages": {
@@ -1371,20 +1255,20 @@ hello_dio: "こんにちは、アンダースコア DIO!"
13711255
}
13721256
}
13731257
`
1374-
},
1375-
{
1376-
desc: 'Remove all unused keys.',
1377-
output: fixall
1378-
}
1379-
]
1380-
},
1381-
{
1382-
message: "unused 'en.messages.nested.hello' key",
1383-
line: 8,
1384-
suggestions: [
1385-
{
1386-
desc: "Remove the 'en.messages.nested.hello' key.",
1387-
output: `{
1258+
},
1259+
{
1260+
desc: 'Remove all unused keys.',
1261+
output: fixall
1262+
}
1263+
]
1264+
},
1265+
{
1266+
message: "unused 'en.messages.nested.hello' key",
1267+
line: 8,
1268+
suggestions: [
1269+
{
1270+
desc: "Remove the 'en.messages.nested.hello' key.",
1271+
output: `{
13881272
"en": {
13891273
"hello": "hello world",
13901274
"messages": {
@@ -1412,20 +1296,20 @@ hello_dio: "こんにちは、アンダースコア DIO!"
14121296
}
14131297
}
14141298
`
1415-
},
1416-
{
1417-
desc: 'Remove all unused keys.',
1418-
output: fixall
1419-
}
1420-
]
1421-
},
1422-
{
1423-
message: "unused 'en.hello-dio' key",
1424-
line: 13,
1425-
suggestions: [
1426-
{
1427-
desc: "Remove the 'en.hello-dio' key.",
1428-
output: `{
1299+
},
1300+
{
1301+
desc: 'Remove all unused keys.',
1302+
output: fixall
1303+
}
1304+
]
1305+
},
1306+
{
1307+
message: "unused 'en.hello-dio' key",
1308+
line: 13,
1309+
suggestions: [
1310+
{
1311+
desc: "Remove the 'en.hello-dio' key.",
1312+
output: `{
14291313
"en": {
14301314
"hello": "hello world",
14311315
"messages": {
@@ -1453,20 +1337,20 @@ hello_dio: "こんにちは、アンダースコア DIO!"
14531337
}
14541338
}
14551339
`
1456-
},
1457-
{
1458-
desc: 'Remove all unused keys.',
1459-
output: fixall
1460-
}
1461-
]
1462-
},
1463-
{
1464-
message: "unused 'ja.messages.link' key",
1465-
line: 19,
1466-
suggestions: [
1467-
{
1468-
desc: "Remove the 'ja.messages.link' key.",
1469-
output: `{
1340+
},
1341+
{
1342+
desc: 'Remove all unused keys.',
1343+
output: fixall
1344+
}
1345+
]
1346+
},
1347+
{
1348+
message: "unused 'ja.messages.link' key",
1349+
line: 19,
1350+
suggestions: [
1351+
{
1352+
desc: "Remove the 'ja.messages.link' key.",
1353+
output: `{
14701354
"en": {
14711355
"hello": "hello world",
14721356
"messages": {
@@ -1494,20 +1378,20 @@ hello_dio: "こんにちは、アンダースコア DIO!"
14941378
}
14951379
}
14961380
`
1497-
},
1498-
{
1499-
desc: 'Remove all unused keys.',
1500-
output: fixall
1501-
}
1502-
]
1503-
},
1504-
{
1505-
message: "unused 'ja.messages.nested.hello' key",
1506-
line: 21,
1507-
suggestions: [
1508-
{
1509-
desc: "Remove the 'ja.messages.nested.hello' key.",
1510-
output: `{
1381+
},
1382+
{
1383+
desc: 'Remove all unused keys.',
1384+
output: fixall
1385+
}
1386+
]
1387+
},
1388+
{
1389+
message: "unused 'ja.messages.nested.hello' key",
1390+
line: 21,
1391+
suggestions: [
1392+
{
1393+
desc: "Remove the 'ja.messages.nested.hello' key.",
1394+
output: `{
15111395
"en": {
15121396
"hello": "hello world",
15131397
"messages": {
@@ -1535,20 +1419,20 @@ hello_dio: "こんにちは、アンダースコア DIO!"
15351419
}
15361420
}
15371421
`
1538-
},
1539-
{
1540-
desc: 'Remove all unused keys.',
1541-
output: fixall
1542-
}
1543-
]
1544-
},
1545-
{
1546-
message: "unused 'ja.hello-dio' key",
1547-
line: 26,
1548-
suggestions: [
1549-
{
1550-
desc: "Remove the 'ja.hello-dio' key.",
1551-
output: `{
1422+
},
1423+
{
1424+
desc: 'Remove all unused keys.',
1425+
output: fixall
1426+
}
1427+
]
1428+
},
1429+
{
1430+
message: "unused 'ja.hello-dio' key",
1431+
line: 26,
1432+
suggestions: [
1433+
{
1434+
desc: "Remove the 'ja.hello-dio' key.",
1435+
output: `{
15521436
"en": {
15531437
"hello": "hello world",
15541438
"messages": {
@@ -1576,97 +1460,44 @@ hello_dio: "こんにちは、アンダースコア DIO!"
15761460
}
15771461
}
15781462
`
1579-
},
1580-
{
1581-
desc: 'Remove all unused keys.',
1582-
output: fixall
1583-
}
1584-
]
1585-
}
1586-
]
1463+
},
1464+
{
1465+
desc: 'Remove all unused keys.',
1466+
output: fixall
1467+
}
1468+
]
1469+
}
1470+
]
1471+
}
15871472
}
15881473
)
15891474
})
15901475

15911476
it('should be detected unsued keys with typescript', () => {
1592-
process.chdir(join(cwd, './invalid/typescript'))
1593-
const linter = new CLIEngine({
1594-
cwd: join(cwd, './invalid/typescript'),
1595-
extensions: ['.js', '.vue', '.json', '.yaml', '.yml', '.ts']
1596-
})
1597-
linter.addPlugin('@intlify/vue-i18n', plugin)
1598-
1599-
const messages = linter.executeOnFiles(['.'])
1600-
assert.equal(messages.errorCount, 6)
1601-
1602-
assert.deepStrictEqual(
1603-
getResult(
1604-
messages,
1605-
'../../fixtures/no-unused-keys/invalid/typescript/locales/en.json',
1606-
{ messageOnly: true }
1607-
),
1477+
testOnFixtures(
16081478
{
1609-
errors: [
1610-
"unused 'messages.link' key",
1611-
"unused 'messages.nested.hello' key",
1612-
"unused 'hello-dio' key"
1613-
]
1614-
}
1615-
)
1616-
1617-
assert.deepStrictEqual(
1618-
getResult(
1619-
messages,
1620-
'../../fixtures/no-unused-keys/invalid/typescript/locales/ja.yaml',
1621-
{ messageOnly: true }
1622-
),
1479+
cwd: join(cwdRoot, './invalid/typescript'),
1480+
ruleName: '@intlify/vue-i18n/no-unused-keys',
1481+
useEslintrc: true
1482+
},
16231483
{
1624-
errors: [
1625-
"unused 'messages.link' key",
1626-
"unused 'messages.nested.hello' key",
1627-
"unused 'hello-dio' key"
1628-
]
1629-
}
1484+
'locales/en.json': {
1485+
errors: [
1486+
"unused 'messages.link' key",
1487+
"unused 'messages.nested.hello' key",
1488+
"unused 'hello-dio' key"
1489+
]
1490+
},
1491+
'locales/ja.yaml': {
1492+
errors: [
1493+
"unused 'messages.link' key",
1494+
"unused 'messages.nested.hello' key",
1495+
"unused 'hello-dio' key"
1496+
]
1497+
}
1498+
},
1499+
{ messageOnly: true }
16301500
)
16311501
})
16321502
})
16331503
})
1634-
1635-
function getResult(
1636-
messages: CLIEngine.LintReport,
1637-
path: string,
1638-
options?: { messageOnly?: boolean }
1639-
) {
1640-
const fullPath = resolve(__dirname, path)
1641-
const result = messages.results.find(result => result.filePath === fullPath)!
1642-
const messageOnly = options?.messageOnly ?? false
1643-
if (messageOnly) {
1644-
return {
1645-
errors: result.messages.map(message => {
1646-
assert.equal(message.ruleId, '@intlify/vue-i18n/no-unused-keys')
1647-
return message.message
1648-
})
1649-
}
1650-
}
1651-
const output = SourceCodeFixer.applyFixes(result.source, result.messages)
1652-
.output
1653-
return {
1654-
output,
1655-
errors: result.messages.map(message => {
1656-
assert.equal(message.ruleId, '@intlify/vue-i18n/no-unused-keys')
1657-
1658-
return {
1659-
message: message.message,
1660-
line: message.line,
1661-
suggestions: message.suggestions!.map(suggest => {
1662-
const output = SourceCodeFixer.applyFixes(result.source, [suggest])
1663-
.output
1664-
return {
1665-
desc: suggest.desc,
1666-
output
1667-
}
1668-
})
1669-
}
1670-
})
1671-
}
1672-
}

0 commit comments

Comments
 (0)
Please sign in to comment.