|  | using System; | 
|  | using System.Text; | 
|  | using System.Collections.Generic; | 
|  | using System.Linq; | 
|  | using Microsoft.VisualStudio.TestTools.UnitTesting; | 
|  | using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; | 
|  |  | 
|  | namespace EPPlusTest.Excel.Functions | 
|  | { | 
|  | [TestClass] | 
|  | public class TimeStringParserTests | 
|  | { | 
|  | private double GetSerialNumber(int hour, int minute, int second) | 
|  | { | 
|  | var secondsInADay = 24d * 60d * 60d; | 
|  | return ((double)hour * 60 * 60 + (double)minute * 60 + (double)second) / secondsInADay; | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void CanParseShouldHandleValid24HourPatterns() | 
|  | { | 
|  | var parser = new TimeStringParser(); | 
|  | Assert.IsTrue(parser.CanParse("10:12:55"), "Could not parse 10:12:55"); | 
|  | Assert.IsTrue(parser.CanParse("22:12:55"), "Could not parse 13:12:55"); | 
|  | Assert.IsTrue(parser.CanParse("13"), "Could not parse 13"); | 
|  | Assert.IsTrue(parser.CanParse("13:12"), "Could not parse 13:12"); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void CanParseShouldHandleValid12HourPatterns() | 
|  | { | 
|  | var parser = new TimeStringParser(); | 
|  | Assert.IsTrue(parser.CanParse("10:12:55 AM"), "Could not parse 10:12:55 AM"); | 
|  | Assert.IsTrue(parser.CanParse("9:12:55 PM"), "Could not parse 9:12:55 PM"); | 
|  | Assert.IsTrue(parser.CanParse("7 AM"), "Could not parse 7 AM"); | 
|  | Assert.IsTrue(parser.CanParse("4:12 PM"), "Could not parse 4:12 PM"); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ParseShouldIdentifyPatternAndReturnCorrectResult() | 
|  | { | 
|  | var parser = new TimeStringParser(); | 
|  | var result = parser.Parse("10:12:55"); | 
|  | Assert.AreEqual(GetSerialNumber(10, 12, 55), result); | 
|  | } | 
|  |  | 
|  | [TestMethod, ExpectedException(typeof(FormatException))] | 
|  | public void ParseShouldThrowExceptionIfSecondIsOutOfRange() | 
|  | { | 
|  | var parser = new TimeStringParser(); | 
|  | var result = parser.Parse("10:12:60"); | 
|  | } | 
|  |  | 
|  | [TestMethod, ExpectedException(typeof(FormatException))] | 
|  | public void ParseShouldThrowExceptionIfMinuteIsOutOfRange() | 
|  | { | 
|  | var parser = new TimeStringParser(); | 
|  | var result = parser.Parse("10:60:55"); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ParseShouldIdentify12HourAMPatternAndReturnCorrectResult() | 
|  | { | 
|  | var parser = new TimeStringParser(); | 
|  | var result = parser.Parse("10:12:55 AM"); | 
|  | Assert.AreEqual(GetSerialNumber(10, 12, 55), result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ParseShouldIdentify12HourPMPatternAndReturnCorrectResult() | 
|  | { | 
|  | var parser = new TimeStringParser(); | 
|  | var result = parser.Parse("10:12:55 PM"); | 
|  | Assert.AreEqual(GetSerialNumber(22, 12, 55), result); | 
|  | } | 
|  | } | 
|  | } |