test:WIP add tests. Change decade context end date.
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user