|
|
@@ -312,6 +312,30 @@ namespace Avalonia.Base.UnitTests.Layout
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ [Fact]
|
|
|
+ public async Task Event_Unsubscribed_While_Inside_Callback()
|
|
|
+ {
|
|
|
+ await RunOnUIThread.Execute(async () =>
|
|
|
+ {
|
|
|
+ var root = CreateRoot();
|
|
|
+ var target = new Canvas();
|
|
|
+ var raised = 0;
|
|
|
+
|
|
|
+ void OnTargetOnEffectiveViewportChanged(object s, EffectiveViewportChangedEventArgs e)
|
|
|
+ {
|
|
|
+ target.EffectiveViewportChanged -= OnTargetOnEffectiveViewportChanged;
|
|
|
+ ++raised;
|
|
|
+ }
|
|
|
+ target.EffectiveViewportChanged += OnTargetOnEffectiveViewportChanged;
|
|
|
+
|
|
|
+ root.Child = target;
|
|
|
+
|
|
|
+ await ExecuteInitialLayoutPass(root);
|
|
|
+
|
|
|
+ Assert.Equal(1, raised);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
private TestRoot CreateRoot() => new TestRoot { Width = 1200, Height = 900 };
|
|
|
|
|
|
private Task ExecuteInitialLayoutPass(TestRoot root)
|