PageRenderTime 44ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/Utilities/Tests/EnumHelperTests.cs

#
C# | 287 lines | 202 code | 33 blank | 52 comment | 1 complexity | 61cfbf581be6f2a7705497f85d13ca89 MD5 | raw file
Possible License(s): Apache-2.0
  1. using System;
  2. using System.ComponentModel;
  3. using Delta.Utilities.Helpers;
  4. using Delta.Utilities.Math;
  5. using NUnit.Framework;
  6. namespace Delta.Utilities.Tests
  7. {
  8. /// <summary>
  9. /// Test class for the EnumHelper.
  10. /// </summary>
  11. public class EnumHelperTests
  12. {
  13. #region Helpers
  14. /// <summary>
  15. /// Test enum
  16. /// </summary>
  17. private enum TestEnum
  18. {
  19. [Description("Some entry")]
  20. SomeEntry,
  21. [Description("Another one")]
  22. AnotherOne,
  23. [Description("Hey stop it now")]
  24. HeyStopItNow,
  25. [Description("Okay okay")]
  26. OkayOkay,
  27. }
  28. #endregion
  29. #region Helpers
  30. /// <summary>
  31. /// Test combined enum
  32. /// </summary>
  33. [Flags]
  34. private enum TestCombinedEnum
  35. {
  36. Zero = 0,
  37. NumberOne = 1,
  38. NumberTwo = 2,
  39. NumberFour = 4,
  40. }
  41. #endregion
  42. #region GetNames (Static)
  43. /// <summary>
  44. /// Get names
  45. /// </summary>
  46. [Test]
  47. public static void GetNames()
  48. {
  49. string[] names = EnumHelper.GetNames(typeof(StringSplitOptions));
  50. Assert.Equal(names.Length, 2);
  51. Assert.Equal(names[0], "None");
  52. Assert.Equal(names[1], "RemoveEmptyEntries");
  53. string[] genericNames = EnumHelper.GetNames<StringSplitOptions>();
  54. Assert.Equal(genericNames.Length, 2);
  55. Assert.Equal(genericNames[0], "None");
  56. Assert.Equal(genericNames[1], "RemoveEmptyEntries");
  57. }
  58. #endregion
  59. #region TestEnumStuff (LongRunning)
  60. /// <summary>
  61. /// Test enum stuff. Note: Too slow for a dynamic unit test.
  62. /// </summary>
  63. [Test]
  64. [NUnit.Framework.Category("LongRunning")]
  65. public static void TestEnumStuff()
  66. {
  67. // First get size of TestEnum (with type of enum)
  68. Assert.Equal(EnumHelper.GetCount<TestEnum>(), 4);
  69. // Now try with some enum member (should give the same result)
  70. Assert.Equal(EnumHelper.GetCount(TestEnum.SomeEntry), 4);
  71. // Test with extension
  72. Assert.Equal(TestEnum.SomeEntry.GetCount(), 4);
  73. Assert.Equal(TestEnum.SomeEntry.GetCount(), 4);
  74. // Try to get enum from name
  75. Assert.Equal(TestEnum.OkayOkay, EnumHelper.ToEnum<TestEnum>("OkayOkay"));
  76. // Get description of an enum members
  77. Assert.Equal(TestEnum.OkayOkay.GetEnumDescription(),
  78. "Okay okay");
  79. Assert.Equal(TestEnum.OkayOkay.Description(), "Okay okay");
  80. // Test enum enumerator stuff
  81. string allEnumNames = EnumHelper.GetEnumerator(typeof(TestEnum)).Write();
  82. Assert.Equal("SomeEntry, AnotherOne, HeyStopItNow, OkayOkay",
  83. allEnumNames);
  84. // Test same with description values
  85. string allEnumDescNames = "";
  86. foreach (TestEnum enumValue in
  87. EnumHelper.GetEnumerator(typeof(TestEnum)))
  88. {
  89. allEnumDescNames +=
  90. (allEnumDescNames.Length == 0
  91. ? ""
  92. : ", ") +
  93. enumValue.GetEnumDescription();
  94. }
  95. Assert.Equal(
  96. "Some entry, Another one, Hey stop it now, Okay okay",
  97. allEnumDescNames);
  98. // Same check with GetAllEnumDescriptions
  99. Assert.Equal(
  100. "Some entry, Another one, Hey stop it now, Okay okay",
  101. EnumHelper.GetAllEnumDescriptions(typeof(TestEnum)).Write());
  102. }
  103. #endregion
  104. #region TestNextAndPreviousEnum (LongRunning)
  105. /// <summary>
  106. /// Test next and previous enum. Note: Too slow for a dynamic unit test.
  107. /// </summary>
  108. [Test]
  109. [NUnit.Framework.Category("LongRunning")]
  110. public static void TestNextAndPreviousEnum()
  111. {
  112. TestEnum someEnum = TestEnum.SomeEntry;
  113. Assert.Equal(TestEnum.SomeEntry, someEnum);
  114. // Check next entry
  115. someEnum = (TestEnum)someEnum.SelectNextEnum();
  116. Assert.Equal(TestEnum.AnotherOne, someEnum);
  117. Assert.Equal(TestEnum.AnotherOne, TestEnum.SomeEntry.Next());
  118. // Go back 2 entries, this will select the last enum entry
  119. someEnum = (TestEnum)someEnum.SelectPreviousEnum();
  120. someEnum = (TestEnum)someEnum.SelectPreviousEnum();
  121. Assert.Equal(TestEnum.OkayOkay, someEnum);
  122. Assert.Equal(TestEnum.AnotherOne, TestEnum.HeyStopItNow.Previous());
  123. }
  124. #endregion
  125. #region GetEnumFromName (LongRunning)
  126. /// <summary>
  127. /// Get enum from name
  128. /// </summary>
  129. [Test]
  130. [NUnit.Framework.Category("LongRunning")]
  131. public void GetEnumFromName()
  132. {
  133. Assert.Equal(TestEnum.OkayOkay,
  134. EnumHelper.ToEnum<TestEnum>("OkayOkay"));
  135. Assert.Equal(TestCombinedEnum.NumberFour,
  136. EnumHelper.ToEnum<TestCombinedEnum>("NumberFour"));
  137. }
  138. #endregion
  139. #region GetValues (LongRunning)
  140. /// <summary>
  141. /// Get values
  142. /// </summary>
  143. [Test]
  144. [NUnit.Framework.Category("LongRunning")]
  145. public static void GetValues()
  146. {
  147. object[] values = typeof(StringSplitOptions).GetValues();
  148. Assert.Equal(values.Length, 2);
  149. Assert.Equal(values[0], StringSplitOptions.None);
  150. Assert.Equal(values[1], StringSplitOptions.RemoveEmptyEntries);
  151. StringSplitOptions[] genericValues =
  152. EnumHelper.GetValues<StringSplitOptions>();
  153. Assert.Equal(genericValues.Length, 2);
  154. Assert.Equal(genericValues[0], StringSplitOptions.None);
  155. Assert.Equal(genericValues[1], StringSplitOptions.RemoveEmptyEntries);
  156. }
  157. #endregion
  158. #region GetCount
  159. /// <summary>
  160. /// Get count
  161. /// </summary>
  162. [Test]
  163. public void GetCount()
  164. {
  165. Assert.Equal(7, EnumHelper.GetCount<DayOfWeek>());
  166. }
  167. #endregion
  168. #region NextValue
  169. /// <summary>
  170. /// Next value
  171. /// </summary>
  172. [Test]
  173. public void NextValue()
  174. {
  175. Assert.Equal(DayOfWeek.Monday, DayOfWeek.Sunday.NextValue());
  176. }
  177. #endregion
  178. #region ConvertToNumber
  179. /// <summary>
  180. /// Convert to number
  181. /// </summary>
  182. [Test]
  183. public void ConvertToNumber()
  184. {
  185. Assert.Equal(0,
  186. EnumHelper.ToInt(TestCombinedEnum.Zero));
  187. Assert.Equal(2,
  188. EnumHelper.ToInt(TestCombinedEnum.NumberTwo));
  189. Assert.Equal(4,
  190. EnumHelper.ToInt(TestCombinedEnum.NumberFour));
  191. Assert.Equal(6, EnumHelper.ToInt(
  192. TestCombinedEnum.NumberTwo | TestCombinedEnum.NumberFour));
  193. Assert.Equal(TestCombinedEnum.NumberFour,
  194. EnumHelper.ToEnum<TestCombinedEnum>("4"));
  195. Assert.Equal(TestCombinedEnum.NumberTwo | TestCombinedEnum.NumberFour,
  196. EnumHelper.ToEnum<TestCombinedEnum>("6"));
  197. }
  198. #endregion
  199. #region ConvertToNumberWithCombinedEnum
  200. /// <summary>
  201. /// Convert to number
  202. /// </summary>
  203. [Test]
  204. public void ConvertToNumberWithCombinedEnum()
  205. {
  206. // Reproduce test with standard methods
  207. Assert.Equal(4, (int)"NumberFour".ToEnum<TestCombinedEnum>());
  208. Assert.Equal(6,
  209. (int)"NumberTwo, NumberFour".ToEnum<TestCombinedEnum>());
  210. Assert.Equal(
  211. (int)(TestCombinedEnum.NumberTwo | TestCombinedEnum.NumberFour),
  212. (int)"6".ToEnum<TestCombinedEnum>());
  213. Assert.Equal("NumberTwo, NumberFour",
  214. (TestCombinedEnum.NumberTwo |
  215. TestCombinedEnum.NumberFour).ToString());
  216. Assert.Equal(TestCombinedEnum.Zero, "bla".ToEnum<TestCombinedEnum>());
  217. Assert.Equal("Zero", TestCombinedEnum.Zero.ToString());
  218. Assert.Equal(0,
  219. (int)(TestCombinedEnum.Zero.ToString().
  220. ToEnum<TestCombinedEnum>()));
  221. Assert.Equal(
  222. (int)(TestCombinedEnum.NumberTwo |
  223. TestCombinedEnum.NumberFour),
  224. (int)(TestCombinedEnum.NumberTwo |
  225. TestCombinedEnum.NumberFour.ToString().
  226. ToEnum<TestCombinedEnum>()));
  227. // Finally write down a combined enum.
  228. TestCombinedEnum combinedValue =
  229. TestCombinedEnum.NumberTwo |
  230. TestCombinedEnum.NumberFour;
  231. Assert.Equal("NumberTwo, NumberFour", combinedValue.ToString());
  232. Assert.Equal(combinedValue.ToStringArray(), new string[]
  233. {
  234. "NumberTwo", "NumberFour"
  235. });
  236. // This can be useful to build a combined enum name as a filename!
  237. Assert.Equal(combinedValue.ToStringArray().Write("_"),
  238. "NumberTwo_NumberFour");
  239. Assert.Equal(combinedValue,
  240. combinedValue.ToStringArray().ToEnum<TestCombinedEnum>());
  241. }
  242. #endregion
  243. #region ToBlablabla
  244. /// <summary>
  245. /// To string
  246. /// </summary>
  247. [Test]
  248. public void ToBlablabla()
  249. {
  250. Assert.Equal("5 + i * 2", new Complex(5.0f, 2.0f).ToString());
  251. }
  252. #endregion
  253. }
  254. }