From d470488c76150ad6a38e3d42af9ab4671df21dde Mon Sep 17 00:00:00 2001 From: Dong Bin Date: Thu, 10 Jul 2025 11:39:45 +0800 Subject: [PATCH] test: mvvm tests. --- .../Controls/AnchorTests/TestView2.axaml | 27 +++++++++++ .../Controls/AnchorTests/TestView2.axaml.cs | 46 +++++++++++++++++++ .../Controls/AnchorTests/Tests.cs | 17 ++++++- 3 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 tests/HeadlessTest.Ursa/Controls/AnchorTests/TestView2.axaml create mode 100644 tests/HeadlessTest.Ursa/Controls/AnchorTests/TestView2.axaml.cs diff --git a/tests/HeadlessTest.Ursa/Controls/AnchorTests/TestView2.axaml b/tests/HeadlessTest.Ursa/Controls/AnchorTests/TestView2.axaml new file mode 100644 index 0000000..70cb90c --- /dev/null +++ b/tests/HeadlessTest.Ursa/Controls/AnchorTests/TestView2.axaml @@ -0,0 +1,27 @@ + + + + + + + + + + + + diff --git a/tests/HeadlessTest.Ursa/Controls/AnchorTests/TestView2.axaml.cs b/tests/HeadlessTest.Ursa/Controls/AnchorTests/TestView2.axaml.cs new file mode 100644 index 0000000..23378af --- /dev/null +++ b/tests/HeadlessTest.Ursa/Controls/AnchorTests/TestView2.axaml.cs @@ -0,0 +1,46 @@ +using System.Collections.ObjectModel; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; +using CommunityToolkit.Mvvm.ComponentModel; + +namespace HeadlessTest.Ursa.Controls.AnchorTests; + +public partial class TestView2 : UserControl +{ + public TestView2() + { + InitializeComponent(); + DataContext = new AnchorDemoViewModel(); + } +} + +public partial class AnchorDemoViewModel: ObservableObject +{ + public List AnchorItems { get; } = new() + { + new AnchorItemViewModel { AnchorId = "anchor1", Header = "Anchor 1" }, + new AnchorItemViewModel { AnchorId = "anchor2", Header = "Anchor 2" }, + new AnchorItemViewModel + { + AnchorId = "anchor3", Header = "Anchor 3", + Children = + [ + new AnchorItemViewModel() { AnchorId = "anchor3-1", Header = "Anchor 3.1" }, + new AnchorItemViewModel() { AnchorId = "anchor3-2", Header = "Anchor 3.2" }, + new AnchorItemViewModel() { AnchorId = "anchor3-3", Header = "Anchor 3.3" } + ] + }, + new AnchorItemViewModel { AnchorId = "anchor4", Header = "Anchor 4" }, + new AnchorItemViewModel { AnchorId = "anchor5", Header = "Anchor 5" }, + new AnchorItemViewModel { AnchorId = "anchor6", Header = "Anchor 6" }, + new AnchorItemViewModel { AnchorId = "anchor7", Header = "Anchor 7" }, + }; +} + +public partial class AnchorItemViewModel: ObservableObject +{ + [ObservableProperty] private string? _anchorId; + [ObservableProperty] private string? _header; + public ObservableCollection? Children { get; set; } +} \ No newline at end of file diff --git a/tests/HeadlessTest.Ursa/Controls/AnchorTests/Tests.cs b/tests/HeadlessTest.Ursa/Controls/AnchorTests/Tests.cs index 99a091d..2e57d4a 100644 --- a/tests/HeadlessTest.Ursa/Controls/AnchorTests/Tests.cs +++ b/tests/HeadlessTest.Ursa/Controls/AnchorTests/Tests.cs @@ -4,6 +4,7 @@ using Avalonia.Headless; using Avalonia.Headless.XUnit; using Avalonia.Input; using Avalonia.Threading; +using Avalonia.VisualTree; using Ursa.Controls; namespace HeadlessTest.Ursa.Controls.AnchorTests; @@ -39,7 +40,7 @@ public class Tests Dispatcher.UIThread.RunJobs(); await Task.Delay(800); Assert.True(item4.IsSelected); - Assert.Equal(300.0 * 3, scrollViewer.Offset.Y, 1.0); + Assert.Equal(300.0 * 3, scrollViewer.Offset.Y, 50.0); } [AvaloniaFact] @@ -79,4 +80,18 @@ public class Tests Assert.True(item2.IsSelected); Assert.False(item4.IsSelected); } + + [AvaloniaFact] + public void MVVM_Support() + { + var window = new Window(); + var view = new TestView2(); + window.Content = view; + window.Show(); + Dispatcher.UIThread.RunJobs(); + var items = window.GetVisualDescendants().OfType().ToList(); + Assert.NotEmpty(items); + Assert.Equal(10, items.Count); + + } } \ No newline at end of file