Skip to content

Commit 395e2f2

Browse files
E2E tests for navigation+preventDefault
1 parent 55a3afd commit 395e2f2

File tree

2 files changed

+46
-3
lines changed

2 files changed

+46
-3
lines changed

src/Components/test/E2ETest/Tests/RoutingTest.cs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,49 @@ public void ResetsScrollPositionWhenPerformingInternalNavigation_ProgrammaticNav
455455
Browser.Equal(0, () => BrowserScrollY);
456456
}
457457

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+
458501
private long BrowserScrollY
459502
{
460503
get => (long)((IJavaScriptExecutor)Browser).ExecuteScript("return window.scrollY");

src/Components/test/testassets/BasicTestApp/RouterTest/PreventDefaultCases.razor

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
</p>
1010

1111
<p __internal_preventDefault_onclick="@ancestorPreventDefault">
12-
<a href="about:blank" __internal_preventDefault_onclick="@targetPreventDefault">
12+
<a id="external-navigation" href="about:blank" __internal_preventDefault_onclick="@targetPreventDefault">
1313
External navigation
1414
<span __internal_preventDefault_onclick="@descendantPreventDefault">[Descendant element]</span>
1515
</a>
1616
</p>
1717
<p __internal_preventDefault_onclick="@ancestorPreventDefault">
18-
<a href="Other" __internal_preventDefault_onclick="@targetPreventDefault">
18+
<a id="internal-navigation" href="Other" __internal_preventDefault_onclick="@targetPreventDefault">
1919
Internal navigation
2020
<span __internal_preventDefault_onclick="@descendantPreventDefault">[Descendant element]</span>
2121
</a>
@@ -28,7 +28,7 @@
2828
<label><input class="descendant" type="checkbox" @bind="descendantPreventDefault" /> Descendant</label>
2929

3030
@* So we can assert that navigation didn't happen *@
31-
<button class="counter" @onclick="@(() => counter++)">Counter: @counter</button>
31+
<button class="counter-button" @onclick="@(() => counter++)">Counter: @counter</button>
3232
</fieldset>
3333

3434
@code {

0 commit comments

Comments
 (0)