Browse Source

Add some unit tests for Incement / Decrement

pull/11342/head
Tim 3 years ago
parent
commit
d5b73e2109
  1. 42
      tests/Avalonia.Controls.UnitTests/NumericUpDownTests.cs

42
tests/Avalonia.Controls.UnitTests/NumericUpDownTests.cs

@ -1,8 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive.Subjects;
using Avalonia.Controls.Templates;
using Avalonia.Data;
using Avalonia.Interactivity;
using Avalonia.Threading;
using Avalonia.UnitTests;
using Xunit;
@ -43,6 +45,38 @@ namespace Avalonia.Controls.UnitTests
});
}
[Theory]
[MemberData(nameof(Increment_Decrement_TestData))]
public void Increment_Decrement_Tests(decimal min, decimal max, decimal? value, SpinDirection direction,
decimal? expected)
{
var control = CreateControl();
control.Minimum = min;
control.Maximum = max;
control.Value = value;
var spinner = GetSpinner(control);
spinner.RaiseEvent(new SpinEventArgs(Spinner.SpinEvent, direction));
Assert.Equal(control.Value, expected);
}
public static IEnumerable<object[]> Increment_Decrement_TestData()
{
// if min and max are not defined and value was null, 0 should be ne new value after spin
yield return new object[] { decimal.MinValue, decimal.MaxValue, null, SpinDirection.Decrease, 0m };
yield return new object[] { decimal.MinValue, decimal.MaxValue, null, SpinDirection.Increase, 0m };
// if no value was defined, but Min or Max are defined, use these as the new value
yield return new object[] { -400m, -200m, null, SpinDirection.Decrease, -200m };
yield return new object[] { 200m, 400m, null, SpinDirection.Increase, 200m };
// Value should be clamped to Min / Max after spinning
yield return new object[] { 200m, 400m, 5m, SpinDirection.Increase, 200m };
yield return new object[] { 200m, 400m, 200m, SpinDirection.Decrease, 200m };
}
private void RunTest(Action<NumericUpDown, TextBox> test)
{
using (UnitTestApplication.Start(Services))
@ -76,6 +110,14 @@ namespace Avalonia.Controls.UnitTests
.OfType<TextBox>()
.First();
}
private static ButtonSpinner GetSpinner(NumericUpDown control)
{
return control.GetTemplateChildren()
.OfType<ButtonSpinner>()
.First();
}
private static IControlTemplate CreateTemplate()
{
return new FuncControlTemplate<NumericUpDown>((control, scope) =>

Loading…
Cancel
Save