diff --git a/Stylet/Xaml/BoolToVisibilityConverter.cs b/Stylet/Xaml/BoolToVisibilityConverter.cs index 00d2fb9..e458795 100644 --- a/Stylet/Xaml/BoolToVisibilityConverter.cs +++ b/Stylet/Xaml/BoolToVisibilityConverter.cs @@ -62,8 +62,7 @@ namespace Stylet.Xaml result = (bool)value; else if (value is IEnumerable) result = ((IEnumerable)value).GetEnumerator().MoveNext(); - else if (value.Equals(0) || value.Equals(0u) || value.Equals(0L) || value.Equals(0uL) || - value.Equals(0.0f) || value.Equals(0.0) || value.Equals(0m)) + else if (value.Equals(System.Convert.ChangeType((object)0, value.GetType()))) result = false; else result = true; // Not null, didn't meet any other falsy behaviour diff --git a/StyletUnitTests/BoolToVisibilityConverterTests.cs b/StyletUnitTests/BoolToVisibilityConverterTests.cs index 3ed2e56..6de8f4b 100644 --- a/StyletUnitTests/BoolToVisibilityConverterTests.cs +++ b/StyletUnitTests/BoolToVisibilityConverterTests.cs @@ -67,6 +67,10 @@ namespace StyletUnitTests Assert.AreEqual(Visibility.Collapsed, this.converter.Convert(0m, null, null, null)); Assert.AreEqual(Visibility.Collapsed, this.converter.Convert(0.0, null, null, null)); Assert.AreEqual(Visibility.Collapsed, this.converter.Convert(0.0f, null, null, null)); + Assert.AreEqual(Visibility.Collapsed, this.converter.Convert((short)0, null, null, null)); + Assert.AreEqual(Visibility.Collapsed, this.converter.Convert((ushort)0, null, null, null)); + Assert.AreEqual(Visibility.Collapsed, this.converter.Convert((byte)0, null, null, null)); + Assert.AreEqual(Visibility.Collapsed, this.converter.Convert((sbyte)0, null, null, null)); } [Test] @@ -79,6 +83,10 @@ namespace StyletUnitTests Assert.AreEqual(Visibility.Visible, this.converter.Convert(1m, null, null, null)); Assert.AreEqual(Visibility.Visible, this.converter.Convert(1.0, null, null, null)); Assert.AreEqual(Visibility.Visible, this.converter.Convert(1.0f, null, null, null)); + Assert.AreEqual(Visibility.Visible, this.converter.Convert((short)1, null, null, null)); + Assert.AreEqual(Visibility.Visible, this.converter.Convert((ushort)1, null, null, null)); + Assert.AreEqual(Visibility.Visible, this.converter.Convert((byte)1, null, null, null)); + Assert.AreEqual(Visibility.Visible, this.converter.Convert((sbyte)1, null, null, null)); } [Test] @@ -109,6 +117,18 @@ namespace StyletUnitTests Assert.AreEqual(Visibility.Visible, this.converter.Convert(new Dictionary() { { "A", "B" } }, null, null, null)); } + [Test] + public void ConvertTreatsEmptyStringAsFalse() + { + Assert.AreEqual(Visibility.Collapsed, this.converter.Convert("", null, null, null)); + } + + [Test] + public void ConvertTreatsNonEmptyStringAsTrue() + { + Assert.AreEqual(Visibility.Visible, this.converter.Convert("hello", null, null, null)); + } + [Test] public void ConvertBackThrowsIfTargetTypeIsNotBool() {