diff --git a/azure-pipelines-integrationtests.yml b/azure-pipelines-integrationtests.yml
index e1e037ed3e..8a91e8fd68 100644
--- a/azure-pipelines-integrationtests.yml
+++ b/azure-pipelines-integrationtests.yml
@@ -43,7 +43,7 @@ jobs:
inputs:
command: 'test'
projects: 'tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj'
- arguments: '-l "console;verbosity=detailed"'
+ arguments: '--no-progress'
- script: |
pkill IntegrationTestApp
@@ -94,6 +94,7 @@ jobs:
inputs:
command: 'run'
projects: 'tests/Avalonia.IntegrationTests.Win32/Avalonia.IntegrationTests.Win32.csproj'
+ arguments: '--no-progress'
- task: VSTest@2
displayName: 'Run Appium Integration Tests'
diff --git a/build/XUnit.props b/build/XUnit.props
index a5579ed761..c2ccb1fa2c 100644
--- a/build/XUnit.props
+++ b/build/XUnit.props
@@ -1,14 +1,10 @@
-
+
+
+
+
-
-
-
-
-
-
-
-
+
$(MSBuildThisFileDirectory)\avalonia.snk
diff --git a/global.json b/global.json
index 18b3e3be29..3773c7d736 100644
--- a/global.json
+++ b/global.json
@@ -3,6 +3,9 @@
"version": "10.0.101",
"rollForward": "latestFeature"
},
+ "test": {
+ "runner": "Microsoft.Testing.Platform"
+ },
"msbuild-sdks": {
"Microsoft.Build.Traversal": "4.1.0"
}
diff --git a/nukebuild/Build.cs b/nukebuild/Build.cs
index 4792aa0445..41c5cbe0cf 100644
--- a/nukebuild/Build.cs
+++ b/nukebuild/Build.cs
@@ -111,6 +111,9 @@ partial class Build : NukeBuild
DotNetTestSettings ApplySetting(DotNetTestSettings c, Configure configurator = null) =>
ApplySettingCore(c).Test.Apply(configurator);
+ DotNetRunSettings ApplySetting(DotNetRunSettings c, Configure configurator = null) =>
+ ApplySettingCore(c).Run.Apply(configurator);
+
Target Clean => _ => _.Executes(() =>
{
foreach (var buildDir in Parameters.BuildDirs)
@@ -182,7 +185,10 @@ partial class Build : NukeBuild
{
RunCoreTest(projectName, (project, tfm) =>
{
- DotNetTest(c => ApplySetting(c, project,tfm));
+ // NOTE: Nuke DotNetTest doesn't support Microsoft.Testing.Platform yet.
+ // Issue: https://github.com/nuke-build/nuke/issues/1584.
+ // However, we can easily use DotNetRun instead since MTP projects are executables.
+ DotNetRun(c => ApplySetting(c, project, tfm));
});
}
@@ -236,15 +242,17 @@ partial class Build : NukeBuild
}
}
- DotNetTestSettings ApplySetting(DotNetTestSettings settings, string project, string tfm) =>
+ DotNetRunSettings ApplySetting(DotNetRunSettings settings, string project, string tfm) =>
ApplySetting(settings)
.SetProjectFile(project)
.SetFramework(tfm)
.EnableNoBuild()
.EnableNoRestore()
+ // Disable progress output (works like terminal logger which isn't so nice in CI).
+ // See https://github.com/microsoft/testfx/issues/7056
+ .AddApplicationArguments("--no-progress")
.When(_ => Parameters.PublishTestResults, _ => _
- .SetLoggers("trx")
- .SetResultsDirectory(Parameters.TestResultsRoot));
+ .AddApplicationArguments("--report-trx", "--results-directory", Parameters.TestResultsRoot));
Target RunHtmlPreviewerTests => _ => _
.OnlyWhenStatic(() => !(Parameters.SkipTests))
diff --git a/nukebuild/DotNetConfigHelper.cs b/nukebuild/DotNetConfigHelper.cs
index 9d43261616..b5315b3f5a 100644
--- a/nukebuild/DotNetConfigHelper.cs
+++ b/nukebuild/DotNetConfigHelper.cs
@@ -7,6 +7,7 @@ public class DotNetConfigHelper
public DotNetBuildSettings Build;
public DotNetPackSettings Pack;
public DotNetTestSettings Test;
+ public DotNetRunSettings Run;
public DotNetConfigHelper(DotNetBuildSettings s)
{
@@ -23,6 +24,11 @@ public class DotNetConfigHelper
Test = s;
}
+ public DotNetConfigHelper(DotNetRunSettings s)
+ {
+ Run = s;
+ }
+
public DotNetConfigHelper AddProperty(string key, bool value) =>
AddProperty(key, value.ToString(CultureInfo.InvariantCulture).ToLowerInvariant());
public DotNetConfigHelper AddProperty(string key, string value)
@@ -30,6 +36,7 @@ public class DotNetConfigHelper
Build = Build?.AddProperty(key, value);
Pack = Pack?.AddProperty(key, value);
Test = Test?.AddProperty(key, value);
+ Run = Run?.AddProperty(key, value);
return this;
}
@@ -39,6 +46,7 @@ public class DotNetConfigHelper
Build = Build?.SetConfiguration(configuration);
Pack = Pack?.SetConfiguration(configuration);
Test = Test?.SetConfiguration(configuration);
+ Run = Run?.SetConfiguration(configuration);
return this;
}
@@ -47,10 +55,12 @@ public class DotNetConfigHelper
Build = Build?.SetVerbosity(verbosity);
Pack = Pack?.SetVerbosity(verbosity);
Test = Test?.SetVerbosity(verbosity);
+ Run = Run?.SetVerbosity(verbosity);
return this;
}
public static implicit operator DotNetConfigHelper(DotNetBuildSettings s) => new DotNetConfigHelper(s);
public static implicit operator DotNetConfigHelper(DotNetPackSettings s) => new DotNetConfigHelper(s);
public static implicit operator DotNetConfigHelper(DotNetTestSettings s) => new DotNetConfigHelper(s);
+ public static implicit operator DotNetConfigHelper(DotNetRunSettings s) => new DotNetConfigHelper(s);
}
diff --git a/tests/Avalonia.Base.UnitTests/Animation/AnimatableTests.cs b/tests/Avalonia.Base.UnitTests/Animation/AnimatableTests.cs
index fd68687c4c..339eff1302 100644
--- a/tests/Avalonia.Base.UnitTests/Animation/AnimatableTests.cs
+++ b/tests/Avalonia.Base.UnitTests/Animation/AnimatableTests.cs
@@ -127,7 +127,7 @@ namespace Avalonia.Base.UnitTests.Animation
var rect = new Rectangle() { Width = 11, };
var clock = new TestClock();
- animation.RunAsync(rect, clock);
+ animation.RunAsync(rect, clock, TestContext.Current.CancellationToken);
clock.Step(TimeSpan.Zero);
Assert.Equal(1, rect.Width);
diff --git a/tests/Avalonia.Base.UnitTests/Animation/AnimationIterationTests.cs b/tests/Avalonia.Base.UnitTests/Animation/AnimationIterationTests.cs
index 942ac148c8..28beb4f4e8 100644
--- a/tests/Avalonia.Base.UnitTests/Animation/AnimationIterationTests.cs
+++ b/tests/Avalonia.Base.UnitTests/Animation/AnimationIterationTests.cs
@@ -34,7 +34,7 @@ namespace Avalonia.Base.UnitTests.Animation
var clock = new TestClock();
- animation.RunAsync(border, clock);
+ animation.RunAsync(border, clock, TestContext.Current.CancellationToken);
clock.Step(TimeSpan.Zero);
Assert.Equal(border.Width, 0d);
@@ -69,7 +69,7 @@ namespace Avalonia.Base.UnitTests.Animation
var border = new Border() { Height = 100d, Width = 100d };
var clock = new TestClock();
- var animationRun = animation.RunAsync(border, clock);
+ var animationRun = animation.RunAsync(border, clock, TestContext.Current.CancellationToken);
border.Measure(Size.Infinity);
border.Arrange(new Rect(border.DesiredSize));
@@ -118,7 +118,7 @@ namespace Avalonia.Base.UnitTests.Animation
var clock = new TestClock();
- animation.RunAsync(border, clock);
+ animation.RunAsync(border, clock, TestContext.Current.CancellationToken);
clock.Step(TimeSpan.FromSeconds(0d));
Assert.Equal(border.Width, 0d);
@@ -167,7 +167,7 @@ namespace Avalonia.Base.UnitTests.Animation
var clock = new TestClock();
- animation.RunAsync(border, clock);
+ animation.RunAsync(border, clock, TestContext.Current.CancellationToken);
clock.Step(TimeSpan.Zero);
@@ -211,7 +211,7 @@ namespace Avalonia.Base.UnitTests.Animation
var clock = new TestClock();
- animation.RunAsync(border, clock);
+ animation.RunAsync(border, clock, TestContext.Current.CancellationToken);
clock.Step(TimeSpan.FromSeconds(0));
clock.Step(TimeSpan.FromSeconds(20));
@@ -495,7 +495,7 @@ namespace Avalonia.Base.UnitTests.Animation
};
var clock = new TestClock();
- var animationRun = animation.RunAsync(border, clock);
+ var animationRun = animation.RunAsync(border, clock, TestContext.Current.CancellationToken);
clock.Step(TimeSpan.Zero);
Assert.Equal(1, animator.CallCount);
@@ -556,7 +556,7 @@ namespace Avalonia.Base.UnitTests.Animation
};
var clock = new TestClock();
- animation.RunAsync(border, clock);
+ animation.RunAsync(border, clock, TestContext.Current.CancellationToken);
clock.Step(TimeSpan.Zero);
Assert.Equal(100.0, border.Width);
@@ -597,7 +597,7 @@ namespace Avalonia.Base.UnitTests.Animation
};
var clock = new TestClock();
- animation.RunAsync(border, clock);
+ animation.RunAsync(border, clock, TestContext.Current.CancellationToken);
clock.Step(TimeSpan.Zero);
clock.Step(TimeSpan.FromSeconds(cue));
diff --git a/tests/Avalonia.Base.UnitTests/Animation/KeySplineTests.cs b/tests/Avalonia.Base.UnitTests/Animation/KeySplineTests.cs
index 51feb9dcd0..4402c893ce 100644
--- a/tests/Avalonia.Base.UnitTests/Animation/KeySplineTests.cs
+++ b/tests/Avalonia.Base.UnitTests/Animation/KeySplineTests.cs
@@ -130,7 +130,7 @@ namespace Avalonia.Base.UnitTests.Animation
var clock = new TestClock();
- animation.RunAsync(rect, clock);
+ animation.RunAsync(rect, clock, TestContext.Current.CancellationToken);
// position is what you'd expect at end and beginning
clock.Step(TimeSpan.Zero);
@@ -185,7 +185,7 @@ namespace Avalonia.Base.UnitTests.Animation
var clock = new TestClock();
- animation.RunAsync(rect, clock);
+ animation.RunAsync(rect, clock, TestContext.Current.CancellationToken);
// position is what you'd expect at end and beginning
clock.Step(TimeSpan.Zero);
@@ -250,7 +250,7 @@ namespace Avalonia.Base.UnitTests.Animation
var clock = new TestClock();
- animation.RunAsync(rect, clock);
+ animation.RunAsync(rect, clock, TestContext.Current.CancellationToken);
clock.Step(TimeSpan.Zero);
Assert.Equal(10.0, transform.Y, 0.0001);
@@ -299,7 +299,7 @@ namespace Avalonia.Base.UnitTests.Animation
var clock = new TestClock();
- animation.RunAsync(rect, clock);
+ animation.RunAsync(rect, clock, TestContext.Current.CancellationToken);
clock.Step(TimeSpan.Zero);
Assert.Equal(50.0, transform.Y, 0.0001);
diff --git a/tests/Avalonia.Base.UnitTests/Animation/SpringTests.cs b/tests/Avalonia.Base.UnitTests/Animation/SpringTests.cs
index 43e01dc37b..489a2737c7 100644
--- a/tests/Avalonia.Base.UnitTests/Animation/SpringTests.cs
+++ b/tests/Avalonia.Base.UnitTests/Animation/SpringTests.cs
@@ -77,7 +77,7 @@ public class SpringTests
var rect = new Rectangle() { RenderTransform = rotateTransform };
var clock = new TestClock();
- animation.RunAsync(rect, clock);
+ animation.RunAsync(rect, clock, TestContext.Current.CancellationToken);
clock.Step(TimeSpan.Zero);
Assert.Equal(-2.5, rotateTransform.Angle);
diff --git a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj
index d82f42ec07..c7cb21798c 100644
--- a/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj
+++ b/tests/Avalonia.Base.UnitTests/Avalonia.Base.UnitTests.csproj
@@ -1,7 +1,7 @@
$(AvsCurrentTargetFramework)
- Library
+ Exe
true
true
diff --git a/tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_Binding.cs b/tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_Binding.cs
index 07aa864976..19ede2bbb3 100644
--- a/tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_Binding.cs
+++ b/tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_Binding.cs
@@ -985,7 +985,7 @@ namespace Avalonia.Base.UnitTests
{
target.Bind(Class1.QuxProperty, source);
- await Task.Run(() => source.OnNext(6.7));
+ await Task.Run(() => source.OnNext(6.7), TestContext.Current.CancellationToken);
}
}
diff --git a/tests/Avalonia.Base.UnitTests/AvaloniaPropertyRegistryTests.cs b/tests/Avalonia.Base.UnitTests/AvaloniaPropertyRegistryTests.cs
index 23e21c1645..696587377e 100644
--- a/tests/Avalonia.Base.UnitTests/AvaloniaPropertyRegistryTests.cs
+++ b/tests/Avalonia.Base.UnitTests/AvaloniaPropertyRegistryTests.cs
@@ -2,7 +2,6 @@ using System;
using System.Linq;
using System.Reactive.Linq;
using Xunit;
-using Xunit.Abstractions;
namespace Avalonia.Base.UnitTests
{
diff --git a/tests/Avalonia.Base.UnitTests/Composition/CompositionAnimationTests.cs b/tests/Avalonia.Base.UnitTests/Composition/CompositionAnimationTests.cs
index 85f791fe7d..cf6d7a8aee 100644
--- a/tests/Avalonia.Base.UnitTests/Composition/CompositionAnimationTests.cs
+++ b/tests/Avalonia.Base.UnitTests/Composition/CompositionAnimationTests.cs
@@ -2,6 +2,7 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
+using System.Threading.Tasks;
using Avalonia.Animation.Easings;
using Avalonia.Base.UnitTests.Rendering;
using Avalonia.Rendering;
@@ -12,6 +13,7 @@ using Avalonia.Threading;
using Avalonia.UnitTests;
using Xunit;
using Xunit.Sdk;
+using Xunit.v3;
namespace Avalonia.Base.UnitTests.Composition;
@@ -54,13 +56,19 @@ public class CompositionAnimationTests : ScopedTestBase
}
};
- public override IEnumerable
diff --git a/tests/Avalonia.Build.Tasks.UnitTest/Avalonia.Build.Tasks.UnitTest.csproj b/tests/Avalonia.Build.Tasks.UnitTest/Avalonia.Build.Tasks.UnitTest.csproj
index f136e275c1..f0c0c5b3aa 100644
--- a/tests/Avalonia.Build.Tasks.UnitTest/Avalonia.Build.Tasks.UnitTest.csproj
+++ b/tests/Avalonia.Build.Tasks.UnitTest/Avalonia.Build.Tasks.UnitTest.csproj
@@ -3,7 +3,7 @@
$(AvsCurrentTargetFramework);net481
false
- Library
+ Exe
false
true
Debug
diff --git a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj
index 8344d6389d..30cfa68c7e 100644
--- a/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj
+++ b/tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj
@@ -1,7 +1,7 @@
$(AvsCurrentTargetFramework)
- Library
+ Exe
true
diff --git a/tests/Avalonia.Controls.UnitTests/ButtonTests.cs b/tests/Avalonia.Controls.UnitTests/ButtonTests.cs
index 5309dc9f84..92bf013725 100644
--- a/tests/Avalonia.Controls.UnitTests/ButtonTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/ButtonTests.cs
@@ -103,7 +103,7 @@ namespace Avalonia.Controls.UnitTests
};
var root = new TestRoot { Child = target };
- Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded, TestContext.Current.CancellationToken);
Assert.True(target.IsEnabled);
Assert.False(target.IsEffectivelyEnabled);
@@ -341,7 +341,7 @@ namespace Avalonia.Controls.UnitTests
target.Presenter!.UpdateChild();
kd.SetFocusedElement(target, NavigationMethod.Unspecified, KeyModifiers.None);
- Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded, TestContext.Current.CancellationToken);
var accessKey = Key.A;
target.CommandParameter = true;
diff --git a/tests/Avalonia.Controls.UnitTests/CalendarDatePickerTests.cs b/tests/Avalonia.Controls.UnitTests/CalendarDatePickerTests.cs
index 21ef53d04b..9124c317b8 100644
--- a/tests/Avalonia.Controls.UnitTests/CalendarDatePickerTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/CalendarDatePickerTests.cs
@@ -33,7 +33,7 @@ namespace Avalonia.Controls.UnitTests
};
DateTime value = new DateTime(2000, 10, 10);
datePicker.SelectedDate = value;
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.True(handled);
}
}
diff --git a/tests/Avalonia.Controls.UnitTests/DatePickerTests.cs b/tests/Avalonia.Controls.UnitTests/DatePickerTests.cs
index 3ec2a3a55d..e8a8e75e66 100644
--- a/tests/Avalonia.Controls.UnitTests/DatePickerTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/DatePickerTests.cs
@@ -30,7 +30,7 @@ namespace Avalonia.Controls.UnitTests
};
DateTimeOffset value = new DateTimeOffset(2000, 10, 10, 0, 0, 0, TimeSpan.Zero);
datePicker.SelectedDate = value;
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.True(handled);
}
}
@@ -46,7 +46,7 @@ namespace Avalonia.Controls.UnitTests
DayVisible = false
};
datePicker.ApplyTemplate();
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
var desc = datePicker.GetVisualDescendants();
Assert.True(desc.Count() > 1);//Should be layoutroot grid & button
@@ -81,7 +81,7 @@ namespace Avalonia.Controls.UnitTests
MonthVisible = false
};
datePicker.ApplyTemplate();
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
var desc = datePicker.GetVisualDescendants();
Assert.True(desc.Count() > 1);//Should be layoutroot grid & button
@@ -116,7 +116,7 @@ namespace Avalonia.Controls.UnitTests
YearVisible = false
};
datePicker.ApplyTemplate();
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
var desc = datePicker.GetVisualDescendants();
Assert.True(desc.Count() > 1);//Should be layoutroot grid & button
@@ -151,7 +151,7 @@ namespace Avalonia.Controls.UnitTests
YearVisible = false
};
datePicker.ApplyTemplate();
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
var desc = datePicker.GetVisualDescendants();
Assert.True(desc.Count() > 1);//Should be layoutroot grid & button
@@ -232,7 +232,7 @@ namespace Avalonia.Controls.UnitTests
Assert.True(DataValidationErrors.GetHasErrors(datePicker));
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
datePicker.SelectedDate = new DateTimeOffset(2005, 5, 10, 11, 12, 13, TimeSpan.Zero);
Assert.True(handled);
}
diff --git a/tests/Avalonia.Controls.UnitTests/GridLengthTests.cs b/tests/Avalonia.Controls.UnitTests/GridLengthTests.cs
index d05b67c4f2..80239abb25 100644
--- a/tests/Avalonia.Controls.UnitTests/GridLengthTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/GridLengthTests.cs
@@ -118,7 +118,7 @@ namespace Avalonia.Controls.UnitTests
{
CultureInfo.CurrentCulture = culture;
Assert.Equal(result, length.ToString());
- });
+ }, TestContext.Current.CancellationToken);
}
}
}
diff --git a/tests/Avalonia.Controls.UnitTests/GridTests.cs b/tests/Avalonia.Controls.UnitTests/GridTests.cs
index 84c0596a8b..a625634ac7 100644
--- a/tests/Avalonia.Controls.UnitTests/GridTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/GridTests.cs
@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq;
using Avalonia.UnitTests;
using Xunit;
-using Xunit.Abstractions;
namespace Avalonia.Controls.UnitTests
{
diff --git a/tests/Avalonia.Controls.UnitTests/ListBoxTests.cs b/tests/Avalonia.Controls.UnitTests/ListBoxTests.cs
index 3d1bf85248..1a02f20057 100644
--- a/tests/Avalonia.Controls.UnitTests/ListBoxTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/ListBoxTests.cs
@@ -435,7 +435,7 @@ namespace Avalonia.Controls.UnitTests
items.Remove("1");
lm.ExecuteLayoutPass();
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal("30", target.ContainerFromIndex(items.Count - 1)!.DataContext);
Assert.Equal("29", target.ContainerFromIndex(items.Count - 2)!.DataContext);
@@ -462,12 +462,12 @@ namespace Avalonia.Controls.UnitTests
Prepare(target);
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
// First an item that is not index 0 must be selected.
_mouse.Click(target.Presenter!.Panel!.Children[1]);
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal(1, target.Selection.AnchorIndex);
@@ -489,7 +489,7 @@ namespace Avalonia.Controls.UnitTests
// Click item 9.
_mouse.Click(item);
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal(1, raised);
}
@@ -732,7 +732,7 @@ namespace Avalonia.Controls.UnitTests
items.Reverse();
Layout(target);
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
realized = target.GetRealizedContainers()
.Cast()
diff --git a/tests/Avalonia.Controls.UnitTests/LoadedTests.cs b/tests/Avalonia.Controls.UnitTests/LoadedTests.cs
index 8153a49a09..fd70a0ed63 100644
--- a/tests/Avalonia.Controls.UnitTests/LoadedTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/LoadedTests.cs
@@ -25,7 +25,7 @@ public class LoadedTests : ScopedTestBase
Assert.Equal(0, unloadedCount);
target.Show();
- Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded, TestContext.Current.CancellationToken);
Assert.True(target.IsLoaded);
Assert.Equal(1, loadedCount);
@@ -59,7 +59,7 @@ public class LoadedTests : ScopedTestBase
Assert.Equal(0, unloadedCount);
window.Content = target;
- Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded, TestContext.Current.CancellationToken);
Assert.True(target.IsLoaded);
Assert.Equal(1, loadedCount);
@@ -98,7 +98,7 @@ public class LoadedTests : ScopedTestBase
// Attach to another logical parent (this can actually happen outside tests with overlay popups)
((ISetLogicalParent) target).SetParent(new Window());
- Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded, TestContext.Current.CancellationToken);
// At this point, the control shouldn't have been loaded at all.
Assert.Null(target.VisualParent);
diff --git a/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs b/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs
index 3d39d371f9..35bf427bc1 100644
--- a/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs
@@ -139,7 +139,7 @@ namespace Avalonia.Controls.UnitTests
};
var root = new TestRoot { Child = target };
- Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded, TestContext.Current.CancellationToken);
Assert.True(target.IsEnabled);
Assert.False(target.IsEffectivelyEnabled);
@@ -213,7 +213,7 @@ namespace Avalonia.Controls.UnitTests
var target = new MenuItem { Command = command };
var root = new TestRoot { Child = target };
- Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded, TestContext.Current.CancellationToken);
target.CommandParameter = true;
Assert.True(target.IsEffectivelyEnabled);
@@ -239,7 +239,7 @@ namespace Avalonia.Controls.UnitTests
window.ApplyStyling();
window.ApplyTemplate();
window.Presenter!.ApplyTemplate();
- Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded, TestContext.Current.CancellationToken);
Assert.True(target.IsEffectivelyEnabled);
target.Command = command;
@@ -252,7 +252,7 @@ namespace Avalonia.Controls.UnitTests
Assert.Equal(0, canExecuteCallCount);
contextMenu.Open();
- Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded, TestContext.Current.CancellationToken);
Assert.Equal(3, canExecuteCallCount);// 3 because popup is changing logical child and moreover we need to invalidate again after the item is attached to the visual tree
command.RaiseCanExecuteChanged();
@@ -281,7 +281,7 @@ namespace Avalonia.Controls.UnitTests
window.ApplyStyling();
window.ApplyTemplate();
window.Presenter!.ApplyTemplate();
- Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded, TestContext.Current.CancellationToken);
Assert.True(target.IsEffectivelyEnabled);
target.Command = command;
Assert.Equal(0, canExecuteCallCount);
@@ -293,7 +293,7 @@ namespace Avalonia.Controls.UnitTests
Assert.Equal(0, canExecuteCallCount);
flyout.ShowAt(button);
- Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded, TestContext.Current.CancellationToken);
Assert.Equal(2, canExecuteCallCount); // 2 because we need to invalidate after the item is attached to the visual tree
command.RaiseCanExecuteChanged();
@@ -324,7 +324,7 @@ namespace Avalonia.Controls.UnitTests
window.Presenter!.ApplyTemplate();
contextMenu.Open();
- Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.Loaded, TestContext.Current.CancellationToken);
Assert.True(target.IsEffectivelyEnabled);
target.Command = command;
diff --git a/tests/Avalonia.Controls.UnitTests/Platform/ScreensTests.cs b/tests/Avalonia.Controls.UnitTests/Platform/ScreensTests.cs
index 081b9e0611..bdb104a746 100644
--- a/tests/Avalonia.Controls.UnitTests/Platform/ScreensTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/Platform/ScreensTests.cs
@@ -25,7 +25,7 @@ public class ScreensTests : ScopedTestBase
// Push 2 screens.
screens.PushNewScreens([1, 2]);
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal(2, screens.ScreenCount);
totalScreens.Add(Assert.IsType(screens.GetScreen(1)));
@@ -33,7 +33,7 @@ public class ScreensTests : ScopedTestBase
// Push 3 screens, while removing one old.
screens.PushNewScreens([2, 3, 4]);
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal(3, screens.ScreenCount);
Assert.Null(screens.GetScreen(1));
@@ -64,7 +64,7 @@ public class ScreensTests : ScopedTestBase
Assert.Empty(screens.AllScreens);
screens.PushNewScreens([1]);
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
var screen = screens.GetScreen(1);
@@ -73,7 +73,7 @@ public class ScreensTests : ScopedTestBase
Assert.Equal(new IntPtr(1), screen.TryGetPlatformHandle()!.Handle);
screens.PushNewScreens([1]);
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal(2, screen.Generation);
Assert.Equal(new IntPtr(1), screen.TryGetPlatformHandle()!.Handle);
@@ -94,7 +94,7 @@ public class ScreensTests : ScopedTestBase
screens.PushNewScreens([1, 2]);
screens.PushNewScreens([1, 2]); // OnChanged can be triggered multiple times by different events
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal(2, screens.ScreenCount);
Assert.NotEmpty(screens.AllScreens);
@@ -118,7 +118,7 @@ public class ScreensTests : ScopedTestBase
};
ThreadRunHelper.RunOnDedicatedThread(() => screens.PushNewScreens([1, 2])).GetAwaiter().GetResult();
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal(1, hasChangedTimes);
}
@@ -131,7 +131,7 @@ public class ScreensTests : ScopedTestBase
var screens = new TestScreens();
screens.PushNewScreens([1, 2]);
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
var hasChangedTimes = 0;
var screen = screens.GetScreen(2);
@@ -144,7 +144,7 @@ public class ScreensTests : ScopedTestBase
};
screens.PushNewScreens([1]);
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal(1, hasChangedTimes);
}
diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs
index 0957149927..134b1e9c5b 100644
--- a/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/Primitives/PopupTests.cs
@@ -814,7 +814,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
var window = PreparedWindow(popup);
window.Show();
popup.Open();
- Dispatcher.UIThread.RunJobs(DispatcherPriority.AfterRender);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.AfterRender, TestContext.Current.CancellationToken);
var raised = false;
if (popup.Host is PopupRoot popupRoot)
@@ -837,7 +837,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
};
}
window.Position = new PixelPoint(10, 10);
- Dispatcher.UIThread.RunJobs(DispatcherPriority.AfterRender);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.AfterRender, TestContext.Current.CancellationToken);
Assert.False(raised);
}
}
@@ -867,7 +867,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
var window = PreparedWindow(placementTarget);
window.Show();
popup.Open();
- Dispatcher.UIThread.RunJobs(DispatcherPriority.AfterRender);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.AfterRender, TestContext.Current.CancellationToken);
// The target's initial placement is (395,295) which is a 10x10 panel centered in a 800x600 window
Assert.Equal(placementTarget.Bounds, new Rect(395D, 295D, 10, 10));
@@ -898,7 +898,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
};
}
window.PlatformImpl?.Resize(new Size(700D, 500D), WindowResizeReason.Unspecified);
- Dispatcher.UIThread.RunJobs(DispatcherPriority.AfterRender);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.AfterRender, TestContext.Current.CancellationToken);
Assert.True(raised);
}
}
@@ -928,7 +928,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
var window = PreparedWindow(placementTarget);
window.Show();
popup.Open();
- Dispatcher.UIThread.RunJobs(DispatcherPriority.AfterRender);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.AfterRender, TestContext.Current.CancellationToken);
// The target's initial placement is (395,295) which is a 10x10 panel centered in a 800x600 window
Assert.Equal(placementTarget.Bounds, new Rect(395D, 295D, 10, 10));
@@ -954,7 +954,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
};
}
window.PlatformImpl?.Resize(new Size(700D, 500D), WindowResizeReason.Unspecified);
- Dispatcher.UIThread.RunJobs(DispatcherPriority.AfterRender);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.AfterRender, TestContext.Current.CancellationToken);
Assert.False(raised);
}
}
@@ -983,7 +983,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
var window = PreparedWindow(placementTarget);
window.Show();
popup.Open();
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
// The target's initial placement is (395,295) which is a 10x10 panel centered in a 800x600 window
Assert.Equal(placementTarget.Bounds, new Rect(395D, 295D, 10, 10));
@@ -1013,7 +1013,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
};
}
placementTarget.Margin = new Thickness(10, 0, 0, 0);
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.True(raised);
}
}
@@ -1043,7 +1043,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
var window = PreparedWindow(placementTarget);
window.Show();
popup.Open();
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
// The target's initial placement is (395,295) which is a 10x10 panel centered in a 800x600 window
Assert.Equal(placementTarget.Bounds, new Rect(395D, 295D, 10, 10));
@@ -1069,7 +1069,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
};
}
placementTarget.Margin = new Thickness(10, 0, 0, 0);
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.False(raised);
}
}
@@ -1240,7 +1240,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
root.LayoutManager.ExecuteInitialLayoutPass();
popup.Open();
- Dispatcher.UIThread.RunJobs(DispatcherPriority.AfterRender);
+ Dispatcher.UIThread.RunJobs(DispatcherPriority.AfterRender, TestContext.Current.CancellationToken);
// X: Adorned Canvas.Left + Adorner Margin Left + Adorner Width
// Y: Adorned Canvas.Top + Adorner Margin Top + Adorner Height
diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs
index adaa76efb0..814bf00344 100644
--- a/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs
@@ -1649,7 +1649,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
Prepare(target);
target.AddHandler(Control.RequestBringIntoViewEvent, (s, e) => raised = true);
target.SelectedIndex = 2;
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.True(raised);
}
@@ -1676,7 +1676,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
target.AddHandler(Control.RequestBringIntoViewEvent, (s, e) => raised = true);
target.SelectedIndex = 2;
Prepare(target);
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.True(raised);
}
@@ -1750,7 +1750,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
root.Child = null;
target.SelectedIndex = 1;
root.Child = target;
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.True(raised);
}
@@ -1811,11 +1811,11 @@ namespace Avalonia.Controls.UnitTests.Primitives
var raised = false;
target.AddHandler(Control.RequestBringIntoViewEvent, (s, e) => raised = true);
target.SelectedIndex = 2;
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.False(raised);
target.AutoScrollToSelectedItem = true;
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.True(raised);
}
diff --git a/tests/Avalonia.Controls.UnitTests/TimePickerTests.cs b/tests/Avalonia.Controls.UnitTests/TimePickerTests.cs
index 5541994f51..5877b6edfc 100644
--- a/tests/Avalonia.Controls.UnitTests/TimePickerTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/TimePickerTests.cs
@@ -30,7 +30,7 @@ namespace Avalonia.Controls.UnitTests
};
TimeSpan value = TimeSpan.FromHours(10);
timePicker.SelectedTime = value;
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.True(handled);
}
}
@@ -249,7 +249,7 @@ namespace Avalonia.Controls.UnitTests
Assert.True(DataValidationErrors.GetHasErrors(timePicker));
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
timePicker.SelectedTime = new TimeSpan(11, 12, 13);
Assert.True(handled);
}
diff --git a/tests/Avalonia.Controls.UnitTests/TransitioningContentControlTests.cs b/tests/Avalonia.Controls.UnitTests/TransitioningContentControlTests.cs
index ad22824333..b604ad2cfc 100644
--- a/tests/Avalonia.Controls.UnitTests/TransitioningContentControlTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/TransitioningContentControlTests.cs
@@ -9,6 +9,7 @@ using Avalonia.Controls.Templates;
using Avalonia.Headless;
using Avalonia.Layout;
using Avalonia.Platform;
+using Avalonia.Threading;
using Avalonia.UnitTests;
using Avalonia.VisualTree;
using Xunit;
diff --git a/tests/Avalonia.Controls.UnitTests/Utils/HotKeyManagerTests.cs b/tests/Avalonia.Controls.UnitTests/Utils/HotKeyManagerTests.cs
index d2ed78afaf..3611e06e48 100644
--- a/tests/Avalonia.Controls.UnitTests/Utils/HotKeyManagerTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/Utils/HotKeyManagerTests.cs
@@ -53,7 +53,7 @@ namespace Avalonia.Controls.UnitTests.Utils
}
[Theory]
- [MemberData(nameof(ElementsFactory), parameters: true)]
+ [MemberData(nameof(ElementsFactory), arguments: true)]
public void HotKeyManager_Should_Use_CommandParameter(string factoryName, Factory factory)
{
using (AvaloniaLocator.EnterScope())
@@ -98,7 +98,7 @@ namespace Avalonia.Controls.UnitTests.Utils
[Theory]
- [MemberData(nameof(ElementsFactory), parameters: true)]
+ [MemberData(nameof(ElementsFactory), arguments: true)]
public void HotKeyManager_Should_Do_Not_Executed_When_IsEnabled_False(string factoryName, Factory factory)
{
using (AvaloniaLocator.EnterScope())
@@ -141,7 +141,7 @@ namespace Avalonia.Controls.UnitTests.Utils
}
[Theory]
- [MemberData(nameof(ElementsFactory), parameters:false)]
+ [MemberData(nameof(ElementsFactory), arguments:false)]
public void HotKeyManager_Should_Invoke_Event_Click_When_Command_Is_Null(string factoryName, Factory factory)
{
using (AvaloniaLocator.EnterScope())
@@ -197,7 +197,7 @@ namespace Avalonia.Controls.UnitTests.Utils
}
[Theory]
- [MemberData(nameof(ElementsFactory), parameters: true)]
+ [MemberData(nameof(ElementsFactory), arguments: true)]
public void HotKeyManager_Should_Not_Invoke_Event_Click_When_Command_Is_Not_Null(string factoryName, Factory factory)
{
using (AvaloniaLocator.EnterScope())
diff --git a/tests/Avalonia.Controls.UnitTests/WindowTests.cs b/tests/Avalonia.Controls.UnitTests/WindowTests.cs
index 9bcd2e3b0c..2ec0b7f80d 100644
--- a/tests/Avalonia.Controls.UnitTests/WindowTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/WindowTests.cs
@@ -718,7 +718,7 @@ namespace Avalonia.Controls.UnitTests
target.Width = 120;
target.Height = 70;
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal(1, child.MeasureSizes.Count);
Assert.Equal(new Size(120, 70), child.MeasureSizes[0]);
diff --git a/tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.csproj b/tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.csproj
index 47d3de264f..4e7f7a641a 100644
--- a/tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.csproj
+++ b/tests/Avalonia.DesignerSupport.Tests/Avalonia.DesignerSupport.Tests.csproj
@@ -1,7 +1,7 @@
$(AvsCurrentTargetFramework)
- Library
+ Exe
$(MSBuildThisFileDirectory)Remote/HtmlTransport/webapp
diff --git a/tests/Avalonia.DesignerSupport.Tests/DesignerSupportTests.cs b/tests/Avalonia.DesignerSupport.Tests/DesignerSupportTests.cs
index cc9ec89c4a..ea4d1ed8e8 100644
--- a/tests/Avalonia.DesignerSupport.Tests/DesignerSupportTests.cs
+++ b/tests/Avalonia.DesignerSupport.Tests/DesignerSupportTests.cs
@@ -13,21 +13,20 @@ using Avalonia.Remote.Protocol;
using Avalonia.Remote.Protocol.Designer;
using Avalonia.Remote.Protocol.Viewport;
using Xunit;
-using Xunit.Extensions;
namespace Avalonia.DesignerSupport.Tests
{
public class DesignerSupportTests
{
private const string DesignerAppPath = "../../../../../src/tools/Avalonia.Designer.HostApp/bin/$BUILD/$TFM/Avalonia.Designer.HostApp.dll";
- private readonly Xunit.Abstractions.ITestOutputHelper outputHelper;
+ private readonly ITestOutputHelper outputHelper;
- public DesignerSupportTests(Xunit.Abstractions.ITestOutputHelper outputHelper)
+ public DesignerSupportTests(ITestOutputHelper outputHelper)
{
this.outputHelper = outputHelper;
}
- [SkippableTheory,
+ [Theory,
InlineData(
@"..\..\..\..\..\tests/Avalonia.DesignerSupport.TestApp/bin/$BUILD/$TFM/",
"Avalonia.DesignerSupport.TestApp",
@@ -63,7 +62,7 @@ namespace Avalonia.DesignerSupport.Tests
xamlFile = Path.GetFullPath(xamlFile.Replace('\\', Path.DirectorySeparatorChar));
if (method == "win32")
- Skip.IfNot(RuntimeInformation.IsOSPlatform(OSPlatform.Windows));
+ Assert.SkipUnless(RuntimeInformation.IsOSPlatform(OSPlatform.Windows), "Windows-only");
var xaml = File.ReadAllText(xamlFile);
string buildType;
diff --git a/tests/Avalonia.DesignerSupport.Tests/RemoteProtocolTests.cs b/tests/Avalonia.DesignerSupport.Tests/RemoteProtocolTests.cs
index 92920d3417..f1b9e3813a 100644
--- a/tests/Avalonia.DesignerSupport.Tests/RemoteProtocolTests.cs
+++ b/tests/Avalonia.DesignerSupport.Tests/RemoteProtocolTests.cs
@@ -139,7 +139,7 @@ namespace Avalonia.DesignerSupport.Tests
foreach (var p in t.GetProperties())
p.SetValue(o, GetRandomValue(p.PropertyType, $"{t.FullName}.{p.Name}"));
- _client.Send(o).Wait(TimeoutInMs);
+ _client.Send(o).Wait(TimeoutInMs, TestContext.Current.CancellationToken);
var received = TakeServer();
Helpers.StructDiff(received, o);
@@ -199,11 +199,11 @@ namespace Avalonia.DesignerSupport.Tests
{
exceptions.Add(ex);
}
- });
+ }, TestContext.Current.CancellationToken);
tasks.Add(task);
}
- Task.WaitAll(tasks.ToArray(), TimeoutInMs * messages.Length * 10);
+ Task.WaitAll(tasks.ToArray(), TimeoutInMs * messages.Length * 10, TestContext.Current.CancellationToken);
// Verify no exceptions occurred
Assert.Empty(exceptions);
diff --git a/tests/Avalonia.Generators.Tests/InitializeComponent/InitializeComponentTests.cs b/tests/Avalonia.Generators.Tests/InitializeComponent/InitializeComponentTests.cs
index 4e98f3c207..a15039b48e 100644
--- a/tests/Avalonia.Generators.Tests/InitializeComponent/InitializeComponentTests.cs
+++ b/tests/Avalonia.Generators.Tests/InitializeComponent/InitializeComponentTests.cs
@@ -61,7 +61,7 @@ public class InitializeComponentTests
.Replace("\r", string.Empty)
.Replace("$GeneratorVersion", generatorVersion);
- CSharpSyntaxTree.ParseText(code);
+ CSharpSyntaxTree.ParseText(code, cancellationToken: TestContext.Current.CancellationToken);
Assert.Equal(expected, code);
}
}
diff --git a/tests/Avalonia.Generators.Tests/OnlyProperties/OnlyPropertiesTests.cs b/tests/Avalonia.Generators.Tests/OnlyProperties/OnlyPropertiesTests.cs
index e0db63526b..1214ab75ca 100644
--- a/tests/Avalonia.Generators.Tests/OnlyProperties/OnlyPropertiesTests.cs
+++ b/tests/Avalonia.Generators.Tests/OnlyProperties/OnlyPropertiesTests.cs
@@ -55,7 +55,7 @@ public class OnlyPropertiesTests
.Replace("\r", string.Empty)
.Replace("$GeneratorVersion", generatorVersion);
- CSharpSyntaxTree.ParseText(code);
+ CSharpSyntaxTree.ParseText(code, cancellationToken: TestContext.Current.CancellationToken);
Assert.Equal(expected, code);
}
}
diff --git a/tests/Avalonia.Headless.NUnit.PerAssembly.UnitTests/Avalonia.Headless.NUnit.PerAssembly.UnitTests.csproj b/tests/Avalonia.Headless.NUnit.PerAssembly.UnitTests/Avalonia.Headless.NUnit.PerAssembly.UnitTests.csproj
index 2eec8e6e0c..8be738c356 100644
--- a/tests/Avalonia.Headless.NUnit.PerAssembly.UnitTests/Avalonia.Headless.NUnit.PerAssembly.UnitTests.csproj
+++ b/tests/Avalonia.Headless.NUnit.PerAssembly.UnitTests/Avalonia.Headless.NUnit.PerAssembly.UnitTests.csproj
@@ -3,6 +3,8 @@
$(AvsCurrentTargetFramework)
true
$(DefineConstants);NUNIT
+ true
+ Exe
@@ -14,7 +16,6 @@
-
diff --git a/tests/Avalonia.Headless.NUnit.PerTest.UnitTests/Avalonia.Headless.NUnit.PerTest.UnitTests.csproj b/tests/Avalonia.Headless.NUnit.PerTest.UnitTests/Avalonia.Headless.NUnit.PerTest.UnitTests.csproj
index 2eec8e6e0c..8be738c356 100644
--- a/tests/Avalonia.Headless.NUnit.PerTest.UnitTests/Avalonia.Headless.NUnit.PerTest.UnitTests.csproj
+++ b/tests/Avalonia.Headless.NUnit.PerTest.UnitTests/Avalonia.Headless.NUnit.PerTest.UnitTests.csproj
@@ -3,6 +3,8 @@
$(AvsCurrentTargetFramework)
true
$(DefineConstants);NUNIT
+ true
+ Exe
@@ -14,7 +16,6 @@
-
diff --git a/tests/Avalonia.Headless.XUnit.PerAssembly.UnitTests/Avalonia.Headless.XUnit.PerAssembly.UnitTests.csproj b/tests/Avalonia.Headless.XUnit.PerAssembly.UnitTests/Avalonia.Headless.XUnit.PerAssembly.UnitTests.csproj
index 322ce6bb3a..ed0dbe6273 100644
--- a/tests/Avalonia.Headless.XUnit.PerAssembly.UnitTests/Avalonia.Headless.XUnit.PerAssembly.UnitTests.csproj
+++ b/tests/Avalonia.Headless.XUnit.PerAssembly.UnitTests/Avalonia.Headless.XUnit.PerAssembly.UnitTests.csproj
@@ -1,8 +1,10 @@
$(AvsCurrentTargetFramework)
+ Exe
true
$(DefineConstants);XUNIT
+ true
diff --git a/tests/Avalonia.Headless.XUnit.PerTest.UnitTests/Avalonia.Headless.XUnit.PerTest.UnitTests.csproj b/tests/Avalonia.Headless.XUnit.PerTest.UnitTests/Avalonia.Headless.XUnit.PerTest.UnitTests.csproj
index 322ce6bb3a..ed0dbe6273 100644
--- a/tests/Avalonia.Headless.XUnit.PerTest.UnitTests/Avalonia.Headless.XUnit.PerTest.UnitTests.csproj
+++ b/tests/Avalonia.Headless.XUnit.PerTest.UnitTests/Avalonia.Headless.XUnit.PerTest.UnitTests.csproj
@@ -1,8 +1,10 @@
$(AvsCurrentTargetFramework)
+ Exe
true
$(DefineConstants);XUNIT
+ true
diff --git a/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj b/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj
index 4ef730e426..ade9f7a531 100644
--- a/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj
+++ b/tests/Avalonia.IntegrationTests.Appium/Avalonia.IntegrationTests.Appium.csproj
@@ -2,6 +2,7 @@
$(AvsCurrentTargetFramework)
+ Exe
enable
false
@@ -29,6 +30,13 @@
+
+
+
+
+
+
+
diff --git a/tests/Avalonia.IntegrationTests.Appium/PlatformFactAttribute.cs b/tests/Avalonia.IntegrationTests.Appium/PlatformFactAttribute.cs
index 00408a83e4..cdec297218 100644
--- a/tests/Avalonia.IntegrationTests.Appium/PlatformFactAttribute.cs
+++ b/tests/Avalonia.IntegrationTests.Appium/PlatformFactAttribute.cs
@@ -1,5 +1,6 @@
#nullable enable
using System;
+using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Xunit;
@@ -16,31 +17,22 @@ namespace Avalonia
internal class PlatformFactAttribute : FactAttribute
{
- private readonly string? _reason;
- private string? _skip;
-
- public PlatformFactAttribute(TestPlatforms platforms, string? reason = null)
+ public PlatformFactAttribute(
+ TestPlatforms platforms,
+ string? reason = null,
+ [CallerFilePath] string? sourceFilePath = null,
+ [CallerLineNumber] int sourceLineNumber = -1)
+ : base(sourceFilePath, sourceLineNumber)
{
- _reason = reason;
Platforms = platforms;
+ if (!IsSupported())
+ Skip = $"Ignored on {RuntimeInformation.OSDescription}" +
+ (reason is not null ? $" reason: '{reason}'" : "");
+
}
public TestPlatforms Platforms { get; }
- public override string? Skip
- {
- get
- {
- if (_skip is not null)
- return _skip;
- if (!IsSupported())
- return $"Ignored on {RuntimeInformation.OSDescription}" +
- (_reason is not null ? $" reason: '{_reason}'" : "");
- return null;
- }
- set => _skip = value;
- }
-
private bool IsSupported()
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
diff --git a/tests/Avalonia.IntegrationTests.Appium/PlatformTheoryAttribute.cs b/tests/Avalonia.IntegrationTests.Appium/PlatformTheoryAttribute.cs
index 011ffa90fd..d755679f79 100644
--- a/tests/Avalonia.IntegrationTests.Appium/PlatformTheoryAttribute.cs
+++ b/tests/Avalonia.IntegrationTests.Appium/PlatformTheoryAttribute.cs
@@ -1,5 +1,6 @@
using System;
using System.Linq;
+using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Xunit;
@@ -7,23 +8,20 @@ namespace Avalonia.IntegrationTests.Appium
{
internal class PlatformTheoryAttribute : TheoryAttribute
{
- private string? _skip;
-
- public PlatformTheoryAttribute(TestPlatforms platforms = TestPlatforms.All) => Platforms = platforms;
-
- public TestPlatforms Platforms { get; }
-
- public override string? Skip
+ public PlatformTheoryAttribute(
+ TestPlatforms platforms = TestPlatforms.All,
+ [CallerFilePath] string? sourceFilePath = null,
+ [CallerLineNumber] int sourceLineNumber = -1) : base(sourceFilePath, sourceLineNumber)
{
- get
+ Platforms = platforms;
+ if (!IsSupported())
{
- if (_skip is not null)
- return _skip;
- return !IsSupported() ? $"Ignored on {RuntimeInformation.OSDescription}" : null;
+ Skip = $"Ignored on {RuntimeInformation.OSDescription}";
}
- set => _skip = value;
}
+ public TestPlatforms Platforms { get; }
+
private bool IsSupported()
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
diff --git a/tests/Avalonia.IntegrationTests.Win32/Avalonia.IntegrationTests.Win32.csproj b/tests/Avalonia.IntegrationTests.Win32/Avalonia.IntegrationTests.Win32.csproj
index d6ed47f393..a11ecc1fb4 100644
--- a/tests/Avalonia.IntegrationTests.Win32/Avalonia.IntegrationTests.Win32.csproj
+++ b/tests/Avalonia.IntegrationTests.Win32/Avalonia.IntegrationTests.Win32.csproj
@@ -14,8 +14,7 @@
-
-
+
diff --git a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj
index 6692fad353..0826b4babf 100644
--- a/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj
+++ b/tests/Avalonia.LeakTests/Avalonia.LeakTests.csproj
@@ -1,6 +1,7 @@
$(AvsCurrentTargetFramework)
+ Exe
diff --git a/tests/Avalonia.LeakTests/ReleaseFact.cs b/tests/Avalonia.LeakTests/ReleaseFact.cs
index dcda045811..3be490925b 100644
--- a/tests/Avalonia.LeakTests/ReleaseFact.cs
+++ b/tests/Avalonia.LeakTests/ReleaseFact.cs
@@ -1,4 +1,5 @@
-using Xunit;
+using System.Runtime.CompilerServices;
+using Xunit;
namespace Avalonia.LeakTests;
@@ -7,7 +8,10 @@ namespace Avalonia.LeakTests;
///
internal sealed class ReleaseFactAttribute : FactAttribute
{
- public ReleaseFactAttribute()
+ public ReleaseFactAttribute(
+ [CallerFilePath] string? sourceFilePath = null,
+ [CallerLineNumber] int sourceLineNumber = -1
+ ) : base(sourceFilePath, sourceLineNumber)
{
#if DEBUG
Skip = "Only runs in Release mode";
diff --git a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj
index 9cf5ebe224..0f97c22721 100644
--- a/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj
+++ b/tests/Avalonia.Markup.UnitTests/Avalonia.Markup.UnitTests.csproj
@@ -1,7 +1,7 @@
$(AvsCurrentTargetFramework)
- Library
+ Exe
true
diff --git a/tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs b/tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs
index e60f15ef95..42dc681f7c 100644
--- a/tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs
+++ b/tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs
@@ -551,7 +551,7 @@ namespace Avalonia.Markup.UnitTests.Data
}
// Forces WeakEvent compact
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal(0, source.SubscriberCount);
}
diff --git a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Indexer.cs b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Indexer.cs
index ce056ad750..a547690631 100644
--- a/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Indexer.cs
+++ b/tests/Avalonia.Markup.UnitTests/Parsers/ExpressionObserverBuilderTests_Indexer.cs
@@ -167,7 +167,7 @@ namespace Avalonia.Markup.UnitTests.Parsers
}
// Forces WeakEvent compact
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal(new[] { AvaloniaProperty.UnsetValue, "baz" }, result);
Assert.Null(((INotifyCollectionChangedDebug)data.Foo).GetCollectionChangedSubscribers());
@@ -188,7 +188,7 @@ namespace Avalonia.Markup.UnitTests.Parsers
}
// Forces WeakEvent compact
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal(new[] { "foo", "bar" }, result);
Assert.Null(((INotifyCollectionChangedDebug)data.Foo).GetCollectionChangedSubscribers());
@@ -209,7 +209,7 @@ namespace Avalonia.Markup.UnitTests.Parsers
}
// Forces WeakEvent compact
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal(new[] { "bar", "baz" }, result);
Assert.Null(((INotifyCollectionChangedDebug)data.Foo).GetCollectionChangedSubscribers());
@@ -268,7 +268,7 @@ namespace Avalonia.Markup.UnitTests.Parsers
}
// Forces WeakEvent compact
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
var expected = new[] { "bar", "bar2" };
Assert.Equal(expected, result);
diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj
index b7fd1ba2a1..739da81465 100644
--- a/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj
+++ b/tests/Avalonia.Markup.Xaml.UnitTests/Avalonia.Markup.Xaml.UnitTests.csproj
@@ -1,7 +1,7 @@
$(AvsCurrentTargetFramework)
- Library
+ Exe
true
@@ -38,15 +38,5 @@
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Method.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Method.cs
index 3310aa6008..a1ab150366 100644
--- a/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Method.cs
+++ b/tests/Avalonia.Markup.Xaml.UnitTests/Data/BindingTests_Method.cs
@@ -135,7 +135,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.Data
Assert.Equal(button.IsEffectivelyEnabled, false);
vm.Parameter = true;
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal(button.IsEffectivelyEnabled, true);
}
diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs
index 91af22b952..051129e12c 100644
--- a/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs
+++ b/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs
@@ -2012,7 +2012,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions
Assert.Equal(button.IsEffectivelyEnabled, false);
vm.Parameter = true;
- Threading.Dispatcher.UIThread.RunJobs();
+ Threading.Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
Assert.Equal(button.IsEffectivelyEnabled, true);
}
diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/XamlIlTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/XamlIlTests.cs
index a5cdcb4ac4..9118378dbd 100644
--- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/XamlIlTests.cs
+++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/XamlIlTests.cs
@@ -121,7 +121,7 @@ namespace Avalonia.Markup.Xaml.UnitTests
w.ApplyTemplate();
w.Show();
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
var itemsPresenter = ((ItemsControl)w.Content!).GetVisualChildren().FirstOrDefault();
Assert.NotNull(itemsPresenter);
diff --git a/tests/Avalonia.RenderTests.WpfCompare/Avalonia.RenderTests.WpfCompare.csproj b/tests/Avalonia.RenderTests.WpfCompare/Avalonia.RenderTests.WpfCompare.csproj
index 79f5f9f102..637bdff482 100644
--- a/tests/Avalonia.RenderTests.WpfCompare/Avalonia.RenderTests.WpfCompare.csproj
+++ b/tests/Avalonia.RenderTests.WpfCompare/Avalonia.RenderTests.WpfCompare.csproj
@@ -1,6 +1,7 @@
$(AvsCurrentWindowsTargetFramework)
+ Exe
true
enable
true
@@ -15,7 +16,7 @@
-
+
diff --git a/tests/Avalonia.RenderTests.WpfCompare/CrossFact.cs b/tests/Avalonia.RenderTests.WpfCompare/CrossFact.cs
index 8b002eb52e..d0e6e5f81a 100644
--- a/tests/Avalonia.RenderTests.WpfCompare/CrossFact.cs
+++ b/tests/Avalonia.RenderTests.WpfCompare/CrossFact.cs
@@ -1,13 +1,20 @@
-using Xunit;
+using System.Runtime.CompilerServices;
+using Xunit;
namespace Avalonia.RenderTests.WpfCompare;
public class CrossFactAttribute : StaFactAttribute
{
-
+ public CrossFactAttribute([CallerFilePath] string? sourceFilePath = null, [CallerLineNumber] int sourceLineNumber = -1)
+ : base(sourceFilePath, sourceLineNumber)
+ {
+ }
}
public class CrossTheoryAttribute : StaTheoryAttribute
{
-
+ public CrossTheoryAttribute([CallerFilePath] string? sourceFilePath = null, [CallerLineNumber] int sourceLineNumber = -1)
+ : base(sourceFilePath, sourceLineNumber)
+ {
+ }
}
diff --git a/tests/Avalonia.RenderTests/Composition/DirectFbCompositionTests.cs b/tests/Avalonia.RenderTests/Composition/DirectFbCompositionTests.cs
index cdf213d7c8..1a8d7d9272 100644
--- a/tests/Avalonia.RenderTests/Composition/DirectFbCompositionTests.cs
+++ b/tests/Avalonia.RenderTests/Composition/DirectFbCompositionTests.cs
@@ -100,7 +100,7 @@ public class DirectFbCompositionTests : TestBase
control.Measure(new Size(control.Width, control.Height));
control.Arrange(new Rect(control.DesiredSize));
renderer.Start();
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
timer.TriggerTick();
var image1 =
$"{nameof(Should_Only_Update_Clipped_Rects_When_Retained_Fb_Is_Advertised)}_advertized-{advertised}_initial";
@@ -112,7 +112,7 @@ public class DirectFbCompositionTests : TestBase
r1.Fill = Brushes.Red;
r2.Fill = Brushes.Green;
- Dispatcher.UIThread.RunJobs();
+ Dispatcher.UIThread.RunJobs(null, TestContext.Current.CancellationToken);
timer.TriggerTick();
var image2 =
$"{nameof(Should_Only_Update_Clipped_Rects_When_Retained_Fb_Is_Advertised)}_advertized-{advertised}_updated";
diff --git a/tests/Avalonia.RenderTests/TestSkip.cs b/tests/Avalonia.RenderTests/TestSkip.cs
index 88bb965f68..0381e200f9 100644
--- a/tests/Avalonia.RenderTests/TestSkip.cs
+++ b/tests/Avalonia.RenderTests/TestSkip.cs
@@ -1,5 +1,6 @@
using System;
using System.IO;
+using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Xunit;
@@ -7,7 +8,11 @@ namespace Avalonia.Skia.RenderTests
{
public class Win32Fact : FactAttribute
{
- public Win32Fact(string message)
+ public Win32Fact(
+ string message,
+ [CallerFilePath] string? sourceFilePath = null,
+ [CallerLineNumber] int sourceLineNumber = -1)
+ : base(sourceFilePath, sourceLineNumber)
{
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
Skip = message;
@@ -16,7 +21,11 @@ namespace Avalonia.Skia.RenderTests
public class Win32Theory : TheoryAttribute
{
- public Win32Theory(string message)
+ public Win32Theory(
+ string message,
+ [CallerFilePath] string? sourceFilePath = null,
+ [CallerLineNumber] int sourceLineNumber = -1)
+ : base(sourceFilePath, sourceLineNumber)
{
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
Skip = message;
diff --git a/tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj b/tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj
index da29931a79..4ebb9bfba9 100644
--- a/tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj
+++ b/tests/Avalonia.Skia.RenderTests/Avalonia.Skia.RenderTests.csproj
@@ -1,6 +1,7 @@
$(AvsCurrentTargetFramework)
+ Exe
$(DefineConstants);AVALONIA_SKIA
true
true
diff --git a/tests/Avalonia.Skia.RenderTests/CrossTestBase.cs b/tests/Avalonia.Skia.RenderTests/CrossTestBase.cs
index bbb5f4aa22..4e33616b17 100644
--- a/tests/Avalonia.Skia.RenderTests/CrossTestBase.cs
+++ b/tests/Avalonia.Skia.RenderTests/CrossTestBase.cs
@@ -14,12 +14,22 @@ namespace Avalonia.Skia.RenderTests;
class CrossFactAttribute : FactAttribute
{
-
+ public CrossFactAttribute(
+ [CallerFilePath] string? sourceFilePath = null,
+ [CallerLineNumber] int sourceLineNumber = -1
+ ) : base(sourceFilePath, sourceLineNumber)
+ {
+ }
}
class CrossTheoryAttribute : TheoryAttribute
{
-
+ public CrossTheoryAttribute(
+ [CallerFilePath] string? sourceFilePath = null,
+ [CallerLineNumber] int sourceLineNumber = -1
+ ) : base(sourceFilePath, sourceLineNumber)
+ {
+ }
}
public class CrossTestBase : IDisposable
diff --git a/tests/Avalonia.Skia.UnitTests/Avalonia.Skia.UnitTests.csproj b/tests/Avalonia.Skia.UnitTests/Avalonia.Skia.UnitTests.csproj
index 561b1131ac..184c825328 100644
--- a/tests/Avalonia.Skia.UnitTests/Avalonia.Skia.UnitTests.csproj
+++ b/tests/Avalonia.Skia.UnitTests/Avalonia.Skia.UnitTests.csproj
@@ -1,6 +1,7 @@
$(AvsCurrentTargetFramework)
+ Exe
diff --git a/tests/Avalonia.Skia.UnitTests/Win32Fact.cs b/tests/Avalonia.Skia.UnitTests/Win32Fact.cs
index 29f8a3cb74..532bfe3019 100644
--- a/tests/Avalonia.Skia.UnitTests/Win32Fact.cs
+++ b/tests/Avalonia.Skia.UnitTests/Win32Fact.cs
@@ -1,11 +1,16 @@
-using System.Runtime.InteropServices;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
using Xunit;
namespace Avalonia.Skia.UnitTests
{
internal class Win32Fact : FactAttribute
{
- public Win32Fact(string message)
+ public Win32Fact(
+ string message,
+ [CallerFilePath] string? sourceFilePath = null,
+ [CallerLineNumber] int sourceLineNumber = -1)
+ : base(sourceFilePath, sourceLineNumber)
{
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
Skip = message;
diff --git a/tests/Avalonia.Skia.UnitTests/Win32Theory.cs b/tests/Avalonia.Skia.UnitTests/Win32Theory.cs
index afab42e8ee..37638ec5c2 100644
--- a/tests/Avalonia.Skia.UnitTests/Win32Theory.cs
+++ b/tests/Avalonia.Skia.UnitTests/Win32Theory.cs
@@ -1,11 +1,15 @@
-using System.Runtime.InteropServices;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
using Xunit;
namespace Avalonia.Skia.UnitTests
{
internal class Win32Theory: TheoryAttribute
{
- public Win32Theory(string message)
+ public Win32Theory(
+ string message,
+ [CallerFilePath] string? sourceFilePath = null,
+ [CallerLineNumber] int sourceLineNumber = -1) : base(sourceFilePath, sourceLineNumber)
{
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
Skip = message;
diff --git a/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj b/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj
index 7a7aebbd9d..7076b1afc7 100644
--- a/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj
+++ b/tests/Avalonia.UnitTests/Avalonia.UnitTests.csproj
@@ -2,7 +2,7 @@
$(AvsCurrentTargetFramework)
false
- Library
+ Exe
false
true
diff --git a/tests/Avalonia.UnitTests/InvariantCultureAttribute.cs b/tests/Avalonia.UnitTests/InvariantCultureAttribute.cs
index d24acd23ec..4f4b2e7fb7 100644
--- a/tests/Avalonia.UnitTests/InvariantCultureAttribute.cs
+++ b/tests/Avalonia.UnitTests/InvariantCultureAttribute.cs
@@ -3,7 +3,7 @@
using System;
using System.Globalization;
using System.Reflection;
-using Xunit.Sdk;
+using Xunit.v3;
namespace Avalonia.UnitTests;
@@ -21,9 +21,9 @@ public sealed class InvariantCultureAttribute : BeforeAfterTestAttribute
private CultureInfo? _previousCulture;
private CultureInfo? _previousUICulture;
- public override void Before(MethodInfo methodUnderTest)
+ public override void Before(MethodInfo methodUnderTest, IXunitTest test)
{
- base.Before(methodUnderTest);
+ base.Before(methodUnderTest, test);
_previousCulture = CultureInfo.CurrentCulture;
_previousUICulture = CultureInfo.CurrentUICulture;
@@ -32,11 +32,11 @@ public sealed class InvariantCultureAttribute : BeforeAfterTestAttribute
CultureInfo.CurrentUICulture = CultureInfo.InvariantCulture;
}
- public override void After(MethodInfo methodUnderTest)
+ public override void After(MethodInfo methodUnderTest, IXunitTest test)
{
CultureInfo.CurrentCulture = _previousCulture!;
CultureInfo.CurrentUICulture = _previousUICulture!;
- base.After(methodUnderTest);
+ base.After(methodUnderTest, test);
}
}
diff --git a/tests/Avalonia.UnitTests/UnitTestApplication.cs b/tests/Avalonia.UnitTests/UnitTestApplication.cs
index 319f69ca64..5c13b8d593 100644
--- a/tests/Avalonia.UnitTests/UnitTestApplication.cs
+++ b/tests/Avalonia.UnitTests/UnitTestApplication.cs
@@ -62,6 +62,15 @@ namespace Avalonia.UnitTests
public override void RegisterServices()
{
+ // Arrange (as part of layouting) calls TaskScheduler.FromCurrentSynchronizationContext, which needs a non-null context.
+ // If it's null, it will fail. So we need to ensure it's not null.
+ // Historically, this line wasn't needed because xunit itself used to always install its own SynchronizationContext.
+ // This was changed in xunit.v3.
+ if (SynchronizationContext.Current is null)
+ {
+ SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
+ }
+
AvaloniaLocator.CurrentMutable
.Bind().ToConstant(Services.AssetLoader)
.Bind().ToConstant(Services.GlobalClock)
diff --git a/tests/Avalonia.UnitTests/UseEmptyDesignatorCultureAttribute.cs b/tests/Avalonia.UnitTests/UseEmptyDesignatorCultureAttribute.cs
index 1d10c584a1..252a6911dc 100644
--- a/tests/Avalonia.UnitTests/UseEmptyDesignatorCultureAttribute.cs
+++ b/tests/Avalonia.UnitTests/UseEmptyDesignatorCultureAttribute.cs
@@ -3,7 +3,7 @@
using System;
using System.Globalization;
using System.Reflection;
-using Xunit.Sdk;
+using Xunit.v3;
namespace Avalonia.UnitTests;
@@ -16,9 +16,9 @@ public sealed class UseEmptyDesignatorCultureAttribute : BeforeAfterTestAttribut
private CultureInfo CultureInfo { get; } =
new(string.Empty, false) { DateTimeFormat = { AMDesignator = string.Empty, PMDesignator = string.Empty } };
- public override void Before(MethodInfo methodUnderTest)
+ public override void Before(MethodInfo methodUnderTest, IXunitTest test)
{
- base.Before(methodUnderTest);
+ base.Before(methodUnderTest, test);
_previousCulture = CultureInfo.CurrentCulture;
_previousUICulture = CultureInfo.CurrentUICulture;
@@ -27,11 +27,11 @@ public sealed class UseEmptyDesignatorCultureAttribute : BeforeAfterTestAttribut
CultureInfo.CurrentUICulture = CultureInfo;
}
- public override void After(MethodInfo methodUnderTest)
+ public override void After(MethodInfo methodUnderTest, IXunitTest test)
{
CultureInfo.CurrentCulture = _previousCulture!;
CultureInfo.CurrentUICulture = _previousUICulture!;
- base.After(methodUnderTest);
+ base.After(methodUnderTest, test);
}
}
diff --git a/tests/Avalonia.UnitTests/VerifyEmptyDispatcherAfterTestAttribute.cs b/tests/Avalonia.UnitTests/VerifyEmptyDispatcherAfterTestAttribute.cs
index c4c0d299a5..4ccce3ab75 100644
--- a/tests/Avalonia.UnitTests/VerifyEmptyDispatcherAfterTestAttribute.cs
+++ b/tests/Avalonia.UnitTests/VerifyEmptyDispatcherAfterTestAttribute.cs
@@ -4,13 +4,13 @@ using System.Reflection;
using Avalonia.Controls;
using Avalonia.Threading;
using Xunit;
-using Xunit.Sdk;
+using Xunit.v3;
namespace Avalonia.UnitTests;
public sealed class VerifyEmptyDispatcherAfterTestAttribute : BeforeAfterTestAttribute
{
- public override void After(MethodInfo methodUnderTest)
+ public override void After(MethodInfo methodUnderTest, IXunitTest test)
{
if (typeof(ScopedTestBase).IsAssignableFrom(methodUnderTest.DeclaringType))
return;
diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props
index 5e8f5a6508..8d2d48bfb6 100644
--- a/tests/Directory.Build.props
+++ b/tests/Directory.Build.props
@@ -3,5 +3,10 @@
false
false
+ true
+
+
+
+