Browse Source

More scoping for tests

Nikita Tsukanov 2 years ago
parent
commit
b56bf1c527

+ 5 - 0
src/Avalonia.Base/Threading/Dispatcher.Queue.cs

@@ -83,6 +83,11 @@ public partial class Dispatcher
         {
         }
     }
+
+    internal static void ResetBeforeUnitTests()
+    {
+        s_uiThread = null;
+    }
     
     internal static void ResetForUnitTests()
     {

+ 1 - 1
tests/Avalonia.Base.UnitTests/Rendering/CompositorTestsBase.cs

@@ -22,7 +22,7 @@ using Xunit;
 
 namespace Avalonia.Base.UnitTests.Rendering;
 
-public class CompositorTestsBase
+public class CompositorTestsBase : ScopedTestBase
 {
     protected class CompositorCanvas : CompositorTestServices
     {

+ 7 - 5
tests/Avalonia.Markup.Xaml.UnitTests/XamlTestBase.cs

@@ -17,6 +17,13 @@ namespace Avalonia.Markup.Xaml.UnitTests
         {
             var _ = typeof(Binding);
             GC.KeepAlive(typeof(ItemsRepeater).Assembly);
+        }
+    }
+    
+    public class XamlTestBase : ScopedTestBase
+    {
+        public XamlTestBase()
+        {
             if (AvaloniaLocator.Current.GetService<AvaloniaXamlLoader.IRuntimeXamlLoader>() == null)
                 AvaloniaLocator.CurrentMutable.Bind<AvaloniaXamlLoader.IRuntimeXamlLoader>()
                     .ToConstant(new TestXamlLoaderShim());
@@ -28,9 +35,4 @@ namespace Avalonia.Markup.Xaml.UnitTests
                 => AvaloniaRuntimeXamlLoader.Load(document, configuration);
         }
     }
-    
-    public class XamlTestBase : ScopedTestBase
-    {
-
-    }
 }

+ 4 - 0
tests/Avalonia.UnitTests/ScopedTestBase.cs

@@ -1,4 +1,5 @@
 using System;
+using Avalonia.Threading;
 
 namespace Avalonia.UnitTests;
 
@@ -8,11 +9,14 @@ public class ScopedTestBase : IDisposable
 
     public ScopedTestBase()
     {
+        AvaloniaLocator.Current = AvaloniaLocator.CurrentMutable = new AvaloniaLocator();
+        Dispatcher.ResetBeforeUnitTests();
         _scope = AvaloniaLocator.EnterScope();
     }
     
     public virtual void Dispose()
     {
+        Dispatcher.ResetForUnitTests();
         _scope.Dispose();
     }
 }