From 5eeccf0c10515e39b1e786df15719b4dbc946ca1 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 15 Oct 2015 23:03:10 +0200 Subject: [PATCH] Special case string -> bool conversion. --- .../Perspex.Markup/Binding/LogicalNotNode.cs | 24 +++++++++++++++---- .../ExpressionObserverTests_Negation.cs | 2 +- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/Markup/Perspex.Markup/Binding/LogicalNotNode.cs b/src/Markup/Perspex.Markup/Binding/LogicalNotNode.cs index 81ce06c301..4e36336db1 100644 --- a/src/Markup/Perspex.Markup/Binding/LogicalNotNode.cs +++ b/src/Markup/Perspex.Markup/Binding/LogicalNotNode.cs @@ -23,14 +23,28 @@ namespace Perspex.Markup.Binding { if (v != PerspexProperty.UnsetValue) { - try + var s = v as string; + + if (s != null) { - var boolean = Convert.ToBoolean(v, CultureInfo.InvariantCulture); - return !boolean; + bool result; + + if (bool.TryParse(s, out result)) + { + return !result; + } } - catch + else { - // TODO: Maybe should log something here. + try + { + var boolean = Convert.ToBoolean(v, CultureInfo.InvariantCulture); + return !boolean; + } + catch + { + // TODO: Maybe should log something here. + } } } diff --git a/tests/Perspex.Markup.UnitTests/Binding/ExpressionObserverTests_Negation.cs b/tests/Perspex.Markup.UnitTests/Binding/ExpressionObserverTests_Negation.cs index 2019b884b0..9164002b18 100644 --- a/tests/Perspex.Markup.UnitTests/Binding/ExpressionObserverTests_Negation.cs +++ b/tests/Perspex.Markup.UnitTests/Binding/ExpressionObserverTests_Negation.cs @@ -61,7 +61,7 @@ namespace Perspex.Markup.UnitTests.Binding } [Fact] - public async void Should_Return_Empty_For_String_Not_Convertible_To_Boolean() + public async void Should_Return_UnsetValue_For_String_Not_Convertible_To_Boolean() { var data = new { Foo = "foo" }; var target = new ExpressionObserver(data, "!Foo");