csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.6 KiB
84 lines
2.6 KiB
// Copyright (c) The Avalonia Project. All rights reserved.
|
|
// Licensed under the MIT license. See licence.md file in the project root for full license information.
|
|
|
|
using Avalonia.Controls.Presenters;
|
|
using Avalonia.Controls.Templates;
|
|
using Avalonia.Data;
|
|
using Avalonia.Input;
|
|
using Avalonia.Markup.Xaml.Data;
|
|
using Avalonia.Platform;
|
|
using Avalonia.UnitTests;
|
|
using Moq;
|
|
using Xunit;
|
|
|
|
namespace Avalonia.Controls.UnitTests
|
|
{
|
|
public class TextBoxTests
|
|
{
|
|
[Fact]
|
|
public void DefaultBindingMode_Should_Be_TwoWay()
|
|
{
|
|
Assert.Equal(
|
|
BindingMode.TwoWay,
|
|
TextBox.TextProperty.GetMetadata(typeof(TextBox)).DefaultBindingMode);
|
|
}
|
|
|
|
[Fact]
|
|
public void Typing_Beginning_With_0_Should_Not_Modify_Text_When_Bound_To_Int()
|
|
{
|
|
using (UnitTestApplication.Start(Services))
|
|
{
|
|
var source = new Class1();
|
|
var target = new TextBox
|
|
{
|
|
DataContext = source,
|
|
Template = CreateTemplate(),
|
|
};
|
|
|
|
target.ApplyTemplate();
|
|
target.Bind(TextBox.TextProperty, new Binding(nameof(Class1.Foo), BindingMode.TwoWay));
|
|
|
|
Assert.Equal("0", target.Text);
|
|
|
|
target.CaretIndex = 1;
|
|
target.RaiseEvent(new TextInputEventArgs
|
|
{
|
|
RoutedEvent = InputElement.TextInputEvent,
|
|
Text = "2",
|
|
});
|
|
|
|
Assert.Equal("02", target.Text);
|
|
}
|
|
}
|
|
|
|
private static TestServices Services => TestServices.MockThreadingInterface.With(
|
|
standardCursorFactory: Mock.Of<IStandardCursorFactory>());
|
|
|
|
private IControlTemplate CreateTemplate()
|
|
{
|
|
return new FuncControlTemplate<TextBox>(control =>
|
|
new TextPresenter
|
|
{
|
|
Name = "PART_TextPresenter",
|
|
[!!TextPresenter.TextProperty] = new Binding
|
|
{
|
|
Path = "Text",
|
|
Mode = BindingMode.TwoWay,
|
|
Priority = BindingPriority.TemplatedParent,
|
|
RelativeSource = new RelativeSource(RelativeSourceMode.TemplatedParent),
|
|
},
|
|
});
|
|
}
|
|
|
|
private class Class1 : NotifyingBase
|
|
{
|
|
private int _foo;
|
|
|
|
public int Foo
|
|
{
|
|
get { return _foo; }
|
|
set { _foo = value; RaisePropertyChanged(); }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|