@@ -183,6 +183,96 @@ describe("convertRules", () => {
183183 ) ;
184184 } ) ;
185185
186+ it ( "merges and deduplicates rule notices" , ( ) => {
187+ // Arrange
188+ const tslintRule : TSLintRuleOptions = {
189+ ruleArguments : [ ] ,
190+ ruleName : "tslint-rule-a" ,
191+ ruleSeverity : "error" ,
192+ } ;
193+ const conversionResult = {
194+ rules : [
195+ {
196+ ruleName : "eslint-rule-a" ,
197+ notices : [ "notice-1" , "notice-2" ] ,
198+ } ,
199+ {
200+ ruleName : "eslint-rule-a" ,
201+ notices : [ "notice-1" ] ,
202+ } ,
203+ ] ,
204+ } ;
205+ const mergedArguments = [ { merged : true } ] ;
206+ const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionResult ] ] ) ;
207+ const mergers = new Map ( [ [ conversionResult . rules [ 0 ] . ruleName , ( ) => mergedArguments ] ] ) ;
208+
209+ // Act
210+ const { converted } = convertRules (
211+ { converters, mergers } ,
212+ { [ tslintRule . ruleName ] : tslintRule } ,
213+ ) ;
214+
215+ // Assert
216+ expect ( converted ) . toEqual (
217+ new Map ( [
218+ [
219+ "eslint-rule-a" ,
220+ {
221+ ruleArguments : mergedArguments ,
222+ ruleName : "eslint-rule-a" ,
223+ ruleSeverity : "error" ,
224+ notices : [ "notice-1" , "notice-2" ] ,
225+ } ,
226+ ] ,
227+ ] ) ,
228+ ) ;
229+ } ) ;
230+
231+ it ( "merges undefined notices" , ( ) => {
232+ // Arrange
233+ const tslintRule : TSLintRuleOptions = {
234+ ruleArguments : [ ] ,
235+ ruleName : "tslint-rule-a" ,
236+ ruleSeverity : "error" ,
237+ } ;
238+ const conversionResult = {
239+ rules : [
240+ {
241+ ruleName : "eslint-rule-a" ,
242+ notices : undefined ,
243+ } ,
244+ {
245+ ruleName : "eslint-rule-a" ,
246+ notices : undefined ,
247+ } ,
248+ ] ,
249+ } ;
250+ const mergedArguments = [ { merged : true } ] ;
251+ const converters = new Map ( [ [ tslintRule . ruleName , ( ) => conversionResult ] ] ) ;
252+ const mergers = new Map ( [ [ conversionResult . rules [ 0 ] . ruleName , ( ) => mergedArguments ] ] ) ;
253+
254+ // Act
255+ const { converted } = convertRules (
256+ { converters, mergers } ,
257+ { [ tslintRule . ruleName ] : tslintRule } ,
258+ ) ;
259+
260+ // Assert
261+ expect ( converted ) . toEqual (
262+ new Map ( [
263+ [
264+ "eslint-rule-a" ,
265+ {
266+ ruleArguments : mergedArguments ,
267+ ruleName : "eslint-rule-a" ,
268+ ruleSeverity : "error" ,
269+ notices : [ ] ,
270+ } ,
271+ ] ,
272+ ] ) ,
273+ ) ;
274+ } ) ;
275+
186276 it ( "marks a new plugin when a conversion has a new plugin" , ( ) => {
187277 // Arrange
188278 const tslintRule : TSLintRuleOptions = {
0 commit comments