Browse Source

Merge pull request #1598 from AvaloniaUI/fixes/password-char-crash

Fixes/password char crash
pull/1596/merge
danwalmsley 8 years ago
committed by GitHub
parent
commit
3e775def55
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      src/Avalonia.Controls/Presenters/TextPresenter.cs
  2. 2
      src/Avalonia.Controls/TextBlock.cs
  3. 40
      tests/Avalonia.Controls.UnitTests/Presenters/TextPresenter_Tests.cs
  4. 10
      tests/Avalonia.Controls.UnitTests/TextBlockTests.cs

4
src/Avalonia.Controls/Presenters/TextPresenter.cs

@ -223,11 +223,11 @@ namespace Avalonia.Controls.Presenters
if (PasswordChar != default(char))
{
result = base.CreateFormattedText(constraint, new string(PasswordChar, Text.Length));
result = base.CreateFormattedText(constraint, new string(PasswordChar, text?.Length ?? 0));
}
else
{
result = base.CreateFormattedText(constraint, Text);
result = base.CreateFormattedText(constraint, text);
}
var selectionStart = SelectionStart;

2
src/Avalonia.Controls/TextBlock.cs

@ -111,6 +111,8 @@ namespace Avalonia.Controls
/// </summary>
public TextBlock()
{
_text = string.Empty;
Observable.Merge(
this.GetObservable(TextProperty).Select(_ => Unit.Default),
this.GetObservable(TextAlignmentProperty).Select(_ => Unit.Default),

40
tests/Avalonia.Controls.UnitTests/Presenters/TextPresenter_Tests.cs

@ -0,0 +1,40 @@
using Avalonia.Controls.Presenters;
using Xunit;
namespace Avalonia.Controls.UnitTests.Presenters
{
public class TextPresenter_Tests
{
[Fact]
public void TextPresenter_Can_Contain_Null_With_Password_Char_Set()
{
var target = new TextPresenter
{
PasswordChar = '*'
};
Assert.NotNull(target.FormattedText);
}
[Fact]
public void TextPresenter_Can_Contain_Null_WithOut_Password_Char_Set()
{
var target = new TextPresenter();
Assert.NotNull(target.FormattedText);
}
[Fact]
public void Text_Presenter_Replaces_Formatted_Text_With_Password_Char()
{
var target = new TextPresenter
{
PasswordChar = '*',
Text = "Test"
};
Assert.NotNull(target.FormattedText);
Assert.Equal("****", target.FormattedText.Text);
}
}
}

10
tests/Avalonia.Controls.UnitTests/TextBlockTests.cs

@ -15,5 +15,15 @@ namespace Avalonia.Controls.UnitTests
BindingMode.OneWay,
TextBlock.TextProperty.GetMetadata(typeof(TextBlock)).DefaultBindingMode);
}
[Fact]
public void Default_Text_Value_Should_Be_EmptyString()
{
var textBlock = new TextBlock();
Assert.Equal(
"",
textBlock.Text);
}
}
}

Loading…
Cancel
Save