From 5a819c1c879c3d2669e4722f6a3e1120b56bfbb0 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 27 May 2017 16:50:05 +0200 Subject: [PATCH] Make Window.OpenWindows readonly And hack around the fact that it's static in unit tests. --- src/Avalonia.Controls/Window.cs | 4 ++-- tests/Avalonia.Controls.UnitTests/WindowTests.cs | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.Controls/Window.cs b/src/Avalonia.Controls/Window.cs index 39f9a8d272..3802f2b6ea 100644 --- a/src/Avalonia.Controls/Window.cs +++ b/src/Avalonia.Controls/Window.cs @@ -47,12 +47,12 @@ namespace Avalonia.Controls /// public class Window : WindowBase, IStyleable, IFocusScope, ILayoutRoot, INameScope { - private static IList s_windows = new List(); + private static List s_windows = new List(); /// /// Retrieves an enumeration of all Windows in the currently running application. /// - public static IList OpenWindows => s_windows; + public static IReadOnlyList OpenWindows => s_windows; /// /// Defines the property. diff --git a/tests/Avalonia.Controls.UnitTests/WindowTests.cs b/tests/Avalonia.Controls.UnitTests/WindowTests.cs index d2b882310d..e0dd908bbb 100644 --- a/tests/Avalonia.Controls.UnitTests/WindowTests.cs +++ b/tests/Avalonia.Controls.UnitTests/WindowTests.cs @@ -4,6 +4,7 @@ // // ----------------------------------------------------------------------- +using System.Collections.Generic; using Avalonia.Platform; using Avalonia.UnitTests; using Moq; @@ -120,13 +121,12 @@ namespace Avalonia.Controls.UnitTests { using (UnitTestApplication.Start(TestServices.StyledWindow)) { + ClearOpenWindows(); var window = new Window(); window.Show(); Assert.Equal(new[] { window }, Window.OpenWindows); - - window.Close(); } } @@ -135,6 +135,7 @@ namespace Avalonia.Controls.UnitTests { using (UnitTestApplication.Start(TestServices.StyledWindow)) { + ClearOpenWindows(); var window = new Window(); window.Show(); @@ -152,6 +153,7 @@ namespace Avalonia.Controls.UnitTests { using (UnitTestApplication.Start(TestServices.StyledWindow)) { + ClearOpenWindows(); var window = new Window(); window.Show(); @@ -173,6 +175,7 @@ namespace Avalonia.Controls.UnitTests using (UnitTestApplication.Start(services)) { + ClearOpenWindows(); var window = new Window(); window.Show(); @@ -181,5 +184,12 @@ namespace Avalonia.Controls.UnitTests Assert.Empty(Window.OpenWindows); } } + + private void ClearOpenWindows() + { + // HACK: We really need a decent way to have "statics" that can be scoped to + // AvaloniaLocator scopes. + ((IList)Window.OpenWindows).Clear(); + } } }