Browse Source

Made changes requested by @grokys.

pull/894/head
Jeremy Koritzinsky 10 years ago
parent
commit
aacb052253
  1. 5
      Avalonia.sln
  2. 5
      src/Avalonia.Controls/Button.cs
  3. 12
      src/Markup/Avalonia.Markup/Data/ExpressionObserver.cs
  4. 1
      tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj
  5. 125
      tests/Avalonia.Controls.UnitTests/ButtonTests.cs

5
Avalonia.sln

@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
# Visual Studio 15
VisualStudioVersion = 15.0.26403.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Base", "src\Avalonia.Base\Avalonia.Base.csproj", "{B09B78D8-9B26-48B0-9149-D64A2F120F3F}"
EndProject
@ -176,6 +176,7 @@ Global
tests\Avalonia.RenderTests\Avalonia.RenderTests.projitems*{48840edd-24bf-495d-911e-2eb12ae75d3b}*SharedItemsImports = 13
src\Shared\PlatformSupport\PlatformSupport.projitems*{4a1abb09-9047-4bd5-a4ad-a055e52c5ee0}*SharedItemsImports = 4
src\Shared\PlatformSupport\PlatformSupport.projitems*{7863ea94-f0fb-4386-bf8c-e5bfa761560a}*SharedItemsImports = 4
src\Shared\PlatformSupport\PlatformSupport.projitems*{7b92af71-6287-4693-9dcb-bd5b6e927e23}*SharedItemsImports = 4
src\Shared\RenderHelpers\RenderHelpers.projitems*{7d2d3083-71dd-4cc9-8907-39a0d86fb322}*SharedItemsImports = 4
src\Skia\Avalonia.Skia\Avalonia.Skia.projitems*{7d2d3083-71dd-4cc9-8907-39a0d86fb322}*SharedItemsImports = 4
src\Windows\Avalonia.Win32\Avalonia.Win32.Shared.projitems*{811a76cf-1cf6-440f-963b-bbe31bd72a82}*SharedItemsImports = 4

5
src/Avalonia.Controls/Button.cs

@ -249,7 +249,10 @@ namespace Avalonia.Controls
base.UpdateDataValidation(property, status);
if(property == CommandProperty)
{
IsEnabled = status?.ErrorType != BindingErrorType.Error;
if(status?.ErrorType == BindingErrorType.Error)
{
IsEnabled = false;
}
}
}

12
src/Markup/Avalonia.Markup/Data/ExpressionObserver.cs

@ -239,17 +239,7 @@ namespace Avalonia.Markup.Data
if (broken != null)
{
// We've received notification of a broken expression due to a null value
// somewhere in the chain. If this null value occurs at the first node then we
// ignore it, as its likely that e.g. the DataContext has not yet been set up.
if (broken.HasNodes)
{
broken.Commit(Description);
}
else
{
o = AvaloniaProperty.UnsetValue;
}
broken.Commit(Description);
}
return o;
}

1
tests/Avalonia.Controls.UnitTests/Avalonia.Controls.UnitTests.csproj

@ -95,6 +95,7 @@
</Choose>
<ItemGroup>
<Compile Include="AppBuilderTests.cs" />
<Compile Include="ButtonTests.cs" />
<Compile Include="CanvasTests.cs" />
<Compile Include="ClassesTests.cs" />
<Compile Include="LayoutTransformControlTests.cs" />

125
tests/Avalonia.Controls.UnitTests/ButtonTests.cs

@ -0,0 +1,125 @@
using System;
using System.Windows.Input;
using Avalonia.Markup.Xaml.Data;
using Xunit;
namespace Avalonia.Controls.UnitTests
{
public class ButtonTests
{
[Fact]
public void Button_Is_Disabled_When_Command_Is_Disabled()
{
var command = new TestCommand(false);
var target = new Button
{
Command = command,
};
Assert.False(target.IsEnabled);
command.IsEnabled = true;
Assert.True(target.IsEnabled);
command.IsEnabled = false;
Assert.False(target.IsEnabled);
}
[Fact]
public void Button_Is_Disabled_When_Bound_Command_Doesnt_Exist()
{
var target = new Button
{
[!Button.CommandProperty] = new Binding("Command"),
};
Assert.False(target.IsEnabled);
}
[Fact]
public void Button_Is_Disabled_When_Bound_Command_Is_Removed()
{
var viewModel = new
{
Command = new TestCommand(true),
};
var target = new Button
{
DataContext = viewModel,
[!Button.CommandProperty] = new Binding("Command"),
};
Assert.True(target.IsEnabled);
target.DataContext = null;
Assert.False(target.IsEnabled);
}
[Fact]
public void Button_Is_Enabled_When_Bound_Command_Is_Added()
{
var viewModel = new
{
Command = new TestCommand(true),
};
var target = new Button
{
DataContext = new object(),
[!Button.CommandProperty] = new Binding("Command"),
};
Assert.False(target.IsEnabled);
target.DataContext = viewModel;
Assert.True(target.IsEnabled);
}
[Fact]
public void Button_Is_Disabled_When_Disabled_Bound_Command_Is_Added()
{
var viewModel = new
{
Command = new TestCommand(false),
};
var target = new Button
{
DataContext = new object(),
[!Button.CommandProperty] = new Binding("Command"),
};
Assert.False(target.IsEnabled);
target.DataContext = viewModel;
Assert.False(target.IsEnabled);
}
private class TestCommand : ICommand
{
private bool _enabled;
public TestCommand(bool enabled)
{
_enabled = enabled;
}
public bool IsEnabled
{
get { return _enabled; }
set
{
if (_enabled != value)
{
_enabled = value;
CanExecuteChanged?.Invoke(this, EventArgs.Empty);
}
}
}
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter) => _enabled;
public void Execute(object parameter)
{
}
}
}
}
Loading…
Cancel
Save