Browse Source

Log invalid binding values in PriorityValue.

pull/396/head
Steven Kirk 10 years ago
parent
commit
14507beb41
  1. 6
      src/Perspex.Base/PerspexObject.cs
  2. 22
      src/Perspex.Base/PriorityValue.cs
  3. 8
      tests/Perspex.Base.UnitTests/Perspex.Base.UnitTests.csproj
  4. 1
      tests/Perspex.Base.UnitTests/packages.config

6
src/Perspex.Base/PerspexObject.cs

@ -775,7 +775,11 @@ namespace Perspex
validate2 = v => validate(this, v);
}
PriorityValue result = new PriorityValue(property.Name, property.PropertyType, validate2);
PriorityValue result = new PriorityValue(
property.Name,
property.PropertyType,
validate2,
_propertyLog);
result.Changed.Subscribe(x =>
{

22
src/Perspex.Base/PriorityValue.cs

@ -7,6 +7,7 @@ using System.Linq;
using System.Reactive.Subjects;
using System.Text;
using Perspex.Utilities;
using Serilog;
namespace Perspex
{
@ -54,19 +55,30 @@ namespace Perspex
/// </summary>
private readonly Func<object, object> _validate;
/// <summary>
/// An optional logger.
/// </summary>
private ILogger _logger;
/// <summary>
/// Initializes a new instance of the <see cref="PriorityValue"/> class.
/// </summary>
/// <param name="name">The name of the property.</param>
/// <param name="valueType">The value type.</param>
/// <param name="validate">An optional validation function.</param>
public PriorityValue(string name, Type valueType, Func<object, object> validate = null)
/// <param name="logger">An optional logger</param>
public PriorityValue(
string name,
Type valueType,
Func<object, object> validate = null,
ILogger logger = null)
{
_name = name;
_valueType = valueType;
_value = PerspexProperty.UnsetValue;
ValuePriority = int.MaxValue;
_validate = validate;
_logger = logger;
}
/// <summary>
@ -225,9 +237,13 @@ namespace Perspex
_value = value;
_changed.OnNext(Tuple.Create(old, _value));
}
else
else if (_logger != null)
{
// TODO: Log error.
_logger.Error(
"Binding produced invalid value for {$Type} {$Property}: {$Value}",
_valueType,
_name,
value);
}
}

8
tests/Perspex.Base.UnitTests/Perspex.Base.UnitTests.csproj

@ -40,6 +40,14 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Serilog, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\..\packages\Serilog.1.5.9\lib\net45\Serilog.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Serilog.FullNetFx, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\..\packages\Serilog.1.5.9\lib\net45\Serilog.FullNetFx.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="xunit.assert">
<HintPath>..\..\packages\xunit.assert.2.0.0\lib\portable-net45+win+wpa81+wp80+monotouch+monoandroid+Xamarin.iOS\xunit.assert.dll</HintPath>

1
tests/Perspex.Base.UnitTests/packages.config

@ -3,6 +3,7 @@
<package id="Rx-Core" version="2.2.5" targetFramework="net45" />
<package id="Rx-Interfaces" version="2.2.5" targetFramework="net45" />
<package id="Rx-Linq" version="2.2.5" targetFramework="net45" />
<package id="Serilog" version="1.5.9" targetFramework="net45" />
<package id="xunit" version="2.0.0" targetFramework="net45" />
<package id="xunit.abstractions" version="2.0.0" targetFramework="net45" />
<package id="xunit.assert" version="2.0.0" targetFramework="net45" />

Loading…
Cancel
Save