@@ -455,6 +455,49 @@ public void ResetsScrollPositionWhenPerformingInternalNavigation_ProgrammaticNav
455
455
Browser . Equal ( 0 , ( ) => BrowserScrollY ) ;
456
456
}
457
457
458
+ [ Theory ]
459
+ [ InlineData ( "external" , "ancestor" ) ]
460
+ [ InlineData ( "external" , "target" ) ]
461
+ [ InlineData ( "external" , "descendant" ) ]
462
+ [ InlineData ( "internal" , "ancestor" ) ]
463
+ [ InlineData ( "internal" , "target" ) ]
464
+ [ InlineData ( "internal" , "descendant" ) ]
465
+ public void PreventDefault_CanBlockNavigation ( string navigationType , string whereToPreventDefault )
466
+ {
467
+ SetUrlViaPushState ( "/PreventDefaultCases" ) ;
468
+ var app = Browser . MountTestComponent < TestRouter > ( ) ;
469
+ var preventDefaultToggle = app . FindElement ( By . CssSelector ( $ ".prevent-default .{ whereToPreventDefault } ") ) ;
470
+ var linkElement = app . FindElement ( By . Id ( $ "{ navigationType } -navigation") ) ;
471
+ var counterButton = app . FindElement ( By . ClassName ( "counter-button" ) ) ;
472
+ if ( whereToPreventDefault == "descendant" )
473
+ {
474
+ // We're testing clicks on the link's descendant element
475
+ linkElement = linkElement . FindElement ( By . TagName ( "span" ) ) ;
476
+ }
477
+
478
+ // If preventDefault is on, then navigation does not occur
479
+ preventDefaultToggle . Click ( ) ;
480
+ linkElement . Click ( ) ;
481
+
482
+ // We check that no navigation ocurred by observing that we can still use the counter
483
+ counterButton . Click ( ) ;
484
+ Browser . Equal ( "Counter: 1" , ( ) => counterButton . Text ) ;
485
+
486
+ // Now if we toggle preventDefault back off, then navigation will occur
487
+ preventDefaultToggle . Click ( ) ;
488
+ linkElement . Click ( ) ;
489
+
490
+ if ( navigationType == "external" )
491
+ {
492
+ Browser . Equal ( "about:blank" , ( ) => Browser . Url ) ;
493
+ }
494
+ else
495
+ {
496
+ Browser . Equal ( "This is another page." , ( ) => app . FindElement ( By . Id ( "test-info" ) ) . Text ) ;
497
+ AssertHighlightedLinks ( "Other" , "Other with base-relative URL (matches all)" ) ;
498
+ }
499
+ }
500
+
458
501
private long BrowserScrollY
459
502
{
460
503
get => ( long ) ( ( IJavaScriptExecutor ) Browser ) . ExecuteScript ( "return window.scrollY" ) ;
0 commit comments