blob: fb13fce49806905a5e42e87e1f7c4b001aceb48a [file] [log] [blame]
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);
}
}
}