1
1
import { ConversionError } from "../errors/conversionError" ;
2
2
import { convertRules } from "./convertRules" ;
3
- import { TSLintRuleOptions } from "./types" ;
3
+ import { TSLintRuleOptions , TSLintRuleSeverity } from "./types" ;
4
+ import { RuleConverter , ConversionResult } from "./converter" ;
5
+ import { RuleMerger } from "./merger" ;
4
6
5
7
describe ( "convertRules" , ( ) => {
6
8
it ( "doesn't marks a disabled rule as missing when its converter returns undefined" , ( ) => {
7
9
// Arrange
8
- const tslintRule : TSLintRuleOptions = {
9
- ruleArguments : [ ] ,
10
- ruleName : "tslint-rule-a" ,
10
+ const { tslintRule, converters, mergers } = setupConversionEnvironment ( {
11
11
ruleSeverity : "off" ,
12
- } ;
13
- const converters = new Map ( ) ;
14
- const mergers = new Map ( ) ;
12
+ } ) ;
15
13
16
14
// Act
17
15
const { missing } = convertRules (
@@ -25,13 +23,7 @@ describe("convertRules", () => {
25
23
26
24
it ( "marks an enabled rule as missing when its converter returns undefined" , ( ) => {
27
25
// Arrange
28
- const tslintRule : TSLintRuleOptions = {
29
- ruleArguments : [ ] ,
30
- ruleName : "tslint-rule-a" ,
31
- ruleSeverity : "error" ,
32
- } ;
33
- const converters = new Map ( ) ;
34
- const mergers = new Map ( ) ;
26
+ const { tslintRule, converters, mergers } = setupConversionEnvironment ( ) ;
35
27
36
28
// Act
37
29
const { missing } = convertRules (
@@ -45,14 +37,9 @@ describe("convertRules", () => {
45
37
46
38
it ( "marks a conversion as failed when returned a conversion error" , ( ) => {
47
39
// Arrange
48
- const tslintRule : TSLintRuleOptions = {
49
- ruleArguments : [ ] ,
50
- ruleName : "tslint-rule-a" ,
51
- ruleSeverity : "error" ,
52
- } ;
40
+ const { tslintRule, converters, mergers } = setupConversionEnvironment ( ) ;
53
41
const conversionError = ConversionError . forRuleError ( new Error ( ) , tslintRule ) ;
54
- const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionError ] ] ) ;
55
- const mergers = new Map ( ) ;
42
+ converters . set ( tslintRule . ruleName , ( ) => conversionError ) ;
56
43
57
44
// Act
58
45
const { failed } = convertRules (
@@ -66,20 +53,16 @@ describe("convertRules", () => {
66
53
67
54
it ( "marks a converted rule name as converted when a conversion has rules" , ( ) => {
68
55
// Arrange
69
- const tslintRule : TSLintRuleOptions = {
70
- ruleArguments : [ ] ,
71
- ruleName : "tslint-rule-a" ,
72
- ruleSeverity : "error" ,
73
- } ;
74
56
const conversionResult = {
75
57
rules : [
76
58
{
77
59
ruleName : "eslint-rule-a" ,
78
60
} ,
79
61
] ,
80
62
} ;
81
- const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionResult ] ] ) ;
82
- const mergers = new Map ( ) ;
63
+ const { tslintRule, converters, mergers } = setupConversionEnvironment ( {
64
+ conversionResult,
65
+ } ) ;
83
66
84
67
// Act
85
68
const { converted } = convertRules (
@@ -103,11 +86,6 @@ describe("convertRules", () => {
103
86
104
87
it ( "reports a failure when two outputs exist for a converted rule without a merger" , ( ) => {
105
88
// Arrange
106
- const tslintRule : TSLintRuleOptions = {
107
- ruleArguments : [ ] ,
108
- ruleName : "tslint-rule-a" ,
109
- ruleSeverity : "error" ,
110
- } ;
111
89
const conversionResult = {
112
90
rules : [
113
91
{
@@ -118,8 +96,9 @@ describe("convertRules", () => {
118
96
} ,
119
97
] ,
120
98
} ;
121
- const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionResult ] ] ) ;
122
- const mergers = new Map ( ) ;
99
+ const { tslintRule, converters, mergers } = setupConversionEnvironment ( {
100
+ conversionResult,
101
+ } ) ;
123
102
124
103
// Act
125
104
const { failed } = convertRules (
@@ -133,11 +112,6 @@ describe("convertRules", () => {
133
112
134
113
it ( "merges rule arguments two outputs exist for a converted rule with a merger" , ( ) => {
135
114
// Arrange
136
- const tslintRule : TSLintRuleOptions = {
137
- ruleArguments : [ ] ,
138
- ruleName : "tslint-rule-a" ,
139
- ruleSeverity : "error" ,
140
- } ;
141
115
const conversionResult = {
142
116
rules : [
143
117
{
@@ -148,9 +122,10 @@ describe("convertRules", () => {
148
122
} ,
149
123
] ,
150
124
} ;
151
- const mergedArguments = [ { merged : true } ] ;
152
- const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionResult ] ] ) ;
153
- const mergers = new Map ( [ [ conversionResult . rules [ 0 ] . ruleName , ( ) => mergedArguments ] ] ) ;
125
+ const { tslintRule, converters, mergers } = setupConversionEnvironment ( {
126
+ conversionResult,
127
+ ruleToMerge : conversionResult . rules [ 0 ] . ruleName ,
128
+ } ) ;
154
129
155
130
// Act
156
131
const { converted } = convertRules (
@@ -164,7 +139,7 @@ describe("convertRules", () => {
164
139
[
165
140
"eslint-rule-a" ,
166
141
{
167
- ruleArguments : mergedArguments ,
142
+ ruleArguments : [ { merged : true } ] ,
168
143
ruleName : "eslint-rule-a" ,
169
144
ruleSeverity : "error" ,
170
145
notices : [ ] ,
@@ -176,11 +151,6 @@ describe("convertRules", () => {
176
151
177
152
it ( "merges and deduplicates rule notices" , ( ) => {
178
153
// Arrange
179
- const tslintRule : TSLintRuleOptions = {
180
- ruleArguments : [ ] ,
181
- ruleName : "tslint-rule-a" ,
182
- ruleSeverity : "error" ,
183
- } ;
184
154
const conversionResult = {
185
155
rules : [
186
156
{
@@ -193,9 +163,10 @@ describe("convertRules", () => {
193
163
} ,
194
164
] ,
195
165
} ;
196
- const mergedArguments = [ { merged : true } ] ;
197
- const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionResult ] ] ) ;
198
- const mergers = new Map ( [ [ conversionResult . rules [ 0 ] . ruleName , ( ) => mergedArguments ] ] ) ;
166
+ const { tslintRule, converters, mergers } = setupConversionEnvironment ( {
167
+ conversionResult,
168
+ ruleToMerge : conversionResult . rules [ 0 ] . ruleName ,
169
+ } ) ;
199
170
200
171
// Act
201
172
const { converted } = convertRules (
@@ -209,7 +180,7 @@ describe("convertRules", () => {
209
180
[
210
181
"eslint-rule-a" ,
211
182
{
212
- ruleArguments : mergedArguments ,
183
+ ruleArguments : [ { merged : true } ] ,
213
184
ruleName : "eslint-rule-a" ,
214
185
ruleSeverity : "error" ,
215
186
notices : [ "notice-1" , "notice-2" ] ,
@@ -221,11 +192,6 @@ describe("convertRules", () => {
221
192
222
193
it ( "merges undefined notices" , ( ) => {
223
194
// Arrange
224
- const tslintRule : TSLintRuleOptions = {
225
- ruleArguments : [ ] ,
226
- ruleName : "tslint-rule-a" ,
227
- ruleSeverity : "error" ,
228
- } ;
229
195
const conversionResult = {
230
196
rules : [
231
197
{
@@ -238,9 +204,10 @@ describe("convertRules", () => {
238
204
} ,
239
205
] ,
240
206
} ;
241
- const mergedArguments = [ { merged : true } ] ;
242
- const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionResult ] ] ) ;
243
- const mergers = new Map ( [ [ conversionResult . rules [ 0 ] . ruleName , ( ) => mergedArguments ] ] ) ;
207
+ const { tslintRule, converters, mergers } = setupConversionEnvironment ( {
208
+ conversionResult,
209
+ ruleToMerge : conversionResult . rules [ 0 ] . ruleName ,
210
+ } ) ;
244
211
245
212
// Act
246
213
const { converted } = convertRules (
@@ -254,7 +221,7 @@ describe("convertRules", () => {
254
221
[
255
222
"eslint-rule-a" ,
256
223
{
257
- ruleArguments : mergedArguments ,
224
+ ruleArguments : [ { merged : true } ] ,
258
225
ruleName : "eslint-rule-a" ,
259
226
ruleSeverity : "error" ,
260
227
notices : [ ] ,
@@ -266,17 +233,13 @@ describe("convertRules", () => {
266
233
267
234
it ( "marks a new plugin when a conversion has a new plugin" , ( ) => {
268
235
// Arrange
269
- const tslintRule : TSLintRuleOptions = {
270
- ruleArguments : [ ] ,
271
- ruleName : "tslint-rule-a" ,
272
- ruleSeverity : "error" ,
273
- } ;
274
236
const conversionResult = {
275
237
plugins : [ "extra-plugin" ] ,
276
238
rules : [ ] ,
277
239
} ;
278
- const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionResult ] ] ) ;
279
- const mergers = new Map ( ) ;
240
+ const { tslintRule, converters, mergers } = setupConversionEnvironment ( {
241
+ conversionResult,
242
+ } ) ;
280
243
281
244
// Act
282
245
const { plugins } = convertRules (
@@ -288,3 +251,50 @@ describe("convertRules", () => {
288
251
expect ( plugins ) . toEqual ( new Set ( [ "extra-plugin" ] ) ) ;
289
252
} ) ;
290
253
} ) ;
254
+
255
+ function setupConversionEnvironment (
256
+ config : {
257
+ ruleSeverity ?: TSLintRuleSeverity ;
258
+ conversionResult ?: ConversionResult ;
259
+ ruleToMerge ?: string ;
260
+ } = { } ,
261
+ ) {
262
+ const { ruleSeverity, conversionResult, ruleToMerge } = config ;
263
+
264
+ const tslintRule = createSampleTsLintRule ( ruleSeverity ) ;
265
+ const converters = createConverters ( tslintRule , conversionResult ) ;
266
+ const mergers = createMergers ( ruleToMerge ) ;
267
+
268
+ return { tslintRule, converters, mergers } ;
269
+ }
270
+
271
+ function createSampleTsLintRule ( ruleSeverity : TSLintRuleSeverity = "error" ) : TSLintRuleOptions {
272
+ return {
273
+ ruleArguments : [ ] ,
274
+ ruleName : "tslint-rule-a" ,
275
+ ruleSeverity,
276
+ } ;
277
+ }
278
+
279
+ function createConverters (
280
+ tslintRule : TSLintRuleOptions ,
281
+ conversionResult ?: ConversionResult ,
282
+ ) : Map < string , RuleConverter > {
283
+ const converters = new Map < string , RuleConverter > ( ) ;
284
+
285
+ if ( conversionResult !== undefined ) {
286
+ converters . set ( tslintRule . ruleName , ( ) => conversionResult ) ;
287
+ }
288
+
289
+ return converters ;
290
+ }
291
+
292
+ function createMergers ( ruleToMerge ?: string ) : Map < string , RuleMerger > {
293
+ const mergers = new Map < string , RuleMerger > ( ) ;
294
+
295
+ if ( ruleToMerge !== undefined ) {
296
+ mergers . set ( ruleToMerge , ( ) => [ { merged : true } ] ) ;
297
+ }
298
+
299
+ return mergers ;
300
+ }
0 commit comments