From bad4c90a9d67b2d3361f0386e98374bcbbc81361 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Sun, 3 Nov 2024 16:21:10 +0800 Subject: [PATCH] test: add failing test case for issue 460. --- .../UrsaWindowTests/UrsaWindowTest.cs | 44 +++++++++++++++++++ .../UrsaWindowWithCloseInference.axaml | 11 +++++ .../UrsaWindowWithCloseInference.axaml.cs | 40 +++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowTest.cs create mode 100644 tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowWithCloseInference.axaml create mode 100644 tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowWithCloseInference.axaml.cs diff --git a/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowTest.cs b/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowTest.cs new file mode 100644 index 0000000..101e2d6 --- /dev/null +++ b/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowTest.cs @@ -0,0 +1,44 @@ +using Avalonia.Headless.XUnit; +using Ursa.Controls; + +namespace HeadlessTest.Ursa.Controls.UrsaWindowTests; + +public class UrsaWindowTest +{ + [AvaloniaFact] + public void Default_UrsaWindow_Closing_Is_Called_Once() + { + var ursaWindow = new UrsaWindow(); + ursaWindow.Show(); + int count = 0; + ursaWindow.Closing += (_, _) => count++; + ursaWindow.Close(); + Assert.Equal(1, count); + } + + [AvaloniaFact] + public async void Inferenced_Window_Closing_Called_Once_When_Yes() + { + var window = new UrsaWindowWithCloseInference(); + window.Show(); + int count = 0; + window.Closing += (_, _) => count++; + window.Close(); + window.DialogViewModel.CloseYes(); + Assert.Equal(1, count); + } + + [AvaloniaFact] + public async void Inferenced_Window_Closing_Called_Once_When_No() + { + var window = new UrsaWindowWithCloseInference(); + window.Show(); + int count = 0; + window.Closing += (_, _) => count++; + window.Close(); + window.DialogViewModel.Close(); + Assert.Equal(1, count); + } + + +} \ No newline at end of file diff --git a/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowWithCloseInference.axaml b/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowWithCloseInference.axaml new file mode 100644 index 0000000..2d76a2e --- /dev/null +++ b/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowWithCloseInference.axaml @@ -0,0 +1,11 @@ + + Hello World + diff --git a/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowWithCloseInference.axaml.cs b/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowWithCloseInference.axaml.cs new file mode 100644 index 0000000..cdbaaaf --- /dev/null +++ b/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowWithCloseInference.axaml.cs @@ -0,0 +1,40 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Interactivity; +using Avalonia.Markup.Xaml; +using Irihi.Avalonia.Shared.Contracts; +using Ursa.Controls; + +namespace HeadlessTest.Ursa.Controls.UrsaWindowTests; + +public partial class UrsaWindowWithCloseInference : UrsaWindow +{ + public UrsaWindowWithCloseInference() + { + InitializeComponent(); + } + + internal TextBox TextBox = new TextBox(); + internal DialogViewModel DialogViewModel = new DialogViewModel(); + + protected override async Task CanClose() + { + var result = await OverlayDialog.ShowModal(TextBox, DialogViewModel); + return result == DialogResult.Yes; + } +} + +class DialogViewModel : IDialogContext +{ + public void Close() + { + RequestClose?.Invoke(this, DialogResult.No); + } + + public void CloseYes() + { + RequestClose?.Invoke(this, DialogResult.Yes); + } + + public event EventHandler? RequestClose; +} \ No newline at end of file