From 43c32eb5efcad03c718f18e8e97e652b0aa3784a Mon Sep 17 00:00:00 2001 From: Anna Sas Date: Tue, 2 Jun 2026 17:02:42 +0200 Subject: [PATCH 1/8] Refactor: Add ReOpeningAnotherWindowTests, adjust namespace structure, and improve shutdown logic with new IsShutdown properties. --- src/InfiniFrame/Window/InfiniFrameWindow.cs | 29 +++++++++------- .../ParentChildWindowTests.cs | 2 +- .../ReOpeningAnotherWindowTests.cs | 34 +++++++++++++++++++ 3 files changed, 52 insertions(+), 13 deletions(-) rename tests/InfiniTests.InfiniFrame/{ParentChildLogic => WindowLifecycles}/ParentChildWindowTests.cs (99%) create mode 100644 tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs diff --git a/src/InfiniFrame/Window/InfiniFrameWindow.cs b/src/InfiniFrame/Window/InfiniFrameWindow.cs index 28eca32a..a9c172d7 100644 --- a/src/InfiniFrame/Window/InfiniFrameWindow.cs +++ b/src/InfiniFrame/Window/InfiniFrameWindow.cs @@ -17,11 +17,7 @@ namespace InfiniFrame; // Code // --------------------------------------------------------------------------------------------------------------------- public sealed class InfiniFrameWindow : IInfiniFrameWindow { - - //Pointers to the type and instance. private static readonly Lazy WindowType = new(NativeLibrary.GetMainProgramHandle); - private int _shutdownRequested; - private int _shutdownStarted; public required ILogger Logger { get; init; } public required IServiceProvider? ServiceProvider { get; init; } @@ -33,11 +29,18 @@ public sealed class InfiniFrameWindow : IInfiniFrameWindow { public IntPtr NativeType => WindowType.Value; public IntPtr InstanceHandle { get; private set; } - public bool IsClosed => Volatile.Read(ref _shutdownStarted) != 0 || InstanceHandle == IntPtr.Zero; public Rectangle CachedPreFullScreenBounds { get; set; } = Rectangle.Empty; public Rectangle CachedPreMaximizedBounds { get; set; } = Rectangle.Empty; + private int _shutdownRequested; + private bool IsShutdownRequested => Volatile.Read(ref _shutdownRequested) != 0; + + private int _shutdownStarted; + private bool IsShutdownStarted => Volatile.Read(ref _shutdownStarted) != 0; + + public bool IsClosed => IsShutdownRequested || IsShutdownStarted || InstanceHandle == IntPtr.Zero; + // ----------------------------------------------------------------------------------------------------------------- // Methods // ----------------------------------------------------------------------------------------------------------------- @@ -76,6 +79,8 @@ static void RunWithNativeStatusCheck(Action action) { /// The operation of the message loop is exclusive to the main native window only. /// public void WaitForClose() { + if (IsShutdownRequested || IsShutdownStarted || IsClosed) return; + try { Logger.LogDebug("Starting message loop for window."); Invoke(() => InfiniFrameNative.WaitForExit(InstanceHandle)); @@ -114,7 +119,7 @@ void IInfiniFrameWindow.MarkClosedFromNativeCallback() { /// Thrown when the window is not initialized. /// public void Close() { - if (Volatile.Read(ref _shutdownStarted) != 0) return; + if (IsShutdownStarted) return; Logger.LogDebug(".Close()"); Events.OnWindowClosingRequested(); @@ -149,16 +154,16 @@ public ValueTask CloseAsync(CancellationToken ct = default) { /// /// Message as string public void SendWebMessage(string message) { - if (Volatile.Read(ref _shutdownRequested) != 0 - || Volatile.Read(ref _shutdownStarted) != 0 - || InstanceHandle == IntPtr.Zero) { + if (IsShutdownRequested + || IsShutdownStarted + || IsClosed) { Logger.LogDebug("Skipping SendWebMessage during shutdown"); return; } Logger.LogDebug(".SendWebMessage({Message})", message); Invoke(() => { - if (Volatile.Read(ref _shutdownStarted) != 0 || InstanceHandle == IntPtr.Zero) { + if (IsShutdownStarted || InstanceHandle == IntPtr.Zero) { Logger.LogDebug("Window closed before SendWebMessage could execute"); return; } @@ -184,14 +189,14 @@ public Task SendWebMessageAsync(string message, CancellationToken ct = default) /// The title of the notification /// The text of the notification public void SendNotification(string title, string body) { - if (Volatile.Read(ref _shutdownStarted) != 0 || InstanceHandle == IntPtr.Zero) { + if (IsShutdownStarted || InstanceHandle == IntPtr.Zero) { Logger.LogDebug("Skipping SendNotification during shutdown"); return; } Logger.LogDebug(".SendNotification({Title}, {Body})", title, body); Invoke(() => { - if (Volatile.Read(ref _shutdownStarted) != 0 || InstanceHandle == IntPtr.Zero) { + if (IsShutdownStarted || InstanceHandle == IntPtr.Zero) { Logger.LogDebug("Window closed before SendNotification could execute"); return; } diff --git a/tests/InfiniTests.InfiniFrame/ParentChildLogic/ParentChildWindowTests.cs b/tests/InfiniTests.InfiniFrame/WindowLifecycles/ParentChildWindowTests.cs similarity index 99% rename from tests/InfiniTests.InfiniFrame/ParentChildLogic/ParentChildWindowTests.cs rename to tests/InfiniTests.InfiniFrame/WindowLifecycles/ParentChildWindowTests.cs index 3d18934e..dc0320fc 100644 --- a/tests/InfiniTests.InfiniFrame/ParentChildLogic/ParentChildWindowTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowLifecycles/ParentChildWindowTests.cs @@ -5,7 +5,7 @@ using System.Diagnostics; using System.Runtime.InteropServices; -namespace InfiniTests.InfiniFrame.ParentChildLogic; +namespace InfiniTests.InfiniFrame.WindowLifecycles; // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs b/tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs new file mode 100644 index 00000000..06c65832 --- /dev/null +++ b/tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs @@ -0,0 +1,34 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +namespace InfiniTests.InfiniFrame.WindowLifecycles; +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +public class ReOpeningAnotherWindowTests { + [Test] + [NotInParallelInfiniTests] + [Timeout(1000000000)] + public async Task CreateAnotherWindowAfterClosingOthers(CancellationToken ct = default) { + // Arrange + var window1Utility = InfiniFrameTestWindow.Create(ct); + var window2Utility = InfiniFrameTestWindow.Create(ct); + + try { + await Task.Run(() => window1Utility.Window.Close(), ct); + window1Utility.Window.WaitForClose(); + + // Act + await Task.Run(() => window2Utility.Window.Close(), ct); + window1Utility.Window.WaitForClose(); + + // Assert + await Assert.That(window1Utility.Window.IsClosed).IsTrue(); + await Assert.That(window2Utility.Window.IsClosed).IsTrue(); + } + finally { + window1Utility.Dispose(); + window2Utility.Dispose(); + } + } +} From 8a509b17da228142b02051693fdc11944d477d5e Mon Sep 17 00:00:00 2001 From: Anna Sas Date: Tue, 2 Jun 2026 17:05:36 +0200 Subject: [PATCH 2/8] Refactor: Add debug logging and consolidate shutdown checks in `InfiniFrameWindow` methods --- src/InfiniFrame/Window/InfiniFrameWindow.cs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/InfiniFrame/Window/InfiniFrameWindow.cs b/src/InfiniFrame/Window/InfiniFrameWindow.cs index a9c172d7..469397c0 100644 --- a/src/InfiniFrame/Window/InfiniFrameWindow.cs +++ b/src/InfiniFrame/Window/InfiniFrameWindow.cs @@ -79,7 +79,10 @@ static void RunWithNativeStatusCheck(Action action) { /// The operation of the message loop is exclusive to the main native window only. /// public void WaitForClose() { - if (IsShutdownRequested || IsShutdownStarted || IsClosed) return; + if (IsShutdownRequested || IsShutdownStarted || IsClosed) { + Logger.LogDebug("Skipping WaitForClose during shutdown"); + return; + } try { Logger.LogDebug("Starting message loop for window."); @@ -119,7 +122,10 @@ void IInfiniFrameWindow.MarkClosedFromNativeCallback() { /// Thrown when the window is not initialized. /// public void Close() { - if (IsShutdownStarted) return; + if (IsShutdownRequested || IsShutdownStarted || IsClosed) { + Logger.LogDebug("Skipping Close during shutdown"); + return; + } Logger.LogDebug(".Close()"); Events.OnWindowClosingRequested(); @@ -154,9 +160,7 @@ public ValueTask CloseAsync(CancellationToken ct = default) { /// /// Message as string public void SendWebMessage(string message) { - if (IsShutdownRequested - || IsShutdownStarted - || IsClosed) { + if (IsShutdownRequested || IsShutdownStarted || IsClosed) { Logger.LogDebug("Skipping SendWebMessage during shutdown"); return; } @@ -189,7 +193,7 @@ public Task SendWebMessageAsync(string message, CancellationToken ct = default) /// The title of the notification /// The text of the notification public void SendNotification(string title, string body) { - if (IsShutdownStarted || InstanceHandle == IntPtr.Zero) { + if (IsShutdownRequested || IsShutdownStarted || IsClosed) { Logger.LogDebug("Skipping SendNotification during shutdown"); return; } From 9d8c2b738442a0983ec0e94b53b71bb88ad863f8 Mon Sep 17 00:00:00 2001 From: Anna Sas Date: Tue, 2 Jun 2026 17:15:53 +0200 Subject: [PATCH 3/8] Fix editor style --- .editorconfig | 11 +-- .../Components/InfiniFrameWindowButton.razor | 3 +- .../InfiniFrameWindowResizeThumb.razor | 3 +- .../StaticWebAssetsManifestJsonContext.cs | 3 +- .../InfiniFrameNative.CustomSchemes.cs | 3 +- .../Exports/InfiniFrameNative.Dialog.cs | 12 ++- .../Exports/InfiniFrameNative.Dispatch.cs | 3 +- .../Exports/InfiniFrameNative.Events.cs | 18 +++-- .../Exports/InfiniFrameNative.Lifecycle.cs | 16 ++-- .../Exports/InfiniFrameNative.Memory.cs | 9 ++- .../Exports/InfiniFrameNative.Monitors.cs | 3 +- .../InfiniFrameNative.Platform.MacOs.cs | 3 +- .../InfiniFrameNative.Platform.Windows.cs | 14 ++-- .../InfiniFrameNative.Window.Actions.cs | 15 ++-- .../Exports/InfiniFrameNative.Window.Get.cs | 81 ++++++++++++------- .../InfiniFrameNative.Window.Navigation.cs | 9 ++- .../Exports/InfiniFrameNative.Window.Set.cs | 48 +++++++---- .../Testing/InfiniFrameNative.Testing.cs | 6 +- .../Managed/NativeMonitor.cs | 3 +- .../Managed/NativeRect.cs | 3 +- .../CustomElementsTests.cs | 6 +- .../ScriptSrcImportTests.cs | 3 +- .../Tests/SharedJavascriptInteropTests.cs | 12 ++- .../Tests/SharedJavascriptTests.cs | 9 ++- .../Tests/SharedWebviewWindowTests.cs | 3 +- .../InfiniFrameBlazorAppBuilderTests.cs | 21 +++-- ...StaticWebAssetsRuntimeFileProviderTests.cs | 18 +++-- .../Services/PublishServiceTests.cs | 6 +- .../InfiniFrameWebApplicationTests.cs | 3 +- .../Interop/InteropEnvelopeProtocolTests.cs | 9 ++- .../WindowEvents/WindowClosedEventTests.cs | 5 +- .../WindowClosingRequestedEventTests.cs | 5 +- .../WindowEvents/WindowCreatedEventTests.cs | 10 ++- .../WindowEvents/WindowCreatingEventTests.cs | 5 +- .../WindowEvents/WindowFocusInEventTests.cs | 6 +- .../WindowEvents/WindowFocusOutEventTests.cs | 7 +- .../WindowLocationChangedEventTests.cs | 6 +- .../WindowEvents/WindowMaximizedEventTests.cs | 5 +- .../WindowEvents/WindowMinimizedEventTests.cs | 6 +- .../WindowEvents/WindowRestoredEventTests.cs | 11 ++- .../WindowSizeChangedEventTests.cs | 5 +- .../BrowserControlInitParametersTests.cs | 5 +- .../CenterOnCurrentMonitorTests.cs | 6 +- .../CenterOnMonitorTests.cs | 6 +- .../WindowFunctionalities/CenterTests.cs | 19 ++++- .../WindowFunctionalities/ContextMenuTests.cs | 19 ++++- .../WindowFunctionalities/DevToolsTests.cs | 19 ++++- .../WindowFunctionalities/FocusedTests.cs | 7 +- .../WindowFunctionalities/FullscreenTests.cs | 19 ++++- .../WindowFunctionalities/HeightTests.cs | 28 +++++-- .../IconFilePathTests.cs | 24 ++++-- .../WindowFunctionalities/LeftTests.cs | 18 ++++- .../WindowFunctionalities/LocationTests.cs | 24 ++++-- .../WindowFunctionalities/MaxHeightTests.cs | 13 ++- .../WindowFunctionalities/MaxSizeTests.cs | 18 ++++- .../WindowFunctionalities/MaxWidthTests.cs | 13 ++- .../WindowFunctionalities/MaximizeTests.cs | 27 ++++++- .../WindowFunctionalities/MinHeightTests.cs | 13 ++- .../WindowFunctionalities/MinSizeTests.cs | 18 ++++- .../WindowFunctionalities/MinWidthTests.cs | 13 ++- .../WindowFunctionalities/MinimizeTests.cs | 19 ++++- .../MoveWithinCurrentMonitorAreaTests.cs | 27 ++++++- .../WindowFunctionalities/OffsetTests.cs | 27 ++++++- .../RegisterCustomSchemeHandlerTests.cs | 16 +++- .../WindowFunctionalities/ResizableTests.cs | 19 ++++- .../WindowFunctionalities/ResizeTests.cs | 48 ++++++++++- .../WindowFunctionalities/SizeTests.cs | 34 ++++++-- .../WindowFunctionalities/TitleTests.cs | 38 +++++++-- .../WindowFunctionalities/TopMostTests.cs | 21 ++++- .../WindowFunctionalities/TopTests.cs | 18 ++++- .../WindowFunctionalities/TransparentTests.cs | 20 ++++- .../WindowFunctionalities/WidthTests.cs | 29 +++++-- .../WindowFunctionalities/ZoomTests.cs | 17 +++- .../ParentChildWindowTests.cs | 15 +++- tests/InfiniTests.InfiniFrame/WindowTests.cs | 29 +++++-- .../InfiniFrameTestWindow.Linux.cs | 3 +- .../InfiniFrameTestWindow.MacOs.cs | 3 +- .../InfiniFrameTestWindow.Windows.cs | 3 +- 78 files changed, 867 insertions(+), 255 deletions(-) diff --git a/.editorconfig b/.editorconfig index 43bb3c33..0562da80 100644 --- a/.editorconfig +++ b/.editorconfig @@ -147,7 +147,11 @@ resharper_csharp_wrap_before_binary_opsign = true resharper_csharp_wrap_before_declaration_rpar = true resharper_csharp_wrap_extends_list_style = chop_if_long resharper_csharp_wrap_parameters_style = chop_if_long -resharper_force_attribute_style = join +resharper_force_attribute_style = separate +resharper_place_type_attribute_on_same_line = false +resharper_place_method_attribute_on_same_line = false +resharper_place_record_field_attribute_on_same_line = false +resharper_place_accessorholder_attribute_on_same_line = false resharper_formatter_off_tag = @formatter:off resharper_formatter_on_tag = @formatter:on resharper_formatter_tags_enabled = true @@ -155,7 +159,7 @@ resharper_indent_preprocessor_if = usual_indent resharper_indent_preprocessor_other = do_not_change resharper_indent_raw_literal_string = indent resharper_instance_members_qualify_declared_in = -resharper_keep_existing_attribute_arrangement = true +resharper_keep_existing_attribute_arrangement = false resharper_keep_existing_declaration_block_arrangement = true resharper_keep_existing_embedded_block_arrangement = true resharper_max_attribute_length_for_same_line = 10 @@ -163,10 +167,8 @@ resharper_method_or_operator_body = expression_body resharper_nested_ternary_style = expanded resharper_object_creation_when_type_evident = target_typed resharper_parentheses_redundancy_style = remove -resharper_place_accessorholder_attribute_on_same_line = true resharper_place_expr_accessor_on_single_line = true resharper_place_expr_property_on_single_line = true -resharper_place_record_field_attribute_on_same_line = true resharper_place_simple_accessor_on_single_line = false resharper_place_simple_anonymousmethod_on_single_line = false resharper_place_simple_case_statement_on_same_line = true @@ -174,7 +176,6 @@ resharper_place_simple_embedded_statement_on_same_line = true resharper_place_simple_initializer_on_single_line = false resharper_place_simple_list_pattern_on_single_line = false resharper_place_single_method_argument_lambda_on_same_line = false -resharper_place_type_attribute_on_same_line = false resharper_qualified_using_at_nested_scope = true resharper_space_in_singleline_anonymous_method = false resharper_space_within_empty_braces = false diff --git a/src/InfiniFrame.Blazor/Components/InfiniFrameWindowButton.razor b/src/InfiniFrame.Blazor/Components/InfiniFrameWindowButton.razor index f3d48d5e..27835fa4 100644 --- a/src/InfiniFrame.Blazor/Components/InfiniFrameWindowButton.razor +++ b/src/InfiniFrame.Blazor/Components/InfiniFrameWindowButton.razor @@ -182,7 +182,8 @@ @* ------------------------------------------------------------------------------------------------------------------ *@ @code { - [EditorRequired, Parameter] + [EditorRequired] + [Parameter] public required WindowAction WindowAction { get; set; } [Parameter] public string? Class { get; set; } diff --git a/src/InfiniFrame.Blazor/Components/InfiniFrameWindowResizeThumb.razor b/src/InfiniFrame.Blazor/Components/InfiniFrameWindowResizeThumb.razor index e4e486f2..94895253 100644 --- a/src/InfiniFrame.Blazor/Components/InfiniFrameWindowResizeThumb.razor +++ b/src/InfiniFrame.Blazor/Components/InfiniFrameWindowResizeThumb.razor @@ -31,7 +31,8 @@ @* ------------------------------------------------------------------------------------------------------------------ *@ @code { - [EditorRequired, Parameter] + [EditorRequired] + [Parameter] public ResizeOrigin ResizeThumb { get; set; } [Parameter] public int ResizeArea { get; set; } = ResizeAreaValue; diff --git a/src/InfiniFrame.BlazorWebView/FileProviders/Static/StaticWebAssetsManifestJsonContext.cs b/src/InfiniFrame.BlazorWebView/FileProviders/Static/StaticWebAssetsManifestJsonContext.cs index 35a5127d..bf0c66d4 100644 --- a/src/InfiniFrame.BlazorWebView/FileProviders/Static/StaticWebAssetsManifestJsonContext.cs +++ b/src/InfiniFrame.BlazorWebView/FileProviders/Static/StaticWebAssetsManifestJsonContext.cs @@ -7,5 +7,6 @@ namespace InfiniFrame.BlazorWebView.FileProviders.Static; // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- -[JsonSourceGenerationOptions(PropertyNameCaseInsensitive = true), JsonSerializable(typeof(StaticWebAssetManifest))] +[JsonSourceGenerationOptions(PropertyNameCaseInsensitive = true)] +[JsonSerializable(typeof(StaticWebAssetManifest))] internal sealed partial class StaticWebAssetsManifestJsonContext : JsonSerializerContext; diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.CustomSchemes.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.CustomSchemes.cs index 3c1ab895..1d21d7d7 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.CustomSchemes.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.CustomSchemes.cs @@ -9,6 +9,7 @@ namespace InfiniFrame.NativeBridge; // Code // --------------------------------------------------------------------------------------------------------------------- public partial class InfiniFrameNative { - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_AddCustomSchemeName", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_AddCustomSchemeName", SetLastError = true, StringMarshalling = StringMarshalling.Utf8)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus AddCustomSchemeName(IntPtr instance, string scheme); } diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Dialog.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Dialog.cs index 8725f091..50153e96 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Dialog.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Dialog.cs @@ -11,7 +11,8 @@ namespace InfiniFrame.NativeBridge; // Code // --------------------------------------------------------------------------------------------------------------------- public partial class InfiniFrameNative { - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ShowOpenFile", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ShowOpenFile", SetLastError = true, StringMarshalling = StringMarshalling.Utf8)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] private static partial InfiniFrameNativeInteropStatus ShowOpenFilePtr(IntPtr inst, string title, string defaultPath, [MarshalAs(UnmanagedType.I1)] bool multiSelect, string[] filters, int filtersCount, out int resultCount, out IntPtr values); internal static InfiniFrameNativeInteropStatus ShowOpenFile(IntPtr instance, string title, string defaultPath, bool multiSelect, string[] filters, int filtersCount, out string?[] values) { InfiniFrameNativeInteropStatus status = ShowOpenFilePtr(instance, title, defaultPath, multiSelect, filters, filtersCount, out int resultCount, out IntPtr ptrValues); @@ -19,7 +20,8 @@ internal static InfiniFrameNativeInteropStatus ShowOpenFile(IntPtr instance, str return status; } - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ShowOpenFolder", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ShowOpenFolder", SetLastError = true, StringMarshalling = StringMarshalling.Utf8)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] private static partial InfiniFrameNativeInteropStatus ShowOpenFolderPtr(IntPtr inst, string title, string defaultPath, [MarshalAs(UnmanagedType.I1)] bool multiSelect, out int resultCount, out IntPtr values); internal static InfiniFrameNativeInteropStatus ShowOpenFolder(IntPtr instance, string title, string defaultPath, bool multiSelect, out string?[] values) { InfiniFrameNativeInteropStatus status = ShowOpenFolderPtr(instance, title, defaultPath, multiSelect, out int resultCount, out IntPtr ptrValues); @@ -27,7 +29,8 @@ internal static InfiniFrameNativeInteropStatus ShowOpenFolder(IntPtr instance, s return status; } - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ShowSaveFile", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ShowSaveFile", SetLastError = true, StringMarshalling = StringMarshalling.Utf8)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] private static partial InfiniFrameNativeInteropStatus ShowSaveFilePtr(IntPtr inst, string title, string defaultPath, string[] filters, int filtersCount, string? defaultFileName, out IntPtr value); internal static InfiniFrameNativeInteropStatus ShowSaveFile(IntPtr instance, string title, string defaultPath, string[] filters, int filtersCount, string? defaultFileName, out string? value) { InfiniFrameNativeInteropStatus status = ShowSaveFilePtr(instance, title, defaultPath, filters, filtersCount, defaultFileName, out IntPtr ptrValue); @@ -43,7 +46,8 @@ internal static InfiniFrameNativeInteropStatus ShowSaveFile(IntPtr instance, str return status; } - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ShowMessage", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ShowMessage", SetLastError = true, StringMarshalling = StringMarshalling.Utf8)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus ShowMessage(IntPtr inst, string title, string text, InfiniFrameDialogButtons buttons, InfiniFrameDialogIcon icon, out InfiniFrameDialogResult value); private static string?[] PtrToNativeStringArray(IntPtr valuesPtr, int count) { diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Dispatch.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Dispatch.cs index f34e9718..88951aa2 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Dispatch.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Dispatch.cs @@ -9,6 +9,7 @@ namespace InfiniFrame.NativeBridge; // Code // --------------------------------------------------------------------------------------------------------------------- public partial class InfiniFrameNative { - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_Invoke", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_Invoke", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus Invoke(IntPtr instance, Action callback); } diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Events.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Events.cs index cc5e011a..daaf9e77 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Events.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Events.cs @@ -10,21 +10,27 @@ namespace InfiniFrame.NativeBridge; // Code // --------------------------------------------------------------------------------------------------------------------- public partial class InfiniFrameNative { - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetClosingCallback", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetClosingCallback", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetClosingCallback(IntPtr instance, CppClosingDelegate callback); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_setClosedCallback", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_setClosedCallback", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetClosedCallback(IntPtr instance, CppClosedDelegate callback); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetFocusInCallback", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetFocusInCallback", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetFocusInCallback(IntPtr instance, CppFocusInDelegate callback); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetFocusOutCallback", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetFocusOutCallback", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetFocusOutCallback(IntPtr instance, CppFocusOutDelegate callback); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetMovedCallback", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetMovedCallback", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetMovedCallback(IntPtr instance, CppMovedDelegate callback); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetResizedCallback", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetResizedCallback", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetResizedCallback(IntPtr instance, CppResizedDelegate callback); } diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Lifecycle.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Lifecycle.cs index 9706fa3e..3f83bce0 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Lifecycle.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Lifecycle.cs @@ -11,15 +11,19 @@ namespace InfiniFrame.NativeBridge; // Code // --------------------------------------------------------------------------------------------------------------------- public partial class InfiniFrameNative { - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ctor", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ctor", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus Constructor([MarshalUsing(typeof(InfiniFrameNativeParametersMarshaller))] in InfiniFrameNativeParameters parameters, out IntPtr value); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_dtor"), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_dtor")] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus Destructor(IntPtr instance); - - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_Close", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_Close", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus Close(IntPtr instance); - - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_WaitForExit", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_WaitForExit", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus WaitForExit(IntPtr instance); } diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Memory.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Memory.cs index ada2ca8e..970a94c2 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Memory.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Memory.cs @@ -9,13 +9,16 @@ namespace InfiniFrame.NativeBridge; // Code // --------------------------------------------------------------------------------------------------------------------- public partial class InfiniFrameNative { - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_FreeString", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_FreeString", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus FreeString(IntPtr value); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_FreeStringArray", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_FreeStringArray", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus FreeStringArray(IntPtr values, int count); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetLastErrorMessage", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetLastErrorMessage", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] private static partial InfiniFrameNativeInteropStatus GetLastErrorMessagePtr(out IntPtr value); internal static string? GetLastErrorMessage() { diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Monitors.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Monitors.cs index 1b3e7f7b..6e4095aa 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Monitors.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Monitors.cs @@ -10,6 +10,7 @@ namespace InfiniFrame.NativeBridge; // Code // --------------------------------------------------------------------------------------------------------------------- public partial class InfiniFrameNative { - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetAllMonitors", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetAllMonitors", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetAllMonitors(IntPtr instance, CppGetAllMonitorsDelegate callback); } diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Platform.MacOs.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Platform.MacOs.cs index c7efcc65..f08f561d 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Platform.MacOs.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Platform.MacOs.cs @@ -9,6 +9,7 @@ namespace InfiniFrame.NativeBridge; // Code // --------------------------------------------------------------------------------------------------------------------- public partial class InfiniFrameNative { - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_register_mac", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_register_mac", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus RegisterMac(); } diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Platform.Windows.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Platform.Windows.cs index 7fbebb5e..7a82b134 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Platform.Windows.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Platform.Windows.cs @@ -9,16 +9,20 @@ namespace InfiniFrame.NativeBridge; // Code // --------------------------------------------------------------------------------------------------------------------- public partial class InfiniFrameNative { - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_register_win32", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_register_win32", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus RegisterWin32(IntPtr hInstance); - - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_getHwnd_win32", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_getHwnd_win32", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetWindowHandlerWin32(IntPtr instance, out IntPtr value); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_setWebView2RuntimePath_win32", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_setWebView2RuntimePath_win32", SetLastError = true, StringMarshalling = StringMarshalling.Utf8)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetWebView2RuntimePath_win32(IntPtr instance, string webView2RuntimePath); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetNotificationsEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetNotificationsEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetNotificationsEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); } diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Actions.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Actions.cs index 0509a826..0e8fa319 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Actions.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Actions.cs @@ -10,18 +10,23 @@ namespace InfiniFrame.NativeBridge; // Code // --------------------------------------------------------------------------------------------------------------------- public partial class InfiniFrameNative { - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_Center", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_Center", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus Center(IntPtr instance); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_Restore", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_Restore", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus Restore(IntPtr instance); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ClearBrowserAutoFill", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ClearBrowserAutoFill", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus ClearBrowserAutoFill(IntPtr instance); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetFocused", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetFocused", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetFocused(IntPtr instance); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ShowNotification", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ShowNotification", SetLastError = true, StringMarshalling = StringMarshalling.Utf8)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus ShowNotification(IntPtr instance, string title, string body); } diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Get.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Get.cs index 840ee9f0..6e3265e6 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Get.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Get.cs @@ -10,79 +10,104 @@ namespace InfiniFrame.NativeBridge; // Code // --------------------------------------------------------------------------------------------------------------------- public partial class InfiniFrameNative { - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetTransparentEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetTransparentEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetTransparentEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetContextMenuEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetContextMenuEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetContextMenuEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetZoomEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetZoomEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetZoomEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool zoomEnabled); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetDevToolsEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetDevToolsEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetDevToolsEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetFullScreen", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetFullScreen", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetFullScreen(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool fullScreen); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetGrantBrowserPermissions", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetGrantBrowserPermissions", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetGrantBrowserPermissions(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool grant); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMediaAutoplayEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMediaAutoplayEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetMediaAutoplayEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetFileSystemAccessEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetFileSystemAccessEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetFileSystemAccessEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetWebSecurityEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetWebSecurityEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetWebSecurityEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetJavascriptClipboardAccessEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetJavascriptClipboardAccessEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetJavascriptClipboardAccessEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMediaStreamEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMediaStreamEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetMediaStreamEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetSmoothScrollingEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetSmoothScrollingEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetSmoothScrollingEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetIgnoreCertificateErrorsEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetIgnoreCertificateErrorsEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetIgnoreCertificateErrorsEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMaximized", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMaximized", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetMaximized(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool maximized); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMinimized", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMinimized", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetMinimized(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool minimized); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetResizable", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetResizable", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetResizable(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool resizable); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetTopmost", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetTopmost", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetTopmost(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool topmost); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetFocused", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetFocused", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetFocused(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool isFocused); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetPosition", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetPosition", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetPosition(IntPtr instance, out int x, out int y); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetSize", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetSize(IntPtr instance, out int width, out int height); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMaxSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMaxSize", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetMaxSize(IntPtr instance, out int maxWidth, out int maxHeight); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMinSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMinSize", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetMinSize(IntPtr instance, out int minWidth, out int minHeight); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetScreenDpi", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetScreenDpi", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetScreenDpi(IntPtr instance, out uint value); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetZoom", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetZoom", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus GetZoom(IntPtr instance, out int zoom); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetUserAgent", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetUserAgent", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] private static partial InfiniFrameNativeInteropStatus GetUserAgentPtr(IntPtr instance, out IntPtr value); internal static InfiniFrameNativeInteropStatus GetUserAgent(IntPtr instance, out string? userAgent) { InfiniFrameNativeInteropStatus status = GetUserAgentPtr(instance, out IntPtr ptr); @@ -98,7 +123,8 @@ internal static InfiniFrameNativeInteropStatus GetUserAgent(IntPtr instance, out return status; } - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetTitle", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetTitle", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] private static partial InfiniFrameNativeInteropStatus GetTitlePtr(IntPtr instance, out IntPtr value); internal static InfiniFrameNativeInteropStatus GetTitle(IntPtr instance, out string? title) { InfiniFrameNativeInteropStatus status = GetTitlePtr(instance, out IntPtr ptr); @@ -114,7 +140,8 @@ internal static InfiniFrameNativeInteropStatus GetTitle(IntPtr instance, out str return status; } - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetIconFileName", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetIconFileName", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] private static partial InfiniFrameNativeInteropStatus GetIconFileNamePtr(IntPtr instance, out IntPtr value); internal static InfiniFrameNativeInteropStatus GetIconFileName(IntPtr instance, out string iconFileName) { InfiniFrameNativeInteropStatus status = GetIconFileNamePtr(instance, out IntPtr ptr); diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Navigation.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Navigation.cs index 345b5a3f..deff2e01 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Navigation.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Navigation.cs @@ -10,12 +10,15 @@ namespace InfiniFrame.NativeBridge; // Code // --------------------------------------------------------------------------------------------------------------------- public partial class InfiniFrameNative { - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_NavigateToString", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_NavigateToString", SetLastError = true, StringMarshalling = StringMarshalling.Utf8)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus NavigateToString(IntPtr instance, string content); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_NavigateToUrl", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_NavigateToUrl", SetLastError = true, StringMarshalling = StringMarshalling.Utf8)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus NavigateToUrl(IntPtr instance, string url); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SendWebMessage", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SendWebMessage", SetLastError = true, StringMarshalling = StringMarshalling.Utf8)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SendWebMessage(IntPtr instance, string message); } diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Set.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Set.cs index fb8ccfa7..30d832f3 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Set.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Set.cs @@ -10,51 +10,67 @@ namespace InfiniFrame.NativeBridge; // Code // --------------------------------------------------------------------------------------------------------------------- public partial class InfiniFrameNative { - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetTransparentEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetTransparentEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetTransparentEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool enabled); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetContextMenuEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetContextMenuEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetContextMenuEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool enabled); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetZoomEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetZoomEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetZoomEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool zoomEnabled); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetDevToolsEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetDevToolsEnabled", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetDevToolsEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool enabled); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetFullScreen", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetFullScreen", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetFullScreen(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool fullScreen); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetMaximized", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetMaximized", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetMaximized(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool maximized); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetMinimized", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetMinimized", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetMinimized(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool minimized); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetResizable", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetResizable", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetResizable(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool resizable); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetTopmost", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetTopmost", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetTopmost(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool topmost); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetIconFile", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetIconFile", SetLastError = true, StringMarshalling = StringMarshalling.Utf8)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetIconFile(IntPtr instance, string filename); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetTitle", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetTitle", SetLastError = true, StringMarshalling = StringMarshalling.Utf8)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetTitle(IntPtr instance, string? title); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetZoom", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetZoom", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetZoom(IntPtr instance, int zoom); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetPosition", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetPosition", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetPosition(IntPtr instance, int x, int y); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetSize", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetSize(IntPtr instance, int width, int height); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetMaxSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetMaxSize", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetMaxSize(IntPtr instance, int maxWidth, int maxHeight); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetMinSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetMinSize", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] internal static partial InfiniFrameNativeInteropStatus SetMinSize(IntPtr instance, int minWidth, int minHeight); } diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Testing/InfiniFrameNative.Testing.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Testing/InfiniFrameNative.Testing.cs index 068dbd2b..75fc815f 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Testing/InfiniFrameNative.Testing.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Testing/InfiniFrameNative.Testing.cs @@ -11,14 +11,16 @@ namespace InfiniFrame.NativeBridge; // Code // --------------------------------------------------------------------------------------------------------------------- public partial class InfiniFrameNativeTesting { - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNativeTests_NativeParametersReturnAsIs", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNativeTests_NativeParametersReturnAsIs", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] private static partial InfiniFrameNativeInteropStatus NativeParametersReturnAsIsNative( [MarshalUsing(typeof(InfiniFrameNativeParametersMarshaller))] in InfiniFrameNativeParameters parameters, out IntPtr newParameters ); - [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNativeTests_FreeInitParams", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNativeTests_FreeInitParams", SetLastError = true)] + [UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] private static partial InfiniFrameNativeInteropStatus FreeInitParamsNative(IntPtr parameters); /// diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeMonitor.cs b/src/InfiniFrame.NativeBridge/Managed/NativeMonitor.cs index 091e2dee..5785b3ea 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeMonitor.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeMonitor.cs @@ -13,7 +13,8 @@ namespace InfiniFrame.NativeBridge; /// to and from native system calls. This structure is defined in a sequential layout for direct, /// unmanaged access to the underlying memory. /// -[StructLayout(LayoutKind.Sequential), SuppressMessage("ReSharper", "UnusedAutoPropertyAccessor.Global")] +[StructLayout(LayoutKind.Sequential)] +[SuppressMessage("ReSharper", "UnusedAutoPropertyAccessor.Global")] public struct NativeMonitor { public NativeRect Monitor { get; set; } public NativeRect Work { get; set; } diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeRect.cs b/src/InfiniFrame.NativeBridge/Managed/NativeRect.cs index 500b647b..82673f36 100644 --- a/src/InfiniFrame.NativeBridge/Managed/NativeRect.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeRect.cs @@ -11,7 +11,8 @@ namespace InfiniFrame.NativeBridge; /// /// Represents a 2D rectangle in a native (integer-based) coordinate system. /// -[StructLayout(LayoutKind.Sequential), SuppressMessage("ReSharper", "UnusedAutoPropertyAccessor.Global")] +[StructLayout(LayoutKind.Sequential)] +[SuppressMessage("ReSharper", "UnusedAutoPropertyAccessor.Global")] public struct NativeRect { public int X { get; set; } public int Y { get; set; } diff --git a/tests/InfiniAutomationTests.BlazorWebView.MudBlazor/CustomElementsTests.cs b/tests/InfiniAutomationTests.BlazorWebView.MudBlazor/CustomElementsTests.cs index 733cb2ab..0eb5659a 100644 --- a/tests/InfiniAutomationTests.BlazorWebView.MudBlazor/CustomElementsTests.cs +++ b/tests/InfiniAutomationTests.BlazorWebView.MudBlazor/CustomElementsTests.cs @@ -14,7 +14,8 @@ namespace InfiniAutomationTests.BlazorWebView.MudBlazor; public sealed class CustomElementsTests : InfiniFramePlaywrightTestBase { protected override IPlaywrightRuntimeContext RuntimeContext => PlaywrightContext.Instance; - [Test, NotInParallelInfiniAutomationTests] + [Test] + [NotInParallelInfiniAutomationTests] public async Task CustomElement_Registers_Renders_AndUpdatesFromAttributes(CancellationToken ct = default) { IPage page = await GetRootPageAsync(); @@ -81,7 +82,8 @@ await EvaluateWhenPageReadyAsync( await Assert.That(renderedBeta).IsEqualTo("beta"); } - [Test, NotInParallelInfiniAutomationTests] + [Test] + [NotInParallelInfiniAutomationTests] public async Task JsComponent_WithoutInitializer_AutoRegisters_AsCustomElement_ByDefault(CancellationToken ct = default) { IPage page = await GetRootPageAsync(); diff --git a/tests/InfiniAutomationTests.BlazorWebView.MudBlazor/ScriptSrcImportTests.cs b/tests/InfiniAutomationTests.BlazorWebView.MudBlazor/ScriptSrcImportTests.cs index d5dd0384..cac1f843 100644 --- a/tests/InfiniAutomationTests.BlazorWebView.MudBlazor/ScriptSrcImportTests.cs +++ b/tests/InfiniAutomationTests.BlazorWebView.MudBlazor/ScriptSrcImportTests.cs @@ -15,7 +15,8 @@ namespace InfiniAutomationTests.BlazorWebView.MudBlazor; public sealed class ScriptSrcImportTests : InfiniFramePlaywrightTestBase { protected override IPlaywrightRuntimeContext RuntimeContext => PlaywrightContext.Instance; - [Test, NotInParallelInfiniAutomationTests] + [Test] + [NotInParallelInfiniAutomationTests] public async Task ClassicScriptSrc_IsLoaded_AndExecutesCode(CancellationToken ct = default) { IPage page = await GetRootPageAsync(); diff --git a/tests/InfiniAutomationTests/Tests/SharedJavascriptInteropTests.cs b/tests/InfiniAutomationTests/Tests/SharedJavascriptInteropTests.cs index 9bc66d98..5594986e 100644 --- a/tests/InfiniAutomationTests/Tests/SharedJavascriptInteropTests.cs +++ b/tests/InfiniAutomationTests/Tests/SharedJavascriptInteropTests.cs @@ -16,7 +16,8 @@ public abstract class SharedJavascriptInteropTests : InfiniFramePlaywrightTestBa protected virtual string ToggledTitle => "New Title"; - [Test, NotInParallelInfiniAutomationTests] + [Test] + [NotInParallelInfiniAutomationTests] public async Task FullscreenHtmlButton_ShouldToggleInfiniFrameFullscreen(CancellationToken ct = default) { bool originalFullscreenState = RuntimeContext.Window.FullScreen; IPage page = await GetRootPageAsync(); @@ -38,7 +39,8 @@ public async Task FullscreenHtmlButton_ShouldToggleInfiniFrameFullscreen(Cancell await Assert.That(finalFullscreenState).IsFalse(); } - [Test, NotInParallelInfiniAutomationTests] + [Test] + [NotInParallelInfiniAutomationTests] public async Task TitleHtmlButton_ShouldToggleInfiniFrameTitle(CancellationToken ct = default) { IPage page = await GetRootPageAsync(); string? originalTitleState = RuntimeContext.Window.Title; @@ -70,7 +72,8 @@ await EvaluateWhenPageReadyAsync( } } - [Test, NotInParallelInfiniAutomationTests] + [Test] + [NotInParallelInfiniAutomationTests] public async Task GetTitleAsyncFromJs_ShouldReturnNativeWindowTitle(CancellationToken ct = default) { // Arrange IPage page = await GetRootPageAsync(); @@ -87,7 +90,8 @@ public async Task GetTitleAsyncFromJs_ShouldReturnNativeWindowTitle(Cancellation await Assert.That(titleFromJsInitially).IsEqualTo(originalTitleState); } - [Test, NotInParallelInfiniAutomationTests] + [Test] + [NotInParallelInfiniAutomationTests] public async Task GetTitleAsyncFromJs_ShouldReturnNativeWindowTitle_AndShouldReturnCorrectTitle(CancellationToken ct = default) { IPage page = await GetRootPageAsync(); string? originalTitleState = RuntimeContext.Window.Title; diff --git a/tests/InfiniAutomationTests/Tests/SharedJavascriptTests.cs b/tests/InfiniAutomationTests/Tests/SharedJavascriptTests.cs index b5d20e12..16de90f5 100644 --- a/tests/InfiniAutomationTests/Tests/SharedJavascriptTests.cs +++ b/tests/InfiniAutomationTests/Tests/SharedJavascriptTests.cs @@ -16,7 +16,8 @@ public abstract class SharedJavascriptTests : InfiniFramePlaywrightTestBase { // ----------------------------------------------------------------------------------------------------------------- // Methods // ----------------------------------------------------------------------------------------------------------------- - [Test, NotInParallelInfiniAutomationTests] + [Test] + [NotInParallelInfiniAutomationTests] public async Task InfiniWindowIsInitialized(CancellationToken ct = default) { IPage page = await GetRootPageAsync(); var initState = await EvaluateWhenPageReadyAsync( @@ -40,7 +41,8 @@ public async Task InfiniWindowIsInitialized(CancellationToken ct = default) { await Assert.That(initState.GetProperty("hasUtils").GetBoolean()).IsTrue(); } - [Test, NotInParallelInfiniAutomationTests] + [Test] + [NotInParallelInfiniAutomationTests] public async Task DynamicallyUpdateTitleFromJs(CancellationToken ct = default) { IPage page = await GetRootPageAsync(); string? originalTitle = RuntimeContext.Window.Title; @@ -60,7 +62,8 @@ await EvaluateWhenPageReadyAsync( RuntimeContext.Window.SetTitle(RuntimeContext.DefaultDocumentTitle); } - [Test, NotInParallelInfiniAutomationTests] + [Test] + [NotInParallelInfiniAutomationTests] public async Task WindowClose(CancellationToken ct = default) { IPage page = await GetRootPageAsync(); int initialCloseRequestCount = RuntimeContext.GetWindowCloseRequestCount(); diff --git a/tests/InfiniAutomationTests/Tests/SharedWebviewWindowTests.cs b/tests/InfiniAutomationTests/Tests/SharedWebviewWindowTests.cs index b9a2b290..ede31607 100644 --- a/tests/InfiniAutomationTests/Tests/SharedWebviewWindowTests.cs +++ b/tests/InfiniAutomationTests/Tests/SharedWebviewWindowTests.cs @@ -9,7 +9,8 @@ namespace InfiniAutomationTests.Tests; // Code // --------------------------------------------------------------------------------------------------------------------- public abstract class SharedWebviewWindowTests : InfiniFramePlaywrightTestBase { - [Test, NotInParallelInfiniAutomationTests] + [Test] + [NotInParallelInfiniAutomationTests] public async Task Title_ShouldBeExpectedValue(CancellationToken ct = default) { IPage page = await GetRootPageAsync(); diff --git a/tests/InfiniTests.InfiniFrame.BlazorWebView/InfiniFrameBlazorAppBuilderTests.cs b/tests/InfiniTests.InfiniFrame.BlazorWebView/InfiniFrameBlazorAppBuilderTests.cs index 99a35289..87949a4f 100644 --- a/tests/InfiniTests.InfiniFrame.BlazorWebView/InfiniFrameBlazorAppBuilderTests.cs +++ b/tests/InfiniTests.InfiniFrame.BlazorWebView/InfiniFrameBlazorAppBuilderTests.cs @@ -163,7 +163,10 @@ public async Task CreateDefault_ExceptionSourceRejectsNullHandler(CancellationTo await Assert.That(exception!.ParamName).IsEqualTo("handler"); } - [Test, NotInParallelInfiniTests, SkipOnMacOs, SkipOnLinux] + [Test] + [NotInParallelInfiniTests] + [SkipOnMacOs] + [SkipOnLinux] public async Task Run_WindowAlreadyClosed_DoesNotInvokeWindowAndDisposesServices(CancellationToken ct = default) { // Arrange var window = Substitute.For(); @@ -189,7 +192,8 @@ public async Task Run_WindowAlreadyClosed_DoesNotInvokeWindowAndDisposesServices await Assert.That(disposeProbe.IsDisposed).IsTrue(); } - [Test, NotInParallelInfiniTests] + [Test] + [NotInParallelInfiniTests] public async Task SetBrowserControlInitParameters_ThroughCreateDefault_ShouldWork(CancellationToken ct = default) { // Arrange string[] args = Array.Empty(); @@ -214,7 +218,8 @@ await Assert.That(appbuilder.WindowBuilder.Configuration.BrowserControlInitParam ); } - [Test, NotInParallelInfiniTests] + [Test] + [NotInParallelInfiniTests] public async Task SetBrowserControlInitParameters_ThroughAppBuilder_ShouldWork(CancellationToken ct = default) { // Arrange string[] args = Array.Empty(); @@ -239,7 +244,10 @@ await Assert.That(appbuilder.WindowBuilder.Configuration.BrowserControlInitParam ); } - [Test, NotInParallelInfiniTests, SkipOnMacOs("Given init parameters are not supported on macOS"), SkipOnLinux("Given init parameters are not supported on Linux")] + [Test] + [NotInParallelInfiniTests] + [SkipOnMacOs("Given init parameters are not supported on macOS")] + [SkipOnLinux("Given init parameters are not supported on Linux")] public async Task SetBrowserControlInitParameters_ThroughCreateDefault_ShouldWorkOnWindow(CancellationToken ct = default) { // Arrange string[] args = Array.Empty(); @@ -267,7 +275,10 @@ await Assert.That(window.BrowserControlInitParameters).IsEqualTo( ); } - [Test, NotInParallelInfiniTests, SkipOnMacOs("Given init parameters are not supported on macOS"), SkipOnLinux("Given init parameters are not supported on Linux")] + [Test] + [NotInParallelInfiniTests] + [SkipOnMacOs("Given init parameters are not supported on macOS")] + [SkipOnLinux("Given init parameters are not supported on Linux")] public async Task SetBrowserControlInitParameters_ThroughAppBuilder_ShouldWorkOnWindow(CancellationToken ct = default) { // Arrange string[] args = Array.Empty(); diff --git a/tests/InfiniTests.InfiniFrame.BlazorWebView/StaticWebAssetsRuntimeFileProviderTests.cs b/tests/InfiniTests.InfiniFrame.BlazorWebView/StaticWebAssetsRuntimeFileProviderTests.cs index 41cf06e4..fcb29a9a 100644 --- a/tests/InfiniTests.InfiniFrame.BlazorWebView/StaticWebAssetsRuntimeFileProviderTests.cs +++ b/tests/InfiniTests.InfiniFrame.BlazorWebView/StaticWebAssetsRuntimeFileProviderTests.cs @@ -11,7 +11,8 @@ namespace InfiniTests.InfiniFrame.BlazorWebView; // --------------------------------------------------------------------------------------------------------------------- public class StaticWebAssetsRuntimeFileProviderTests { // ReSharper disable SimilarAnonymousTypeNearby - [Test, Retry(5)] + [Test] + [Retry(5)] public async Task TryCreate_WithEqualScores_ShouldUseDeterministicManifestTieBreaker(CancellationToken ct = default) { // Arrange using var fixture = new TempStaticWebAssetsFixture(); @@ -65,7 +66,8 @@ await fixture.WriteManifestAsync(new { await Assert.That(content).IsEqualTo("alpha"); } - [Test, Retry(5)] + [Test] + [Retry(5)] public async Task TryCreate_WhenManifestContainsExplicitAsset_ShouldResolveFile(CancellationToken ct = default) { // Arrange using var fixture = new TempStaticWebAssetsFixture(); @@ -106,7 +108,8 @@ await fixture.WriteManifestAsync(new { await Assert.That(fileInfo.Name).IsEqualTo("editor-bridge.js"); } - [Test, Retry(5)] + [Test] + [Retry(5)] public async Task TryCreate_WhenManifestContainsWildcardPattern_ShouldResolveFileFromPattern(CancellationToken ct = default) { // Arrange using var fixture = new TempStaticWebAssetsFixture(); @@ -148,7 +151,8 @@ await fixture.WriteManifestAsync(new { await Assert.That(fileInfo.Name).IsEqualTo("module.js"); } - [Test, Retry(5)] + [Test] + [Retry(5)] public async Task TryCreate_WithMultipleManifests_ShouldPreferAppManifest(CancellationToken ct = default) { // Arrange using var fixture = new TempStaticWebAssetsFixture(); @@ -222,7 +226,8 @@ await fixture.WriteManifestAsync(new { await Assert.That(jsInfo!.Exists).IsTrue(); } - [Test, Retry(5)] + [Test] + [Retry(5)] public async Task GetDirectoryContents_WhenNodeHasPatternsButNoChildren_ReturnsExistingDirectory(CancellationToken ct = default) { // Arrange using var fixture = new TempStaticWebAssetsFixture(); @@ -260,7 +265,8 @@ await fixture.WriteManifestAsync(new { await Assert.That(contents.Any()).IsFalse(); } - [Test, Retry(5)] + [Test] + [Retry(5)] public async Task GetFileInfo_WhenCalledConcurrently_ShouldRemainStable(CancellationToken ct = default) { // Arrange using var fixture = new TempStaticWebAssetsFixture(); diff --git a/tests/InfiniTests.InfiniFrame.Tools.Pack/Services/PublishServiceTests.cs b/tests/InfiniTests.InfiniFrame.Tools.Pack/Services/PublishServiceTests.cs index 834dddc3..832033db 100644 --- a/tests/InfiniTests.InfiniFrame.Tools.Pack/Services/PublishServiceTests.cs +++ b/tests/InfiniTests.InfiniFrame.Tools.Pack/Services/PublishServiceTests.cs @@ -115,7 +115,8 @@ await ExecuteWithTimeout( await Assert.That(exception!.Message.Contains("Could not resolve required InfiniFrame native artifacts from project publish output.", StringComparison.Ordinal)).IsTrue(); } - [Test, SkipOnMacOs("4 Hours lost on trying to fix this on macOs... too much time to spent on this.")] + [Test] + [SkipOnMacOs("4 Hours lost on trying to fix this on macOs... too much time to spent on this.")] public async Task PublishAsync_ReturnsSuccessAndSingleFileOutput_WhenProjectIncludesInfiniFrame() { SharedPublishFixture fixture = await ExecuteWithTimeout( GetOrCreateSharedPublishFixtureAsync(), @@ -128,7 +129,8 @@ public async Task PublishAsync_ReturnsSuccessAndSingleFileOutput_WhenProjectIncl await Assert.That(Directory.GetFileSystemEntries(fixture.OutputPath, "*", SearchOption.TopDirectoryOnly).Length).IsEqualTo(1); } - [Test, SkipOnMacOs("4 Hours lost on trying to fix this on macOs... too much time to spent on this.")] + [Test] + [SkipOnMacOs("4 Hours lost on trying to fix this on macOs... too much time to spent on this.")] public async Task PublishAsync_LaunchedPackedApp_InitializesBootstrapAndExitsSuccessfully() { SharedPublishFixture fixture = await ExecuteWithTimeout( GetOrCreateSharedPublishFixtureAsync(), diff --git a/tests/InfiniTests.InfiniFrame.WebServer/InfiniFrameWebApplicationTests.cs b/tests/InfiniTests.InfiniFrame.WebServer/InfiniFrameWebApplicationTests.cs index 1473daad..e1842d3f 100644 --- a/tests/InfiniTests.InfiniFrame.WebServer/InfiniFrameWebApplicationTests.cs +++ b/tests/InfiniTests.InfiniFrame.WebServer/InfiniFrameWebApplicationTests.cs @@ -173,7 +173,8 @@ await Assert.That(appLifetime.ApplicationStopping.IsCancellationRequested) .IsTrue(); } - [Test, Retry(5)] + [Test] + [Retry(5)] public async Task Stop_ShouldCloseWindowAndStopWebApp() { // Arrange IInfiniFrameWindow mockWindow = CreateMockWindow(); diff --git a/tests/InfiniTests.InfiniFrame/Interop/InteropEnvelopeProtocolTests.cs b/tests/InfiniTests.InfiniFrame/Interop/InteropEnvelopeProtocolTests.cs index 8f48239d..b1c808fc 100644 --- a/tests/InfiniTests.InfiniFrame/Interop/InteropEnvelopeProtocolTests.cs +++ b/tests/InfiniTests.InfiniFrame/Interop/InteropEnvelopeProtocolTests.cs @@ -44,7 +44,8 @@ private static string ResolveGoldenVectorsPath() { // ----------------------------------------------------------------------------------------------------------------- // Test Methods // ----------------------------------------------------------------------------------------------------------------- - [Test, Retry(5)] + [Test] + [Retry(5)] public async Task CreateEnvelope_GoldenVectors(CancellationToken ct = default) { // Arrange JsonDocument goldenVectorsDocument = await GetGoldenVectorsAsync(ct); @@ -64,7 +65,8 @@ public async Task CreateEnvelope_GoldenVectors(CancellationToken ct = default) { } } - [Test, Retry(5)] + [Test] + [Retry(5)] public async Task ParseEnvelope_GoldenVectors(CancellationToken ct = default) { // Arrange JsonDocument goldenVectorsDocument = await GetGoldenVectorsAsync(ct); @@ -95,7 +97,8 @@ public async Task ParseEnvelope_GoldenVectors(CancellationToken ct = default) { } } - [Test, Retry(5)] + [Test] + [Retry(5)] public async Task Parse_TooLargeMessage_IsRejected(CancellationToken ct = default) { // Arrange string message = new('a', InteropEnvelopeProtocol.MaxMessageSizeBytes + 1); diff --git a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowClosedEventTests.cs b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowClosedEventTests.cs index ede84435..ef96082b 100644 --- a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowClosedEventTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowClosedEventTests.cs @@ -8,7 +8,10 @@ namespace InfiniTests.InfiniFrame.WindowEvents; // Code // --------------------------------------------------------------------------------------------------------------------- public class WindowClosedEventTests { - [Test, Retry(5), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [Retry(5)] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task TestWindowClosedEvent(CancellationToken ct = default) { // Arrange int closedEventCount = 0; diff --git a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowClosingRequestedEventTests.cs b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowClosingRequestedEventTests.cs index c8a4bbaf..35010e43 100644 --- a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowClosingRequestedEventTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowClosingRequestedEventTests.cs @@ -8,7 +8,10 @@ namespace InfiniTests.InfiniFrame.WindowEvents; // Code // --------------------------------------------------------------------------------------------------------------------- public class WindowClosingRequestedEventTests { - [Test, Retry(5), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [Retry(5)] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task TestWindowClosingRequestedEvent(CancellationToken ct = default) { // Arrange int closingRequestedEventCount = 0; diff --git a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowCreatedEventTests.cs b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowCreatedEventTests.cs index 30442556..71e29d1b 100644 --- a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowCreatedEventTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowCreatedEventTests.cs @@ -8,7 +8,10 @@ namespace InfiniTests.InfiniFrame.WindowEvents; // Code // --------------------------------------------------------------------------------------------------------------------- public class WindowCreatedEventTests { - [Test, Retry(5), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [Retry(5)] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task TestWindowCreatedEvent(CancellationToken ct = default) { // Arrange int createdEventCount = 0; @@ -25,7 +28,10 @@ public async Task TestWindowCreatedEvent(CancellationToken ct = default) { await Assert.That(createdEventCount).IsEqualTo(1); } - [Test, Retry(3), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [Retry(3)] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task TestSendWebMessageFromWindowCreatedDoesNotCrash(CancellationToken ct = default) { // Arrange: register a WindowCreated handler that immediately calls SendWebMessage. // Before the fix this raised SystemAccessViolationException on Windows because diff --git a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowCreatingEventTests.cs b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowCreatingEventTests.cs index 14c992ee..f96a8504 100644 --- a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowCreatingEventTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowCreatingEventTests.cs @@ -8,7 +8,10 @@ namespace InfiniTests.InfiniFrame.WindowEvents; // Code // --------------------------------------------------------------------------------------------------------------------- public class WindowCreatingEventTests { - [Test, Retry(5), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [Retry(5)] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task TestWindowCreatingEvent(CancellationToken ct = default) { // Arrange int creatingEventCount = 0; diff --git a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowFocusInEventTests.cs b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowFocusInEventTests.cs index e9537fce..57331aa6 100644 --- a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowFocusInEventTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowFocusInEventTests.cs @@ -8,7 +8,11 @@ namespace InfiniTests.InfiniFrame.WindowEvents; // Code // --------------------------------------------------------------------------------------------------------------------- public class WindowFocusInEventTests { - [Test, Retry(5), SkipOnMacOs, SkipOnLinux("Focus transitions are desktop-state dependent under WSLg/local Linux runs"), NotInParallelInfiniTests] + [Test] + [Retry(5)] + [SkipOnMacOs] + [SkipOnLinux("Focus transitions are desktop-state dependent under WSLg/local Linux runs")] + [NotInParallelInfiniTests] public async Task TestWindowFocusInEvent(CancellationToken ct = default) { // Arrange int focusInEventCount = 0; diff --git a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowFocusOutEventTests.cs b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowFocusOutEventTests.cs index d2022f07..c14a82ec 100644 --- a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowFocusOutEventTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowFocusOutEventTests.cs @@ -8,7 +8,12 @@ namespace InfiniTests.InfiniFrame.WindowEvents; // Code // --------------------------------------------------------------------------------------------------------------------- public class WindowFocusOutEventTests { - [Test, Retry(5), SkipOnMacOs, SkipOnWindowsArm("WM_ACTIVATE WA_INACTIVE is not reliably delivered on headless ARM64 CI runners"), SkipOnLinux("Focus transitions are desktop-state dependent under WSLg/local Linux runs"), NotInParallelInfiniTests] + [Test] + [Retry(5)] + [SkipOnMacOs] + [SkipOnWindowsArm("WM_ACTIVATE WA_INACTIVE is not reliably delivered on headless ARM64 CI runners")] + [SkipOnLinux("Focus transitions are desktop-state dependent under WSLg/local Linux runs")] + [NotInParallelInfiniTests] public async Task TestWindowFocusOutEvent(CancellationToken ct = default) { // Arrange int focusOutEventCount = 0; diff --git a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowLocationChangedEventTests.cs b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowLocationChangedEventTests.cs index 857c13f8..5354d2bf 100644 --- a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowLocationChangedEventTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowLocationChangedEventTests.cs @@ -8,7 +8,11 @@ namespace InfiniTests.InfiniFrame.WindowEvents; // Code // --------------------------------------------------------------------------------------------------------------------- public class WindowLocationChangedEventTests { - [Test, Retry(5), SkipOnMacOs, SkipOnLinux("Location transitions are desktop-state dependent under WSLg/local Linux runs"), NotInParallelInfiniTests] + [Test] + [Retry(5)] + [SkipOnMacOs] + [SkipOnLinux("Location transitions are desktop-state dependent under WSLg/local Linux runs")] + [NotInParallelInfiniTests] public async Task TestWindowLocationChangedEvent(CancellationToken ct = default) { // Arrange int locationChangedCount = 0; diff --git a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowMaximizedEventTests.cs b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowMaximizedEventTests.cs index 960e826c..3366a768 100644 --- a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowMaximizedEventTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowMaximizedEventTests.cs @@ -8,7 +8,10 @@ namespace InfiniTests.InfiniFrame.WindowEvents; // Code // --------------------------------------------------------------------------------------------------------------------- public class WindowMaximizedEventTests { - [Test, Retry(5), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [Retry(5)] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task TestWindowMaximizedEvent(CancellationToken ct = default) { // Arrange int maximizedEventCount = 0; diff --git a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowMinimizedEventTests.cs b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowMinimizedEventTests.cs index ff22cfdb..dfb89a80 100644 --- a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowMinimizedEventTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowMinimizedEventTests.cs @@ -8,7 +8,11 @@ namespace InfiniTests.InfiniFrame.WindowEvents; // Code // --------------------------------------------------------------------------------------------------------------------- public class WindowMinimizedEventTests { - [Test, Retry(5), SkipOnMacOs, SkipOnLinux("desktop-state dependent under WSLg/local Linux runs"), NotInParallelInfiniTests] + [Test] + [Retry(5)] + [SkipOnMacOs] + [SkipOnLinux("desktop-state dependent under WSLg/local Linux runs")] + [NotInParallelInfiniTests] public async Task TestWindowMinimizedEvent(CancellationToken ct = default) { // Arrange int minimizedEventCount = 0; diff --git a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowRestoredEventTests.cs b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowRestoredEventTests.cs index c5c18931..7e6a7eca 100644 --- a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowRestoredEventTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowRestoredEventTests.cs @@ -8,7 +8,10 @@ namespace InfiniTests.InfiniFrame.WindowEvents; // Code // --------------------------------------------------------------------------------------------------------------------- public class WindowRestoredEventTests { - [Test, Retry(5), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [Retry(5)] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task TestWindowRestoredFromMaximized(CancellationToken ct = default) { // Arrange int restoredEventCount = 0; @@ -31,7 +34,11 @@ public async Task TestWindowRestoredFromMaximized(CancellationToken ct = default await Assert.That(restoredEventCount).IsEqualTo(baseline + 1); } - [Test, Retry(5), SkipOnMacOs, SkipOnLinux("desktop-state dependent under WSLg/local Linux runs"), NotInParallelInfiniTests] + [Test] + [Retry(5)] + [SkipOnMacOs] + [SkipOnLinux("desktop-state dependent under WSLg/local Linux runs")] + [NotInParallelInfiniTests] public async Task TestWindowRestoredFromMinimized(CancellationToken ct = default) { // Arrange int restoredEventCount = 0; diff --git a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowSizeChangedEventTests.cs b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowSizeChangedEventTests.cs index 62c1822a..200c3f8d 100644 --- a/tests/InfiniTests.InfiniFrame/WindowEvents/WindowSizeChangedEventTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowEvents/WindowSizeChangedEventTests.cs @@ -8,7 +8,10 @@ namespace InfiniTests.InfiniFrame.WindowEvents; // Code // --------------------------------------------------------------------------------------------------------------------- public class WindowSizeChangedEventTests { - [Test, Retry(5), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [Retry(5)] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task TestWindowSizeChangedEvent(CancellationToken ct = default) { // Arrange: start at a known size so the second SetSize guarantees a change int sizeChangedCount = 0; diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/BrowserControlInitParametersTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/BrowserControlInitParametersTests.cs index 5afe56b0..29897962 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/BrowserControlInitParametersTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/BrowserControlInitParametersTests.cs @@ -10,7 +10,10 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // --------------------------------------------------------------------------------------------------------------------- public class BrowserControlInitParametersTests { - [Test, DisplayName($"{nameof(BrowserControlInitParametersTests)}.{nameof(Builder)}"), SkipOnMacOs, SkipOnLinux] + [Test] + [DisplayName($"{nameof(BrowserControlInitParametersTests)}.{nameof(Builder)}")] + [SkipOnMacOs] + [SkipOnLinux] public async Task Builder(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/CenterOnCurrentMonitorTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/CenterOnCurrentMonitorTests.cs index 2471611f..e209452b 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/CenterOnCurrentMonitorTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/CenterOnCurrentMonitorTests.cs @@ -10,7 +10,11 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // Code // --------------------------------------------------------------------------------------------------------------------- public class CenterOnCurrentMonitorTests { - [Test, DisplayName($"{nameof(CenterOnCurrentMonitorTests)}.{nameof(Window)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(CenterOnCurrentMonitorTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/CenterOnMonitorTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/CenterOnMonitorTests.cs index 48992677..1d16357d 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/CenterOnMonitorTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/CenterOnMonitorTests.cs @@ -10,7 +10,11 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // Code // --------------------------------------------------------------------------------------------------------------------- public class CenterOnMonitorTests { - [Test, DisplayName($"{nameof(CenterOnMonitorTests)}.{nameof(Window)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(CenterOnMonitorTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/CenterTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/CenterTests.cs index 3c6a3835..0ec228d3 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/CenterTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/CenterTests.cs @@ -12,7 +12,10 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // --------------------------------------------------------------------------------------------------------------------- public class CenterTests { - [Test, DisplayName($"{nameof(CenterTests)}.{nameof(Builder)}"), Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(CenterTests)}.{nameof(Builder)}")] + [Arguments(true)] + [Arguments(false)] public async Task Builder(bool state, CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -27,7 +30,11 @@ public async Task Builder(bool state, CancellationToken ct = default) { await Assert.That(configParameters.CenterOnInitialize).IsEqualTo(state); } - [Test, DisplayName($"{nameof(CenterTests)}.{nameof(Window)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(CenterTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -49,7 +56,13 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(window.Location).IsEqualTo(new Point(centerX, centerY)); } - [Test, DisplayName($"{nameof(CenterTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(CenterTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task FullIntegration(bool state, CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ContextMenuTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ContextMenuTests.cs index d277bf63..9a48f146 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ContextMenuTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ContextMenuTests.cs @@ -10,7 +10,10 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // --------------------------------------------------------------------------------------------------------------------- public class ContextMenuTests { - [Test, DisplayName($"{nameof(ContextMenuTests)}.{nameof(Builder)}"), Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(ContextMenuTests)}.{nameof(Builder)}")] + [Arguments(true)] + [Arguments(false)] public async Task Builder(bool state, CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -25,7 +28,12 @@ public async Task Builder(bool state, CancellationToken ct = default) { await Assert.That(configParameters.ContextMenuEnabled).IsEqualTo(state); } - [Test, DisplayName($"{nameof(ContextMenuTests)}.{nameof(Window)}"), SkipOnMacOs, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(ContextMenuTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task Window(bool state, CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -39,7 +47,12 @@ public async Task Window(bool state, CancellationToken ct = default) { await Assert.That(foundState).IsEqualTo(state); } - [Test, DisplayName($"{nameof(ContextMenuTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(ContextMenuTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task FullIntegration(bool state, CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/DevToolsTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/DevToolsTests.cs index d1ec350f..3962ad40 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/DevToolsTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/DevToolsTests.cs @@ -10,7 +10,10 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // --------------------------------------------------------------------------------------------------------------------- public class DevToolsTests { - [Test, DisplayName($"{nameof(DevToolsTests)}.{nameof(Builder)}"), Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(DevToolsTests)}.{nameof(Builder)}")] + [Arguments(true)] + [Arguments(false)] public async Task Builder(bool state, CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -25,7 +28,12 @@ public async Task Builder(bool state, CancellationToken ct = default) { await Assert.That(configParameters.DevToolsEnabled).IsEqualTo(state); } - [Test, DisplayName($"{nameof(DevToolsTests)}.{nameof(Window)}"), SkipOnMacOs, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(DevToolsTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task Window(bool state, CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -39,7 +47,12 @@ public async Task Window(bool state, CancellationToken ct = default) { await Assert.That(foundState).IsEqualTo(state); } - [Test, DisplayName($"{nameof(DevToolsTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(DevToolsTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task FullIntegration(bool state, CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/FocusedTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/FocusedTests.cs index 523c66d5..3067ac1d 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/FocusedTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/FocusedTests.cs @@ -8,7 +8,12 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // Code // --------------------------------------------------------------------------------------------------------------------- public class FocusedTests { - [Test, DisplayName($"{nameof(FocusedTests)}.{nameof(Window)}"), SkipOnMacOs(SkipUtility.MacOsMainThreadIssue), SkipOnLinux("Given that the window is virtualized, this test is not applicable."), NotInParallelInfiniTests, Retry(5)] + [Test] + [DisplayName($"{nameof(FocusedTests)}.{nameof(Window)}")] + [SkipOnMacOs(SkipUtility.MacOsMainThreadIssue)] + [SkipOnLinux("Given that the window is virtualized, this test is not applicable.")] + [NotInParallelInfiniTests] + [Retry(5)] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/FullscreenTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/FullscreenTests.cs index 7402c08e..ed051aac 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/FullscreenTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/FullscreenTests.cs @@ -10,7 +10,10 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // --------------------------------------------------------------------------------------------------------------------- public class FullScreenTests { - [Test, DisplayName($"{nameof(FullScreenTests)}.{nameof(Builder)}"), Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(FullScreenTests)}.{nameof(Builder)}")] + [Arguments(true)] + [Arguments(false)] public async Task Builder(bool state, CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -25,7 +28,12 @@ public async Task Builder(bool state, CancellationToken ct = default) { await Assert.That(configParameters.FullScreen).IsEqualTo(state); } - [Test, DisplayName($"{nameof(FullScreenTests)}.{nameof(Window)}"), SkipOnMacOs, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(FullScreenTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task Window(bool state, CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -38,7 +46,12 @@ public async Task Window(bool state, CancellationToken ct = default) { await Assert.That(window.FullScreen).IsEqualTo(state); } - [Test, DisplayName($"{nameof(FullScreenTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(FullScreenTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task FullIntegration(bool state, CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/HeightTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/HeightTests.cs index 1193993c..f1417029 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/HeightTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/HeightTests.cs @@ -14,7 +14,8 @@ public class HeightTests { // ----------------------------------------------------------------------------------------------------------------- // Test Methods // ----------------------------------------------------------------------------------------------------------------- - [Test, DisplayName($"{nameof(HeightTests)}.{nameof(FullIntegration)}")] + [Test] + [DisplayName($"{nameof(HeightTests)}.{nameof(FullIntegration)}")] public async Task Builder(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -30,7 +31,8 @@ public async Task Builder(CancellationToken ct = default) { await Assert.That(configParameters.Height).IsEqualTo(Height); } - [Test, DisplayName($"{nameof(HeightTests)}.{nameof(Builder_ShouldOverwriteOsDefaultSizeAndCentered)}")] + [Test] + [DisplayName($"{nameof(HeightTests)}.{nameof(Builder_ShouldOverwriteOsDefaultSizeAndCentered)}")] public async Task Builder_ShouldOverwriteOsDefaultSizeAndCentered() { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -53,7 +55,11 @@ public async Task Builder_ShouldOverwriteOsDefaultSizeAndCentered() { await Assert.That(configParameters).IsEqualTo(expectedConfigParameters); } - [Test, DisplayName($"{nameof(HeightTests)}.{nameof(Window)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(HeightTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -66,7 +72,10 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(window.Height).IsEqualTo(500); } - [Test, DisplayName($"{nameof(HeightTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(HeightTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task FullIntegration(CancellationToken ct = default) { // Arrange @@ -83,7 +92,11 @@ public async Task FullIntegration(CancellationToken ct = default) { await Assert.That(window.Height).IsEqualTo(500); } - [Test, DisplayName($"{nameof(HeightTests)}.{nameof(Window_WithChromelessToGetSmallestHeight)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(HeightTests)}.{nameof(Window_WithChromelessToGetSmallestHeight)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task Window_WithChromelessToGetSmallestHeight(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create( @@ -99,7 +112,10 @@ public async Task Window_WithChromelessToGetSmallestHeight(CancellationToken ct await Assert.That(window.Height).IsEqualTo(Height); } - [Test, DisplayName($"{nameof(HeightTests)}.{nameof(FullIntegration_WithChromelessToGetSmallestHeight)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(HeightTests)}.{nameof(FullIntegration_WithChromelessToGetSmallestHeight)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task FullIntegration_WithChromelessToGetSmallestHeight(CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/IconFilePathTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/IconFilePathTests.cs index 2e9bfe34..8844caae 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/IconFilePathTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/IconFilePathTests.cs @@ -15,7 +15,8 @@ public class IconFilePathTests { // ----------------------------------------------------------------------------------------------------------------- // Test Methods // ----------------------------------------------------------------------------------------------------------------- - [Test, DisplayName($"{nameof(IconFilePathTests)}.{nameof(Builder)}")] + [Test] + [DisplayName($"{nameof(IconFilePathTests)}.{nameof(Builder)}")] public async Task Builder(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -28,7 +29,8 @@ public async Task Builder(CancellationToken ct = default) { await Assert.That(builder.Configuration.ToNativeParameters().WindowIconFile).IsEqualTo(ResolvedIconFilePath); } - [Test, DisplayName($"{nameof(IconFilePathTests)}.{nameof(Builder_ShouldNotSetInvalidIconFilePath)}")] + [Test] + [DisplayName($"{nameof(IconFilePathTests)}.{nameof(Builder_ShouldNotSetInvalidIconFilePath)}")] public async Task Builder_ShouldNotSetInvalidIconFilePath(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -41,7 +43,11 @@ public async Task Builder_ShouldNotSetInvalidIconFilePath(CancellationToken ct = await Assert.That(builder.Configuration.ToNativeParameters().WindowIconFile).IsNull(); } - [Test, DisplayName($"{nameof(IconFilePathTests)}.{nameof(Window)}"), SkipOnMacOs, SkipOnLinux, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(IconFilePathTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [SkipOnLinux] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -55,7 +61,11 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(foundPath).IsEqualTo(ResolvedIconFilePath); } - [Test, DisplayName($"{nameof(IconFilePathTests)}.{nameof(Window_ShouldNotSetInvalidIconFilePath)}"), SkipOnMacOs, SkipOnLinux, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(IconFilePathTests)}.{nameof(Window_ShouldNotSetInvalidIconFilePath)}")] + [SkipOnMacOs] + [SkipOnLinux] + [NotInParallelInfiniTests] public async Task Window_ShouldNotSetInvalidIconFilePath(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -68,7 +78,11 @@ public async Task Window_ShouldNotSetInvalidIconFilePath(CancellationToken ct = await Assert.That(window.IconFilePath).IsEqualTo(string.Empty); } - [Test, DisplayName($"{nameof(IconFilePathTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, SkipOnLinux, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(IconFilePathTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [SkipOnLinux] + [NotInParallelInfiniTests] public async Task FullIntegration(CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/LeftTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/LeftTests.cs index 5ae0ba71..3109d0a6 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/LeftTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/LeftTests.cs @@ -14,7 +14,8 @@ public class LeftTests { // ----------------------------------------------------------------------------------------------------------------- // Test Methods // ----------------------------------------------------------------------------------------------------------------- - [Test, DisplayName($"{nameof(LeftTests)}.{nameof(Builder)}")] + [Test] + [DisplayName($"{nameof(LeftTests)}.{nameof(Builder)}")] public async Task Builder(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -29,7 +30,8 @@ public async Task Builder(CancellationToken ct = default) { await Assert.That(configParameters.Left).IsEqualTo(Left); } - [Test, DisplayName($"{nameof(LeftTests)}.{nameof(Builder_ShouldOverwriteOsDefaultLocationAndCentered)}")] + [Test] + [DisplayName($"{nameof(LeftTests)}.{nameof(Builder_ShouldOverwriteOsDefaultLocationAndCentered)}")] public async Task Builder_ShouldOverwriteOsDefaultLocationAndCentered(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -53,7 +55,11 @@ public async Task Builder_ShouldOverwriteOsDefaultLocationAndCentered(Cancellati await Assert.That(configParameters).IsEqualTo(expectedConfigParameters); } - [Test, DisplayName($"{nameof(LeftTests)}.{nameof(Window)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(LeftTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -66,7 +72,11 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(window.Left).IsEqualTo(Left); } - [Test, DisplayName($"{nameof(LeftTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(LeftTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task FullIntegration(CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/LocationTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/LocationTests.cs index f4c69c07..40758f36 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/LocationTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/LocationTests.cs @@ -16,7 +16,8 @@ public class LocationTests { // ----------------------------------------------------------------------------------------------------------------- // Test Methods // ----------------------------------------------------------------------------------------------------------------- - [Test, DisplayName($"{nameof(LocationTests)}.{nameof(Builder)}")] + [Test] + [DisplayName($"{nameof(LocationTests)}.{nameof(Builder)}")] public async Task Builder(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -34,7 +35,8 @@ public async Task Builder(CancellationToken ct = default) { await Assert.That(configParameters.Top).IsEqualTo(Top); } - [Test, DisplayName($"{nameof(LocationTests)}.{nameof(Builder_ShouldOverwriteOsDefaultLocationAndCentered)}")] + [Test] + [DisplayName($"{nameof(LocationTests)}.{nameof(Builder_ShouldOverwriteOsDefaultLocationAndCentered)}")] public async Task Builder_ShouldOverwriteOsDefaultLocationAndCentered(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -59,7 +61,11 @@ public async Task Builder_ShouldOverwriteOsDefaultLocationAndCentered(Cancellati await Assert.That(configParameters).IsEqualTo(expectedConfigParameters); } - [Test, DisplayName($"{nameof(LocationTests)}.{nameof(Window)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(LocationTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -72,7 +78,11 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(window.Location).IsEqualTo(new Point(Left, Top)); } - [Test, DisplayName($"{nameof(LocationTests)}.{nameof(Window_AsPoint)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(LocationTests)}.{nameof(Window_AsPoint)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task Window_AsPoint(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -85,7 +95,11 @@ public async Task Window_AsPoint(CancellationToken ct = default) { await Assert.That(window.Location).IsEqualTo(new Point(Left, Top)); } - [Test, DisplayName($"{nameof(LocationTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(LocationTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task FullIntegration(CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaxHeightTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaxHeightTests.cs index 88918169..77187425 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaxHeightTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaxHeightTests.cs @@ -11,7 +11,8 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; public class MaxHeightTests { private const int MaxHeight = 20; - [Test, DisplayName($"{nameof(MaxHeightTests)}.{nameof(Builder)}")] + [Test] + [DisplayName($"{nameof(MaxHeightTests)}.{nameof(Builder)}")] public async Task Builder(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -26,7 +27,10 @@ public async Task Builder(CancellationToken ct = default) { await Assert.That(configParameters.MaxHeight).IsEqualTo(MaxHeight); } - [Test, DisplayName($"{nameof(MaxHeightTests)}.{nameof(Window)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(MaxHeightTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -39,7 +43,10 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(window.MaxHeight).IsEqualTo(500); } - [Test, DisplayName($"{nameof(MaxHeightTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(MaxHeightTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task FullIntegration(CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaxSizeTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaxSizeTests.cs index 73f30be6..d873daf0 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaxSizeTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaxSizeTests.cs @@ -16,7 +16,8 @@ public class MaxSizeTests { // ----------------------------------------------------------------------------------------------------------------- // Test Methods // ----------------------------------------------------------------------------------------------------------------- - [Test, DisplayName($"{nameof(MaxSizeTests)}.{nameof(Builder)}")] + [Test] + [DisplayName($"{nameof(MaxSizeTests)}.{nameof(Builder)}")] public async Task Builder(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -33,7 +34,10 @@ public async Task Builder(CancellationToken ct = default) { await Assert.That(configParameters.MaxHeight).IsEqualTo(Height); } - [Test, DisplayName($"{nameof(MaxSizeTests)}.{nameof(Window)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(MaxSizeTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -46,7 +50,10 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(window.MaxSize).IsEqualTo(new Size(400, 500)); } - [Test, DisplayName($"{nameof(MaxSizeTests)}.{nameof(Window_AsSize)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(MaxSizeTests)}.{nameof(Window_AsSize)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task Window_AsSize(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -59,7 +66,10 @@ public async Task Window_AsSize(CancellationToken ct = default) { await Assert.That(window.MaxSize).IsEqualTo(new Size(400, 500)); } - [Test, DisplayName($"{nameof(MaxSizeTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(MaxSizeTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task FullIntegration(CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaxWidthTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaxWidthTests.cs index a3e1daf8..15fd2634 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaxWidthTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaxWidthTests.cs @@ -14,7 +14,8 @@ public class MaxWidthTests { // ----------------------------------------------------------------------------------------------------------------- // Test Methods // ----------------------------------------------------------------------------------------------------------------- - [Test, DisplayName($"{nameof(MaxWidthTests)}.{nameof(Builder)}")] + [Test] + [DisplayName($"{nameof(MaxWidthTests)}.{nameof(Builder)}")] public async Task Builder(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -29,7 +30,10 @@ public async Task Builder(CancellationToken ct = default) { await Assert.That(configParameters.MaxWidth).IsEqualTo(MaxWidth); } - [Test, DisplayName($"{nameof(MaxWidthTests)}.{nameof(Window)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(MaxWidthTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -42,7 +46,10 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(window.MaxWidth).IsEqualTo(500); } - [Test, DisplayName($"{nameof(MaxWidthTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(MaxWidthTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task FullIntegration(CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaximizeTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaximizeTests.cs index 9e003589..ad5624bc 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaximizeTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MaximizeTests.cs @@ -10,7 +10,10 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // --------------------------------------------------------------------------------------------------------------------- public class MaximizeTests { - [Test, DisplayName($"{nameof(MaximizeTests)}.{nameof(Builder)}"), Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(MaximizeTests)}.{nameof(Builder)}")] + [Arguments(true)] + [Arguments(false)] public async Task Builder(bool state, CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -25,7 +28,12 @@ public async Task Builder(bool state, CancellationToken ct = default) { await Assert.That(configParameters.Maximized).IsEqualTo(state); } - [Test, DisplayName($"{nameof(MaximizeTests)}.{nameof(Window)}"), SkipOnMacOs, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(MaximizeTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task Window(bool state, CancellationToken ct = default) { SkipUtility.SkipOnLinux(state); @@ -40,7 +48,13 @@ public async Task Window(bool state, CancellationToken ct = default) { await Assert.That(window.Maximized).IsEqualTo(state); } - [Test, DisplayName($"{nameof(MaximizeTests)}.{nameof(Window_Toggle)}"), SkipOnMacOs, SkipOnLinux, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(MaximizeTests)}.{nameof(Window_Toggle)}")] + [SkipOnMacOs] + [SkipOnLinux] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task Window_Toggle(bool state, CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -54,7 +68,12 @@ public async Task Window_Toggle(bool state, CancellationToken ct = default) { await Assert.That(window.Maximized).IsEqualTo(!state); } - [Test, DisplayName($"{nameof(MaximizeTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(MaximizeTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task FullIntegration(bool state, CancellationToken ct = default) { SkipUtility.SkipOnLinux(state); diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinHeightTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinHeightTests.cs index 993e3e8c..96cc2a5b 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinHeightTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinHeightTests.cs @@ -14,7 +14,8 @@ public class MinHeightTests { // ----------------------------------------------------------------------------------------------------------------- // Test Methods // ----------------------------------------------------------------------------------------------------------------- - [Test, DisplayName($"{nameof(MinHeightTests)}.{nameof(Builder)}")] + [Test] + [DisplayName($"{nameof(MinHeightTests)}.{nameof(Builder)}")] public async Task Builder(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -29,7 +30,10 @@ public async Task Builder(CancellationToken ct = default) { await Assert.That(configParameters.MinHeight).IsEqualTo(MinHeight); } - [Test, DisplayName($"{nameof(MinHeightTests)}.{nameof(Window)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(MinHeightTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -42,7 +46,10 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(window.MinHeight).IsEqualTo(500); } - [Test, DisplayName($"{nameof(MinHeightTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(MinHeightTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task FullIntegration(CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinSizeTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinSizeTests.cs index 318eaee3..55803c99 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinSizeTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinSizeTests.cs @@ -16,7 +16,8 @@ public class MinSizeTests { // ----------------------------------------------------------------------------------------------------------------- // Test Methods // ----------------------------------------------------------------------------------------------------------------- - [Test, DisplayName($"{nameof(MinSizeTests)}.{nameof(Builder)}")] + [Test] + [DisplayName($"{nameof(MinSizeTests)}.{nameof(Builder)}")] public async Task Builder(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -33,7 +34,10 @@ public async Task Builder(CancellationToken ct = default) { await Assert.That(configParameters.MinHeight).IsEqualTo(Height); } - [Test, DisplayName($"{nameof(MinSizeTests)}.{nameof(Window)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(MinSizeTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -46,7 +50,10 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(window.MinSize).IsEqualTo(new Size(400, 500)); } - [Test, DisplayName($"{nameof(MinSizeTests)}.{nameof(Window_AsSize)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(MinSizeTests)}.{nameof(Window_AsSize)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task Window_AsSize(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -59,7 +66,10 @@ public async Task Window_AsSize(CancellationToken ct = default) { await Assert.That(window.MinSize).IsEqualTo(new Size(400, 500)); } - [Test, DisplayName($"{nameof(MinSizeTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(MinSizeTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task FullIntegration(CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinWidthTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinWidthTests.cs index d8b53340..809dd054 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinWidthTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinWidthTests.cs @@ -14,7 +14,8 @@ public class MinWidthTests { // ----------------------------------------------------------------------------------------------------------------- // Test Methods // ----------------------------------------------------------------------------------------------------------------- - [Test, DisplayName($"{nameof(MinWidthTests)}.{nameof(Builder)}")] + [Test] + [DisplayName($"{nameof(MinWidthTests)}.{nameof(Builder)}")] public async Task Builder(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -29,7 +30,10 @@ public async Task Builder(CancellationToken ct = default) { await Assert.That(configParameters.MinWidth).IsEqualTo(MinWidth); } - [Test, DisplayName($"{nameof(MinWidthTests)}.{nameof(Window)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(MinWidthTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -42,7 +46,10 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(window.MinWidth).IsEqualTo(500); } - [Test, DisplayName($"{nameof(MinWidthTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(MinWidthTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task FullIntegration(CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinimizeTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinimizeTests.cs index 719debba..cded14ec 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinimizeTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MinimizeTests.cs @@ -10,7 +10,10 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // --------------------------------------------------------------------------------------------------------------------- public class MinimizeTests { - [Test, DisplayName($"{nameof(MinimizeTests)}.{nameof(Builder)}"), Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(MinimizeTests)}.{nameof(Builder)}")] + [Arguments(true)] + [Arguments(false)] public async Task Builder(bool state, CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -25,7 +28,12 @@ public async Task Builder(bool state, CancellationToken ct = default) { await Assert.That(configParameters.Minimized).IsEqualTo(state); } - [Test, DisplayName($"{nameof(MinimizeTests)}.{nameof(Window)}"), SkipOnMacOs, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(MinimizeTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task Window(bool state, CancellationToken ct = default) { SkipUtility.SkipOnLinux(state); @@ -40,7 +48,12 @@ public async Task Window(bool state, CancellationToken ct = default) { await Assert.That(window.Minimized).IsEqualTo(state); } - [Test, DisplayName($"{nameof(MinimizeTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(MinimizeTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task FullIntegration(bool state, CancellationToken ct = default) { SkipUtility.SkipOnLinux(state); diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MoveWithinCurrentMonitorAreaTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MoveWithinCurrentMonitorAreaTests.cs index 76e245f2..e1834a17 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MoveWithinCurrentMonitorAreaTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/MoveWithinCurrentMonitorAreaTests.cs @@ -11,7 +11,14 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // --------------------------------------------------------------------------------------------------------------------- public class MoveWithinCurrentMonitorAreaTests { - [Test, DisplayName($"{nameof(MoveWithinCurrentMonitorAreaTests)}.{nameof(Window)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests, Arguments(0, 0, 0, 0), Arguments(100, 100, 100, 100), Arguments(-100, -100, 0, 0)] + [Test] + [DisplayName($"{nameof(MoveWithinCurrentMonitorAreaTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] + [Arguments(0, 0, 0, 0)] + [Arguments(100, 100, 100, 100)] + [Arguments(-100, -100, 0, 0)] public async Task Window(int x, int y, int expectedX, int expectedY, CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -34,7 +41,14 @@ public async Task Window(int x, int y, int expectedX, int expectedY, Cancellatio await Assert.That(location.Y).IsEqualTo(offsetY + expectedY); } - [Test, DisplayName($"{nameof(MoveWithinCurrentMonitorAreaTests)}.{nameof(Window_AsPoint)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests, Arguments(0, 0, 0, 0), Arguments(100, 100, 100, 100), Arguments(-100, -100, 0, 0)] + [Test] + [DisplayName($"{nameof(MoveWithinCurrentMonitorAreaTests)}.{nameof(Window_AsPoint)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] + [Arguments(0, 0, 0, 0)] + [Arguments(100, 100, 100, 100)] + [Arguments(-100, -100, 0, 0)] public async Task Window_AsPoint(int x, int y, int expectedX, int expectedY, CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -57,7 +71,14 @@ public async Task Window_AsPoint(int x, int y, int expectedX, int expectedY, Can await Assert.That(location.Y).IsEqualTo(offsetY + expectedY); } - [Test, DisplayName($"{nameof(MoveWithinCurrentMonitorAreaTests)}.{nameof(Window_AsDouble)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests, Arguments(0, 0, 0, 0), Arguments(100, 100, 100, 100), Arguments(-100, -100, 0, 0)] + [Test] + [DisplayName($"{nameof(MoveWithinCurrentMonitorAreaTests)}.{nameof(Window_AsDouble)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] + [Arguments(0, 0, 0, 0)] + [Arguments(100, 100, 100, 100)] + [Arguments(-100, -100, 0, 0)] public async Task Window_AsDouble(double x, double y, int expectedX, int expectedY, CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/OffsetTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/OffsetTests.cs index 5be4dea3..96ec3f40 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/OffsetTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/OffsetTests.cs @@ -10,7 +10,14 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // --------------------------------------------------------------------------------------------------------------------- public class OffsetTests { - [Test, DisplayName($"{nameof(OffsetTests)}.{nameof(Window)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests, Arguments(0, 0), Arguments(100, 100), Arguments(-100, -100)] + [Test] + [DisplayName($"{nameof(OffsetTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] + [Arguments(0, 0)] + [Arguments(100, 100)] + [Arguments(-100, -100)] public async Task Window(int x, int y, CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -26,7 +33,14 @@ public async Task Window(int x, int y, CancellationToken ct = default) { await Assert.That(location.Y).IsEqualTo(initialLocation.Y + y); } - [Test, DisplayName($"{nameof(OffsetTests)}.{nameof(Window_AsPoint)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests, Arguments(0, 0), Arguments(100, 100), Arguments(-100, -100)] + [Test] + [DisplayName($"{nameof(OffsetTests)}.{nameof(Window_AsPoint)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] + [Arguments(0, 0)] + [Arguments(100, 100)] + [Arguments(-100, -100)] public async Task Window_AsPoint(int x, int y, CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -42,7 +56,14 @@ public async Task Window_AsPoint(int x, int y, CancellationToken ct = default) { await Assert.That(location.Y).IsEqualTo(initialLocation.Y + y); } - [Test, DisplayName($"{nameof(OffsetTests)}.{nameof(Window_AsDouble)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests, Arguments(0, 0), Arguments(100, 100), Arguments(-100, -100)] + [Test] + [DisplayName($"{nameof(OffsetTests)}.{nameof(Window_AsDouble)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] + [Arguments(0, 0)] + [Arguments(100, 100)] + [Arguments(-100, -100)] public async Task Window_AsDouble(double x, double y, CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/RegisterCustomSchemeHandlerTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/RegisterCustomSchemeHandlerTests.cs index 9ee4c897..67643e39 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/RegisterCustomSchemeHandlerTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/RegisterCustomSchemeHandlerTests.cs @@ -17,7 +17,8 @@ private static (Stream? Data, string? ContentType) EmptyHandler(IInfiniFrameWind // ----------------------------------------------------------------------------------------------------------------- // Test Methods // ----------------------------------------------------------------------------------------------------------------- - [Test, DisplayName($"{nameof(RegisterCustomSchemeHandlerTests)}.{nameof(Builder)}")] + [Test] + [DisplayName($"{nameof(RegisterCustomSchemeHandlerTests)}.{nameof(Builder)}")] public async Task Builder(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -37,7 +38,8 @@ public async Task Builder(CancellationToken ct = default) { await Assert.That(found).IsTrue(); } - [Test, DisplayName($"{nameof(RegisterCustomSchemeHandlerTests)}.{nameof(Builder_ReRegisteringSameScheme_DoesNotDuplicateConfigurationEntry)}")] + [Test] + [DisplayName($"{nameof(RegisterCustomSchemeHandlerTests)}.{nameof(Builder_ReRegisteringSameScheme_DoesNotDuplicateConfigurationEntry)}")] public async Task Builder_ReRegisteringSameScheme_DoesNotDuplicateConfigurationEntry(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -61,7 +63,10 @@ public async Task Builder_ReRegisteringSameScheme_DoesNotDuplicateConfigurationE await Assert.That(nativeAppCount).IsEqualTo(1); } - [Test, DisplayName($"{nameof(RegisterCustomSchemeHandlerTests)}.{nameof(Window)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(RegisterCustomSchemeHandlerTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -82,7 +87,10 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(customScheme).IsTrue(); } - [Test, DisplayName($"{nameof(RegisterCustomSchemeHandlerTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(RegisterCustomSchemeHandlerTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task FullIntegration(CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ResizableTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ResizableTests.cs index e25e17ed..ce6ec65b 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ResizableTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ResizableTests.cs @@ -10,7 +10,10 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // --------------------------------------------------------------------------------------------------------------------- public class ResizableTests { - [Test, DisplayName($"{nameof(ResizableTests)}.{nameof(Builder)}"), Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(ResizableTests)}.{nameof(Builder)}")] + [Arguments(true)] + [Arguments(false)] public async Task Builder(bool state) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -25,7 +28,12 @@ public async Task Builder(bool state) { await Assert.That(configParameters.Resizable).IsEqualTo(state); } - [Test, DisplayName($"{nameof(ResizableTests)}.{nameof(Window)}"), SkipOnMacOs, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(ResizableTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task Window(bool state, CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -39,7 +47,12 @@ public async Task Window(bool state, CancellationToken ct = default) { await Assert.That(foundState).IsEqualTo(state); } - [Test, DisplayName($"{nameof(ResizableTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(ResizableTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task FullIntegration(bool state, CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ResizeTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ResizeTests.cs index b50ae233..c2b7ca00 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ResizeTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ResizeTests.cs @@ -10,9 +10,51 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // --------------------------------------------------------------------------------------------------------------------- public class ResizeTests { - [Test, DisplayName($"{nameof(ResizeTests)}.{nameof(Window)}"), SkipOnMacOs, SkipOnLinux, NotInParallelInfiniTests, Arguments(0, 0, ResizeOrigin.TopLeft), Arguments(0, 0, ResizeOrigin.Top), Arguments(0, 0, ResizeOrigin.TopRight), Arguments(0, 0, ResizeOrigin.Right), Arguments(0, 0, ResizeOrigin.BottomRight), Arguments(0, 0, ResizeOrigin.Bottom), Arguments(0, 0, ResizeOrigin.BottomLeft), Arguments(0, 0, ResizeOrigin.Left), Arguments(10, 10, ResizeOrigin.TopLeft), Arguments(10, 10, ResizeOrigin.Top), Arguments(10, 10, ResizeOrigin.TopRight), Arguments(10, 10, ResizeOrigin.Right), Arguments(10, 10, ResizeOrigin.BottomRight), Arguments(10, 10, ResizeOrigin.Bottom), - Arguments(10, 10, ResizeOrigin.BottomLeft), Arguments(10, 10, ResizeOrigin.Left), Arguments(-10, -10, ResizeOrigin.TopLeft), Arguments(-10, -10, ResizeOrigin.Top), Arguments(-10, -10, ResizeOrigin.TopRight), Arguments(-10, -10, ResizeOrigin.Right), Arguments(-10, -10, ResizeOrigin.BottomRight), Arguments(-10, -10, ResizeOrigin.Bottom), Arguments(-10, -10, ResizeOrigin.BottomLeft), Arguments(-10, -10, ResizeOrigin.Left), Arguments(10, -10, ResizeOrigin.TopLeft), Arguments(10, -10, ResizeOrigin.Top), Arguments(10, -10, ResizeOrigin.TopRight), Arguments(10, -10, ResizeOrigin.Right), Arguments(10, -10, ResizeOrigin.BottomRight), Arguments(10, -10, ResizeOrigin.Bottom), - Arguments(10, -10, ResizeOrigin.BottomLeft), Arguments(10, -10, ResizeOrigin.Left), Arguments(-10, 10, ResizeOrigin.TopLeft), Arguments(-10, 10, ResizeOrigin.Top), Arguments(-10, 10, ResizeOrigin.TopRight), Arguments(-10, 10, ResizeOrigin.Right), Arguments(-10, 10, ResizeOrigin.BottomRight), Arguments(-10, 10, ResizeOrigin.Bottom), Arguments(-10, 10, ResizeOrigin.BottomLeft), Arguments(-10, 10, ResizeOrigin.Left)] + [Test] + [DisplayName($"{nameof(ResizeTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [SkipOnLinux] + [NotInParallelInfiniTests] + [Arguments(0, 0, ResizeOrigin.TopLeft)] + [Arguments(0, 0, ResizeOrigin.Top)] + [Arguments(0, 0, ResizeOrigin.TopRight)] + [Arguments(0, 0, ResizeOrigin.Right)] + [Arguments(0, 0, ResizeOrigin.BottomRight)] + [Arguments(0, 0, ResizeOrigin.Bottom)] + [Arguments(0, 0, ResizeOrigin.BottomLeft)] + [Arguments(0, 0, ResizeOrigin.Left)] + [Arguments(10, 10, ResizeOrigin.TopLeft)] + [Arguments(10, 10, ResizeOrigin.Top)] + [Arguments(10, 10, ResizeOrigin.TopRight)] + [Arguments(10, 10, ResizeOrigin.Right)] + [Arguments(10, 10, ResizeOrigin.BottomRight)] + [Arguments(10, 10, ResizeOrigin.Bottom)] + [Arguments(10, 10, ResizeOrigin.BottomLeft)] + [Arguments(10, 10, ResizeOrigin.Left)] + [Arguments(-10, -10, ResizeOrigin.TopLeft)] + [Arguments(-10, -10, ResizeOrigin.Top)] + [Arguments(-10, -10, ResizeOrigin.TopRight)] + [Arguments(-10, -10, ResizeOrigin.Right)] + [Arguments(-10, -10, ResizeOrigin.BottomRight)] + [Arguments(-10, -10, ResizeOrigin.Bottom)] + [Arguments(-10, -10, ResizeOrigin.BottomLeft)] + [Arguments(-10, -10, ResizeOrigin.Left)] + [Arguments(10, -10, ResizeOrigin.TopLeft)] + [Arguments(10, -10, ResizeOrigin.Top)] + [Arguments(10, -10, ResizeOrigin.TopRight)] + [Arguments(10, -10, ResizeOrigin.Right)] + [Arguments(10, -10, ResizeOrigin.BottomRight)] + [Arguments(10, -10, ResizeOrigin.Bottom)] + [Arguments(10, -10, ResizeOrigin.BottomLeft)] + [Arguments(10, -10, ResizeOrigin.Left)] + [Arguments(-10, 10, ResizeOrigin.TopLeft)] + [Arguments(-10, 10, ResizeOrigin.Top)] + [Arguments(-10, 10, ResizeOrigin.TopRight)] + [Arguments(-10, 10, ResizeOrigin.Right)] + [Arguments(-10, 10, ResizeOrigin.BottomRight)] + [Arguments(-10, 10, ResizeOrigin.Bottom)] + [Arguments(-10, 10, ResizeOrigin.BottomLeft)] + [Arguments(-10, 10, ResizeOrigin.Left)] public async Task Window(int widthOffset, int heightOffset, ResizeOrigin origin, CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/SizeTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/SizeTests.cs index 39b995c7..e53191a3 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/SizeTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/SizeTests.cs @@ -16,7 +16,8 @@ public class SizeTests { // ----------------------------------------------------------------------------------------------------------------- // Test Methods // ----------------------------------------------------------------------------------------------------------------- - [Test, DisplayName($"{nameof(SizeTests)}.{nameof(Builder)}")] + [Test] + [DisplayName($"{nameof(SizeTests)}.{nameof(Builder)}")] public async Task Builder(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -33,7 +34,8 @@ public async Task Builder(CancellationToken ct = default) { await Assert.That(configParameters.Height).IsEqualTo(Height); } - [Test, DisplayName($"{nameof(SizeTests)}.{nameof(Builder_ShouldOverwriteOsDefaultSizeAndCentered)}")] + [Test] + [DisplayName($"{nameof(SizeTests)}.{nameof(Builder_ShouldOverwriteOsDefaultSizeAndCentered)}")] public async Task Builder_ShouldOverwriteOsDefaultSizeAndCentered(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -58,7 +60,11 @@ public async Task Builder_ShouldOverwriteOsDefaultSizeAndCentered(CancellationTo await Assert.That(configParameters).IsEqualTo(expectedConfigParameters); } - [Test, DisplayName($"{nameof(SizeTests)}.{nameof(Window)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(SizeTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -71,7 +77,11 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(window.Size).IsEqualTo(new Size(400, 500)); } - [Test, DisplayName($"{nameof(SizeTests)}.{nameof(Window_AsSize)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(SizeTests)}.{nameof(Window_AsSize)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task Window_AsSize(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -84,7 +94,10 @@ public async Task Window_AsSize(CancellationToken ct = default) { await Assert.That(window.Size).IsEqualTo(new Size(400, 500)); } - [Test, DisplayName($"{nameof(SizeTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(SizeTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task FullIntegration(CancellationToken ct = default) { // Arrange @@ -101,7 +114,11 @@ public async Task FullIntegration(CancellationToken ct = default) { await Assert.That(window.Size).IsEqualTo(new Size(400, 500)); } - [Test, DisplayName($"{nameof(SizeTests)}.{nameof(Window_WithChromelessToGetSmallestSize)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(SizeTests)}.{nameof(Window_WithChromelessToGetSmallestSize)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task Window_WithChromelessToGetSmallestSize(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create( @@ -117,7 +134,10 @@ public async Task Window_WithChromelessToGetSmallestSize(CancellationToken ct = await Assert.That(window.Size).IsEqualTo(new Size(Width, Height)); } - [Test, DisplayName($"{nameof(SizeTests)}.{nameof(FullIntegration_WithChromelessToGetSmallestSize)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(SizeTests)}.{nameof(FullIntegration_WithChromelessToGetSmallestSize)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task FullIntegration_WithChromelessToGetSmallestSize(CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TitleTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TitleTests.cs index b9a25bd6..35455f05 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TitleTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TitleTests.cs @@ -10,7 +10,12 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // --------------------------------------------------------------------------------------------------------------------- public class TitleTests { - [Test, DisplayName($"{nameof(TitleTests)}.{nameof(Builder)}"), Arguments(""), Arguments("InfiniWindow"), Arguments("Ω"), Arguments("🏳️‍⚧️")] + [Test] + [DisplayName($"{nameof(TitleTests)}.{nameof(Builder)}")] + [Arguments("")] + [Arguments("InfiniWindow")] + [Arguments("Ω")] + [Arguments("🏳️‍⚧️")] public async Task Builder(string title, CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -25,7 +30,8 @@ public async Task Builder(string title, CancellationToken ct = default) { await Assert.That(configParameters.Title).IsEqualTo(title); } - [Test, DisplayName($"{nameof(TitleTests)}.{nameof(Builder_OnNull)}")] + [Test] + [DisplayName($"{nameof(TitleTests)}.{nameof(Builder_OnNull)}")] public async Task Builder_OnNull(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -40,7 +46,14 @@ public async Task Builder_OnNull(CancellationToken ct = default) { await Assert.That(configParameters.Title).IsNull(); } - [Test, DisplayName($"{nameof(TitleTests)}.{nameof(Window)}"), SkipOnMacOs, NotInParallelInfiniTests, Arguments(""), Arguments("InfiniWindow"), Arguments("Ω"), Arguments("🏳️‍⚧️")] + [Test] + [DisplayName($"{nameof(TitleTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [Arguments("")] + [Arguments("InfiniWindow")] + [Arguments("Ω")] + [Arguments("🏳️‍⚧️")] public async Task Window(string title, CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -53,7 +66,10 @@ public async Task Window(string title, CancellationToken ct = default) { await Assert.That(window.Title).IsEqualTo(title); } - [Test, DisplayName($"{nameof(TitleTests)}.{nameof(Window_OnNull)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(TitleTests)}.{nameof(Window_OnNull)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task Window_OnNull(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -66,7 +82,14 @@ public async Task Window_OnNull(CancellationToken ct = default) { await Assert.That(window.Title).IsEmpty(); } - [Test, DisplayName($"{nameof(TitleTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests, Arguments(""), Arguments("InfiniWindow"), Arguments("Ω"), Arguments("🏳️‍⚧️")] + [Test] + [DisplayName($"{nameof(TitleTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [Arguments("")] + [Arguments("InfiniWindow")] + [Arguments("Ω")] + [Arguments("🏳️‍⚧️")] public async Task FullIntegration(string title, CancellationToken ct = default) { // Arrange @@ -81,7 +104,10 @@ public async Task FullIntegration(string title, CancellationToken ct = default) await Assert.That(window.Title).IsEqualTo(title); } - [Test, DisplayName($"{nameof(TitleTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(TitleTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task FullIntegration_OnNull(CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TopMostTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TopMostTests.cs index d15f1b0a..15065e44 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TopMostTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TopMostTests.cs @@ -10,7 +10,10 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // --------------------------------------------------------------------------------------------------------------------- public class TopMostTests { - [Test, DisplayName($"{nameof(TopMostTests)}.{nameof(Builder)}"), Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(TopMostTests)}.{nameof(Builder)}")] + [Arguments(true)] + [Arguments(false)] public async Task Builder(bool state, CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -25,7 +28,13 @@ public async Task Builder(bool state, CancellationToken ct = default) { await Assert.That(configParameters.Topmost).IsEqualTo(state); } - [Test, DisplayName($"{nameof(TopMostTests)}.{nameof(Window)}"), SkipOnMacOs, SkipOnLinux, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(TopMostTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [SkipOnLinux] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task Window(bool state, CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -38,7 +47,13 @@ public async Task Window(bool state, CancellationToken ct = default) { await Assert.That(window.TopMost).IsEqualTo(state); } - [Test, DisplayName($"{nameof(TopMostTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, SkipOnLinux, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(TopMostTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [SkipOnLinux] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task FullIntegration(bool state, CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TopTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TopTests.cs index 517f6fbd..54a5dcf8 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TopTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TopTests.cs @@ -11,7 +11,8 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; public class TopTests { private const int Top = 20; - [Test, DisplayName($"{nameof(TopTests)}.{nameof(Builder)}")] + [Test] + [DisplayName($"{nameof(TopTests)}.{nameof(Builder)}")] public async Task Builder(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -26,7 +27,8 @@ public async Task Builder(CancellationToken ct = default) { await Assert.That(configParameters.Top).IsEqualTo(Top); } - [Test, DisplayName($"{nameof(TopTests)}.{nameof(Builder_ShouldOverwriteOsDefaultLocationAndCentered)}")] + [Test] + [DisplayName($"{nameof(TopTests)}.{nameof(Builder_ShouldOverwriteOsDefaultLocationAndCentered)}")] public async Task Builder_ShouldOverwriteOsDefaultLocationAndCentered(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -50,7 +52,11 @@ public async Task Builder_ShouldOverwriteOsDefaultLocationAndCentered(Cancellati await Assert.That(configParameters).IsEqualTo(expectedConfigParameters); } - [Test, DisplayName($"{nameof(TopTests)}.{nameof(Window)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(TopTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -63,7 +69,11 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(window.Top).IsEqualTo(Top); } - [Test, DisplayName($"{nameof(TopTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(TopTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task FullIntegration(CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TransparentTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TransparentTests.cs index 38d55460..96bc45e3 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TransparentTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/TransparentTests.cs @@ -10,7 +10,10 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // --------------------------------------------------------------------------------------------------------------------- public class TransparentTests { - [Test, DisplayName($"{nameof(TransparentTests)}.{nameof(Builder)}"), Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(TransparentTests)}.{nameof(Builder)}")] + [Arguments(true)] + [Arguments(false)] public async Task Builder(bool state, CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -25,7 +28,13 @@ public async Task Builder(bool state, CancellationToken ct = default) { await Assert.That(configParameters.Transparent).IsEqualTo(state); } - [Test, DisplayName($"{nameof(TransparentTests)}.{nameof(Window)}"), SkipOnMacOs, SkipOnLinux("Headless display lacks compositing support for post-init transparency changes"), NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(TransparentTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [SkipOnLinux("Headless display lacks compositing support for post-init transparency changes")] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task Window(bool state, CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -39,7 +48,12 @@ public async Task Window(bool state, CancellationToken ct = default) { await Assert.That(window.Transparent).IsEqualTo(state); } - [Test, DisplayName($"{nameof(TransparentTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, NotInParallelInfiniTests, Arguments(true), Arguments(false)] + [Test] + [DisplayName($"{nameof(TransparentTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [Arguments(true)] + [Arguments(false)] public async Task FullIntegration(bool state, CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/WidthTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/WidthTests.cs index f73b47df..880a1625 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/WidthTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/WidthTests.cs @@ -14,7 +14,8 @@ public class WidthTests { // ----------------------------------------------------------------------------------------------------------------- // Test Methods // ----------------------------------------------------------------------------------------------------------------- - [Test, DisplayName($"{nameof(WidthTests)}.{nameof(Builder)}")] + [Test] + [DisplayName($"{nameof(WidthTests)}.{nameof(Builder)}")] public async Task Builder(CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -30,7 +31,8 @@ public async Task Builder(CancellationToken ct = default) { await Assert.That(configParameters.Width).IsEqualTo(Width); } - [Test, DisplayName($"{nameof(WidthTests)}.{nameof(Builder_ShouldOverwriteOsDefaultSizeAndCentered)}")] + [Test] + [DisplayName($"{nameof(WidthTests)}.{nameof(Builder_ShouldOverwriteOsDefaultSizeAndCentered)}")] public async Task Builder_ShouldOverwriteOsDefaultSizeAndCentered() { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -53,7 +55,11 @@ public async Task Builder_ShouldOverwriteOsDefaultSizeAndCentered() { await Assert.That(configParameters).IsEqualTo(expectedConfigParameters); } - [Test, DisplayName($"{nameof(WidthTests)}.{nameof(Window)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(WidthTests)}.{nameof(Window)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task Window(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -66,7 +72,11 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(window.Width).IsEqualTo(500); } - [Test, DisplayName($"{nameof(WidthTests)}.{nameof(FullIntegration)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(WidthTests)}.{nameof(FullIntegration)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task FullIntegration(CancellationToken ct = default) { // Arrange @@ -83,7 +93,11 @@ public async Task FullIntegration(CancellationToken ct = default) { await Assert.That(window.Width).IsEqualTo(500); } - [Test, DisplayName($"{nameof(WidthTests)}.{nameof(Window_WithChromelessToGetSmallestWidth)}"), SkipOnMacOs, SkipOnLinux(SkipUtility.LinuxMovement), NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(WidthTests)}.{nameof(Window_WithChromelessToGetSmallestWidth)}")] + [SkipOnMacOs] + [SkipOnLinux(SkipUtility.LinuxMovement)] + [NotInParallelInfiniTests] public async Task Window_WithChromelessToGetSmallestWidth(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create( @@ -99,7 +113,10 @@ public async Task Window_WithChromelessToGetSmallestWidth(CancellationToken ct = await Assert.That(window.Width).IsEqualTo(Width); } - [Test, DisplayName($"{nameof(WidthTests)}.{nameof(FullIntegration_WithChromelessToGetSmallestWidth)}"), SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [DisplayName($"{nameof(WidthTests)}.{nameof(FullIntegration_WithChromelessToGetSmallestWidth)}")] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task FullIntegration_WithChromelessToGetSmallestWidth(CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ZoomTests.cs b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ZoomTests.cs index ac9b1e9d..023f71db 100644 --- a/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ZoomTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowFunctionalities/ZoomTests.cs @@ -9,7 +9,9 @@ namespace InfiniTests.InfiniFrame.WindowFunctionalities; // Code // --------------------------------------------------------------------------------------------------------------------- public class ZoomTests { - [Test, DisplayName($"{nameof(ZoomTests)}.{nameof(Builder)}"), MatrixDataSource] + [Test] + [DisplayName($"{nameof(ZoomTests)}.{nameof(Builder)}")] + [MatrixDataSource] public async Task Builder([MatrixRange(10, 200, 10)] int zoom, CancellationToken ct = default) { // Arrange var builder = InfiniFrameWindowBuilder.Create(); @@ -24,7 +26,11 @@ public async Task Builder([MatrixRange(10, 200, 10)] int zoom, Cancellation await Assert.That(configParameters.Zoom).IsEqualTo(zoom); } - [Test, DisplayName($"{nameof(ZoomTests)}.{nameof(Window)}"), NotInParallelInfiniTests, SkipOnLinux, SkipOnMacOs] + [Test] + [DisplayName($"{nameof(ZoomTests)}.{nameof(Window)}")] + [NotInParallelInfiniTests] + [SkipOnLinux] + [SkipOnMacOs] public async Task Window(CancellationToken ct = default) { // Arrange const int zoom = 120; @@ -44,7 +50,12 @@ public async Task Window(CancellationToken ct = default) { await Assert.That(window.Zoom).IsEqualTo(zoom); } - [Test, DisplayName($"{nameof(ZoomTests)}.{nameof(FullIntegration)}"), NotInParallelInfiniTests, SkipOnLinux, SkipOnMacOs, MatrixDataSource] + [Test] + [DisplayName($"{nameof(ZoomTests)}.{nameof(FullIntegration)}")] + [NotInParallelInfiniTests] + [SkipOnLinux] + [SkipOnMacOs] + [MatrixDataSource] public async Task FullIntegration([MatrixRange(26, 250, 10)] int zoom, CancellationToken ct = default) { // Arrange diff --git a/tests/InfiniTests.InfiniFrame/WindowLifecycles/ParentChildWindowTests.cs b/tests/InfiniTests.InfiniFrame/WindowLifecycles/ParentChildWindowTests.cs index dc0320fc..bb0c780e 100644 --- a/tests/InfiniTests.InfiniFrame/WindowLifecycles/ParentChildWindowTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowLifecycles/ParentChildWindowTests.cs @@ -44,7 +44,10 @@ private static void WriteDiagnostics(string context) { } } - [Test, SkipOnMacOs, SkipOnWindowsArm, NotInParallelInfiniTests] + [Test] + [SkipOnMacOs] + [SkipOnWindowsArm] + [NotInParallelInfiniTests] public async Task TestParentChildWindow(CancellationToken ct = default) { WriteDiagnostics(nameof(TestParentChildWindow)); @@ -64,7 +67,11 @@ public async Task TestParentChildWindow(CancellationToken ct = default) { await Assert.That(childWindow.Configuration.StartupParameters.NativeParent).IsEqualTo(parentWindow.InstanceHandle); } - [Test, SkipOnMacOs, SkipOnWindowsArm, DefaultInfiniTestsTimeout(6_000), NotInParallelInfiniTests] + [Test] + [SkipOnMacOs] + [SkipOnWindowsArm] + [DefaultInfiniTestsTimeout(6_000)] + [NotInParallelInfiniTests] public async Task ClosingParent_ShouldCloseChildWindow(CancellationToken ct = default) { WriteDiagnostics(nameof(ClosingParent_ShouldCloseChildWindow)); @@ -86,7 +93,9 @@ public async Task ClosingParent_ShouldCloseChildWindow(CancellationToken ct = de await Assert.That(childWindow.IsClosed).IsTrue(); } - [Test, OnlyRunOnWindowsX64, NotInParallelInfiniTests] + [Test] + [OnlyRunOnWindowsX64] + [NotInParallelInfiniTests] public async Task ChildWindow_ShouldHaveNativeOwnerWindow_OnWindows(CancellationToken ct = default) { WriteDiagnostics(nameof(ChildWindow_ShouldHaveNativeOwnerWindow_OnWindows)); diff --git a/tests/InfiniTests.InfiniFrame/WindowTests.cs b/tests/InfiniTests.InfiniFrame/WindowTests.cs index eec2980d..b346b95e 100644 --- a/tests/InfiniTests.InfiniFrame/WindowTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowTests.cs @@ -13,7 +13,9 @@ public class WindowTests { // ----------------------------------------------------------------------------------------------------------------- // Tests // ----------------------------------------------------------------------------------------------------------------- - [Test, SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task InstanceHandle_IsDefined(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -25,7 +27,9 @@ public async Task InstanceHandle_IsDefined(CancellationToken ct = default) { await Assert.That(window.InstanceHandle).IsNotDefault(); } - [Test, SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task WindowHandle_IsDefined(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -39,7 +43,9 @@ public async Task WindowHandle_IsDefined(CancellationToken ct = default) { else await Assert.That(handle).IsEqualTo(IntPtr.Zero); } - [Test, SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task Monitors_IsNotEmpty(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -52,7 +58,9 @@ public async Task Monitors_IsNotEmpty(CancellationToken ct = default) { await Assert.That(monitors).IsNotEmpty(); } - [Test, SkipOnMacOs, NotInParallelInfiniTests] + [Test] + [SkipOnMacOs] + [NotInParallelInfiniTests] public async Task NativeType_IsDefined(CancellationToken ct = default) { // Arrange using var windowUtility = InfiniFrameTestWindow.Create(ct); @@ -64,7 +72,12 @@ public async Task NativeType_IsDefined(CancellationToken ct = default) { await Assert.That(window.NativeType).IsNotDefault(); } - [Test, Retry(5), SkipOnMacOs, NotInParallelInfiniTests, DefaultInfiniTestsTimeout(1_000), SuppressMessage("ReSharper", "MethodSupportsCancellation")] + [Test] + [Retry(5)] + [SkipOnMacOs] + [NotInParallelInfiniTests] + [DefaultInfiniTestsTimeout(1_000)] + [SuppressMessage("ReSharper", "MethodSupportsCancellation")] // Sometimes fails on CI due to timing issues public async Task Close_IsDefined(CancellationToken ct = default) { // Arrange @@ -86,7 +99,11 @@ public async Task Close_IsDefined(CancellationToken ct = default) { await Assert.That(windowClosing).IsTrue(); } - [Test, Retry(5), SkipOnMacOs, DefaultInfiniTestsTimeout(6_000), NotInParallelInfiniTests] + [Test] + [Retry(5)] + [SkipOnMacOs] + [DefaultInfiniTestsTimeout(6_000)] + [NotInParallelInfiniTests] public async Task IsClosed_TracksWindowState(CancellationToken ct = default) { using var windowUtility = InfiniFrameTestWindow.Create(ct); IInfiniFrameWindow window = windowUtility.Window; diff --git a/tests/InfiniTests/InfiniFrameTestWindow.Linux.cs b/tests/InfiniTests/InfiniFrameTestWindow.Linux.cs index 32974a54..99f00324 100644 --- a/tests/InfiniTests/InfiniFrameTestWindow.Linux.cs +++ b/tests/InfiniTests/InfiniFrameTestWindow.Linux.cs @@ -62,7 +62,8 @@ private static IInfiniFrameWindow EnsureGtkHost() { } } - [SupportedOSPlatform("linux"), MustDisposeResource] + [SupportedOSPlatform("linux")] + [MustDisposeResource] private static partial InfiniFrameTestWindow CreateLinux(InfiniFrameWindowBuilder windowBuilder) { IInfiniFrameWindow host = EnsureGtkHost(); diff --git a/tests/InfiniTests/InfiniFrameTestWindow.MacOs.cs b/tests/InfiniTests/InfiniFrameTestWindow.MacOs.cs index 93085004..d7c24803 100644 --- a/tests/InfiniTests/InfiniFrameTestWindow.MacOs.cs +++ b/tests/InfiniTests/InfiniFrameTestWindow.MacOs.cs @@ -10,7 +10,8 @@ namespace InfiniTests; // Code // --------------------------------------------------------------------------------------------------------------------- public sealed partial class InfiniFrameTestWindow { - [SupportedOSPlatform("macos"), MustDisposeResource] + [SupportedOSPlatform("macos")] + [MustDisposeResource] private static partial InfiniFrameTestWindow CreateMacOs(InfiniFrameWindowBuilder windowBuilder) { IInfiniFrameWindow window = windowBuilder.Build(); diff --git a/tests/InfiniTests/InfiniFrameTestWindow.Windows.cs b/tests/InfiniTests/InfiniFrameTestWindow.Windows.cs index 8a29ebe2..d45ca248 100644 --- a/tests/InfiniTests/InfiniFrameTestWindow.Windows.cs +++ b/tests/InfiniTests/InfiniFrameTestWindow.Windows.cs @@ -11,7 +11,8 @@ namespace InfiniTests; // Code // --------------------------------------------------------------------------------------------------------------------- public sealed partial class InfiniFrameTestWindow { - [SupportedOSPlatform("windows"), MustDisposeResource] + [SupportedOSPlatform("windows")] + [MustDisposeResource] private static partial InfiniFrameTestWindow CreateWindows(InfiniFrameWindowBuilder windowBuilder) { var windowSource = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); From d7d016bdcce47c273060cb336257d2f42803325b Mon Sep 17 00:00:00 2001 From: Anna Sas Date: Tue, 2 Jun 2026 17:16:44 +0200 Subject: [PATCH 4/8] Add `[SkipOnMacOs]` attribute to `ReOpeningAnotherWindowTests` --- .../WindowLifecycles/ReOpeningAnotherWindowTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs b/tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs index 06c65832..536231e5 100644 --- a/tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs @@ -7,6 +7,7 @@ namespace InfiniTests.InfiniFrame.WindowLifecycles; // --------------------------------------------------------------------------------------------------------------------- public class ReOpeningAnotherWindowTests { [Test] + [SkipOnMacOs] [NotInParallelInfiniTests] [Timeout(1000000000)] public async Task CreateAnotherWindowAfterClosingOthers(CancellationToken ct = default) { From 05352e25dbe434fe8a83ef28b15548bd8dfacdbf Mon Sep 17 00:00:00 2001 From: AnnaSasDev Date: Tue, 2 Jun 2026 17:29:06 +0200 Subject: [PATCH 5/8] Remove unnecessary Timeout attribute from ReOpeningAnotherWindowTests. --- .../WindowLifecycles/ReOpeningAnotherWindowTests.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs b/tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs index 536231e5..99fdad33 100644 --- a/tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs @@ -9,7 +9,6 @@ public class ReOpeningAnotherWindowTests { [Test] [SkipOnMacOs] [NotInParallelInfiniTests] - [Timeout(1000000000)] public async Task CreateAnotherWindowAfterClosingOthers(CancellationToken ct = default) { // Arrange var window1Utility = InfiniFrameTestWindow.Create(ct); From 1a51157ef246f93a45028ca143f06bd0cca10158 Mon Sep 17 00:00:00 2001 From: AnnaSasDev Date: Tue, 2 Jun 2026 17:29:38 +0200 Subject: [PATCH 6/8] Update CodeQL config path for Native Dependencies folder. --- .github/codeql-config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/codeql-config.yml b/.github/codeql-config.yml index 3bb3c721..cfa784bd 100644 --- a/.github/codeql-config.yml +++ b/.github/codeql-config.yml @@ -18,7 +18,7 @@ paths-ignore: - "src/InfiniFrame.NativeBridge/Native/cmake-build-release/**" - "src/InfiniFrame.NativeBridge/Native/cmake-build-release-linux/**" - "src/InfiniFrame.NativeBridge/Native/cmake-build-release-windows/**" - - "src/InfiniFrame.NativeBridge/Native/Dependencies/**" + - "src/InfiniFrame.NativeBridge/Native/src/Dependencies/**" - "src/InfiniFrame.NativeBridge/Native/packages/**" - "tests/**" - "**/node_modules/**" From f0de4d09554c03dbd041153653e7237cc566595c Mon Sep 17 00:00:00 2001 From: AnnaSasDev Date: Tue, 2 Jun 2026 18:19:38 +0200 Subject: [PATCH 7/8] Fix incorrect window reference in ReOpeningAnotherWindowTests. --- .../WindowLifecycles/ReOpeningAnotherWindowTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs b/tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs index 99fdad33..22f72d24 100644 --- a/tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs +++ b/tests/InfiniTests.InfiniFrame/WindowLifecycles/ReOpeningAnotherWindowTests.cs @@ -20,7 +20,7 @@ public async Task CreateAnotherWindowAfterClosingOthers(CancellationToken ct = d // Act await Task.Run(() => window2Utility.Window.Close(), ct); - window1Utility.Window.WaitForClose(); + window2Utility.Window.WaitForClose(); // Assert await Assert.That(window1Utility.Window.IsClosed).IsTrue(); From 2eebaa1cbd071d81ed2b736f7b355541fc01f1d9 Mon Sep 17 00:00:00 2001 From: AnnaSasDev Date: Tue, 2 Jun 2026 20:01:16 +0200 Subject: [PATCH 8/8] Refactor window shutdown state handling for clarity and reliability. --- src/InfiniFrame/Window/InfiniFrameWindow.cs | 276 ++++++++++---------- 1 file changed, 143 insertions(+), 133 deletions(-) diff --git a/src/InfiniFrame/Window/InfiniFrameWindow.cs b/src/InfiniFrame/Window/InfiniFrameWindow.cs index 469397c0..bce47f1b 100644 --- a/src/InfiniFrame/Window/InfiniFrameWindow.cs +++ b/src/InfiniFrame/Window/InfiniFrameWindow.cs @@ -24,23 +24,22 @@ public sealed class InfiniFrameWindow : IInfiniFrameWindow { public required IInfiniFrameEvents Events { get; init; } public required IInfiniFrameOptions Configuration { get; init; } public IInfiniFrameStaticAssets? StaticAssets { get; init; } - + public IInfiniFrameEventsStore EventsStore => Events.EventsStore; - + public IntPtr NativeType => WindowType.Value; + public IntPtr InstanceHandle { get; private set; } public Rectangle CachedPreFullScreenBounds { get; set; } = Rectangle.Empty; public Rectangle CachedPreMaximizedBounds { get; set; } = Rectangle.Empty; - private int _shutdownRequested; - private bool IsShutdownRequested => Volatile.Read(ref _shutdownRequested) != 0; - - private int _shutdownStarted; - private bool IsShutdownStarted => Volatile.Read(ref _shutdownStarted) != 0; - - public bool IsClosed => IsShutdownRequested || IsShutdownStarted || InstanceHandle == IntPtr.Zero; - + private int _shutdownState; + + private bool IsClosing => Volatile.Read(ref _shutdownState) != 0; + public bool IsClosed => Volatile.Read(ref _shutdownState) == 2; + public bool IsClosedOrClosing => IsClosing || InstanceHandle == IntPtr.Zero; + // ----------------------------------------------------------------------------------------------------------------- // Methods // ----------------------------------------------------------------------------------------------------------------- @@ -53,20 +52,26 @@ public sealed class InfiniFrameWindow : IInfiniFrameWindow { /// /// The delegate encapsulating a method / action to be executed in the UI thread. public void Invoke(Action workItem) { - static void RunWithNativeStatusCheck(Action action) { - Marshal.SetLastPInvokeError(0); - action(); - InfiniFrameNative.EnsureSucceeded(InfiniFrameNativeInteropStatus.Success, "Invoke"); - } - - // If we're already on the UI thread, no need to dispatch if (Environment.CurrentManagedThreadId == ManagedThreadId) { - RunWithNativeStatusCheck(workItem); + Run(workItem); + return; } - else { + + IntPtr handle = InstanceHandle; + + InfiniFrameNative.EnsureSucceeded( + InfiniFrameNative.Invoke(handle, callback: () => Run(workItem)), + nameof(InfiniFrameNative.Invoke) + ); + return; + + static void Run(Action action) { + Marshal.SetLastPInvokeError(0); + action(); InfiniFrameNative.EnsureSucceeded( - InfiniFrameNative.Invoke(InstanceHandle, () => RunWithNativeStatusCheck(workItem)), - nameof(InfiniFrameNative.Invoke)); + InfiniFrameNativeInteropStatus.Success, + "Invoke" + ); } } @@ -79,40 +84,47 @@ static void RunWithNativeStatusCheck(Action action) { /// The operation of the message loop is exclusive to the main native window only. /// public void WaitForClose() { - if (IsShutdownRequested || IsShutdownStarted || IsClosed) { + if (IsClosing || IsClosed) { Logger.LogDebug("Skipping WaitForClose during shutdown"); return; } - + try { Logger.LogDebug("Starting message loop for window."); - Invoke(() => InfiniFrameNative.WaitForExit(InstanceHandle)); + + IntPtr handle = InstanceHandle; + if (handle == IntPtr.Zero) + return; + + Invoke(() => InfiniFrameNative.WaitForExit(handle)); } catch (Exception ex) when (ExceptionsUtility.IsNonFatalException(ex)) { - int lastError = 0; - if (OperatingSystem.IsWindows()) lastError = Marshal.GetLastWin32Error(); + int lastError = OperatingSystem.IsWindows() + ? Marshal.GetLastWin32Error() + : 0; Logger.LogError(ex, "Error #{LastErrorCode} while running message loop", lastError); - throw new ApplicationException($"Native code exception. Error # {lastError} See inner exception for details.", ex); + throw new ApplicationException( + $"Native code exception. Error # {lastError}", + ex); } finally { - Interlocked.Exchange(ref _shutdownRequested, 1); - Interlocked.Exchange(ref _shutdownStarted, 1); + InstanceHandle = IntPtr.Zero; + Interlocked.Exchange(ref _shutdownState, 2); } } public ValueTask WaitForCloseAsync(CancellationToken ct = default) { - if (ct.IsCancellationRequested) return ValueTask.FromCanceled(ct); + if (ct.IsCancellationRequested) + return ValueTask.FromCanceled(ct); WaitForClose(); return ValueTask.CompletedTask; } - // Should only be used internally void IInfiniFrameWindow.MarkClosedFromNativeCallback() { - Interlocked.Exchange(ref _shutdownRequested, 1); - Interlocked.Exchange(ref _shutdownStarted, 1); InstanceHandle = IntPtr.Zero; + Interlocked.Exchange(ref _shutdownState, 2); } /// @@ -122,29 +134,34 @@ void IInfiniFrameWindow.MarkClosedFromNativeCallback() { /// Thrown when the window is not initialized. /// public void Close() { - if (IsShutdownRequested || IsShutdownStarted || IsClosed) { + if (Interlocked.Exchange(ref _shutdownState, 1) != 0) { Logger.LogDebug("Skipping Close during shutdown"); return; } Logger.LogDebug(".Close()"); Events.OnWindowClosingRequested(); - if (InstanceHandle == IntPtr.Zero) return; - Interlocked.Exchange(ref _shutdownRequested, 1); + IntPtr handle = InstanceHandle; + if (handle == IntPtr.Zero) + return; + Invoke(() => { - if (InstanceHandle == IntPtr.Zero) { - Logger.LogDebug("Window already closed"); + IntPtr h = InstanceHandle; + if (h == IntPtr.Zero) return; - } - InfiniFrameNative.Close(InstanceHandle); + InfiniFrameNative.Close(h); + InstanceHandle = IntPtr.Zero; + Interlocked.Exchange(ref _shutdownState, 2); }); } public ValueTask CloseAsync(CancellationToken ct = default) { - if (ct.IsCancellationRequested) return ValueTask.FromCanceled(ct); + if (ct.IsCancellationRequested) + return ValueTask.FromCanceled(ct); + Close(); return ValueTask.CompletedTask; } @@ -160,28 +177,25 @@ public ValueTask CloseAsync(CancellationToken ct = default) { /// /// Message as string public void SendWebMessage(string message) { - if (IsShutdownRequested || IsShutdownStarted || IsClosed) { - Logger.LogDebug("Skipping SendWebMessage during shutdown"); + if (IsClosedOrClosing) + return; + + IntPtr handle = InstanceHandle; + if (handle == IntPtr.Zero) return; - } - Logger.LogDebug(".SendWebMessage({Message})", message); Invoke(() => { - if (IsShutdownStarted || InstanceHandle == IntPtr.Zero) { - Logger.LogDebug("Window closed before SendWebMessage could execute"); + if (InstanceHandle == IntPtr.Zero) return; - } - InfiniFrameNative.SendWebMessage(InstanceHandle, message); + InfiniFrameNative.SendWebMessage(handle, message); }); } - public Task SendWebMessageAsync(string message, CancellationToken ct = default) { - if (ct.IsCancellationRequested) return Task.FromCanceled(ct); - - SendWebMessage(message); - return Task.CompletedTask; - } + public Task SendWebMessageAsync(string message, CancellationToken ct = default) + => ct.IsCancellationRequested + ? Task.FromCanceled(ct) + : Task.Run(action: () => SendWebMessage(message), ct); /// /// Sends a native notification to the OS. @@ -193,22 +207,22 @@ public Task SendWebMessageAsync(string message, CancellationToken ct = default) /// The title of the notification /// The text of the notification public void SendNotification(string title, string body) { - if (IsShutdownRequested || IsShutdownStarted || IsClosed) { - Logger.LogDebug("Skipping SendNotification during shutdown"); + if (IsClosedOrClosing) + return; + + IntPtr handle = InstanceHandle; + if (handle == IntPtr.Zero) return; - } - Logger.LogDebug(".SendNotification({Title}, {Body})", title, body); Invoke(() => { - if (IsShutdownStarted || InstanceHandle == IntPtr.Zero) { - Logger.LogDebug("Window closed before SendNotification could execute"); + if (InstanceHandle == IntPtr.Zero) return; - } - InfiniFrameNative.ShowNotification(InstanceHandle, title, body); + InfiniFrameNative.ShowNotification(handle, title, body); }); } + /// /// Show an open file dialog native to the OS. /// @@ -354,49 +368,45 @@ public bool TryResolveStaticAssetUri(string path, out Uri uri) { out uri); } - private static Task RunDialogAsync(Func workItem, CancellationToken ct = default) { - return ct.IsCancellationRequested + private static Task RunDialogAsync(Func workItem, CancellationToken ct = default) => + ct.IsCancellationRequested ? Task.FromCanceled(ct) // Dialog calls are intentionally offloaded for Blazor flows where synchronous dialog invocation is unsafe. : Task.Run(workItem, ct); - } public void Initialize() { InfiniFrameNativeParameters startupParameters = Configuration.StartupParameters; - + try { if (!InfiniFrameNativeParametersValidator.Validate(startupParameters, Logger)) { - Logger.LogCritical("Startup Parameters Are Not Valid, please check the logs"); - throw new ArgumentException("Startup Parameters Are Not Valid, please check the logs"); + throw new ArgumentException("Startup Parameters Are Not Valid"); } Events.OnWindowCreating(); - // All C++ exceptions will bubble up to here. try { - if (OperatingSystem.IsWindows()) - Invoke(() => { - InfiniFrameNative.RegisterWin32(NativeType); - }); - else if (OperatingSystem.IsMacOS()) - Invoke(() => { - InfiniFrameNative.RegisterMac(); - }); + if (OperatingSystem.IsWindows()) { + Invoke(() => InfiniFrameNative.RegisterWin32(NativeType)); + } + else if (OperatingSystem.IsMacOS()) { + Invoke(() => InfiniFrameNative.RegisterMac()); + } Invoke(() => { InfiniFrameNative.EnsureSucceeded( - InfiniFrameNative.Constructor(in startupParameters, out IntPtr instanceHandle), + InfiniFrameNative.Constructor(in startupParameters, out IntPtr handle), nameof(InfiniFrameNative.Constructor)); - InstanceHandle = instanceHandle; + + InstanceHandle = handle; }); } catch (Exception ex) when (ExceptionsUtility.IsNonFatalException(ex)) { - int lastError = 0; - if (OperatingSystem.IsWindows()) - lastError = Marshal.GetLastWin32Error(); + int lastError = OperatingSystem.IsWindows() + ? Marshal.GetLastWin32Error() + : 0; Logger.LogError(ex, "Error #{LastErrorCode} while creating native window", lastError); - throw new ApplicationException($"Native code exception. Error # {lastError} See inner exception for details.", ex); + throw new ApplicationException($"Native code exception. Error #{lastError}", ex); } Events.OnWindowCreated(); @@ -468,7 +478,7 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi ? InvokeUtility.InvokeAndReturn( this, InfiniFrameNative.GetWindowHandlerWin32, - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetWindowHandlerWin32))) + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetWindowHandlerWin32))) : IntPtr.Zero; /// @@ -506,7 +516,7 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi public uint ScreenDpi => InvokeUtility.InvokeAndReturn( this, InfiniFrameNative.GetScreenDpi, - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetScreenDpi))); + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetScreenDpi))); /// /// Gets a unique GUID to identify the native window. @@ -538,51 +548,51 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool Transparent => OperatingSystem.IsWindows() ? Configuration.StartupParameters.Transparent// on windows it can only be set at startup - : InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetTransparentEnabled, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetTransparentEnabled))); + : InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetTransparentEnabled, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetTransparentEnabled))); /// /// When true, the user can access the browser control's context menu. /// By default, this is set to true. /// [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool ContextMenuEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetContextMenuEnabled, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetContextMenuEnabled))); + public bool ContextMenuEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetContextMenuEnabled, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetContextMenuEnabled))); /// /// When true, the user can access the browser control's developer tools. /// By default, this is set to true. /// [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool DevToolsEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetDevToolsEnabled, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetDevToolsEnabled))); + public bool DevToolsEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetDevToolsEnabled, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetDevToolsEnabled))); [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool MediaAutoplayEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetMediaAutoplayEnabled, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMediaAutoplayEnabled))); + public bool MediaAutoplayEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetMediaAutoplayEnabled, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMediaAutoplayEnabled))); [DebuggerBrowsable(DebuggerBrowsableState.Never)] public string? UserAgent => InvokeUtility.InvokeAndReturn( this, InfiniFrameNative.GetUserAgent, - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetUserAgent))); + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetUserAgent))); [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool FileSystemAccessEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetFileSystemAccessEnabled, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetFileSystemAccessEnabled))); + public bool FileSystemAccessEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetFileSystemAccessEnabled, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetFileSystemAccessEnabled))); [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool WebSecurityEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetWebSecurityEnabled, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetWebSecurityEnabled))); + public bool WebSecurityEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetWebSecurityEnabled, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetWebSecurityEnabled))); [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool JavascriptClipboardAccessEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetJavascriptClipboardAccessEnabled, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetJavascriptClipboardAccessEnabled))); + public bool JavascriptClipboardAccessEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetJavascriptClipboardAccessEnabled, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetJavascriptClipboardAccessEnabled))); [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool MediaStreamEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetMediaStreamEnabled, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMediaStreamEnabled))); + public bool MediaStreamEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetMediaStreamEnabled, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMediaStreamEnabled))); [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool SmoothScrollingEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetSmoothScrollingEnabled, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetSmoothScrollingEnabled))); + public bool SmoothScrollingEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetSmoothScrollingEnabled, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetSmoothScrollingEnabled))); [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool IgnoreCertificateErrorsEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetIgnoreCertificateErrorsEnabled, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetIgnoreCertificateErrorsEnabled))); + public bool IgnoreCertificateErrorsEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetIgnoreCertificateErrorsEnabled, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetIgnoreCertificateErrorsEnabled))); [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool NotificationsEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetNotificationsEnabled, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetNotificationsEnabled))); + public bool NotificationsEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetNotificationsEnabled, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetNotificationsEnabled))); /// /// This property returns or sets the fullscreen status of the window. @@ -590,14 +600,14 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi /// By default, this is set to false. /// [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool FullScreen => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetFullScreen, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetFullScreen))); + public bool FullScreen => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetFullScreen, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetFullScreen))); /// /// Gets whether the native browser control grants all requests for access to local resources /// such as the user's camera and microphone. By default, this is set to true. /// [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool GrantBrowserPermissions => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetGrantBrowserPermissions, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetGrantBrowserPermissions))); + public bool GrantBrowserPermissions => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetGrantBrowserPermissions, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetGrantBrowserPermissions))); /// /// Gets the Height property of the native window in pixels. @@ -606,8 +616,8 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi [DebuggerBrowsable(DebuggerBrowsableState.Never)] public int Height => InvokeUtility.InvokeAndReturn( this, - (IntPtr handle, out int value) => InfiniFrameNative.GetSize(handle, out _, out value), - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetSize))); + callback: (IntPtr handle, out int value) => InfiniFrameNative.GetSize(handle, out _, out value), + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetSize))); /// /// Gets the icon file for the native window title bar. @@ -616,7 +626,7 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi public string IconFilePath => InvokeUtility.InvokeAndReturn( this, InfiniFrameNative.GetIconFileName, - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetIconFileName))); + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetIconFileName))); /// /// Gets the native window Left (X) and Top coordinates (Y) in pixels. @@ -625,12 +635,12 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi [DebuggerBrowsable(DebuggerBrowsableState.Never)] public Point Location => InvokeUtility.InvokeAndReturn( this, - (IntPtr handle, out Point value) => { + callback: (IntPtr handle, out Point value) => { InfiniFrameNativeInteropStatus status = InfiniFrameNative.GetPosition(handle, out int left, out int top); value = new Point(left, top); return status; }, - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetPosition))); + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetPosition))); /// /// Gets the native window Left (X) coordinate in pixels. @@ -640,21 +650,21 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi [DebuggerBrowsable(DebuggerBrowsableState.Never)] public int Left => InvokeUtility.InvokeAndReturn( this, - (IntPtr handle, out int value) => InfiniFrameNative.GetPosition(handle, out value, out _), - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetPosition))); + callback: (IntPtr handle, out int value) => InfiniFrameNative.GetPosition(handle, out value, out _), + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetPosition))); /// /// Gets whether the native window is maximized. /// Default is false. /// [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool Maximized => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetMaximized, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMaximized))); + public bool Maximized => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetMaximized, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMaximized))); /// /// Gets whether the native window is currently within focus /// [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool Focused => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetFocused, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetFocused))); + public bool Focused => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetFocused, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetFocused))); /// /// Gets the maximum size of the native window in pixels. @@ -662,12 +672,12 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi [DebuggerBrowsable(DebuggerBrowsableState.Never)] public Size MaxSize => InvokeUtility.InvokeAndReturn( this, - (IntPtr handle, out Size value) => { + callback: (IntPtr handle, out Size value) => { InfiniFrameNativeInteropStatus status = InfiniFrameNative.GetMaxSize(handle, out int width, out int height); value = new Size(width, height); return status; }, - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMaxSize))); + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMaxSize))); /// /// Gets the native window maximum height in pixels. @@ -675,8 +685,8 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi [DebuggerBrowsable(DebuggerBrowsableState.Never)] public int MaxHeight => InvokeUtility.InvokeAndReturn( this, - (IntPtr handle, out int value) => InfiniFrameNative.GetMaxSize(handle, out _, out value), - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMaxSize))); + callback: (IntPtr handle, out int value) => InfiniFrameNative.GetMaxSize(handle, out _, out value), + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMaxSize))); /// /// Gets the native window maximum width in pixels. @@ -684,14 +694,14 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi [DebuggerBrowsable(DebuggerBrowsableState.Never)] public int MaxWidth => InvokeUtility.InvokeAndReturn( this, - (IntPtr handle, out int value) => InfiniFrameNative.GetMaxSize(handle, out value, out _), - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMaxSize))); + callback: (IntPtr handle, out int value) => InfiniFrameNative.GetMaxSize(handle, out value, out _), + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMaxSize))); /// /// Gets whether the native window is minimized (hidden). /// [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool Minimized => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetMinimized, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMinimized))); + public bool Minimized => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetMinimized, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMinimized))); /// /// Gets the minimum size of the native window in pixels. @@ -699,12 +709,12 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi [DebuggerBrowsable(DebuggerBrowsableState.Never)] public Size MinSize => InvokeUtility.InvokeAndReturn( this, - (IntPtr handle, out Size value) => { + callback: (IntPtr handle, out Size value) => { InfiniFrameNativeInteropStatus status = InfiniFrameNative.GetMinSize(handle, out int width, out int height); value = new Size(width, height); return status; }, - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMinSize))); + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMinSize))); /// /// Gets the native window minimum height in pixels. @@ -712,8 +722,8 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi [DebuggerBrowsable(DebuggerBrowsableState.Never)] public int MinHeight => InvokeUtility.InvokeAndReturn( this, - (IntPtr handle, out int value) => InfiniFrameNative.GetMinSize(handle, out _, out value), - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMinSize))); + callback: (IntPtr handle, out int value) => InfiniFrameNative.GetMinSize(handle, out _, out value), + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMinSize))); /// /// Gets the native window minimum width in pixels. @@ -721,15 +731,15 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi [DebuggerBrowsable(DebuggerBrowsableState.Never)] public int MinWidth => InvokeUtility.InvokeAndReturn( this, - (IntPtr handle, out int value) => InfiniFrameNative.GetMinSize(handle, out value, out _), - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMinSize))); + callback: (IntPtr handle, out int value) => InfiniFrameNative.GetMinSize(handle, out value, out _), + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetMinSize))); /// /// Gets whether the user can resize the native window. /// Default is true. /// [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool Resizable => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetResizable, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetResizable))); + public bool Resizable => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetResizable, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetResizable))); /// /// Gets the native window Size. This represents the width and the height of the window in pixels. @@ -738,12 +748,12 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi [DebuggerBrowsable(DebuggerBrowsableState.Never)] public Size Size => InvokeUtility.InvokeAndReturn( this, - (IntPtr handle, out Size value) => { + callback: (IntPtr handle, out Size value) => { InfiniFrameNativeInteropStatus status = InfiniFrameNative.GetSize(handle, out int width, out int height); value = new Size(width, height); return status; }, - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetSize))); + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetSize))); /// /// Gets platform-specific initialization parameters for the native browser control on startup. @@ -822,7 +832,7 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi public string? Title => InvokeUtility.InvokeAndReturn( this, InfiniFrameNative.GetTitle, - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetTitle))); + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetTitle))); /// /// Gets the native window Top (Y) coordinate in pixels. @@ -831,15 +841,15 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi [DebuggerBrowsable(DebuggerBrowsableState.Never)] public int Top => InvokeUtility.InvokeAndReturn( this, - (IntPtr handle, out int value) => InfiniFrameNative.GetPosition(handle, out _, out value), - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetPosition))); + callback: (IntPtr handle, out int value) => InfiniFrameNative.GetPosition(handle, out _, out value), + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetPosition))); /// /// Gets whether the native window is always at the top of the z-order. /// Default is false. /// [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool TopMost => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetTopmost, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetTopmost))); + public bool TopMost => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetTopmost, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetTopmost))); /// /// Gets the native window width in pixels. @@ -848,8 +858,8 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi [DebuggerBrowsable(DebuggerBrowsableState.Never)] public int Width => InvokeUtility.InvokeAndReturn( this, - (IntPtr handle, out int value) => InfiniFrameNative.GetSize(handle, out value, out _), - s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetSize))); + callback: (IntPtr handle, out int value) => InfiniFrameNative.GetSize(handle, out value, out _), + validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetSize))); /// /// Gets the native browser control . @@ -857,9 +867,9 @@ private static string[] GetNativeFilters((string Name, string[] Extensions)[] fi /// /// 100 = 100%, 50 = 50% [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public int Zoom => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetZoom, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetZoom))); + public int Zoom => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetZoom, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetZoom))); [DebuggerBrowsable(DebuggerBrowsableState.Never)] - public bool ZoomEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetZoomEnabled, s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetZoomEnabled))); + public bool ZoomEnabled => InvokeUtility.InvokeAndReturn(this, InfiniFrameNative.GetZoomEnabled, validateResult: s => InfiniFrameNative.EnsureSucceeded(s, nameof(InfiniFrameNative.GetZoomEnabled))); #endregion }