DefaultValueConverterTests.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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. using Avalonia.Layout;
  11. namespace Avalonia.Base.UnitTests.Data.Converters
  12. {
  13. public class DefaultValueConverterTests
  14. {
  15. [Fact]
  16. public void Can_Convert_String_To_Int()
  17. {
  18. var result = DefaultValueConverter.Instance.Convert(
  19. "5",
  20. typeof(int),
  21. null,
  22. CultureInfo.InvariantCulture);
  23. Assert.Equal(5, result);
  24. }
  25. [Fact]
  26. public void Can_Convert_String_To_Double()
  27. {
  28. var result = DefaultValueConverter.Instance.Convert(
  29. "5",
  30. typeof(double),
  31. null,
  32. CultureInfo.InvariantCulture);
  33. Assert.Equal(5.0, result);
  34. }
  35. [Fact]
  36. public void Can_Convert_String_To_Enum()
  37. {
  38. var result = DefaultValueConverter.Instance.Convert(
  39. "Bar",
  40. typeof(TestEnum),
  41. null,
  42. CultureInfo.InvariantCulture);
  43. Assert.Equal(TestEnum.Bar, result);
  44. }
  45. [Fact]
  46. public void Can_Convert_String_To_TimeSpan()
  47. {
  48. var result = DefaultValueConverter.Instance.Convert(
  49. "00:00:10",
  50. typeof(TimeSpan),
  51. null,
  52. CultureInfo.InvariantCulture);
  53. Assert.Equal(TimeSpan.FromSeconds(10), result);
  54. }
  55. [Fact]
  56. public void Can_Convert_Int_To_Enum()
  57. {
  58. var result = DefaultValueConverter.Instance.Convert(
  59. 1,
  60. typeof(TestEnum),
  61. null,
  62. CultureInfo.InvariantCulture);
  63. Assert.Equal(TestEnum.Bar, result);
  64. }
  65. [Fact]
  66. public void Can_Convert_Double_To_String()
  67. {
  68. var result = DefaultValueConverter.Instance.Convert(
  69. 5.0,
  70. typeof(string),
  71. null,
  72. CultureInfo.InvariantCulture);
  73. Assert.Equal("5", result);
  74. }
  75. [Fact]
  76. public void Can_Convert_Enum_To_Int()
  77. {
  78. var result = DefaultValueConverter.Instance.Convert(
  79. TestEnum.Bar,
  80. typeof(int),
  81. null,
  82. CultureInfo.InvariantCulture);
  83. Assert.Equal(1, result);
  84. }
  85. [Fact]
  86. public void Can_Convert_Enum_To_String()
  87. {
  88. var result = DefaultValueConverter.Instance.Convert(
  89. TestEnum.Bar,
  90. typeof(string),
  91. null,
  92. CultureInfo.InvariantCulture);
  93. Assert.Equal("Bar", result);
  94. }
  95. [Fact]
  96. public void Can_Use_Explicit_Cast()
  97. {
  98. var result = DefaultValueConverter.Instance.Convert(
  99. new ExplicitDouble(5.0),
  100. typeof(double),
  101. null,
  102. CultureInfo.InvariantCulture);
  103. Assert.Equal(5.0, result);
  104. }
  105. [Fact]
  106. public void Cannot_Convert_Between_Different_Enum_Types()
  107. {
  108. var result = DefaultValueConverter.Instance.Convert(
  109. TestEnum.Foo,
  110. typeof(Orientation),
  111. null,
  112. CultureInfo.InvariantCulture);
  113. Assert.IsType<BindingNotification>(result);
  114. }
  115. [Fact]
  116. public void Can_Convert_From_Delegate_To_Command()
  117. {
  118. int commandResult = 0;
  119. var result = DefaultValueConverter.Instance.Convert(
  120. (Action<int>)((int i) => { commandResult = i; }),
  121. typeof(ICommand),
  122. null,
  123. CultureInfo.InvariantCulture);
  124. Assert.IsAssignableFrom<ICommand>(result);
  125. (result as ICommand).Execute(5);
  126. Assert.Equal(5, commandResult);
  127. }
  128. [Fact]
  129. public void Can_Convert_From_Delegate_To_Command_No_Parameters()
  130. {
  131. int commandResult = 0;
  132. var result = DefaultValueConverter.Instance.Convert(
  133. (Action)(() => { commandResult = 1; }),
  134. typeof(ICommand),
  135. null,
  136. CultureInfo.InvariantCulture);
  137. Assert.IsAssignableFrom<ICommand>(result);
  138. (result as ICommand).Execute(null);
  139. Assert.Equal(1, commandResult);
  140. }
  141. private enum TestEnum
  142. {
  143. Foo,
  144. Bar,
  145. }
  146. private class ExplicitDouble
  147. {
  148. public ExplicitDouble(double value)
  149. {
  150. Value = value;
  151. }
  152. public double Value { get; }
  153. public static explicit operator double (ExplicitDouble v)
  154. {
  155. return v.Value;
  156. }
  157. }
  158. }
  159. }