Skip to content

Commit 9a78a60

Browse files
committed
add converter trailing-comma and unit test (#186)
1 parent e408e53 commit 9a78a60

File tree

3 files changed

+397
-0
lines changed

3 files changed

+397
-0
lines changed

src/rules/converters.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ import { convertSemicolon } from "./converters/semicolon";
113113
import { convertSpaceBeforeFunctionParen } from "./converters/space-before-function-paren";
114114
import { convertSpaceWithinParens } from "./converters/space-within-parens";
115115
import { convertSwitchDefault } from "./converters/switch-default";
116+
import { convertTrailingComma } from "./converters/trailing-comma";
116117
import { convertTripleEquals } from "./converters/triple-equals";
117118
import { convertTypedefWhitespace } from "./converters/typedef-whitespace";
118119
import { convertTypeLiteralDelimiter } from "./converters/type-literal-delimiter";
@@ -243,6 +244,7 @@ export const converters = new Map([
243244
["space-before-function-paren", convertSpaceBeforeFunctionParen],
244245
["space-within-parens", convertSpaceWithinParens],
245246
["switch-default", convertSwitchDefault],
247+
["trailing-comma", convertTrailingComma],
246248
["triple-equals", convertTripleEquals],
247249
["type-literal-delimiter", convertTypeLiteralDelimiter],
248250
["typedef-whitespace", convertTypedefWhitespace],
Lines changed: 275 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,275 @@
1+
import { convertTrailingComma } from "../trailing-comma";
2+
3+
describe(convertTrailingComma, () => {
4+
test("conversion without arguments", () => {
5+
const result = convertTrailingComma({
6+
ruleArguments: [],
7+
});
8+
9+
expect(result).toEqual({
10+
rules: [
11+
{
12+
ruleName: "comma-dangle",
13+
},
14+
],
15+
});
16+
});
17+
18+
describe("conversion with arguments using string values", () => {
19+
const testCases = [
20+
{
21+
argument: {
22+
singleline: "never",
23+
},
24+
expectedRuleArguments: [],
25+
},
26+
{
27+
argument: {
28+
singleline: "always",
29+
},
30+
expectedRuleArguments: [],
31+
},
32+
{
33+
argument: {
34+
multiline: "never",
35+
},
36+
expectedRuleArguments: [],
37+
},
38+
{
39+
argument: {
40+
multiline: "always",
41+
},
42+
expectedRuleArguments: ["always-multiline"],
43+
},
44+
{
45+
argument: {
46+
singleline: "never",
47+
multiline: "never",
48+
},
49+
expectedRuleArguments: [],
50+
},
51+
{
52+
argument: {
53+
singleline: "never",
54+
multiline: "always",
55+
},
56+
expectedRuleArguments: ["always-multiline"],
57+
},
58+
{
59+
argument: {
60+
singleline: "always",
61+
multiline: "never",
62+
},
63+
expectedRuleArguments: [],
64+
},
65+
{
66+
argument: {
67+
singleline: "always",
68+
multiline: "always",
69+
},
70+
expectedRuleArguments: ["always"],
71+
},
72+
];
73+
74+
testCases.forEach(testCase => {
75+
test(`conversion with arguments ${JSON.stringify(testCase.argument)}`, () => {
76+
const result = convertTrailingComma({
77+
ruleArguments: [testCase.argument],
78+
});
79+
80+
expect(result).toEqual({
81+
rules: [
82+
{
83+
ruleName: "comma-dangle",
84+
...(testCase.expectedRuleArguments.length !== 0 && {
85+
ruleArguments: testCase.expectedRuleArguments,
86+
}),
87+
},
88+
],
89+
});
90+
});
91+
});
92+
});
93+
94+
describe("conversion with arguments using object values", () => {
95+
const testCases = [
96+
{
97+
argument: {
98+
singleline: "never",
99+
multiline: {
100+
objects: "always",
101+
arrays: "always",
102+
functions: "always",
103+
imports: "always",
104+
exports: "always",
105+
typeLiterals: "ignore",
106+
},
107+
},
108+
expectedRuleArguments: [
109+
{
110+
arrays: "always-multiline",
111+
objects: "always-multiline",
112+
functions: "always-multiline",
113+
imports: "always-multiline",
114+
exports: "always-multiline",
115+
},
116+
],
117+
},
118+
{
119+
argument: {
120+
singleline: "always",
121+
multiline: {
122+
objects: "always",
123+
arrays: "always",
124+
functions: "always",
125+
imports: "always",
126+
exports: "always",
127+
typeLiterals: "ignore",
128+
},
129+
},
130+
expectedRuleArguments: [
131+
{
132+
arrays: "always",
133+
objects: "always",
134+
functions: "always",
135+
imports: "always",
136+
exports: "always",
137+
},
138+
],
139+
},
140+
{
141+
argument: {
142+
singleline: {
143+
objects: "never",
144+
arrays: "never",
145+
functions: "never",
146+
imports: "never",
147+
exports: "never",
148+
typeLiterals: "ignore",
149+
},
150+
},
151+
expectedRuleArguments: [
152+
{
153+
arrays: "never",
154+
objects: "never",
155+
functions: "never",
156+
imports: "never",
157+
exports: "never",
158+
},
159+
],
160+
},
161+
{
162+
argument: {
163+
singleline: {
164+
objects: "never",
165+
arrays: "never",
166+
functions: "never",
167+
typeLiterals: "ignore",
168+
},
169+
multiline: {
170+
objects: "never",
171+
arrays: "never",
172+
functions: "never",
173+
typeLiterals: "ignore",
174+
},
175+
},
176+
expectedRuleArguments: [
177+
{
178+
arrays: "never",
179+
objects: "never",
180+
functions: "never",
181+
},
182+
],
183+
},
184+
{
185+
argument: {
186+
multiline: {
187+
objects: "always",
188+
arrays: "always",
189+
functions: "always",
190+
imports: "always",
191+
exports: "always",
192+
typeLiterals: "ignore",
193+
},
194+
},
195+
expectedRuleArguments: [
196+
{
197+
arrays: "always-multiline",
198+
objects: "always-multiline",
199+
functions: "always-multiline",
200+
imports: "always-multiline",
201+
exports: "always-multiline",
202+
},
203+
],
204+
},
205+
{
206+
argument: {
207+
singleline: {
208+
objects: "always",
209+
arrays: "always",
210+
functions: "always",
211+
imports: "always",
212+
exports: "always",
213+
typeLiterals: "ignore",
214+
},
215+
multiline: {
216+
objects: "always",
217+
arrays: "always",
218+
functions: "always",
219+
imports: "always",
220+
exports: "always",
221+
typeLiterals: "ignore",
222+
},
223+
},
224+
expectedRuleArguments: [
225+
{
226+
arrays: "always",
227+
objects: "always",
228+
functions: "always",
229+
imports: "always",
230+
exports: "always",
231+
},
232+
],
233+
},
234+
{
235+
argument: {
236+
singleline: {
237+
objects: "always",
238+
arrays: "always",
239+
},
240+
multiline: {
241+
objects: "always",
242+
arrays: "always",
243+
functions: "always",
244+
},
245+
},
246+
expectedRuleArguments: [
247+
{
248+
arrays: "always",
249+
objects: "always",
250+
functions: "always-multiline",
251+
},
252+
],
253+
},
254+
];
255+
256+
testCases.forEach(testCase => {
257+
test(`conversion with arguments ${JSON.stringify(testCase.argument)}`, () => {
258+
const result = convertTrailingComma({
259+
ruleArguments: [testCase.argument],
260+
});
261+
262+
expect(result).toEqual({
263+
rules: [
264+
{
265+
ruleName: "comma-dangle",
266+
...(testCase.expectedRuleArguments.length !== 0 && {
267+
ruleArguments: testCase.expectedRuleArguments,
268+
}),
269+
},
270+
],
271+
});
272+
});
273+
});
274+
});
275+
});

0 commit comments

Comments
 (0)