Browse Source

Don't allow !ed expressions to be set.

pull/237/head
Steven Kirk 11 years ago
parent
commit
7072f0a66c
  1. 5
      src/Markup/Perspex.Markup/Binding/LogicalNotNode.cs
  2. 20
      tests/Perspex.Markup.UnitTests/Binding/ExpressionObserverTests_Negation.cs

5
src/Markup/Perspex.Markup/Binding/LogicalNotNode.cs

@ -14,6 +14,11 @@ namespace Perspex.Markup.Binding
{ {
} }
public override bool SetValue(object value)
{
throw new NotSupportedException("Cannot set a negated binding.");
}
public override IDisposable Subscribe(IObserver<ExpressionValue> observer) public override IDisposable Subscribe(IObserver<ExpressionValue> observer)
{ {
return Next.Select(x => Negate(x)).Subscribe(observer); return Next.Select(x => Negate(x)).Subscribe(observer);

20
tests/Perspex.Markup.UnitTests/Binding/ExpressionObserverTests_Negation.cs

@ -1,6 +1,7 @@
// Copyright (c) The Perspex Project. All rights reserved. // Copyright (c) The Perspex Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information. // Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
using System.Reactive.Linq; using System.Reactive.Linq;
using Perspex.Markup.Binding; using Perspex.Markup.Binding;
using Xunit; using Xunit;
@ -64,6 +65,16 @@ namespace Perspex.Markup.UnitTests.Binding
Assert.Equal(false, result.Value); Assert.Equal(false, result.Value);
} }
[Fact]
public async void Should_Return_Empty_For_String_Not_Convertible_To_Boolean()
{
var data = new { Foo = "foo" };
var target = new ExpressionObserver(data, "!Foo");
var result = await target.Take(1);
Assert.False(result.HasValue);
}
[Fact] [Fact]
public async void Should_Return_Empty_For_Value_Not_Convertible_To_Boolean() public async void Should_Return_Empty_For_Value_Not_Convertible_To_Boolean()
{ {
@ -73,5 +84,14 @@ namespace Perspex.Markup.UnitTests.Binding
Assert.False(result.HasValue); Assert.False(result.HasValue);
} }
[Fact]
public void SetValue_Should_Throw()
{
var data = new { Foo = "foo" };
var target = new ExpressionObserver(data, "!Foo");
Assert.Throws<NotSupportedException>(() => target.SetValue("bar"));
}
} }
} }

Loading…
Cancel
Save