Browse Source

Make Window.IsVisible track window visibility.

scenegraph-after-breakage
Steven Kirk 9 years ago
parent
commit
b5e93b67fe
  1. 1
      src/Avalonia.Controls/Primitives/Popup.cs
  2. 2
      src/Avalonia.Controls/TopLevel.cs
  3. 6
      src/Avalonia.Controls/Window.cs
  4. 1
      tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj
  5. 116
      tests/Avalonia.Controls.UnitTests/WindowTests.cs
  6. 2
      tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs
  7. 14
      tests/Avalonia.LeakTests/ControlTests.cs
  8. 3
      tests/Avalonia.UnitTests/TestServices.cs

1
src/Avalonia.Controls/Primitives/Popup.cs

@ -205,6 +205,7 @@ namespace Avalonia.Controls.Primitives
}
_popupRoot.Position = GetPosition();
IsVisible = true;
if (_topLevel == null && PlacementTarget != null)
{

2
src/Avalonia.Controls/TopLevel.cs

@ -59,6 +59,7 @@ namespace Avalonia.Controls
static TopLevel()
{
AffectsMeasure(ClientSizeProperty);
IsVisibleProperty.OverrideDefaultValue<TopLevel>(false);
}
/// <summary>
@ -383,6 +384,7 @@ namespace Avalonia.Controls
/// </summary>
private void HandleClosed()
{
IsVisible = false;
Closed?.Invoke(this, EventArgs.Empty);
_applicationLifecycle.OnExit -= OnApplicationExiting;
}

6
src/Avalonia.Controls/Window.cs

@ -188,6 +188,7 @@ namespace Avalonia.Controls
{
s_windows.Remove(this);
PlatformImpl.Dispose();
IsVisible = false;
}
protected override void HandleApplicationExiting()
@ -220,6 +221,8 @@ namespace Avalonia.Controls
{
PlatformImpl.Hide();
}
IsVisible = false;
}
/// <summary>
@ -236,6 +239,8 @@ namespace Avalonia.Controls
{
PlatformImpl.Show();
}
IsVisible = true;
}
/// <summary>
@ -278,6 +283,7 @@ namespace Avalonia.Controls
result.SetResult((TResult)_dialogResult);
});
IsVisible = true;
return result.Task;
}
}

1
tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj

@ -151,6 +151,7 @@
<Compile Include="Utils\AncestorFinderTests.cs" />
<Compile Include="Utils\HotKeyManagerTests.cs" />
<Compile Include="VirtualizingStackPanelTests.cs" />
<Compile Include="WindowTests.cs" />
<Compile Include="WrapPanelTests.cs" />
</ItemGroup>
<ItemGroup>

116
tests/Avalonia.Controls.UnitTests/WindowTests.cs

@ -4,33 +4,26 @@
// </copyright>
// -----------------------------------------------------------------------
using Avalonia.Layout;
using Avalonia.Platform;
using Avalonia.UnitTests;
using Moq;
using Xunit;
namespace Avalonia.Controls.UnitTests
{
using System.Reactive;
using System.Reactive.Subjects;
using Moq;
using Avalonia.Controls.Presenters;
using Avalonia.Controls.Templates;
using Avalonia.Input;
using Avalonia.Input.Raw;
using Avalonia.Layout;
using Avalonia.Platform;
using Avalonia.Rendering;
using Avalonia.Styling;
using Ploeh.AutoFixture;
using Ploeh.AutoFixture.AutoMoq;
using Splat;
using Xunit;
public class WindowTests
{
[Fact]
public void Setting_Title_Should_Set_Impl_Title()
{
using (Locator.CurrentMutable.WithResolver())
var windowImpl = new Mock<IWindowImpl>();
var services = new TestServices(
windowingPlatform: new MockWindowingPlatform(() => windowImpl.Object));
using (UnitTestApplication.Start(services))
{
var windowImpl = new Mock<IWindowImpl>();
Locator.CurrentMutable.RegisterConstant(windowImpl.Object, typeof(IWindowImpl));
AvaloniaLocator.CurrentMutable.BindToSelf(windowImpl.Object);
var target = new Window();
@ -39,5 +32,90 @@ namespace Avalonia.Controls.UnitTests
windowImpl.Verify(x => x.SetTitle("Hello World"));
}
}
[Fact]
public void IsVisible_Should_Initially_Be_False()
{
using (UnitTestApplication.Start(TestServices.MockWindowingPlatform))
{
var window = new Window();
Assert.False(window.IsVisible);
}
}
[Fact]
public void IsVisible_Should_Be_True_After_Show()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var window = new Window();
window.Show();
Assert.True(window.IsVisible);
}
}
[Fact]
public void IsVisible_Should_Be_True_After_ShowDialog()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var window = new Window();
var task = window.ShowDialog();
Assert.True(window.IsVisible);
}
}
[Fact]
public void IsVisible_Should_Be_False_Atfer_Hide()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var window = new Window();
window.Show();
window.Hide();
Assert.False(window.IsVisible);
}
}
[Fact]
public void IsVisible_Should_Be_False_Atfer_Close()
{
using (UnitTestApplication.Start(TestServices.StyledWindow))
{
var window = new Window();
window.Show();
window.Close();
Assert.False(window.IsVisible);
}
}
[Fact]
public void IsVisible_Should_Be_False_Atfer_Impl_Signals_Close()
{
var windowImpl = new Mock<IWindowImpl>();
windowImpl.SetupProperty(x => x.Closed);
var services = TestServices.StyledWindow.With(
windowingPlatform: new MockWindowingPlatform(() => windowImpl.Object));
using (UnitTestApplication.Start(services))
{
var window = new Window();
window.Show();
windowImpl.Object.Closed();
Assert.False(window.IsVisible);
}
}
}
}

2
tests/Avalonia.Layout.UnitTests/FullLayoutTests.cs

@ -56,6 +56,7 @@ namespace Avalonia.Layout.UnitTests
}
};
window.Show();
LayoutManager.Instance.ExecuteInitialLayoutPass(window);
Assert.Equal(new Size(400, 400), border.Bounds.Size);
@ -97,6 +98,7 @@ namespace Avalonia.Layout.UnitTests
}
};
window.Show();
LayoutManager.Instance.ExecuteInitialLayoutPass(window);
Assert.Equal(new Size(800, 600), window.Bounds.Size);

14
tests/Avalonia.LeakTests/ControlTests.cs

@ -41,6 +41,8 @@ namespace Avalonia.LeakTests
Content = new Canvas()
};
window.Show();
// Do a layout and make sure that Canvas gets added to visual tree.
LayoutManager.Instance.ExecuteInitialLayoutPass(window);
Assert.IsType<Canvas>(window.Presenter.Child);
@ -75,6 +77,8 @@ namespace Avalonia.LeakTests
}
};
window.Show();
// Do a layout and make sure that Canvas gets added to visual tree.
LayoutManager.Instance.ExecuteInitialLayoutPass(window);
Assert.IsType<Canvas>(window.Find<Canvas>("foo"));
@ -110,6 +114,8 @@ namespace Avalonia.LeakTests
}
};
window.Show();
// Do a layout and make sure that ScrollViewer gets added to visual tree and its
// template applied.
LayoutManager.Instance.ExecuteInitialLayoutPass(window);
@ -145,6 +151,8 @@ namespace Avalonia.LeakTests
Content = new TextBox()
};
window.Show();
// Do a layout and make sure that TextBox gets added to visual tree and its
// template applied.
LayoutManager.Instance.ExecuteInitialLayoutPass(window);
@ -187,6 +195,8 @@ namespace Avalonia.LeakTests
var textBox = (TextBox)window.Content;
textBox.Bind(TextBox.TextProperty, binding);
window.Show();
// Do a layout and make sure that TextBox gets added to visual tree and its
// Text property set.
LayoutManager.Instance.ExecuteInitialLayoutPass(window);
@ -223,6 +233,8 @@ namespace Avalonia.LeakTests
Content = textBox = new TextBox()
};
window.Show();
// Do a layout and make sure that TextBox gets added to visual tree and its
// template applied.
LayoutManager.Instance.ExecuteInitialLayoutPass(window);
@ -276,6 +288,8 @@ namespace Avalonia.LeakTests
}
};
window.Show();
// Do a layout and make sure that TreeViewItems get realized.
LayoutManager.Instance.ExecuteInitialLayoutPass(window);
Assert.Equal(1, target.ItemContainerGenerator.Containers.Count());

3
tests/Avalonia.UnitTests/TestServices.cs

@ -42,6 +42,9 @@ namespace Avalonia.UnitTests
public static readonly TestServices MockThreadingInterface = new TestServices(
threadingInterface: Mock.Of<IPlatformThreadingInterface>(x => x.CurrentThreadIsLoopThread == true));
public static readonly TestServices MockWindowingPlatform = new TestServices(
windowingPlatform: new MockWindowingPlatform());
public static readonly TestServices RealDeferredRenderer = new TestServices(
renderer: (root, loop) => new DeferredRenderer(root, loop));

Loading…
Cancel
Save