* Initial plan * Add comprehensive tests for 5 controls: Avatar, Clock, ClockTicks, AspectRatioLayout, AspectRatioLayoutItem Co-authored-by: rabbitism <14807942+rabbitism@users.noreply.github.com> * Complete comprehensive headless tests for all 10 controls - added 72 more tests Co-authored-by: rabbitism <14807942+rabbitism@users.noreply.github.com> * Add requested test cases for MultiComboBox and TreeComboBox - ItemsSource, Remove, Clear, hierarchical data Co-authored-by: rabbitism <14807942+rabbitism@users.noreply.github.com> * test: open dropdown to trigger materialization. * test: set CurrentCulture to en-US for calendar view tests --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: rabbitism <14807942+rabbitism@users.noreply.github.com> Co-authored-by: rabbitism <dongbin@irihi.tech>
261 lines
6.5 KiB
C#
261 lines
6.5 KiB
C#
using System;
|
|
using Avalonia;
|
|
using Avalonia.Controls;
|
|
using Avalonia.Controls.Primitives;
|
|
using Avalonia.Headless.XUnit;
|
|
using Avalonia.Media;
|
|
using HeadlessTest.Ursa.TestHelpers;
|
|
using UrsaControls = Ursa.Controls;
|
|
|
|
namespace HeadlessTest.Ursa.Controls.ClockTests;
|
|
|
|
public class ClockTests
|
|
{
|
|
[AvaloniaFact]
|
|
public void Clock_Should_Initialize_With_Default_Values()
|
|
{
|
|
// Arrange & Act
|
|
var clock = new UrsaControls.Clock();
|
|
|
|
// Assert
|
|
Assert.Equal(default(DateTime), clock.Time);
|
|
Assert.True(clock.ShowHourTicks);
|
|
Assert.True(clock.ShowMinuteTicks);
|
|
Assert.Null(clock.HandBrush);
|
|
Assert.True(clock.ShowHourHand);
|
|
Assert.True(clock.ShowMinuteHand);
|
|
Assert.True(clock.ShowSecondHand);
|
|
Assert.False(clock.IsSmooth);
|
|
Assert.Equal(0.0, clock.HourAngle);
|
|
Assert.Equal(0.0, clock.MinuteAngle);
|
|
Assert.Equal(0.0, clock.SecondAngle);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Clock_Should_Set_Time_Property()
|
|
{
|
|
// Arrange
|
|
var window = new Window();
|
|
var clock = new UrsaControls.Clock();
|
|
var testTime = new DateTime(2023, 12, 25, 15, 30, 45);
|
|
window.Content = clock;
|
|
window.Show();
|
|
|
|
// Act
|
|
clock.Time = testTime;
|
|
|
|
// Assert
|
|
Assert.Equal(testTime, clock.Time);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Clock_Should_Calculate_Hour_Angle_Correctly()
|
|
{
|
|
// Arrange
|
|
var window = new Window();
|
|
var clock = new UrsaControls.Clock();
|
|
var testTime = new DateTime(2023, 12, 25, 3, 0, 0); // 3:00
|
|
window.Content = clock;
|
|
window.Show();
|
|
|
|
// Act
|
|
clock.Time = testTime;
|
|
|
|
// Assert - 3:00 should be 90 degrees (3 * 30 degrees per hour)
|
|
Assert.Equal(90.0, clock.HourAngle);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Clock_Should_Calculate_Minute_Angle_Correctly()
|
|
{
|
|
// Arrange
|
|
var window = new Window();
|
|
var clock = new UrsaControls.Clock();
|
|
var testTime = new DateTime(2023, 12, 25, 0, 15, 0); // 15 minutes
|
|
window.Content = clock;
|
|
window.Show();
|
|
|
|
// Act
|
|
clock.Time = testTime;
|
|
|
|
// Assert - 15 minutes should be 90 degrees (15 * 6 degrees per minute)
|
|
Assert.Equal(90.0, clock.MinuteAngle);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Clock_Should_Calculate_Second_Angle_Correctly()
|
|
{
|
|
// Arrange
|
|
var window = new Window();
|
|
var clock = new UrsaControls.Clock();
|
|
var testTime = new DateTime(2023, 12, 25, 0, 0, 15); // 15 seconds
|
|
window.Content = clock;
|
|
window.Show();
|
|
|
|
// Act
|
|
clock.Time = testTime;
|
|
|
|
// Assert - 15 seconds should be 90 degrees (15 * 6 degrees per second)
|
|
Assert.Equal(90.0, clock.SecondAngle);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Clock_Should_Set_ShowHourTicks_Property()
|
|
{
|
|
// Arrange
|
|
var window = new Window();
|
|
var clock = new UrsaControls.Clock();
|
|
window.Content = clock;
|
|
window.Show();
|
|
|
|
// Act
|
|
clock.ShowHourTicks = false;
|
|
|
|
// Assert
|
|
Assert.False(clock.ShowHourTicks);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Clock_Should_Set_ShowMinuteTicks_Property()
|
|
{
|
|
// Arrange
|
|
var window = new Window();
|
|
var clock = new UrsaControls.Clock();
|
|
window.Content = clock;
|
|
window.Show();
|
|
|
|
// Act
|
|
clock.ShowMinuteTicks = false;
|
|
|
|
// Assert
|
|
Assert.False(clock.ShowMinuteTicks);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Clock_Should_Set_HandBrush_Property()
|
|
{
|
|
// Arrange
|
|
var window = new Window();
|
|
var clock = new UrsaControls.Clock();
|
|
var brush = Brushes.Red;
|
|
window.Content = clock;
|
|
window.Show();
|
|
|
|
// Act
|
|
clock.HandBrush = brush;
|
|
|
|
// Assert
|
|
Assert.Equal(brush, clock.HandBrush);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Clock_Should_Set_ShowHourHand_Property()
|
|
{
|
|
// Arrange
|
|
var window = new Window();
|
|
var clock = new UrsaControls.Clock();
|
|
window.Content = clock;
|
|
window.Show();
|
|
|
|
// Act
|
|
clock.ShowHourHand = false;
|
|
|
|
// Assert
|
|
Assert.False(clock.ShowHourHand);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Clock_Should_Set_ShowMinuteHand_Property()
|
|
{
|
|
// Arrange
|
|
var window = new Window();
|
|
var clock = new UrsaControls.Clock();
|
|
window.Content = clock;
|
|
window.Show();
|
|
|
|
// Act
|
|
clock.ShowMinuteHand = false;
|
|
|
|
// Assert
|
|
Assert.False(clock.ShowMinuteHand);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Clock_Should_Set_ShowSecondHand_Property()
|
|
{
|
|
// Arrange
|
|
var window = new Window();
|
|
var clock = new UrsaControls.Clock();
|
|
window.Content = clock;
|
|
window.Show();
|
|
|
|
// Act
|
|
clock.ShowSecondHand = false;
|
|
|
|
// Assert
|
|
Assert.False(clock.ShowSecondHand);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Clock_Should_Set_IsSmooth_Property()
|
|
{
|
|
// Arrange
|
|
var window = new Window();
|
|
var clock = new UrsaControls.Clock();
|
|
window.Content = clock;
|
|
window.Show();
|
|
|
|
// Act
|
|
clock.IsSmooth = true;
|
|
|
|
// Assert
|
|
Assert.True(clock.IsSmooth);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Clock_Should_Be_Visible_When_Added_To_Window()
|
|
{
|
|
// Arrange
|
|
var window = new Window();
|
|
var clock = new UrsaControls.Clock();
|
|
|
|
// Act
|
|
window.Content = clock;
|
|
window.Show();
|
|
|
|
// Assert
|
|
Assert.True(clock.IsVisible);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Clock_Should_Inherit_From_TemplatedControl()
|
|
{
|
|
// Arrange & Act
|
|
var clock = new UrsaControls.Clock();
|
|
|
|
// Assert
|
|
Assert.IsAssignableFrom<TemplatedControl>(clock);
|
|
}
|
|
|
|
[AvaloniaFact]
|
|
public void Clock_Should_Calculate_Complex_Time_Angles()
|
|
{
|
|
// Arrange
|
|
var window = new Window();
|
|
var clock = new UrsaControls.Clock();
|
|
var testTime = new DateTime(2023, 12, 25, 6, 30, 30); // 6:30:30
|
|
window.Content = clock;
|
|
window.Show();
|
|
|
|
// Act
|
|
clock.Time = testTime;
|
|
|
|
// Assert
|
|
// Hour: 6.5 hours * 30 degrees = 195 degrees
|
|
Assert.Equal(195.0, clock.HourAngle);
|
|
// Minute: 30.5 minutes * 6 degrees = 183 degrees
|
|
Assert.Equal(183.0, clock.MinuteAngle);
|
|
// Second: 30 seconds * 6 degrees = 180 degrees
|
|
Assert.Equal(180.0, clock.SecondAngle);
|
|
}
|
|
} |