diff --git a/tests/Perspex.Interactivity.UnitTests/InteractiveTests.cs b/tests/Perspex.Interactivity.UnitTests/InteractiveTests.cs index 3a3d47947a..c26ecf0ecb 100644 --- a/tests/Perspex.Interactivity.UnitTests/InteractiveTests.cs +++ b/tests/Perspex.Interactivity.UnitTests/InteractiveTests.cs @@ -117,6 +117,52 @@ namespace Perspex.Interactivity.UnitTests invoked); } + [Fact] + public void Handled_Bubbled_Event_Should_Not_Propogate_Further() + { + var ev = new RoutedEvent("test", RoutingStrategies.Bubble, typeof(RoutedEventArgs), typeof(TestInteractive)); + var invoked = new List(); + + EventHandler handler = (s, e) => + { + var t = (TestInteractive)s; + invoked.Add(t.Name); + e.Handled = t.Name == "2b"; + }; + + var target = CreateTree(ev, handler, RoutingStrategies.Bubble); + + var args = new RoutedEventArgs(ev, target); + target.RaiseEvent(args); + + Assert.Equal(new[] { "2b" }, invoked); + } + + [Fact] + public void Handled_Tunnelled_Event_Should_Not_Propogate_Further() + { + var ev = new RoutedEvent( + "test", + RoutingStrategies.Bubble | RoutingStrategies.Tunnel, + typeof(RoutedEventArgs), + typeof(TestInteractive)); + var invoked = new List(); + + EventHandler handler = (s, e) => + { + var t = (TestInteractive)s; + invoked.Add(t.Name); + e.Handled = t.Name == "2b"; + }; + + var target = CreateTree(ev, handler, RoutingStrategies.Bubble | RoutingStrategies.Tunnel); + + var args = new RoutedEventArgs(ev, target); + target.RaiseEvent(args); + + Assert.Equal(new[] { "1", "2b" }, invoked); + } + [Fact] public void Direct_Subscription_Should_Not_Catch_Tunneling_Or_Bubbling() {