test:WIP add tests. Change decade context end date.

This commit is contained in:
Dong Bin
2025-02-17 01:39:39 +08:00
parent 2d0386bc62
commit 051482de57
11 changed files with 604 additions and 8 deletions

View File

@@ -0,0 +1,54 @@
using Avalonia.Controls;
using Avalonia.Controls.Templates;
using Avalonia.Interactivity;
using Ursa.Controls;
namespace HeadlessTest.Ursa.Controls.DateTimePicker;
internal static class CalendarViewHelper
{
internal static void ClickPrevious(this CalendarView calendarView)
{
var previousButton = calendarView.GetTemplateChildren()
.FirstOrDefault(a => a.Name == CalendarView.PART_PreviousButton);
Assert.IsType<Button>(previousButton);
var button = (Button)previousButton;
button.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
}
internal static void ClickNext(this CalendarView calendarView)
{
var nextButton = calendarView.GetTemplateChildren()
.FirstOrDefault(a => a.Name == CalendarView.PART_NextButton);
Assert.IsType<Button>(nextButton);
var button = (Button)nextButton;
button.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
}
internal static void ClickFastNext(this CalendarView calendarView)
{
var nextButton = calendarView.GetTemplateChildren()
.FirstOrDefault(a => a.Name == CalendarView.PART_FastNextButton);
Assert.IsType<Button>(nextButton);
var button = (Button)nextButton;
button.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
}
internal static void ClickFastPrevious(this CalendarView calendarView)
{
var previousButton = calendarView.GetTemplateChildren()
.FirstOrDefault(a => a.Name == CalendarView.PART_FastPreviousButton);
Assert.IsType<Button>(previousButton);
var button = (Button)previousButton;
button.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
}
internal static void ClickHeaderButton(this CalendarView calendarView)
{
var headerButton = calendarView.GetTemplateChildren()
.FirstOrDefault(a => a.Name == CalendarView.PART_HeaderButton);
Assert.IsType<Button>(headerButton);
var button = (Button)headerButton;
button.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
}
}

View File

@@ -0,0 +1,245 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Headless;
using Avalonia.Headless.XUnit;
using Avalonia.Input;
using Avalonia.Threading;
using Avalonia.VisualTree;
using Ursa.Controls;
namespace HeadlessTest.Ursa.Controls.DateTimePicker;
public class CalendarViewTests
{
[AvaloniaFact]
public void OnNext_MonthMode_UpdatesToNextMonth()
{
var window = new Window();
var calendarView = new CalendarView
{ Mode = CalendarViewMode.Month };
window.Content = calendarView;
window.Show();
Dispatcher.UIThread.RunJobs();
calendarView.ContextDate = new CalendarContext(2023, 5);
Dispatcher.UIThread.RunJobs();
calendarView.ClickNext();
Assert.Equal(6, calendarView.ContextDate.Month);
Assert.Equal(2023, calendarView.ContextDate.Year);
}
[AvaloniaFact]
public void OnNext_MonthMode_FastForward_UpdatesToNextYear()
{
var window = new Window();
var calendarView = new CalendarView
{ Mode = CalendarViewMode.Month };
window.Content = calendarView;
window.Show();
Dispatcher.UIThread.RunJobs();
calendarView.ContextDate = new CalendarContext(2023, 5);
Dispatcher.UIThread.RunJobs();
calendarView.ClickFastNext();
Assert.Equal(5, calendarView.ContextDate.Month);
Assert.Equal(2024, calendarView.ContextDate.Year);
}
[AvaloniaFact]
public void OnNext_YearMode_UpdatesToNextYear()
{
var window = new Window();
var calendarView = new CalendarView
{ Mode = CalendarViewMode.Year };
window.Content = calendarView;
window.Show();
Dispatcher.UIThread.RunJobs();
calendarView.ContextDate = new CalendarContext(2023, 5);
Dispatcher.UIThread.RunJobs();
calendarView.ClickNext();
Assert.Equal(5, calendarView.ContextDate.Month);
Assert.Equal(2024, calendarView.ContextDate.Year);
}
[AvaloniaFact]
public void OnNext_DecadeMode_UpdatesToNextDecade()
{
var window = new Window();
var calendarView = new CalendarView { Mode = CalendarViewMode.Decade };
window.Content = calendarView;
window.Show();
Dispatcher.UIThread.RunJobs();
calendarView.ContextDate = new CalendarContext(null, null, 2000, 2009);
Dispatcher.UIThread.RunJobs();
calendarView.ClickNext();
Assert.Equal(2010, calendarView.ContextDate.StartYear);
Assert.Equal(2019, calendarView.ContextDate.EndYear);
}
[AvaloniaFact]
public void OnNext_CenturyMode_UpdatesToNextCentury()
{
var window = new Window();
var calendarView = new CalendarView { Mode = CalendarViewMode.Century };
window.Content = calendarView;
window.Show();
Dispatcher.UIThread.RunJobs();
calendarView.ContextDate = new CalendarContext(null, null, 1900, 1999);
Dispatcher.UIThread.RunJobs();
calendarView.ClickNext();
Assert.Equal(2000, calendarView.ContextDate.StartYear);
Assert.Equal(2099, calendarView.ContextDate.EndYear);
}
[AvaloniaFact]
public void OnPrevious_MonthMode_UpdatesToPreviousMonth()
{
var window = new Window();
var calendarView = new CalendarView { Mode = CalendarViewMode.Month };
window.Content = calendarView;
window.Show();
Dispatcher.UIThread.RunJobs();
calendarView.ContextDate = new CalendarContext(2023, 5);
Dispatcher.UIThread.RunJobs();
calendarView.ClickPrevious();
Assert.Equal(4, calendarView.ContextDate.Month);
Assert.Equal(2023, calendarView.ContextDate.Year);
}
[AvaloniaFact]
public void OnPrevious_YearMode_UpdatesToPreviousYear()
{
var window = new Window();
var calendarView = new CalendarView { Mode = CalendarViewMode.Year };
window.Content = calendarView;
window.Show();
Dispatcher.UIThread.RunJobs();
calendarView.ContextDate = new CalendarContext(2023, 5);
Dispatcher.UIThread.RunJobs();
calendarView.ClickPrevious();
Assert.Equal(2022, calendarView.ContextDate.Year);
}
[AvaloniaFact]
public void OnPrevious_DecadeMode_UpdatesToPreviousDecade()
{
var window = new Window();
var calendarView = new CalendarView { Mode = CalendarViewMode.Decade };
window.Content = calendarView;
window.Show();
Dispatcher.UIThread.RunJobs();
calendarView.ContextDate = new CalendarContext(null, null, 2000, 2009);
Dispatcher.UIThread.RunJobs();
calendarView.ClickPrevious();
Assert.Equal(1990, calendarView.ContextDate.StartYear);
Assert.Equal(1999, calendarView.ContextDate.EndYear);
}
[AvaloniaFact]
public void OnPrevious_CenturyMode_UpdatesToPreviousCentury()
{
var window = new Window();
var calendarView = new CalendarView { Mode = CalendarViewMode.Century };
window.Content = calendarView;
window.Show();
Dispatcher.UIThread.RunJobs();
calendarView.ContextDate = new CalendarContext(null, null, 1900, 1999);
Dispatcher.UIThread.RunJobs();
calendarView.ClickPrevious();
Assert.Equal(1800, calendarView.ContextDate.StartYear);
Assert.Equal(1899, calendarView.ContextDate.EndYear);
}
[AvaloniaFact]
public void OnFastPrevious_MonthMode_UpdatesToPreviousYear()
{
var window = new Window();
var calendarView = new CalendarView { Mode = CalendarViewMode.Month };
window.Content = calendarView;
window.Show();
Dispatcher.UIThread.RunJobs();
calendarView.ContextDate = new CalendarContext(2023, 5);
Dispatcher.UIThread.RunJobs();
calendarView.ClickFastPrevious();
Assert.Equal(2022, calendarView.ContextDate.Year);
}
[AvaloniaFact]
public void OnHeaderButtonClick_YearMode_SwitchesToDecadeMode()
{
var window = new Window();
var calendarView = new CalendarView { Mode = CalendarViewMode.Year };
window.Content = calendarView;
window.Show();
Dispatcher.UIThread.RunJobs();
calendarView.ContextDate = new CalendarContext(2023, 5);
Dispatcher.UIThread.RunJobs();
calendarView.ClickHeaderButton();
Assert.Equal(CalendarViewMode.Decade, calendarView.Mode);
Assert.Equal(2020, calendarView.ContextDate.StartYear);
Assert.Equal(2029, calendarView.ContextDate.EndYear);
}
[AvaloniaFact]
public void OnHeaderButtonClick_DecadeMode_SwitchesToCenturyMode()
{
var window = new Window();
var calendarView = new CalendarView { Mode = CalendarViewMode.Decade };
window.Content = calendarView;
window.Show();
Dispatcher.UIThread.RunJobs();
calendarView.ContextDate = new CalendarContext(null, null, 2000, 2009);
Dispatcher.UIThread.RunJobs();
calendarView.ClickHeaderButton();
Assert.Equal(CalendarViewMode.Century, calendarView.Mode);
}
[AvaloniaFact]
public void OnYearItemSelected_CenturyMode_SwitchesToDecadeMode()
{
var window = new Window();
var calendarView = new CalendarView { Mode = CalendarViewMode.Century };
window.Content = calendarView;
window.Show();
Dispatcher.UIThread.RunJobs();
calendarView.ContextDate = new CalendarContext(null, null, 1900, 1999);
Dispatcher.UIThread.RunJobs();
var yearButton = calendarView.FindDescendantOfType<CalendarYearButton>();
var position = yearButton?.TranslatePoint(new Point(6, 6), window);
Assert.NotNull(position);
window.MouseUp(position.Value, MouseButton.Left);
Assert.Equal(CalendarViewMode.Decade, calendarView.Mode);
}
[AvaloniaFact]
public void OnYearItemSelected_DecadeMode_SwitchesToYearMode()
{
var window = new Window();
var calendarView = new CalendarView { Mode = CalendarViewMode.Decade };
window.Content = calendarView;
window.Show();
Dispatcher.UIThread.RunJobs();
calendarView.ContextDate = new CalendarContext(null, null, 2000, 2009);
Dispatcher.UIThread.RunJobs();
var yearButton = calendarView.FindDescendantOfType<CalendarYearButton>();
var position = yearButton?.TranslatePoint(new Point(6, 6), window);
Assert.NotNull(position);
window.MouseUp(position.Value, MouseButton.Left);
Assert.Equal(CalendarViewMode.Year, calendarView.Mode);
}
[AvaloniaFact]
public void OnYearItemSelected_YearMode_SwitchesToMonthMode()
{
var window = new Window();
var calendarView = new CalendarView { Mode = CalendarViewMode.Year };
window.Content = calendarView;
window.Show();
Dispatcher.UIThread.RunJobs();
calendarView.ContextDate = new CalendarContext(2023, 5);
Dispatcher.UIThread.RunJobs();
var yearButton = calendarView.FindDescendantOfType<CalendarYearButton>();
var position = yearButton?.TranslatePoint(new Point(6, 6), window);
Assert.NotNull(position);
window.MouseUp(position.Value, MouseButton.Left);
Assert.Equal(CalendarViewMode.Month, calendarView.Mode);
}
}

View File

@@ -8,8 +8,14 @@ public class DrawerCloseTestPopupControlVM : IDialogContext
{
RequestClose?.Invoke(this, Result);
}
#if NET8_0
public int Result { get; } = Random.Shared.Next();
#endif
#if NETSTANDARD2_0
private static Random r = new Random();
public int Result { get; } = r.Next();
#endif
public event EventHandler<object?>? RequestClose;
}

View File

@@ -3,6 +3,7 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>