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)
{
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.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
using System.Reactive.Linq;
using Perspex.Markup.Binding;
using Xunit;
@ -64,6 +65,16 @@ namespace Perspex.Markup.UnitTests.Binding
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]
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);
}
[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