| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- using System;
- using System.Linq;
- using Avalonia.Controls.Shapes;
- using Avalonia.Controls.Templates;
- using Avalonia.Platform;
- using Avalonia.UnitTests;
- using Avalonia.VisualTree;
- using Moq;
- using Xunit;
- namespace Avalonia.Controls.UnitTests
- {
- public class TimePickerTests
- {
- [Fact]
- public void SelectedTimeChanged_Should_Fire_When_SelectedTime_Set()
- {
- using (UnitTestApplication.Start(Services))
- {
- bool handled = false;
- TimePicker timePicker = new TimePicker();
- timePicker.SelectedTimeChanged += (s, e) =>
- {
- handled = true;
- };
- TimeSpan value = TimeSpan.FromHours(10);
- timePicker.SelectedTime = value;
- Threading.Dispatcher.UIThread.RunJobs();
- Assert.True(handled);
- }
- }
- [Fact]
- public void Using_24HourClock_Should_Hide_Period()
- {
- using (UnitTestApplication.Start(Services))
- {
- TimePicker timePicker = new TimePicker()
- {
- ClockIdentifier = "12HourClock",
- Template = CreateTemplate()
- };
- timePicker.ApplyTemplate();
- var desc = timePicker.GetVisualDescendants();
- Assert.True(desc.Count() > 1);//Should be layoutroot grid & button
- Grid container = null;
- Assert.True(desc.ElementAt(1) is Button);
- container = (desc.ElementAt(1) as Button).Content as Grid;
- Assert.True(container != null);
- var periodTextHost = container.Children[4] as Border;
- Assert.True(periodTextHost != null);
- Assert.True(periodTextHost.IsVisible);
- timePicker.ClockIdentifier = "24HourClock";
- Assert.False(periodTextHost.IsVisible);
- }
- }
- [Fact]
- public void SelectedTime_null_Should_Use_Placeholders()
- {
- using (UnitTestApplication.Start(Services))
- {
- TimePicker timePicker = new TimePicker()
- {
- Template = CreateTemplate()
- };
- timePicker.ApplyTemplate();
- var desc = timePicker.GetVisualDescendants();
- Assert.True(desc.Count() > 1);//Should be layoutroot grid & button
- Grid container = null;
- Assert.True(desc.ElementAt(1) is Button);
- container = (desc.ElementAt(1) as Button).Content as Grid;
- Assert.True(container != null);
- var hourTextHost = container.Children[0] as Border;
- Assert.True(hourTextHost != null);
- var hourText = hourTextHost.Child as TextBlock;
- var minuteTextHost = container.Children[2] as Border;
- Assert.True(minuteTextHost != null);
- var minuteText = minuteTextHost.Child as TextBlock;
- TimeSpan ts = TimeSpan.FromHours(10);
- timePicker.SelectedTime = ts;
- Assert.False(hourText.Text == "hour");
- Assert.False(minuteText.Text == "minute");
- timePicker.SelectedTime = null;
- Assert.True(hourText.Text == "hour");
- Assert.True(minuteText.Text == "minute");
- }
- }
- private static TestServices Services => TestServices.MockThreadingInterface.With(
- fontManagerImpl: new MockFontManagerImpl(),
- standardCursorFactory: Mock.Of<ICursorFactory>(),
- textShaperImpl: new MockTextShaperImpl());
- private IControlTemplate CreateTemplate()
- {
- return new FuncControlTemplate((control, scope) =>
- {
- var layoutRoot = new Grid
- {
- Name = "LayoutRoot"
- }.RegisterInNameScope(scope);
- //Skip contentpresenter
- var flyoutButton = new Button
- {
- Name = "FlyoutButton"
- }.RegisterInNameScope(scope);
- var contentGrid = new Grid
- {
- Name = "FlyoutButtonContentGrid"
- }.RegisterInNameScope(scope);
- var firstPickerHost = new Border
- {
- Name = "FirstPickerHost",
- Child = new TextBlock
- {
- Name = "HourTextBlock"
- }.RegisterInNameScope(scope)
- }.RegisterInNameScope(scope);
- Grid.SetColumn(firstPickerHost, 0);
- var secondPickerHost = new Border
- {
- Name = "SecondPickerHost",
- Child = new TextBlock
- {
- Name = "MinuteTextBlock"
- }.RegisterInNameScope(scope)
- }.RegisterInNameScope(scope);
- Grid.SetColumn(secondPickerHost, 2);
- var thirdPickerHost = new Border
- {
- Name = "ThirdPickerHost",
- Child = new TextBlock
- {
- Name = "PeriodTextBlock"
- }.RegisterInNameScope(scope)
- }.RegisterInNameScope(scope);
- Grid.SetColumn(thirdPickerHost, 4);
- var firstSpacer = new Rectangle
- {
- Name = "FirstColumnDivider"
- }.RegisterInNameScope(scope);
- Grid.SetColumn(firstSpacer, 1);
- var secondSpacer = new Rectangle
- {
- Name = "SecondColumnDivider"
- }.RegisterInNameScope(scope);
- Grid.SetColumn(secondSpacer, 3);
- contentGrid.Children.AddRange(new IControl[] { firstPickerHost, firstSpacer, secondPickerHost, secondSpacer, thirdPickerHost });
- flyoutButton.Content = contentGrid;
- layoutRoot.Children.Add(flyoutButton);
- return layoutRoot;
- });
- }
- }
- }
|