/src/Elevate.Guide/NullableTryParse.cs

# · C# · 385 lines · 320 code · 40 blank · 25 comment · 15 complexity · 0aa55bc8322edd30a9bb83a4e218bbe3 MD5 · raw file

  1. // ---------------------------------------------------------------------------------------------------------------------
  2. // Copyright (c) SRT Solutions 2009. All rights reserved.
  3. // ---------------------------------------------------------------------------------------------------------------------
  4. namespace SRTSolutions.Elevate.Guide
  5. {
  6. using System;
  7. using System.Net;
  8. using NUnit.Framework;
  9. using SRTSolutions.Elevate;
  10. public class NullableTryParse
  11. {
  12. [Test]
  13. public void ParsingValues()
  14. {
  15. //when we have a string that we want to parse
  16. var dateTimeString = "Fri, 15 May 2009 20:10:57 GMT";
  17. //normally, we'd have to try to parse it like this
  18. DateTime value1;
  19. bool result = DateTime.TryParse(dateTimeString, out value1);
  20. Assert.IsTrue(result);
  21. //instead, we can use this syntax
  22. DateTime? value2 = dateTimeString.TryParseDateTime();
  23. Assert.IsTrue(value2.HasValue);
  24. Assert.AreEqual(value1, value2.Value);
  25. //NOTE: We provide these TryParse extensions for many
  26. // other common types. See the unit tests below
  27. // for details.
  28. }
  29. #region Unit Tests
  30. // These are a lot of the sample strings that are
  31. // used in the .NET BCL examples:
  32. private static string[] stringsToParse = new string[]
  33. {
  34. "true",
  35. "false",
  36. "A",
  37. "1",
  38. "-2",
  39. "0x86",
  40. "-15",
  41. "abc",
  42. "-1.643e6",
  43. "-168934617882109132",
  44. "05/01/2009 14:57:32.8",
  45. "2009-05-01 14:57:32.8",
  46. "2009-05-01T14:57:32.8375298-04:00",
  47. "5/01/2008 14:57:32.80 -07:00",
  48. "1 May 2008 2:57:32.8 PM",
  49. "16-05-2009 1:00:32 PM",
  50. "Fri, 15 May 2009 20:10:57 GMT",
  51. "05/012008",
  52. "11:36 PM",
  53. "05/01/2008 +7:00",
  54. "Thu May 01, 2008",
  55. "5/1/2008 10:00 AM -07:00",
  56. "0",
  57. "14",
  58. "1:2:3",
  59. "0:0:0.250",
  60. "10.20:30:40.50",
  61. "99.23:59:59.9999999",
  62. "0023:0059:0059.0099",
  63. "24:0:0",
  64. "0:60:0",
  65. "0:0:60",
  66. "10:",
  67. ":10",
  68. "10:20:",
  69. ".123",
  70. "10.",
  71. "10.12",
  72. "127.0.0.1",
  73. "0:0:0:0:0:0:0:1",
  74. "some random text",
  75. ""
  76. };
  77. [Test]
  78. public void ParseAsBoolean()
  79. {
  80. foreach (string s in stringsToParse)
  81. {
  82. bool? result = s.TryParseBool();
  83. // Find expected values:
  84. bool expectedResult;
  85. bool success = bool.TryParse(s, out expectedResult);
  86. Assert.AreEqual(success, result.HasValue);
  87. if (success)
  88. Assert.AreEqual(expectedResult, result.Value);
  89. }
  90. }
  91. [Test]
  92. public void ParseNullBoolean()
  93. {
  94. Assert.Throws<ArgumentNullException>(() => TryParseExtension.TryParseBool(null));
  95. }
  96. [Test]
  97. public void ParseAsByte()
  98. {
  99. foreach (string s in stringsToParse)
  100. {
  101. byte? result = s.TryParseByte();
  102. // Find expected values:
  103. byte expectedResult;
  104. bool success = byte.TryParse(s, out expectedResult);
  105. Assert.AreEqual(success, result.HasValue);
  106. if (success)
  107. Assert.AreEqual(expectedResult, result.Value);
  108. }
  109. }
  110. [Test]
  111. public void ParseNullByte()
  112. {
  113. Assert.Throws<ArgumentNullException>(() => TryParseExtension.TryParseByte(null));
  114. }
  115. [Test]
  116. public void ParseAsChar()
  117. {
  118. foreach (string s in stringsToParse)
  119. {
  120. char? result = s.TryParseChar();
  121. // Find expected values:
  122. char expectedResult;
  123. bool success = char.TryParse(s, out expectedResult);
  124. Assert.AreEqual(success, result.HasValue);
  125. if (success)
  126. Assert.AreEqual(expectedResult, result.Value);
  127. }
  128. }
  129. [Test]
  130. public void ParseNullChar()
  131. {
  132. Assert.Throws<ArgumentNullException>(() => TryParseExtension.TryParseChar(null));
  133. }
  134. [Test]
  135. public void ParseAsDateTime()
  136. {
  137. foreach (string s in stringsToParse)
  138. {
  139. DateTime? result = s.TryParseDateTime();
  140. // Find expected values:
  141. DateTime expectedResult;
  142. bool success = DateTime.TryParse(s, out expectedResult);
  143. Assert.AreEqual(success, result.HasValue);
  144. if (success)
  145. Assert.AreEqual(expectedResult, result.Value);
  146. }
  147. }
  148. [Test]
  149. public void ParseNullDateTime()
  150. {
  151. Assert.Throws<ArgumentNullException>(() => TryParseExtension.TryParseDateTime(null));
  152. }
  153. [Test]
  154. public void ParseAsDateTimeOffset()
  155. {
  156. foreach (string s in stringsToParse)
  157. {
  158. DateTimeOffset? result = s.TryParseDateTimeOffset();
  159. // Find expected values:
  160. DateTimeOffset expectedResult;
  161. bool success = DateTimeOffset.TryParse(s, out expectedResult);
  162. Assert.AreEqual(success, result.HasValue);
  163. if (success)
  164. Assert.AreEqual(expectedResult, result.Value);
  165. }
  166. }
  167. [Test]
  168. public void ParseNullDateTimeOffset()
  169. {
  170. Assert.Throws<ArgumentNullException>(() => TryParseExtension.TryParseDateTimeOffset(null));
  171. }
  172. [Test]
  173. public void ParseAsDecimal()
  174. {
  175. foreach (string s in stringsToParse)
  176. {
  177. decimal? result = s.TryParseDecimal();
  178. // Find expected values:
  179. decimal expectedResult;
  180. bool success = decimal.TryParse(s, out expectedResult);
  181. Assert.AreEqual(success, result.HasValue);
  182. if (success)
  183. Assert.AreEqual(expectedResult, result.Value);
  184. }
  185. }
  186. [Test]
  187. public void ParseNullDecimal()
  188. {
  189. Assert.Throws<ArgumentNullException>(() => TryParseExtension.TryParseDecimal(null));
  190. }
  191. [Test]
  192. public void ParseAsDouble()
  193. {
  194. foreach (string s in stringsToParse)
  195. {
  196. double? result = s.TryParseDouble();
  197. // Find expected values:
  198. double expectedResult;
  199. bool success = double.TryParse(s, out expectedResult);
  200. Assert.AreEqual(success, result.HasValue);
  201. if (success)
  202. Assert.AreEqual(expectedResult, result.Value);
  203. }
  204. }
  205. [Test]
  206. public void ParseNullDouble()
  207. {
  208. Assert.Throws<ArgumentNullException>(() => TryParseExtension.TryParseDouble(null));
  209. }
  210. [Test]
  211. public void ParseAsShort()
  212. {
  213. foreach (string s in stringsToParse)
  214. {
  215. short? result = s.TryParseShort();
  216. // Find expected values:
  217. short expectedResult;
  218. bool success = short.TryParse(s, out expectedResult);
  219. Assert.AreEqual(success, result.HasValue);
  220. if (success)
  221. Assert.AreEqual(expectedResult, result.Value);
  222. }
  223. }
  224. [Test]
  225. public void ParseNullShort()
  226. {
  227. Assert.Throws<ArgumentNullException>(() => TryParseExtension.TryParseShort(null));
  228. }
  229. [Test]
  230. public void ParseAsInt()
  231. {
  232. foreach (string s in stringsToParse)
  233. {
  234. int? result = s.TryParseInt();
  235. // Find expected values:
  236. int expectedResult;
  237. bool success = int.TryParse(s, out expectedResult);
  238. Assert.AreEqual(success, result.HasValue);
  239. if (success)
  240. Assert.AreEqual(expectedResult, result.Value);
  241. }
  242. }
  243. [Test]
  244. public void ParseNullInt()
  245. {
  246. Assert.Throws<ArgumentNullException>(() => TryParseExtension.TryParseInt(null));
  247. }
  248. [Test]
  249. public void ParseAsLong()
  250. {
  251. foreach (string s in stringsToParse)
  252. {
  253. long? result = s.TryParseLong();
  254. // Find expected values:
  255. long expectedResult;
  256. bool success = long.TryParse(s, out expectedResult);
  257. Assert.AreEqual(success, result.HasValue);
  258. if (success)
  259. Assert.AreEqual(expectedResult, result.Value);
  260. }
  261. }
  262. [Test]
  263. public void ParseNullLong()
  264. {
  265. Assert.Throws<ArgumentNullException>(() => TryParseExtension.TryParseLong(null));
  266. }
  267. [Test]
  268. public void ParseAsFloat()
  269. {
  270. foreach (string s in stringsToParse)
  271. {
  272. float? result = s.TryParseFloat();
  273. // Find expected values:
  274. float expectedResult;
  275. bool success = float.TryParse(s, out expectedResult);
  276. Assert.AreEqual(success, result.HasValue);
  277. if (success)
  278. Assert.AreEqual(expectedResult, result.Value);
  279. }
  280. }
  281. [Test]
  282. public void ParseNullFloat()
  283. {
  284. Assert.Throws<ArgumentNullException>(() => TryParseExtension.TryParseFloat(null));
  285. }
  286. [Test]
  287. public void ParseAsUnsignedShort()
  288. {
  289. foreach (string s in stringsToParse)
  290. {
  291. ushort? result = s.TryParseUnsignedShort();
  292. // Find expected values:
  293. ushort expectedResult;
  294. bool success = ushort.TryParse(s, out expectedResult);
  295. Assert.AreEqual(success, result.HasValue);
  296. if (success)
  297. Assert.AreEqual(expectedResult, result.Value);
  298. }
  299. }
  300. [Test]
  301. public void ParseNullUnsignedShort()
  302. {
  303. Assert.Throws<ArgumentNullException>(() => TryParseExtension.TryParseUnsignedShort(null));
  304. }
  305. [Test]
  306. public void ParseAsUnsignedLong()
  307. {
  308. foreach (string s in stringsToParse)
  309. {
  310. ulong? result = s.TryParseUnsignedShort();
  311. // Find expected values:
  312. ulong expectedResult;
  313. bool success = ulong.TryParse(s, out expectedResult);
  314. Assert.AreEqual(success, result.HasValue);
  315. if (success)
  316. Assert.AreEqual(expectedResult, result.Value);
  317. }
  318. }
  319. [Test]
  320. public void ParseNullUnsignedLong()
  321. {
  322. Assert.Throws<ArgumentNullException>(() => TryParseExtension.TryParseUnsignedLong(null));
  323. }
  324. [Test]
  325. public void ParseAsIpAddress()
  326. {
  327. foreach (string s in stringsToParse)
  328. {
  329. IPAddress result = s.TryParseIPAddress();
  330. // Find expected values:
  331. IPAddress expectedResult;
  332. bool success = IPAddress.TryParse(s, out expectedResult);
  333. Assert.AreEqual(success, (result != null));
  334. if (success)
  335. Assert.AreEqual(expectedResult, result);
  336. }
  337. }
  338. [Test]
  339. public void ParseNullIPAddress()
  340. {
  341. Assert.Throws<ArgumentNullException>(() => TryParseExtension.TryParseIPAddress(null));
  342. }
  343. #endregion
  344. }
  345. }