Browse Source

Update NUnit to v4 (#20372)

pull/20424/head
Julien Lebosquain 1 month ago
committed by GitHub
parent
commit
2fd35c585d
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 3
      src/Headless/Avalonia.Headless.NUnit/Avalonia.Headless.NUnit.csproj
  2. 4
      tests/Avalonia.Headless.NUnit.PerAssembly.UnitTests/Avalonia.Headless.NUnit.PerAssembly.UnitTests.csproj
  3. 4
      tests/Avalonia.Headless.NUnit.PerTest.UnitTests/Avalonia.Headless.NUnit.PerTest.UnitTests.csproj
  4. 52
      tests/Avalonia.Headless.UnitTests/AssertHelper.cs
  5. 16
      tests/Avalonia.Headless.UnitTests/InputTests.cs
  6. 18
      tests/Avalonia.Headless.UnitTests/IsolationTests.cs
  7. 4
      tests/Avalonia.Headless.UnitTests/LeakTests.cs
  8. 30
      tests/Avalonia.Headless.UnitTests/RenderingTests.cs
  9. 12
      tests/Avalonia.Headless.UnitTests/ServicesTests.cs
  10. 14
      tests/Avalonia.Headless.UnitTests/ThreadingTests.cs

3
src/Headless/Avalonia.Headless.NUnit/Avalonia.Headless.NUnit.csproj

@ -5,8 +5,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<!-- Use lower minor version, as it is supposed to be compatible --> <PackageReference Include="NUnit" Version="4.4.0" />
<PackageReference Include="NUnit" Version="3.13.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

4
tests/Avalonia.Headless.NUnit.PerAssembly.UnitTests/Avalonia.Headless.NUnit.PerAssembly.UnitTests.csproj

@ -12,8 +12,8 @@
<Import Project="..\..\build\SharedVersion.props" /> <Import Project="..\..\build\SharedVersion.props" />
<ItemGroup> <ItemGroup>
<PackageReference Include="NUnit" Version="3.13.3" /> <PackageReference Include="NUnit" Version="4.4.0" />
<PackageReference Include="NUnit3TestAdapter" Version="5.2.0" /> <PackageReference Include="NUnit3TestAdapter" Version="6.0.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
</ItemGroup> </ItemGroup>

4
tests/Avalonia.Headless.NUnit.PerTest.UnitTests/Avalonia.Headless.NUnit.PerTest.UnitTests.csproj

@ -12,8 +12,8 @@
<Import Project="..\..\build\SharedVersion.props" /> <Import Project="..\..\build\SharedVersion.props" />
<ItemGroup> <ItemGroup>
<PackageReference Include="NUnit" Version="3.13.3" /> <PackageReference Include="NUnit" Version="4.4.0" />
<PackageReference Include="NUnit3TestAdapter" Version="5.2.0" /> <PackageReference Include="NUnit3TestAdapter" Version="6.0.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
</ItemGroup> </ItemGroup>

52
tests/Avalonia.Headless.UnitTests/AssertHelper.cs

@ -0,0 +1,52 @@
#nullable enable
namespace Avalonia.Headless.UnitTests;
internal static class AssertHelper
{
public static void True(bool condition, string? message = null)
{
#if NUNIT
Assert.That(condition, Is.True, message);
#elif XUNIT
Assert.True(condition, message);
#endif
}
public static void False(bool condition, string? message = null)
{
#if NUNIT
Assert.That(condition, Is.False, message);
#elif XUNIT
Assert.False(condition, message);
#endif
}
public static void NotNull(object? value)
{
#if NUNIT
Assert.That(value, Is.Not.Null);
#elif XUNIT
Assert.NotNull(value);
#endif
}
public static void Equal<T>(T expected, T actual)
{
#if NUNIT
Assert.That(expected, Is.EqualTo(actual));
#elif XUNIT
Assert.Equal(expected, actual);
#endif
}
public static void Same(object? expected, object? actual)
{
#if NUNIT
Assert.That(expected, Is.SameAs(actual));
#elif XUNIT
Assert.Same(expected, actual);
#endif
}
}

16
tests/Avalonia.Headless.UnitTests/InputTests.cs

@ -34,13 +34,13 @@ public class InputTests
} }
#if NUNIT #if NUNIT
[AvaloniaTest, Timeout(10000)] [AvaloniaTest]
#elif XUNIT #elif XUNIT
[AvaloniaFact] [AvaloniaFact]
#endif #endif
public void Should_Click_Button_On_Window() public void Should_Click_Button_On_Window()
{ {
Assert.True(_setupApp == Application.Current); AssertHelper.Same(_setupApp, Application.Current);
var buttonClicked = false; var buttonClicked = false;
var button = new Button var button = new Button
{ {
@ -56,11 +56,11 @@ public class InputTests
_window.MouseDown(new Point(50, 50), MouseButton.Left); _window.MouseDown(new Point(50, 50), MouseButton.Left);
_window.MouseUp(new Point(50, 50), MouseButton.Left); _window.MouseUp(new Point(50, 50), MouseButton.Left);
Assert.True(buttonClicked); AssertHelper.True(buttonClicked);
} }
#if NUNIT #if NUNIT
[AvaloniaTest, Timeout(10000)] [AvaloniaTest]
#elif XUNIT #elif XUNIT
[AvaloniaFact] [AvaloniaFact]
#endif #endif
@ -69,11 +69,11 @@ public class InputTests
var newWindowPosition = new PixelPoint(100, 150); var newWindowPosition = new PixelPoint(100, 150);
_window.Position = newWindowPosition; _window.Position = newWindowPosition;
_window.Show(); _window.Show();
Assert.True(_window.Position == newWindowPosition); AssertHelper.Equal(newWindowPosition, _window.Position);
} }
#if NUNIT #if NUNIT
[AvaloniaTest, Timeout(10000)] [AvaloniaTest]
#elif XUNIT #elif XUNIT
[AvaloniaFact] [AvaloniaFact]
#endif #endif
@ -100,7 +100,7 @@ public class InputTests
_window.MouseDown(translatePoint.Value, MouseButton.Left, RawInputModifiers.None); _window.MouseDown(translatePoint.Value, MouseButton.Left, RawInputModifiers.None);
_window.MouseUp(translatePoint.Value, MouseButton.Left, RawInputModifiers.None); _window.MouseUp(translatePoint.Value, MouseButton.Left, RawInputModifiers.None);
Assert.True(clickCount == 1); AssertHelper.Equal(1, clickCount);
} }
#if NUNIT #if NUNIT
@ -110,7 +110,7 @@ public class InputTests
public void Dispose() public void Dispose()
#endif #endif
{ {
Assert.True(_setupApp == Application.Current); AssertHelper.Same(_setupApp, Application.Current);
Dispatcher.UIThread.VerifyAccess(); Dispatcher.UIThread.VerifyAccess();
_window.Close(); _window.Close();

18
tests/Avalonia.Headless.UnitTests/IsolationTests.cs

@ -10,7 +10,7 @@ public class IsolationTests
private static WeakReference<Dispatcher> s_previousDispatcherRef; private static WeakReference<Dispatcher> s_previousDispatcherRef;
#if NUNIT #if NUNIT
[AvaloniaTheory, Timeout(10000)] [AvaloniaTheory]
[TestCase(1), TestCase(2), TestCase(3)] [TestCase(1), TestCase(2), TestCase(3)]
#elif XUNIT #elif XUNIT
[AvaloniaTheory] [AvaloniaTheory]
@ -37,23 +37,23 @@ public class IsolationTests
GC.WaitForPendingFinalizers(); GC.WaitForPendingFinalizers();
GC.Collect(); GC.Collect();
Assert.False(s_previousAppRef.TryGetTarget(out var previousApp), AssertHelper.False(s_previousAppRef.TryGetTarget(out var previousApp),
"Previous Application instance should have been collected."); "Previous Application instance should have been collected.");
Assert.False(s_previousDispatcherRef.TryGetTarget(out var previousDispatcher), AssertHelper.False(s_previousDispatcherRef.TryGetTarget(out var previousDispatcher),
"Previous Dispatcher instance should have been collected."); "Previous Dispatcher instance should have been collected.");
Assert.False(previousApp == currentApp); AssertHelper.False(previousApp == currentApp);
Assert.False(previousDispatcher == currentDispatcher); AssertHelper.False(previousDispatcher == currentDispatcher);
} }
else if (isolationLevel == AvaloniaTestIsolationLevel.PerAssembly) else if (isolationLevel == AvaloniaTestIsolationLevel.PerAssembly)
{ {
Assert.True(s_previousAppRef.TryGetTarget(out var previousApp), AssertHelper.True(s_previousAppRef.TryGetTarget(out var previousApp),
"Previous Application instance should still be alive."); "Previous Application instance should still be alive.");
Assert.True(s_previousDispatcherRef.TryGetTarget(out var previousDispatcher), AssertHelper.True(s_previousDispatcherRef.TryGetTarget(out var previousDispatcher),
"Previous Dispatcher instance should still be alive."); "Previous Dispatcher instance should still be alive.");
Assert.True(previousApp == currentApp); AssertHelper.True(previousApp == currentApp);
Assert.True(previousDispatcher == currentDispatcher); AssertHelper.True(previousDispatcher == currentDispatcher);
} }
else else
{ {

4
tests/Avalonia.Headless.UnitTests/LeakTests.cs

@ -16,7 +16,7 @@ public class LeakTests
#if NUNIT #if NUNIT
[TestCaseSource(nameof(TestData))] [TestCaseSource(nameof(TestData))]
[AvaloniaTest, Timeout(10000)] [AvaloniaTest]
#elif XUNIT #elif XUNIT
[MemberData(nameof(TestData))] [MemberData(nameof(TestData))]
[AvaloniaTheory] [AvaloniaTheory]
@ -45,7 +45,7 @@ public class LeakTests
// Either previous font manager is collected (IsAlive == false), or it is the same as current (shared isolation mode). // Either previous font manager is collected (IsAlive == false), or it is the same as current (shared isolation mode).
if (s_previousFontManager is not null && s_previousFontManager.Target != fontManager.Target) if (s_previousFontManager is not null && s_previousFontManager.Target != fontManager.Target)
{ {
Assert.False(s_previousFontManager.IsAlive); AssertHelper.False(s_previousFontManager.IsAlive);
} }
s_previousFontManager = fontManager; s_previousFontManager = fontManager;

30
tests/Avalonia.Headless.UnitTests/RenderingTests.cs

@ -1,18 +1,16 @@
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Threading.Tasks; using System.Threading.Tasks;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Controls.Shapes;
using Avalonia.Layout; using Avalonia.Layout;
using Avalonia.Media; using Avalonia.Media;
using Avalonia.Rendering.Composition; using Avalonia.Rendering.Composition;
using Avalonia.Threading;
namespace Avalonia.Headless.UnitTests; namespace Avalonia.Headless.UnitTests;
public class RenderingTests public class RenderingTests
{ {
#if NUNIT #if NUNIT
[AvaloniaTest, Timeout(10000)] [AvaloniaTest]
#elif XUNIT #elif XUNIT
[AvaloniaFact] [AvaloniaFact]
#endif #endif
@ -37,11 +35,11 @@ public class RenderingTests
var frame = window.CaptureRenderedFrame(); var frame = window.CaptureRenderedFrame();
Assert.NotNull(frame); AssertHelper.NotNull(frame);
} }
#if NUNIT #if NUNIT
[AvaloniaTest, Timeout(10000)] [AvaloniaTest]
#elif XUNIT #elif XUNIT
[AvaloniaFact] [AvaloniaFact]
#endif #endif
@ -73,11 +71,11 @@ public class RenderingTests
var frame = window.CaptureRenderedFrame(); var frame = window.CaptureRenderedFrame();
Assert.NotNull(frame); AssertHelper.NotNull(frame);
} }
#if NUNIT #if NUNIT
[AvaloniaTest, Timeout(10000)] [AvaloniaTest]
#elif XUNIT #elif XUNIT
[AvaloniaFact] [AvaloniaFact]
#endif #endif
@ -104,11 +102,11 @@ public class RenderingTests
var frame = window.CaptureRenderedFrame(); var frame = window.CaptureRenderedFrame();
Assert.NotNull(frame); AssertHelper.NotNull(frame);
} }
#if NUNIT #if NUNIT
[AvaloniaTest, Timeout(10000)] [AvaloniaTest]
#elif XUNIT #elif XUNIT
[AvaloniaFact] [AvaloniaFact]
#endif #endif
@ -136,13 +134,13 @@ public class RenderingTests
window.Show(); window.Show();
var frame = window.CaptureRenderedFrame(); var frame = window.CaptureRenderedFrame();
Assert.NotNull(frame); AssertHelper.NotNull(frame);
} }
#if NUNIT #if NUNIT
[AvaloniaTest, Timeout(10000)] [AvaloniaTest]
#elif XUNIT #elif XUNIT
[AvaloniaFact(Timeout = 10000)] [AvaloniaFact]
#endif #endif
public async Task Should_Render_To_A_Compositor_Snapshot_Capture() public async Task Should_Render_To_A_Compositor_Snapshot_Capture()
{ {
@ -164,10 +162,8 @@ public class RenderingTests
var compositionVisual = ElementComposition.GetElementVisual(window)!; var compositionVisual = ElementComposition.GetElementVisual(window)!;
var snapshot = await compositionVisual.Compositor.CreateCompositionVisualSnapshot(compositionVisual, 1); var snapshot = await compositionVisual.Compositor.CreateCompositionVisualSnapshot(compositionVisual, 1);
Assert.NotNull(snapshot); AssertHelper.NotNull(snapshot);
// ReSharper disable CompareOfFloatsByEqualityOperator AssertHelper.Equal(100, snapshot.Size.Width);
Assert.True(100 == snapshot.Size.Width); AssertHelper.Equal(100, snapshot.Size.Height);
Assert.True(100 == snapshot.Size.Height);
// ReSharper restore CompareOfFloatsByEqualityOperator
} }
} }

12
tests/Avalonia.Headless.UnitTests/ServicesTests.cs

@ -1,17 +1,11 @@
using System;
using System.Reactive.Disposables;
using System.Threading;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Layout;
using Avalonia.Threading;
namespace Avalonia.Headless.UnitTests; namespace Avalonia.Headless.UnitTests;
public class ServicesTests public class ServicesTests
{ {
#if NUNIT #if NUNIT
[AvaloniaTest, Timeout(10000)] [AvaloniaTest]
#elif XUNIT #elif XUNIT
[AvaloniaFact] [AvaloniaFact]
#endif #endif
@ -19,11 +13,11 @@ public class ServicesTests
{ {
var window = new Window(); var window = new Window();
var screens = window.Screens; var screens = window.Screens;
Assert.NotNull(screens); AssertHelper.NotNull(screens);
var currentScreenFromWindow = screens.ScreenFromWindow(window); var currentScreenFromWindow = screens.ScreenFromWindow(window);
var currentScreenFromVisual = screens.ScreenFromVisual(window); var currentScreenFromVisual = screens.ScreenFromVisual(window);
Assert.True(ReferenceEquals(currentScreenFromWindow, currentScreenFromVisual)); AssertHelper.Same(currentScreenFromWindow, currentScreenFromVisual);
} }
} }

14
tests/Avalonia.Headless.UnitTests/ThreadingTests.cs

@ -10,7 +10,7 @@ namespace Avalonia.Headless.UnitTests;
public class ThreadingTests public class ThreadingTests
{ {
#if NUNIT #if NUNIT
[AvaloniaTest, Timeout(10000)] [AvaloniaTest]
#elif XUNIT #elif XUNIT
[AvaloniaFact] [AvaloniaFact]
#endif #endif
@ -31,20 +31,20 @@ public class ThreadingTests
} }
#if NUNIT #if NUNIT
[AvaloniaTheory, Timeout(10000), TestCase(1), TestCase(10), TestCase(100)] [AvaloniaTheory, TestCase(1), TestCase(10), TestCase(100)]
#elif XUNIT #elif XUNIT
[AvaloniaTheory(Timeout = 10000), InlineData(1), InlineData(10), InlineData(100)] [AvaloniaTheory, InlineData(1), InlineData(10), InlineData(100)]
#endif #endif
public async Task DispatcherTimer_Works_On_The_Same_Thread(int interval) public async Task DispatcherTimer_Works_On_The_Same_Thread(int interval)
{ {
Assert.NotNull(SynchronizationContext.Current); AssertHelper.NotNull(SynchronizationContext.Current);
ValidateTestContext(); ValidateTestContext();
var currentThread = Thread.CurrentThread; var currentThread = Thread.CurrentThread;
await Task.Delay(100); await Task.Delay(100);
ValidateTestContext(); ValidateTestContext();
Assert.True(currentThread == Thread.CurrentThread); AssertHelper.Same(currentThread, Thread.CurrentThread);
var tcs = new TaskCompletionSource(); var tcs = new TaskCompletionSource();
@ -53,7 +53,7 @@ public class ThreadingTests
try try
{ {
ValidateTestContext(); ValidateTestContext();
Assert.True(currentThread == Thread.CurrentThread); AssertHelper.Same(currentThread, Thread.CurrentThread);
tcs.SetResult(); tcs.SetResult();
} }
catch (Exception ex) catch (Exception ex)
@ -70,7 +70,7 @@ public class ThreadingTests
#if NUNIT #if NUNIT
var testName = TestContext.CurrentContext.Test.Name; var testName = TestContext.CurrentContext.Test.Name;
// Test.Name also includes parameters. // Test.Name also includes parameters.
Assert.AreEqual(testName.Split('(').First(), runningMethodName); AssertHelper.Equal(testName.Split('(').First(), runningMethodName);
#endif #endif
} }
} }

Loading…
Cancel
Save