@@ -11,9 +11,10 @@ describe("convertRules", () => {
1111 ruleSeverity : "off" ,
1212 } ;
1313 const converters = new Map ( ) ;
14+ const mergers = new Map ( ) ;
1415
1516 // Act
16- const { missing } = convertRules ( [ tslintRule ] , converters ) ;
17+ const { missing } = convertRules ( [ tslintRule ] , converters , mergers ) ;
1718
1819 // Assert
1920 expect ( missing ) . toEqual ( [ ] ) ;
@@ -27,9 +28,10 @@ describe("convertRules", () => {
2728 ruleSeverity : "error" ,
2829 } ;
2930 const converters = new Map ( ) ;
31+ const mergers = new Map ( ) ;
3032
3133 // Act
32- const { missing } = convertRules ( [ tslintRule ] , converters ) ;
34+ const { missing } = convertRules ( [ tslintRule ] , converters , mergers ) ;
3335
3436 // Assert
3537 expect ( missing ) . toEqual ( [ tslintRule ] ) ;
@@ -44,9 +46,10 @@ describe("convertRules", () => {
4446 } ;
4547 const conversionError = new ConversionError ( new Error ( ) , tslintRule ) ;
4648 const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionError ] ] ) ;
49+ const mergers = new Map ( ) ;
4750
4851 // Act
49- const { failed } = convertRules ( [ tslintRule ] , converters ) ;
52+ const { failed } = convertRules ( [ tslintRule ] , converters , mergers ) ;
5053
5154 // Assert
5255 expect ( failed ) . toEqual ( [ conversionError ] ) ;
@@ -67,9 +70,10 @@ describe("convertRules", () => {
6770 ] ,
6871 } ;
6972 const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionResult ] ] ) ;
73+ const mergers = new Map ( ) ;
7074
7175 // Act
72- const { converted } = convertRules ( [ tslintRule ] , converters ) ;
76+ const { converted } = convertRules ( [ tslintRule ] , converters , mergers ) ;
7377
7478 // Assert
7579 expect ( converted ) . toEqual (
@@ -85,6 +89,81 @@ describe("convertRules", () => {
8589 ) ;
8690 } ) ;
8791
92+ it ( "reports a failure when two outputs exist for a converted rule without a merger" , ( ) => {
93+ // Arrange
94+ const tslintRule : TSLintRuleOptions = {
95+ ruleArguments : [ ] ,
96+ ruleName : "tslint-rule-a" ,
97+ ruleSeverity : "error" ,
98+ } ;
99+ const conversionResult = {
100+ rules : [
101+ {
102+ ruleName : "eslint-rule-a" ,
103+ } ,
104+ {
105+ ruleName : "eslint-rule-a" ,
106+ } ,
107+ ] ,
108+ } ;
109+ const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionResult ] ] ) ;
110+ const mergers = new Map ( ) ;
111+
112+ // Act
113+ const { failed } = convertRules ( [ tslintRule ] , converters , mergers ) ;
114+
115+ // Assert
116+ expect ( failed ) . toEqual (
117+ jasmine . arrayContaining ( [
118+ jasmine . objectContaining ( {
119+ error : jasmine . objectContaining ( {
120+ message : `No merger for multiple output eslint-rule-a rule configurations.` ,
121+ } ) ,
122+ tslintRule,
123+ } ) ,
124+ ] ) ,
125+ ) ;
126+ } ) ;
127+
128+ it ( "merges rule arguments two outputs exist for a converted rule with a merger" , ( ) => {
129+ // Arrange
130+ const tslintRule : TSLintRuleOptions = {
131+ ruleArguments : [ ] ,
132+ ruleName : "tslint-rule-a" ,
133+ ruleSeverity : "error" ,
134+ } ;
135+ const conversionResult = {
136+ rules : [
137+ {
138+ ruleName : "eslint-rule-a" ,
139+ } ,
140+ {
141+ ruleName : "eslint-rule-a" ,
142+ } ,
143+ ] ,
144+ } ;
145+ const mergedArguments = [ { merged : true } ] ;
146+ const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionResult ] ] ) ;
147+ const mergers = new Map ( [ [ conversionResult . rules [ 0 ] . ruleName , ( ) => mergedArguments ] ] ) ;
148+
149+ // Act
150+ const { converted } = convertRules ( [ tslintRule ] , converters , mergers ) ;
151+
152+ // Assert
153+ expect ( converted ) . toEqual (
154+ new Map ( [
155+ [
156+ "eslint-rule-a" ,
157+ {
158+ ruleArguments : mergedArguments ,
159+ ruleName : "eslint-rule-a" ,
160+ ruleSeverity : "error" ,
161+ } ,
162+ ] ,
163+ ] ) ,
164+ ) ;
165+ } ) ;
166+
88167 it ( "marks a new package when a conversion has a new package" , ( ) => {
89168 // Arrange
90169 const tslintRule : TSLintRuleOptions = {
@@ -97,9 +176,10 @@ describe("convertRules", () => {
97176 rules : [ ] ,
98177 } ;
99178 const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionResult ] ] ) ;
179+ const mergers = new Map ( ) ;
100180
101181 // Act
102- const { packages } = convertRules ( [ tslintRule ] , converters ) ;
182+ const { packages } = convertRules ( [ tslintRule ] , converters , mergers ) ;
103183
104184 // Assert
105185 expect ( packages ) . toEqual ( new Set ( [ "extra-package" ] ) ) ;
0 commit comments