|
@@ -14,7 +14,7 @@ namespace Avalonia.Base.UnitTests.Layout
|
|
|
public class LayoutableTests_EffectiveViewportChanged
|
|
|
{
|
|
|
[Fact]
|
|
|
- public async Task EffectiveViewportChanged_Not_Raised_When_Control_Added_To_Tree()
|
|
|
+ public async Task EffectiveViewportChanged_Not_Raised_When_Control_Added_To_Tree_And_Layout_Pass_Has_Not_Run()
|
|
|
{
|
|
|
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
|
|
|
await RunOnUIThread.Execute(async () =>
|
|
@@ -34,6 +34,60 @@ namespace Avalonia.Base.UnitTests.Layout
|
|
|
Assert.Equal(0, raised);
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public async Task EffectiveViewportChanged_Raised_When_Control_Added_To_Tree_And_Layout_Pass_Has_Run()
|
|
|
+ {
|
|
|
+#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
|
|
|
+ await RunOnUIThread.Execute(async () =>
|
|
|
+#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
|
|
|
+ {
|
|
|
+ var root = CreateRoot();
|
|
|
+ var target = new Canvas();
|
|
|
+ var raised = 0;
|
|
|
+
|
|
|
+ target.EffectiveViewportChanged += (s, e) =>
|
|
|
+ {
|
|
|
+ ++raised;
|
|
|
+ };
|
|
|
+
|
|
|
+ root.Child = target;
|
|
|
+
|
|
|
+ Assert.Equal(0, raised);
|
|
|
+
|
|
|
+ await ExecuteInitialLayoutPass(root);
|
|
|
+
|
|
|
+ Assert.Equal(1, raised);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public async Task EffectiveViewportChanged_Raised_When_Root_LayedOut_And_Then_Control_Added_To_Tree_And_Layout_Pass_Runs()
|
|
|
+ {
|
|
|
+#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
|
|
|
+ await RunOnUIThread.Execute(async () =>
|
|
|
+#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
|
|
|
+ {
|
|
|
+ var root = CreateRoot();
|
|
|
+ var target = new Canvas();
|
|
|
+ var raised = 0;
|
|
|
+
|
|
|
+ target.EffectiveViewportChanged += (s, e) =>
|
|
|
+ {
|
|
|
+ ++raised;
|
|
|
+ };
|
|
|
+
|
|
|
+ await ExecuteInitialLayoutPass(root);
|
|
|
+
|
|
|
+ root.Child = target;
|
|
|
+
|
|
|
+ Assert.Equal(0, raised);
|
|
|
+
|
|
|
+ await ExecuteInitialLayoutPass(root);
|
|
|
+
|
|
|
+ Assert.Equal(1, raised);
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
[Fact]
|
|
|
public async Task EffectiveViewportChanged_Raised_Before_LayoutUpdated()
|
|
@@ -268,8 +322,11 @@ namespace Avalonia.Base.UnitTests.Layout
|
|
|
|
|
|
root.Child = parent;
|
|
|
|
|
|
- await ExecuteInitialLayoutPass(root);
|
|
|
target.EffectiveViewportChanged += (s, e) => ++raised;
|
|
|
+ await ExecuteInitialLayoutPass(root);
|
|
|
+
|
|
|
+ raised = 0; // The initial layout pass is expected to raise.
|
|
|
+
|
|
|
target.RenderTransform = new TranslateTransform { X = 8 };
|
|
|
target.InvalidateMeasure();
|
|
|
await ExecuteLayoutPass(root);
|