DefaultValueConverterTests.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. // Copyright (c) The Avalonia Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using System.Globalization;
  4. using Avalonia.Controls;
  5. using Avalonia.Data;
  6. using Xunit;
  7. using System.Windows.Input;
  8. using System;
  9. using Avalonia.Data.Converters;
  10. namespace Avalonia.Base.UnitTests.Data.Converters
  11. {
  12. public class DefaultValueConverterTests
  13. {
  14. [Fact]
  15. public void Can_Convert_String_To_Int()
  16. {
  17. var result = DefaultValueConverter.Instance.Convert(
  18. "5",
  19. typeof(int),
  20. null,
  21. CultureInfo.InvariantCulture);
  22. Assert.Equal(5, result);
  23. }
  24. [Fact]
  25. public void Can_Convert_String_To_Double()
  26. {
  27. var result = DefaultValueConverter.Instance.Convert(
  28. "5",
  29. typeof(double),
  30. null,
  31. CultureInfo.InvariantCulture);
  32. Assert.Equal(5.0, result);
  33. }
  34. [Fact]
  35. public void Can_Convert_String_To_Enum()
  36. {
  37. var result = DefaultValueConverter.Instance.Convert(
  38. "Bar",
  39. typeof(TestEnum),
  40. null,
  41. CultureInfo.InvariantCulture);
  42. Assert.Equal(TestEnum.Bar, result);
  43. }
  44. [Fact]
  45. public void Can_Convert_Int_To_Enum()
  46. {
  47. var result = DefaultValueConverter.Instance.Convert(
  48. 1,
  49. typeof(TestEnum),
  50. null,
  51. CultureInfo.InvariantCulture);
  52. Assert.Equal(TestEnum.Bar, result);
  53. }
  54. [Fact]
  55. public void Can_Convert_Double_To_String()
  56. {
  57. var result = DefaultValueConverter.Instance.Convert(
  58. 5.0,
  59. typeof(string),
  60. null,
  61. CultureInfo.InvariantCulture);
  62. Assert.Equal("5", result);
  63. }
  64. [Fact]
  65. public void Can_Convert_Enum_To_Int()
  66. {
  67. var result = DefaultValueConverter.Instance.Convert(
  68. TestEnum.Bar,
  69. typeof(int),
  70. null,
  71. CultureInfo.InvariantCulture);
  72. Assert.Equal(1, result);
  73. }
  74. [Fact]
  75. public void Can_Convert_Enum_To_String()
  76. {
  77. var result = DefaultValueConverter.Instance.Convert(
  78. TestEnum.Bar,
  79. typeof(string),
  80. null,
  81. CultureInfo.InvariantCulture);
  82. Assert.Equal("Bar", result);
  83. }
  84. [Fact]
  85. public void Can_Use_Explicit_Cast()
  86. {
  87. var result = DefaultValueConverter.Instance.Convert(
  88. new ExplicitDouble(5.0),
  89. typeof(double),
  90. null,
  91. CultureInfo.InvariantCulture);
  92. Assert.Equal(5.0, result);
  93. }
  94. [Fact]
  95. public void Cannot_Convert_Between_Different_Enum_Types()
  96. {
  97. var result = DefaultValueConverter.Instance.Convert(
  98. TestEnum.Foo,
  99. typeof(Orientation),
  100. null,
  101. CultureInfo.InvariantCulture);
  102. Assert.IsType<BindingNotification>(result);
  103. }
  104. [Fact]
  105. public void Can_Convert_From_Delegate_To_Command()
  106. {
  107. int commandResult = 0;
  108. var result = DefaultValueConverter.Instance.Convert(
  109. (Action<int>)((int i) => { commandResult = i; }),
  110. typeof(ICommand),
  111. null,
  112. CultureInfo.InvariantCulture);
  113. Assert.IsAssignableFrom<ICommand>(result);
  114. (result as ICommand).Execute(5);
  115. Assert.Equal(5, commandResult);
  116. }
  117. [Fact]
  118. public void Can_Convert_From_Delegate_To_Command_No_Parameters()
  119. {
  120. int commandResult = 0;
  121. var result = DefaultValueConverter.Instance.Convert(
  122. (Action)(() => { commandResult = 1; }),
  123. typeof(ICommand),
  124. null,
  125. CultureInfo.InvariantCulture);
  126. Assert.IsAssignableFrom<ICommand>(result);
  127. (result as ICommand).Execute(null);
  128. Assert.Equal(1, commandResult);
  129. }
  130. private enum TestEnum
  131. {
  132. Foo,
  133. Bar,
  134. }
  135. private class ExplicitDouble
  136. {
  137. public ExplicitDouble(double value)
  138. {
  139. Value = value;
  140. }
  141. public double Value { get; }
  142. public static explicit operator double (ExplicitDouble v)
  143. {
  144. return v.Value;
  145. }
  146. }
  147. }
  148. }