@@ -28,6 +28,7 @@ const parserOptions = {
2828
2929const ruleTester = new RuleTester ( { parserOptions } ) ;
3030const defaultErrors = [ { messageId : 'noTargetBlankWithoutNoreferrer' } ] ;
31+ const allowReferrerErrors = [ { messageId : 'noTargetBlankWithoutNoopener' } ] ;
3132
3233ruleTester . run ( 'jsx-no-target-blank' , rule , {
3334 valid : parsers . all ( [
@@ -141,6 +142,19 @@ ruleTester.run('jsx-no-target-blank', rule, {
141142 {
142143 code : '<a href target="_blank"/>' ,
143144 } ,
145+ {
146+ code : '<a href={href} target={isExternal ? "_blank" : undefined} rel="noopener noreferrer" />' ,
147+ } ,
148+ {
149+ code : '<a href={href} target={isExternal ? undefined : "_blank"} rel={isExternal ? "noreferrer" : "noopener noreferrer"} />' ,
150+ } ,
151+ {
152+ code : '<a href={href} target={isExternal ? undefined : "_blank"} rel={isExternal ? "noreferrer noopener" : "noreferrer"} />' ,
153+ } ,
154+ {
155+ code : '<a href={href} target="_blank" rel={isExternal ? "noreferrer" : "noopener"} />' ,
156+ options : [ { allowReferrer : true } ] ,
157+ } ,
144158 ] ) ,
145159 invalid : parsers . all ( [
146160 {
@@ -251,13 +265,13 @@ ruleTester.run('jsx-no-target-blank', rule, {
251265 code : '<a href="https://example.com/20" target="_blank" rel></a>' ,
252266 output : '<a href="https://example.com/20" target="_blank" rel="noopener"></a>' ,
253267 options : [ { allowReferrer : true } ] ,
254- errors : [ { messageId : 'noTargetBlankWithoutNoopener' } ] ,
268+ errors : allowReferrerErrors ,
255269 } ,
256270 {
257271 code : '<a href="https://example.com/20" target="_blank"></a>' ,
258272 output : '<a href="https://example.com/20" target="_blank" rel="noopener"></a>' ,
259273 options : [ { allowReferrer : true } ] ,
260- errors : [ { messageId : 'noTargetBlankWithoutNoopener' } ] ,
274+ errors : allowReferrerErrors ,
261275 } ,
262276 {
263277 code : '<a target="_blank" href={ dynamicLink }></a>' ,
@@ -352,5 +366,38 @@ ruleTester.run('jsx-no-target-blank', rule, {
352366 options : [ { forms : true , links : false } ] ,
353367 errors : defaultErrors ,
354368 } ,
369+ {
370+ code : '<a href={href} target="_blank" rel={isExternal ? "undefined" : "undefined"} />' ,
371+ errors : defaultErrors ,
372+ } ,
373+ {
374+ code : '<a href={href} target="_blank" rel={isExternal ? "noopener" : undefined} />' ,
375+ errors : defaultErrors ,
376+ } ,
377+ {
378+ code : '<a href={href} target="_blank" rel={isExternal ? "undefined" : "noopener"} />' ,
379+ errors : defaultErrors ,
380+ } ,
381+ {
382+ code : '<a href={href} target={isExternal ? "_blank" : undefined} rel={isExternal ? "noopener noreferrer" : undefined} />' ,
383+ errors : defaultErrors ,
384+ } ,
385+ {
386+ code : '<a href={href} target={isExternal ? "_blank" : undefined} rel={isExternal ? undefined : "noopener noreferrer"} />' ,
387+ errors : defaultErrors ,
388+ } ,
389+ {
390+ code : '<a href={href} target="_blank" rel={isExternal ? 3 : "noopener noreferrer"} />' ,
391+ errors : defaultErrors ,
392+ } ,
393+ {
394+ code : '<a href={href} target="_blank" rel={isExternal ? "noopener noreferrer" : "3"} />' ,
395+ errors : defaultErrors ,
396+ } ,
397+ {
398+ code : '<a href={href} target="_blank" rel={isExternal ? "noopener" : "2"} />' ,
399+ options : [ { allowReferrer : true } ] ,
400+ errors : allowReferrerErrors ,
401+ } ,
355402 ] ) ,
356403} ) ;
0 commit comments