test: mvvm tests.
This commit is contained in:
27
tests/HeadlessTest.Ursa/Controls/AnchorTests/TestView2.axaml
Normal file
27
tests/HeadlessTest.Ursa/Controls/AnchorTests/TestView2.axaml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<UserControl xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:u="https://irihi.tech/ursa"
|
||||||
|
xmlns:vm="clr-namespace:HeadlessTest.Ursa.Controls.AnchorTests"
|
||||||
|
mc:Ignorable="d" d:DesignWidth="800"
|
||||||
|
d:DesignHeight="450"
|
||||||
|
x:DataType="vm:AnchorDemoViewModel"
|
||||||
|
x:CompileBindings="True"
|
||||||
|
x:Class="HeadlessTest.Ursa.Controls.AnchorTests.TestView2">
|
||||||
|
<u:Anchor
|
||||||
|
Width="200"
|
||||||
|
Margin="24"
|
||||||
|
ItemsSource="{Binding AnchorItems}">
|
||||||
|
<u:Anchor.Styles>
|
||||||
|
<Style x:DataType="vm:AnchorItemViewModel" Selector="u|AnchorItem">
|
||||||
|
<Setter Property="AnchorId" Value="{Binding AnchorId}" />
|
||||||
|
</Style>
|
||||||
|
</u:Anchor.Styles>
|
||||||
|
<u:Anchor.ItemTemplate>
|
||||||
|
<TreeDataTemplate ItemsSource="{Binding Children}">
|
||||||
|
<TextBlock Text="{Binding Header}"/>
|
||||||
|
</TreeDataTemplate>
|
||||||
|
</u:Anchor.ItemTemplate>
|
||||||
|
</u:Anchor>
|
||||||
|
</UserControl>
|
||||||
@@ -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<AnchorItemViewModel> 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<AnchorItemViewModel>? Children { get; set; }
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ using Avalonia.Headless;
|
|||||||
using Avalonia.Headless.XUnit;
|
using Avalonia.Headless.XUnit;
|
||||||
using Avalonia.Input;
|
using Avalonia.Input;
|
||||||
using Avalonia.Threading;
|
using Avalonia.Threading;
|
||||||
|
using Avalonia.VisualTree;
|
||||||
using Ursa.Controls;
|
using Ursa.Controls;
|
||||||
|
|
||||||
namespace HeadlessTest.Ursa.Controls.AnchorTests;
|
namespace HeadlessTest.Ursa.Controls.AnchorTests;
|
||||||
@@ -39,7 +40,7 @@ public class Tests
|
|||||||
Dispatcher.UIThread.RunJobs();
|
Dispatcher.UIThread.RunJobs();
|
||||||
await Task.Delay(800);
|
await Task.Delay(800);
|
||||||
Assert.True(item4.IsSelected);
|
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]
|
[AvaloniaFact]
|
||||||
@@ -79,4 +80,18 @@ public class Tests
|
|||||||
Assert.True(item2.IsSelected);
|
Assert.True(item2.IsSelected);
|
||||||
Assert.False(item4.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<AnchorItem>().ToList();
|
||||||
|
Assert.NotEmpty(items);
|
||||||
|
Assert.Equal(10, items.Count);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user