@@ -28,6 +28,7 @@ const parserOptions = {
28
28
29
29
const ruleTester = new RuleTester ( { parserOptions } ) ;
30
30
const defaultErrors = [ { messageId : 'noTargetBlankWithoutNoreferrer' } ] ;
31
+ const allowReferrerErrors = [ { messageId : 'noTargetBlankWithoutNoopener' } ] ;
31
32
32
33
ruleTester . run ( 'jsx-no-target-blank' , rule , {
33
34
valid : parsers . all ( [
@@ -141,6 +142,19 @@ ruleTester.run('jsx-no-target-blank', rule, {
141
142
{
142
143
code : '<a href target="_blank"/>' ,
143
144
} ,
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
+ } ,
144
158
] ) ,
145
159
invalid : parsers . all ( [
146
160
{
@@ -251,13 +265,13 @@ ruleTester.run('jsx-no-target-blank', rule, {
251
265
code : '<a href="https://example.com/20" target="_blank" rel></a>' ,
252
266
output : '<a href="https://example.com/20" target="_blank" rel="noopener"></a>' ,
253
267
options : [ { allowReferrer : true } ] ,
254
- errors : [ { messageId : 'noTargetBlankWithoutNoopener' } ] ,
268
+ errors : allowReferrerErrors ,
255
269
} ,
256
270
{
257
271
code : '<a href="https://example.com/20" target="_blank"></a>' ,
258
272
output : '<a href="https://example.com/20" target="_blank" rel="noopener"></a>' ,
259
273
options : [ { allowReferrer : true } ] ,
260
- errors : [ { messageId : 'noTargetBlankWithoutNoopener' } ] ,
274
+ errors : allowReferrerErrors ,
261
275
} ,
262
276
{
263
277
code : '<a target="_blank" href={ dynamicLink }></a>' ,
@@ -352,5 +366,38 @@ ruleTester.run('jsx-no-target-blank', rule, {
352
366
options : [ { forms : true , links : false } ] ,
353
367
errors : defaultErrors ,
354
368
} ,
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
+ } ,
355
402
] ) ,
356
403
} ) ;
0 commit comments