| 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); |
| } |
| } |
| } |