11import { ConversionError } from "../errors/conversionError" ;
22import { 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" ;
46
57describe ( "convertRules" , ( ) => {
68 it ( "doesn't marks a disabled rule as missing when its converter returns undefined" , ( ) => {
79 // Arrange
8- const tslintRule : TSLintRuleOptions = {
9- ruleArguments : [ ] ,
10- ruleName : "tslint-rule-a" ,
10+ const { tslintRule, converters, mergers } = setupConversionEnvironment ( {
1111 ruleSeverity : "off" ,
12- } ;
13- const converters = new Map ( ) ;
14- const mergers = new Map ( ) ;
12+ } ) ;
1513
1614 // Act
1715 const { missing } = convertRules (
@@ -25,13 +23,7 @@ describe("convertRules", () => {
2523
2624 it ( "marks an enabled rule as missing when its converter returns undefined" , ( ) => {
2725 // 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 ( ) ;
3527
3628 // Act
3729 const { missing } = convertRules (
@@ -45,14 +37,9 @@ describe("convertRules", () => {
4537
4638 it ( "marks a conversion as failed when returned a conversion error" , ( ) => {
4739 // Arrange
48- const tslintRule : TSLintRuleOptions = {
49- ruleArguments : [ ] ,
50- ruleName : "tslint-rule-a" ,
51- ruleSeverity : "error" ,
52- } ;
40+ const { tslintRule, converters, mergers } = setupConversionEnvironment ( ) ;
5341 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 ) ;
5643
5744 // Act
5845 const { failed } = convertRules (
@@ -66,20 +53,16 @@ describe("convertRules", () => {
6653
6754 it ( "marks a converted rule name as converted when a conversion has rules" , ( ) => {
6855 // Arrange
69- const tslintRule : TSLintRuleOptions = {
70- ruleArguments : [ ] ,
71- ruleName : "tslint-rule-a" ,
72- ruleSeverity : "error" ,
73- } ;
7456 const conversionResult = {
7557 rules : [
7658 {
7759 ruleName : "eslint-rule-a" ,
7860 } ,
7961 ] ,
8062 } ;
81- const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionResult ] ] ) ;
82- const mergers = new Map ( ) ;
63+ const { tslintRule, converters, mergers } = setupConversionEnvironment ( {
64+ conversionResult,
65+ } ) ;
8366
8467 // Act
8568 const { converted } = convertRules (
@@ -103,11 +86,6 @@ describe("convertRules", () => {
10386
10487 it ( "reports a failure when two outputs exist for a converted rule without a merger" , ( ) => {
10588 // Arrange
106- const tslintRule : TSLintRuleOptions = {
107- ruleArguments : [ ] ,
108- ruleName : "tslint-rule-a" ,
109- ruleSeverity : "error" ,
110- } ;
11189 const conversionResult = {
11290 rules : [
11391 {
@@ -118,8 +96,9 @@ describe("convertRules", () => {
11896 } ,
11997 ] ,
12098 } ;
121- const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionResult ] ] ) ;
122- const mergers = new Map ( ) ;
99+ const { tslintRule, converters, mergers } = setupConversionEnvironment ( {
100+ conversionResult,
101+ } ) ;
123102
124103 // Act
125104 const { failed } = convertRules (
@@ -133,11 +112,6 @@ describe("convertRules", () => {
133112
134113 it ( "merges rule arguments two outputs exist for a converted rule with a merger" , ( ) => {
135114 // Arrange
136- const tslintRule : TSLintRuleOptions = {
137- ruleArguments : [ ] ,
138- ruleName : "tslint-rule-a" ,
139- ruleSeverity : "error" ,
140- } ;
141115 const conversionResult = {
142116 rules : [
143117 {
@@ -148,9 +122,10 @@ describe("convertRules", () => {
148122 } ,
149123 ] ,
150124 } ;
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+ } ) ;
154129
155130 // Act
156131 const { converted } = convertRules (
@@ -164,7 +139,7 @@ describe("convertRules", () => {
164139 [
165140 "eslint-rule-a" ,
166141 {
167- ruleArguments : mergedArguments ,
142+ ruleArguments : [ { merged : true } ] ,
168143 ruleName : "eslint-rule-a" ,
169144 ruleSeverity : "error" ,
170145 notices : [ ] ,
@@ -176,11 +151,6 @@ describe("convertRules", () => {
176151
177152 it ( "merges and deduplicates rule notices" , ( ) => {
178153 // Arrange
179- const tslintRule : TSLintRuleOptions = {
180- ruleArguments : [ ] ,
181- ruleName : "tslint-rule-a" ,
182- ruleSeverity : "error" ,
183- } ;
184154 const conversionResult = {
185155 rules : [
186156 {
@@ -193,9 +163,10 @@ describe("convertRules", () => {
193163 } ,
194164 ] ,
195165 } ;
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+ } ) ;
199170
200171 // Act
201172 const { converted } = convertRules (
@@ -209,7 +180,7 @@ describe("convertRules", () => {
209180 [
210181 "eslint-rule-a" ,
211182 {
212- ruleArguments : mergedArguments ,
183+ ruleArguments : [ { merged : true } ] ,
213184 ruleName : "eslint-rule-a" ,
214185 ruleSeverity : "error" ,
215186 notices : [ "notice-1" , "notice-2" ] ,
@@ -221,11 +192,6 @@ describe("convertRules", () => {
221192
222193 it ( "merges undefined notices" , ( ) => {
223194 // Arrange
224- const tslintRule : TSLintRuleOptions = {
225- ruleArguments : [ ] ,
226- ruleName : "tslint-rule-a" ,
227- ruleSeverity : "error" ,
228- } ;
229195 const conversionResult = {
230196 rules : [
231197 {
@@ -238,9 +204,10 @@ describe("convertRules", () => {
238204 } ,
239205 ] ,
240206 } ;
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+ } ) ;
244211
245212 // Act
246213 const { converted } = convertRules (
@@ -254,7 +221,7 @@ describe("convertRules", () => {
254221 [
255222 "eslint-rule-a" ,
256223 {
257- ruleArguments : mergedArguments ,
224+ ruleArguments : [ { merged : true } ] ,
258225 ruleName : "eslint-rule-a" ,
259226 ruleSeverity : "error" ,
260227 notices : [ ] ,
@@ -266,17 +233,13 @@ describe("convertRules", () => {
266233
267234 it ( "marks a new plugin when a conversion has a new plugin" , ( ) => {
268235 // Arrange
269- const tslintRule : TSLintRuleOptions = {
270- ruleArguments : [ ] ,
271- ruleName : "tslint-rule-a" ,
272- ruleSeverity : "error" ,
273- } ;
274236 const conversionResult = {
275237 plugins : [ "extra-plugin" ] ,
276238 rules : [ ] ,
277239 } ;
278- const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionResult ] ] ) ;
279- const mergers = new Map ( ) ;
240+ const { tslintRule, converters, mergers } = setupConversionEnvironment ( {
241+ conversionResult,
242+ } ) ;
280243
281244 // Act
282245 const { plugins } = convertRules (
@@ -288,3 +251,50 @@ describe("convertRules", () => {
288251 expect ( plugins ) . toEqual ( new Set ( [ "extra-plugin" ] ) ) ;
289252 } ) ;
290253} ) ;
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