diff --git a/samples/UnloadableAssemblyLoadContext/UnloadableAssemblyLoadContext/UnloadableAssemblyLoadContext.csproj b/samples/UnloadableAssemblyLoadContext/UnloadableAssemblyLoadContext/UnloadableAssemblyLoadContext.csproj index 9ad92d3e62..8508765545 100644 --- a/samples/UnloadableAssemblyLoadContext/UnloadableAssemblyLoadContext/UnloadableAssemblyLoadContext.csproj +++ b/samples/UnloadableAssemblyLoadContext/UnloadableAssemblyLoadContext/UnloadableAssemblyLoadContext.csproj @@ -1,13 +1,14 @@  - - WinExe - net7.0 - enable - true - app.manifest - true - true - + + + WinExe + $(AvsCurrentTargetFramework) + enable + true + app.manifest + true + true + @@ -18,6 +19,7 @@ + @@ -26,4 +28,5 @@ + diff --git a/samples/UnloadableAssemblyLoadContext/UnloadableAssemblyLoadContextPlug/UnloadableAssemblyLoadContextPlug.csproj b/samples/UnloadableAssemblyLoadContext/UnloadableAssemblyLoadContextPlug/UnloadableAssemblyLoadContextPlug.csproj index 564c169818..4dd79dee1b 100644 --- a/samples/UnloadableAssemblyLoadContext/UnloadableAssemblyLoadContextPlug/UnloadableAssemblyLoadContextPlug.csproj +++ b/samples/UnloadableAssemblyLoadContext/UnloadableAssemblyLoadContextPlug/UnloadableAssemblyLoadContextPlug.csproj @@ -1,17 +1,19 @@  - - net7.0 - enable - true - app.manifest - true - UnloadableAssemblyLoadContextPlug - UnloadableAssemblyLoadContextPlug - - - - + + $(AvsCurrentTargetFramework) + enable + true + app.manifest + true + UnloadableAssemblyLoadContextPlug + UnloadableAssemblyLoadContextPlug + + + + + + %(Filename) @@ -19,33 +21,27 @@ Designer - - + + - - + + - - - - - - - - - - + + + + + + + + + + - - - - - - diff --git a/samples/XEmbedSample/HarfbuzzWorkaround.cs b/samples/XEmbedSample/HarfbuzzWorkaround.cs index f0ecf0699a..e241d7740c 100644 --- a/samples/XEmbedSample/HarfbuzzWorkaround.cs +++ b/samples/XEmbedSample/HarfbuzzWorkaround.cs @@ -46,7 +46,7 @@ public unsafe class HarfbuzzWorkaround var libraryPathBytes = Marshal.AllocHGlobal(4096); var handle = NativeLibrary.Load("libHarfBuzzSharp", typeof(HarfBuzzSharp.Blob).Assembly, null); dlinfo(handle, RTLD_DI_ORIGIN, libraryPathBytes); - var libraryOrigin = Marshal.PtrToStringUTF8(libraryPathBytes); + var libraryOrigin = Marshal.PtrToStringUTF8(libraryPathBytes) ?? string.Empty; Marshal.FreeHGlobal(libraryPathBytes); var libraryPath = Path.Combine(libraryOrigin, "libHarfBuzzSharp.so"); @@ -63,4 +63,4 @@ public unsafe class HarfbuzzWorkaround }); } -} \ No newline at end of file +} diff --git a/samples/XEmbedSample/Program.cs b/samples/XEmbedSample/Program.cs index d5cf8be039..e8011feccb 100644 --- a/samples/XEmbedSample/Program.cs +++ b/samples/XEmbedSample/Program.cs @@ -4,7 +4,9 @@ using Avalonia.Controls.Primitives; using Avalonia.Media; using ControlCatalog; using ControlCatalog.Models; +using Gdk; using Gtk; +using Window = Gtk.Window; namespace XEmbedSample; @@ -31,7 +33,7 @@ class Program var w = new Gtk.Window("XEmbed Test Window"); - var socket = new AvaloniaXEmbedGtkSocket(w.StyleContext.GetBackgroundColor(StateFlags.Normal)) + var socket = new AvaloniaXEmbedGtkSocket(GetBackgroundColor(w)) { Content = new ScrollViewer() { @@ -60,4 +62,11 @@ class Program Gtk.Application.Run(); } -} \ No newline at end of file + + private static RGBA GetBackgroundColor(Window window) + { +#pragma warning disable CS0612 // Type or member is obsolete; OK for a sample. + return window.StyleContext.GetBackgroundColor(StateFlags.Normal); +#pragma warning restore CS0612 // Type or member is obsolete + } +} diff --git a/samples/XEmbedSample/SocketEx.cs b/samples/XEmbedSample/SocketEx.cs index 3a4d820978..780b67c9c7 100644 --- a/samples/XEmbedSample/SocketEx.cs +++ b/samples/XEmbedSample/SocketEx.cs @@ -14,8 +14,8 @@ public class AvaloniaXEmbedGtkSocket : Gtk.Socket _backgroundColor = backgroundColor; } - private object _content; - public object Content + private object? _content; + public object? Content { get => _content; set @@ -61,4 +61,4 @@ public class AvaloniaXEmbedGtkSocket : Gtk.Socket _avaloniaPlug = null; base.OnDestroyed(); } -} \ No newline at end of file +} diff --git a/src/Avalonia.Base/Media/TextFormatting/Unicode/PropertyValueAliasHelper.cs b/src/Avalonia.Base/Media/TextFormatting/Unicode/PropertyValueAliasHelper.cs index bb9b7a6219..95b1ed524b 100644 --- a/src/Avalonia.Base/Media/TextFormatting/Unicode/PropertyValueAliasHelper.cs +++ b/src/Avalonia.Base/Media/TextFormatting/Unicode/PropertyValueAliasHelper.cs @@ -182,11 +182,11 @@ namespace Avalonia.Media.TextFormatting.Unicode public static string GetTag(Script script) { - if(!s_scriptToTag.ContainsKey(script)) + if (!s_scriptToTag.TryGetValue(script, out var value)) { return "Zzzz"; } - return s_scriptToTag[script]; + return value; } private static readonly Dictionary s_tagToScript = @@ -367,11 +367,11 @@ namespace Avalonia.Media.TextFormatting.Unicode public static Script GetScript(string tag) { - if(!s_tagToScript.ContainsKey(tag)) + if (!s_tagToScript.TryGetValue(tag, out var value)) { return Script.Unknown; } - return s_tagToScript[tag]; + return value; } private static readonly Dictionary s_tagToGeneralCategory = @@ -418,11 +418,11 @@ namespace Avalonia.Media.TextFormatting.Unicode public static GeneralCategory GetGeneralCategory(string tag) { - if(!s_tagToGeneralCategory.ContainsKey(tag)) + if (!s_tagToGeneralCategory.TryGetValue(tag, out var value)) { return GeneralCategory.Other; } - return s_tagToGeneralCategory[tag]; + return value; } private static readonly Dictionary s_tagToLineBreakClass = @@ -479,11 +479,11 @@ namespace Avalonia.Media.TextFormatting.Unicode public static LineBreakClass GetLineBreakClass(string tag) { - if(!s_tagToLineBreakClass.ContainsKey(tag)) + if (!s_tagToLineBreakClass.TryGetValue(tag, out var value)) { return LineBreakClass.Unknown; } - return s_tagToLineBreakClass[tag]; + return value; } private static readonly Dictionary s_tagToBidiPairedBracketType = @@ -495,11 +495,11 @@ namespace Avalonia.Media.TextFormatting.Unicode public static BidiPairedBracketType GetBidiPairedBracketType(string tag) { - if(!s_tagToBidiPairedBracketType.ContainsKey(tag)) + if (!s_tagToBidiPairedBracketType.TryGetValue(tag, out var value)) { return BidiPairedBracketType.None; } - return s_tagToBidiPairedBracketType[tag]; + return value; } private static readonly Dictionary s_tagToBidiClass = @@ -531,11 +531,11 @@ namespace Avalonia.Media.TextFormatting.Unicode public static BidiClass GetBidiClass(string tag) { - if(!s_tagToBidiClass.ContainsKey(tag)) + if (!s_tagToBidiClass.TryGetValue(tag, out var value)) { return BidiClass.LeftToRight; } - return s_tagToBidiClass[tag]; + return value; } } diff --git a/src/Avalonia.Controls/TextBox.cs b/src/Avalonia.Controls/TextBox.cs index 39323d518b..ad96829b28 100644 --- a/src/Avalonia.Controls/TextBox.cs +++ b/src/Avalonia.Controls/TextBox.cs @@ -1,6 +1,7 @@ using Avalonia.Input.Platform; using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using Avalonia.Reactive; using Avalonia.Controls.Presenters; @@ -629,6 +630,7 @@ namespace Avalonia.Controls /// /// Gets or sets the text selected in the TextBox /// + [AllowNull] public string SelectedText { get => GetSelection(); diff --git a/src/Headless/Avalonia.Headless/HeadlessPlatformStubs.cs b/src/Headless/Avalonia.Headless/HeadlessPlatformStubs.cs index e484229551..6bfe8562dc 100644 --- a/src/Headless/Avalonia.Headless/HeadlessPlatformStubs.cs +++ b/src/Headless/Avalonia.Headless/HeadlessPlatformStubs.cs @@ -73,7 +73,11 @@ namespace Avalonia.Headless if (format == DataFormats.Files && _data is not null) return _data.GetFiles(); if (format == DataFormats.FileNames && _data is not null) + { +#pragma warning disable CS0618 // Type or member is obsolete return _data.GetFileNames(); +#pragma warning restore CS0618 // Type or member is obsolete + } else return (object?)_data; }); diff --git a/src/Windows/Avalonia.Win32.Automation/GlobalSuppressions.cs b/src/Windows/Avalonia.Win32.Automation/GlobalSuppressions.cs new file mode 100644 index 0000000000..cb007864dd --- /dev/null +++ b/src/Windows/Avalonia.Win32.Automation/GlobalSuppressions.cs @@ -0,0 +1,11 @@ +using System.Diagnostics.CodeAnalysis; + +// Until https://github.com/dotnet/runtime/issues/90922 is resolved, this is the only way +// to suppress CA2256 in the generated code. +[assembly: SuppressMessage( + "Usage", + "CA2256:All members declared in parent interfaces must have an implementation in a DynamicInterfaceCastableImplementation-attributed interface", + Justification = "Generated code and analyzer ignores that it is generated AND partial", + Scope = "type", + Target = "~T:InterfaceImplementation") +] diff --git a/tests/Avalonia.Base.UnitTests/Animation/AnimationIterationTests.cs b/tests/Avalonia.Base.UnitTests/Animation/AnimationIterationTests.cs index 65253e7214..942ac148c8 100644 --- a/tests/Avalonia.Base.UnitTests/Animation/AnimationIterationTests.cs +++ b/tests/Avalonia.Base.UnitTests/Animation/AnimationIterationTests.cs @@ -317,7 +317,7 @@ namespace Avalonia.Base.UnitTests.Animation } [Fact] - public void Cancellation_Should_Stop_Animation() + public async Task Cancellation_Should_Stop_Animation() { var keyframe1 = new KeyFrame() { @@ -364,7 +364,7 @@ namespace Avalonia.Base.UnitTests.Animation clock.Step(TimeSpan.FromSeconds(2)); clock.Step(TimeSpan.FromSeconds(3)); - animationRun.Wait(); + await animationRun; clock.Step(TimeSpan.FromSeconds(6)); Assert.True(animationRun.IsCompleted); @@ -404,7 +404,7 @@ namespace Avalonia.Base.UnitTests.Animation } [Fact] - public void Cancellation_Of_Completed_Animation_Does_Not_Fail() + public async Task Cancellation_Of_Completed_Animation_Does_Not_Fail() { var keyframe1 = new KeyFrame() { @@ -450,12 +450,12 @@ namespace Avalonia.Base.UnitTests.Animation Assert.Equal(2, propertyChangedCount); cancellationTokenSource.Cancel(); - animationRun.Wait(); + await animationRun; } // https://github.com/AvaloniaUI/Avalonia/issues/12582 [Fact] - public void Interpolator_Is_Not_Called_After_Last_Iteration() + public async Task Interpolator_Is_Not_Called_After_Last_Iteration() { var animator = new FakeAnimator(); @@ -511,7 +511,7 @@ namespace Avalonia.Base.UnitTests.Animation Assert.Equal(3, animator.CallCount); Assert.Equal(1.0d, animator.LastProgress); - animationRun.Wait(); + await animationRun; } [Theory] diff --git a/tests/Avalonia.Base.UnitTests/Collections/AvaloniaListTests.cs b/tests/Avalonia.Base.UnitTests/Collections/AvaloniaListTests.cs index 82a9885ddc..82c7a0eac8 100644 --- a/tests/Avalonia.Base.UnitTests/Collections/AvaloniaListTests.cs +++ b/tests/Avalonia.Base.UnitTests/Collections/AvaloniaListTests.cs @@ -554,7 +554,7 @@ namespace Avalonia.Base.UnitTests.Collections } /// - /// Assert that emits when performing . + /// Assert that emits when performing . /// /// The event source. /// The action to perform. diff --git a/tests/Avalonia.Base.UnitTests/DispatcherTests.cs b/tests/Avalonia.Base.UnitTests/DispatcherTests.cs index fdc2ff9274..a667057708 100644 --- a/tests/Avalonia.Base.UnitTests/DispatcherTests.cs +++ b/tests/Avalonia.Base.UnitTests/DispatcherTests.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -462,6 +463,7 @@ public partial class DispatcherTests } [Fact] + [SuppressMessage("Usage", "xUnit1031:Do not use blocking task operations in test method", Justification = "Tests the dispatcher itself")] public void DispatcherInvokeAsyncUnwrapsTasks() { int asyncMethodStage = 0; diff --git a/tests/Avalonia.Base.UnitTests/Media/TextFormatting/BiDiClassTests.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/BiDiClassTests.cs index f666d2d3c9..540797ee96 100644 --- a/tests/Avalonia.Base.UnitTests/Media/TextFormatting/BiDiClassTests.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/BiDiClassTests.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System.Diagnostics.CodeAnalysis; +using System.Linq; using System.Runtime.InteropServices; using System.Text; using Avalonia.Media.TextFormatting.Unicode; @@ -18,6 +19,7 @@ namespace Avalonia.Visuals.UnitTests.Media.TextFormatting [Theory(Skip = "Only run when the Unicode spec changes.")] [ClassData(typeof(BiDiClassTestDataGenerator))] + [SuppressMessage("Usage", "xUnit1026:Theory methods should use all of their parameters", Justification = "Parameters match BiDi fields")] public void Should_Resolve( int lineNumber, int[] codePoints, diff --git a/tests/Avalonia.Base.UnitTests/Media/TextFormatting/UnicodeEnumsGenerator.cs b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/UnicodeEnumsGenerator.cs index 14da235847..74fe709788 100644 --- a/tests/Avalonia.Base.UnitTests/Media/TextFormatting/UnicodeEnumsGenerator.cs +++ b/tests/Avalonia.Base.UnitTests/Media/TextFormatting/UnicodeEnumsGenerator.cs @@ -447,11 +447,11 @@ namespace Avalonia.Base.UnitTests.Media.TextFormatting writer.WriteLine($" public static string GetTag({typeName} {typeName.ToLower()})"); writer.WriteLine(" {"); - writer.WriteLine($" if(!s_{typeName.ToLower()}ToTag.ContainsKey({typeName.ToLower()}))"); + writer.WriteLine($" if (!s_{typeName.ToLower()}ToTag.TryGetValue({typeName.ToLower()}, out var value))"); writer.WriteLine(" {"); writer.WriteLine($" return \"{defaultValue}\";"); writer.WriteLine(" }"); - writer.WriteLine($" return s_{typeName.ToLower()}ToTag[{typeName.ToLower()}];"); + writer.WriteLine($" return value;"); writer.WriteLine(" }"); writer.WriteLine(); @@ -474,11 +474,11 @@ namespace Avalonia.Base.UnitTests.Media.TextFormatting writer.WriteLine($" public static {typeName} Get{typeName}(string tag)"); writer.WriteLine(" {"); - writer.WriteLine($" if(!s_tagTo{typeName}.ContainsKey(tag))"); + writer.WriteLine($" if (!s_tagTo{typeName}.TryGetValue(tag, out var value))"); writer.WriteLine(" {"); writer.WriteLine($" return {typeName}.{defaultValue};"); writer.WriteLine(" }"); - writer.WriteLine($" return s_tagTo{typeName}[tag];"); + writer.WriteLine($" return value;"); writer.WriteLine(" }"); writer.WriteLine(); diff --git a/tests/Avalonia.Base.UnitTests/Utilities/StringTokenizerTests.cs b/tests/Avalonia.Base.UnitTests/Utilities/StringTokenizerTests.cs index 42a4a406ef..b7d09a40d7 100644 --- a/tests/Avalonia.Base.UnitTests/Utilities/StringTokenizerTests.cs +++ b/tests/Avalonia.Base.UnitTests/Utilities/StringTokenizerTests.cs @@ -2,6 +2,8 @@ using Avalonia.Utilities; using Xunit; +#pragma warning disable CS0618 // Type or member is obsolete + namespace Avalonia.Base.UnitTests.Utilities { public class StringTokenizerTests diff --git a/tests/Avalonia.Build.Tasks.UnitTest/CompileAvaloniaXamlTaskTest.cs b/tests/Avalonia.Build.Tasks.UnitTest/CompileAvaloniaXamlTaskTest.cs index 115457926b..c2a4b8f44e 100644 --- a/tests/Avalonia.Build.Tasks.UnitTest/CompileAvaloniaXamlTaskTest.cs +++ b/tests/Avalonia.Build.Tasks.UnitTest/CompileAvaloniaXamlTaskTest.cs @@ -30,7 +30,7 @@ public class CompileAvaloniaXamlTaskTest ProjectDirectory = Directory.GetCurrentDirectory(), VerifyIl = true }.Execute(); - Assert.Equal(0, engine.Errors.Count); + Assert.Empty(engine.Errors); } diff --git a/tests/Avalonia.Controls.DataGrid.UnitTests/Collections/ComparerTests.cs b/tests/Avalonia.Controls.DataGrid.UnitTests/Collections/ComparerTests.cs index 55e144aa1d..5ede8d1f29 100644 --- a/tests/Avalonia.Controls.DataGrid.UnitTests/Collections/ComparerTests.cs +++ b/tests/Avalonia.Controls.DataGrid.UnitTests/Collections/ComparerTests.cs @@ -219,5 +219,8 @@ public class NoStringTypeComparerTests } return false; } + + public override int GetHashCode() + => Prop; } } diff --git a/tests/Avalonia.Controls.UnitTests/GridLengthTests.cs b/tests/Avalonia.Controls.UnitTests/GridLengthTests.cs index aab282a54f..10e52d1d95 100644 --- a/tests/Avalonia.Controls.UnitTests/GridLengthTests.cs +++ b/tests/Avalonia.Controls.UnitTests/GridLengthTests.cs @@ -107,7 +107,7 @@ namespace Avalonia.Controls.UnitTests [InlineData(1.2d, GridUnitType.Pixel, "1.2")] [InlineData(1.2d, GridUnitType.Star, "1.2*")] [InlineData(1.2d, GridUnitType.Auto, "Auto")] - public async void ToString_AllCulture_Should_Pass(double d, GridUnitType type, string result) + public async Task ToString_AllCulture_Should_Pass(double d, GridUnitType type, string result) { List cultureInfos = CultureInfo.GetCultures(CultureTypes.AllCultures).ToList(); GridLength length = new GridLength(d, type); diff --git a/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs b/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs index e467048e1d..70c6969021 100644 --- a/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs @@ -804,7 +804,7 @@ namespace Avalonia.Controls.UnitTests [InlineData("abc", "ddd", 3, 0, 2, true, "ddc")] [InlineData("abc", "dddd", 4, 1, 3, true, "addd")] [InlineData("abc", "ddddd", 5, 3, 3, true, "abcdd")] - public void MaxLength_Works_Properly( + public async Task MaxLength_Works_Properly( string initalText, string textInput, int maxLength, @@ -838,10 +838,10 @@ namespace Avalonia.Controls.UnitTests if (fromClipboard) { - topLevel.Clipboard?.SetTextAsync(textInput).GetAwaiter().GetResult(); + await topLevel.Clipboard!.SetTextAsync(textInput); RaiseKeyEvent(target, Key.V, KeyModifiers.Control); - topLevel.Clipboard?.ClearAsync().GetAwaiter().GetResult(); + await topLevel.Clipboard!.ClearAsync(); } else { diff --git a/tests/Avalonia.Controls.UnitTests/Platform/ScreensTests.cs b/tests/Avalonia.Controls.UnitTests/Platform/ScreensTests.cs index 64c52acda0..e9aae23214 100644 --- a/tests/Avalonia.Controls.UnitTests/Platform/ScreensTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Platform/ScreensTests.cs @@ -102,7 +102,7 @@ public class ScreensTests : ScopedTestBase } [Fact] - public void Should_Raise_Event_When_Screen_Changed_From_Another_Thread() + public async Task Should_Raise_Event_When_Screen_Changed_From_Another_Thread() { using var _ = UnitTestApplication.Start(TestServices.MockThreadingInterface); @@ -114,7 +114,7 @@ public class ScreensTests : ScopedTestBase hasChangedTimes += 1; }; - Task.Run(() => screens.PushNewScreens([1, 2])).Wait(); + await Task.Run(() => screens.PushNewScreens([1, 2])); Dispatcher.UIThread.RunJobs(); Assert.Equal(1, hasChangedTimes); diff --git a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs index e85aa99fc9..5228522ade 100644 --- a/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TextBoxTests.cs @@ -1,3 +1,5 @@ +#nullable enable + using System; using System.Collections.Generic; using System.Reactive.Linq; @@ -837,7 +839,7 @@ namespace Avalonia.Controls.UnitTests [InlineData("abc", "ddd", 3, 0, 2, true, "ddc")] [InlineData("abc", "dddd", 4, 1, 3, true, "addd")] [InlineData("abc", "ddddd", 5, 3, 3, true, "abcdd")] - public void MaxLength_Works_Properly( + public async Task MaxLength_Works_Properly( string initalText, string textInput, int maxLength, @@ -870,10 +872,10 @@ namespace Avalonia.Controls.UnitTests if (fromClipboard) { - topLevel.Clipboard?.SetTextAsync(textInput).GetAwaiter().GetResult(); + await topLevel.Clipboard!.SetTextAsync(textInput); RaiseKeyEvent(target, Key.V, KeyModifiers.Control); - topLevel.Clipboard?.ClearAsync().GetAwaiter().GetResult(); + await topLevel.Clipboard!.ClearAsync(); } else { @@ -936,7 +938,7 @@ namespace Avalonia.Controls.UnitTests SelectionEnd = 3, }; - var values = new List(); + var values = new List(); target.GetObservable(TextBox.TextProperty).Subscribe(x => values.Add(x)); target.SelectedText = "A"; @@ -960,7 +962,7 @@ namespace Avalonia.Controls.UnitTests SelectionEnd = 3, }; - var values = new List(); + var values = new List(); target.GetObservable(TextBox.TextProperty).Subscribe(x => values.Add(x)); RaiseTextEvent(target, "A"); @@ -1008,7 +1010,7 @@ namespace Avalonia.Controls.UnitTests } [Fact] - public void Should_Fullfill_MaxLines_Contraint() + public async Task Should_Fullfill_MaxLines_Contraint() { using (UnitTestApplication.Start(Services)) { @@ -1034,10 +1036,10 @@ namespace Avalonia.Controls.UnitTests var initialHeight = target.DesiredSize.Height; - topLevel.Clipboard?.SetTextAsync(Environment.NewLine).GetAwaiter().GetResult(); + await topLevel.Clipboard!.SetTextAsync(Environment.NewLine); RaiseKeyEvent(target, Key.V, KeyModifiers.Control); - topLevel.Clipboard?.ClearAsync().GetAwaiter().GetResult(); + await topLevel.Clipboard!.ClearAsync(); RaiseTextEvent(target, Environment.NewLine); @@ -1075,10 +1077,12 @@ namespace Avalonia.Controls.UnitTests topLevel.LayoutManager.ExecuteInitialLayoutPass(); var textPresenter = target.FindDescendantOfType(); + Assert.NotNull(textPresenter); Assert.Equal("PART_TextPresenter", textPresenter.Name); Assert.Equal(new Thickness(0), textPresenter.Margin); // Test assumes no margin on TextPresenter var scrollViewer = target.FindDescendantOfType(); + Assert.NotNull(scrollViewer); Assert.Equal("PART_ScrollViewer", scrollViewer.Name); Assert.Equal(maxLines * target.LineHeight, scrollViewer.MaxHeight); } @@ -1111,6 +1115,7 @@ namespace Avalonia.Controls.UnitTests topLevel.LayoutManager.ExecuteInitialLayoutPass(); var textPresenter = target.FindDescendantOfType(); + Assert.NotNull(textPresenter); Assert.Equal("PART_TextPresenter", textPresenter.Name); var textPresenterMargin = new Thickness(horizontal: 0, vertical: 3); textPresenter.Margin = textPresenterMargin; @@ -1119,6 +1124,7 @@ namespace Avalonia.Controls.UnitTests target.Measure(Size.Infinity); var scrollViewer = target.FindDescendantOfType(); + Assert.NotNull(scrollViewer); Assert.Equal("PART_ScrollViewer", scrollViewer.Name); Assert.Equal((maxLines * target.LineHeight) + textPresenterMargin.Top + textPresenterMargin.Bottom, scrollViewer.MaxHeight); } @@ -1187,10 +1193,12 @@ namespace Avalonia.Controls.UnitTests topLevel.LayoutManager.ExecuteInitialLayoutPass(); var textPresenter = target.FindDescendantOfType(); + Assert.NotNull(textPresenter); Assert.Equal("PART_TextPresenter", textPresenter.Name); Assert.Equal(new Thickness(0), textPresenter.Margin); // Test assumes no margin on TextPresenter var scrollViewer = target.FindDescendantOfType(); + Assert.NotNull(scrollViewer); Assert.Equal("PART_ScrollViewer", scrollViewer.Name); Assert.Equal(minLines * target.LineHeight, scrollViewer.MinHeight); } @@ -1223,6 +1231,7 @@ namespace Avalonia.Controls.UnitTests topLevel.LayoutManager.ExecuteInitialLayoutPass(); var textPresenter = target.FindDescendantOfType(); + Assert.NotNull(textPresenter); Assert.Equal("PART_TextPresenter", textPresenter.Name); var textPresenterMargin = new Thickness(horizontal: 0, vertical: 3); textPresenter.Margin = textPresenterMargin; @@ -1231,6 +1240,7 @@ namespace Avalonia.Controls.UnitTests target.Measure(Size.Infinity); var scrollViewer = target.FindDescendantOfType(); + Assert.NotNull(scrollViewer); Assert.Equal("PART_ScrollViewer", scrollViewer.Name); Assert.Equal((minLines * target.LineHeight) + textPresenterMargin.Top + textPresenterMargin.Bottom, scrollViewer.MinHeight); } @@ -1541,6 +1551,7 @@ namespace Avalonia.Controls.UnitTests var adorner = new TextBox { Template = CreateTemplate(), Text = "a" }; var adornerLayer = AdornerLayer.GetAdornerLayer(button); + Assert.NotNull(adornerLayer); adornerLayer.Children.Add(adorner); AdornerLayer.SetAdornedElement(adorner, button); @@ -1561,6 +1572,7 @@ namespace Avalonia.Controls.UnitTests }; var adorner = new TextBox { Template = CreateTemplate(), Text = "a" }; var adornerLayer = AdornerLayer.GetAdornerLayer(button); + Assert.NotNull(adornerLayer); root.Measure(new Size(10, 10)); @@ -1780,7 +1792,7 @@ namespace Avalonia.Controls.UnitTests private class Class1 : NotifyingBase { private int _foo; - private string _bar; + private string? _bar; public int Foo { @@ -1788,7 +1800,7 @@ namespace Avalonia.Controls.UnitTests set { _foo = value; RaisePropertyChanged(); } } - public string Bar + public string? Bar { get { return _bar; } set { _bar = value; RaisePropertyChanged(); } @@ -1797,11 +1809,11 @@ namespace Avalonia.Controls.UnitTests private class ClipboardStub : IClipboard // in order to get tests working that use the clipboard { - private string _text; + private string? _text; - public Task GetTextAsync() => Task.FromResult(_text); + public Task GetTextAsync() => Task.FromResult(_text); - public Task SetTextAsync(string text) + public Task SetTextAsync(string? text) { _text = text; return Task.CompletedTask; @@ -1817,14 +1829,14 @@ namespace Avalonia.Controls.UnitTests public Task GetFormatsAsync() => Task.FromResult(Array.Empty()); - public Task GetDataAsync(string format) => Task.FromResult((object)null); + public Task GetDataAsync(string format) => Task.FromResult((object?)null); } private class TestTopLevel : TopLevel { private readonly ILayoutManager _layoutManager; - public TestTopLevel(ITopLevelImpl impl, ILayoutManager layoutManager = null) + public TestTopLevel(ITopLevelImpl impl, ILayoutManager? layoutManager = null) : base(impl) { _layoutManager = layoutManager ?? new LayoutManager(this); diff --git a/tests/Avalonia.Controls.UnitTests/WindowTests.cs b/tests/Avalonia.Controls.UnitTests/WindowTests.cs index 705076ff25..ce2915557a 100644 --- a/tests/Avalonia.Controls.UnitTests/WindowTests.cs +++ b/tests/Avalonia.Controls.UnitTests/WindowTests.cs @@ -1072,7 +1072,7 @@ namespace Avalonia.Controls.UnitTests var task = target.ShowDialog(parent); target.IsVisible = false; - + Assert.True(task.IsCompletedSuccessfully); } } diff --git a/tests/Avalonia.DesignerSupport.Tests/RemoteProtocolTests.cs b/tests/Avalonia.DesignerSupport.Tests/RemoteProtocolTests.cs index 4264559ab6..d9dd799419 100644 --- a/tests/Avalonia.DesignerSupport.Tests/RemoteProtocolTests.cs +++ b/tests/Avalonia.DesignerSupport.Tests/RemoteProtocolTests.cs @@ -2,6 +2,7 @@ using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Net; using System.Net.Sockets; @@ -80,6 +81,7 @@ namespace Avalonia.DesignerSupport.Tests } [Fact] + [SuppressMessage("Usage", "xUnit1031:Do not use blocking task operations in test method", Justification = "Sync context is explicitly disabled")] void EntitiesAreProperlySerializedAndDeserialized() { Init(); diff --git a/tests/Avalonia.Generators.Tests/XamlXNameResolverTests.cs b/tests/Avalonia.Generators.Tests/XamlXNameResolverTests.cs index 538e6b9242..46bd75d643 100644 --- a/tests/Avalonia.Generators.Tests/XamlXNameResolverTests.cs +++ b/tests/Avalonia.Generators.Tests/XamlXNameResolverTests.cs @@ -22,9 +22,9 @@ public class XamlXNameResolverTests var controls = ResolveNames(xaml); Assert.NotEmpty(controls); - Assert.Equal(1, controls.Count); - Assert.Equal("UserNameTextBox", controls[0].Name); - Assert.Contains(typeof(TextBox).FullName!, controls[0].TypeName); + var control = Assert.Single(controls); + Assert.Equal("UserNameTextBox", control.Name); + Assert.Contains(typeof(TextBox).FullName!, control.TypeName); } [Theory] diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs index 5f5c2f9fe5..cab54b3726 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/MarkupExtensions/CompiledBindingExtensionTests.cs @@ -244,7 +244,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions window.DataContext = dataContext; - Assert.Equal(dataContext.TaskProperty.Result, textBlock.Text); + Assert.Equal("foobar", textBlock.Text); } } @@ -1920,7 +1920,7 @@ namespace Avalonia.Markup.Xaml.UnitTests.MarkupExtensions [Theory] [InlineData(null, "Not called")] [InlineData("A", "Do A")] - public void Binding_Method_With_Parameter_To_Command_CanExecute(object commandParameter, string result) + public void Binding_Method_With_Parameter_To_Command_CanExecute(object? commandParameter, string result) { using (UnitTestApplication.Start(TestServices.StyledWindow)) { diff --git a/tests/Avalonia.RenderTests/TestBase.cs b/tests/Avalonia.RenderTests/TestBase.cs index a975c5e0e8..e808611aec 100644 --- a/tests/Avalonia.RenderTests/TestBase.cs +++ b/tests/Avalonia.RenderTests/TestBase.cs @@ -99,7 +99,7 @@ namespace Avalonia.Direct2D1.RenderTests var immediateError = TestRenderHelper.CompareImages(immediate!, expected); if (immediateError > AllowedError) { - Assert.True(false, immediatePath + ": Error = " + immediateError); + Assert.Fail(immediatePath + ": Error = " + immediateError); } } @@ -108,7 +108,7 @@ namespace Avalonia.Direct2D1.RenderTests var compositedError = TestRenderHelper.CompareImages(composited!, expected); if (compositedError > AllowedError) { - Assert.True(false, compositedPath + ": Error = " + compositedError); + Assert.Fail(compositedPath + ": Error = " + compositedError); } } } diff --git a/tests/Avalonia.RenderTests/TestRenderHelper.cs b/tests/Avalonia.RenderTests/TestRenderHelper.cs index 81e225f83d..53ef16a6e7 100644 --- a/tests/Avalonia.RenderTests/TestRenderHelper.cs +++ b/tests/Avalonia.RenderTests/TestRenderHelper.cs @@ -172,7 +172,7 @@ static class TestRenderHelper if (immediateError > 0.022) { - Assert.True(false, actualPath + ": Error = " + immediateError); + Assert.Fail(actualPath + ": Error = " + immediateError); } } } diff --git a/tests/Avalonia.Skia.UnitTests/Media/EmbeddedFontCollectionTests.cs b/tests/Avalonia.Skia.UnitTests/Media/EmbeddedFontCollectionTests.cs index ac97455110..fbf71795ba 100644 --- a/tests/Avalonia.Skia.UnitTests/Media/EmbeddedFontCollectionTests.cs +++ b/tests/Avalonia.Skia.UnitTests/Media/EmbeddedFontCollectionTests.cs @@ -1,4 +1,6 @@ -using System; +#nullable enable + +using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; @@ -32,7 +34,7 @@ namespace Avalonia.Skia.UnitTests.Media Assert.True(fontCollection.TryGetGlyphTypeface("Noto Mono", fontStyle, fontWeight, FontStretch.Normal, out var glyphTypeface)); - var actual = glyphTypeface?.FamilyName; + var actual = glyphTypeface.FamilyName; Assert.Equal("Noto Mono", actual); } @@ -49,7 +51,7 @@ namespace Avalonia.Skia.UnitTests.Media fontCollection.Initialize(new CustomFontManagerImpl()); - Assert.False(fontCollection.TryGetGlyphTypeface("ABC", FontStyle.Normal, FontWeight.Normal, FontStretch.Normal, out var glyphTypeface)); + Assert.False(fontCollection.TryGetGlyphTypeface("ABC", FontStyle.Normal, FontWeight.Normal, FontStretch.Normal, out _)); } } diff --git a/tests/Avalonia.Skia.UnitTests/Media/FontCollectionTests.cs b/tests/Avalonia.Skia.UnitTests/Media/FontCollectionTests.cs index 36cb14010d..7d63b9a79e 100644 --- a/tests/Avalonia.Skia.UnitTests/Media/FontCollectionTests.cs +++ b/tests/Avalonia.Skia.UnitTests/Media/FontCollectionTests.cs @@ -1,4 +1,6 @@ -using System.Collections.Concurrent; +#nullable enable + +using System.Collections.Concurrent; using System.Collections.Generic; using Avalonia.Media; using Avalonia.Media.Fonts; @@ -41,7 +43,7 @@ namespace Avalonia.Skia.UnitTests.Media Assert.True(glyphTypeface.FontSimulations == FontSimulations.Bold); - Assert.True(fontCollection.GlyphTypfaceCache.TryGetValue("Arial", out var glyphTypefaces)); + Assert.True(fontCollection.GlyphTypefaceCache.TryGetValue("Arial", out var glyphTypefaces)); Assert.Equal(2, glyphTypefaces.Count); @@ -60,7 +62,7 @@ namespace Avalonia.Skia.UnitTests.Media } - public IDictionary> GlyphTypfaceCache => _glyphTypefaceCache; + public IDictionary> GlyphTypefaceCache => _glyphTypefaceCache; } } }