| using System; | |
| using System.Text; | |
| using System.Collections.Generic; | |
| using System.Linq; | |
| using Microsoft.VisualStudio.TestTools.UnitTesting; | |
| using OfficeOpenXml; | |
| using OfficeOpenXml.FormulaParsing; | |
| using OfficeOpenXml.FormulaParsing.ExpressionGraph; | |
| using Rhino.Mocks; | |
| using System.IO; | |
| namespace EPPlusTest.FormulaParsing.IntegrationTests.BuiltInFunctions | |
| { | |
| [TestClass] | |
| public class DateAndTimeFunctionsTests : FormulaParserTestBase | |
| { | |
| [TestInitialize] | |
| public void Setup() | |
| { | |
| var excelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>(); | |
| _parser = new FormulaParser(excelDataProvider); | |
| } | |
| [TestMethod] | |
| public void DateShouldReturnCorrectResult() | |
| { | |
| var result = _parser.Parse("Date(2012, 2, 2)"); | |
| Assert.AreEqual(new DateTime(2012, 2, 2).ToOADate(), result); | |
| } | |
| [TestMethod] | |
| public void DateShouldHandleCellReference() | |
| { | |
| using (var pck = new ExcelPackage()) | |
| { | |
| var sheet = pck.Workbook.Worksheets.Add("test"); | |
| sheet.Cells["A1"].Value = 2012d; | |
| sheet.Cells["A2"].Formula = "Date(A1, 2, 2)"; | |
| sheet.Calculate(); | |
| var result = sheet.Cells["A2"].Value; | |
| Assert.AreEqual(new DateTime(2012, 2, 2).ToOADate(), result); | |
| } | |
| } | |
| [TestMethod] | |
| public void TodayShouldReturnAResult() | |
| { | |
| var result = _parser.Parse("Today()"); | |
| Assert.IsInstanceOfType(DateTime.FromOADate((double)result), typeof(DateTime)); | |
| } | |
| [TestMethod] | |
| public void NowShouldReturnAResult() | |
| { | |
| var result = _parser.Parse("now()"); | |
| Assert.IsInstanceOfType(DateTime.FromOADate((double)result), typeof(DateTime)); | |
| } | |
| [TestMethod] | |
| public void DayShouldReturnCorrectResult() | |
| { | |
| var result = _parser.Parse("Day(Date(2012, 4, 2))"); | |
| Assert.AreEqual(2, result); | |
| } | |
| [TestMethod] | |
| public void MonthShouldReturnCorrectResult() | |
| { | |
| var result = _parser.Parse("Month(Date(2012, 4, 2))"); | |
| Assert.AreEqual(4, result); | |
| } | |
| [TestMethod] | |
| public void YearShouldReturnCorrectResult() | |
| { | |
| var result = _parser.Parse("Year(Date(2012, 2, 2))"); | |
| Assert.AreEqual(2012, result); | |
| } | |
| [TestMethod] | |
| public void TimeShouldReturnCorrectResult() | |
| { | |
| var expectedResult = ((double)(12 * 60 * 60 + 13 * 60 + 14))/((double)(24 * 60 * 60)); | |
| var result = _parser.Parse("Time(12, 13, 14)"); | |
| Assert.AreEqual(expectedResult, result); | |
| } | |
| [TestMethod] | |
| public void HourShouldReturnCorrectResult() | |
| { | |
| var result = _parser.Parse("HOUR(Time(12, 13, 14))"); | |
| Assert.AreEqual(12, result); | |
| } | |
| [TestMethod] | |
| public void MinuteShouldReturnCorrectResult() | |
| { | |
| var result = _parser.Parse("minute(Time(12, 13, 14))"); | |
| Assert.AreEqual(13, result); | |
| } | |
| [TestMethod] | |
| public void SecondShouldReturnCorrectResult() | |
| { | |
| var result = _parser.Parse("Second(Time(12, 13, 59))"); | |
| Assert.AreEqual(59, result); | |
| } | |
| [TestMethod] | |
| public void SecondShouldReturnCorrectResultWhenParsingString() | |
| { | |
| var result = _parser.Parse("Second(\"10:12:14\")"); | |
| Assert.AreEqual(14, result); | |
| } | |
| [TestMethod] | |
| public void MinuteShouldReturnCorrectResultWhenParsingString() | |
| { | |
| var result = _parser.Parse("Minute(\"10:12:14 AM\")"); | |
| Assert.AreEqual(12, result); | |
| } | |
| [TestMethod] | |
| public void HourShouldReturnCorrectResultWhenParsingString() | |
| { | |
| var result = _parser.Parse("Hour(\"10:12:14\")"); | |
| Assert.AreEqual(10, result); | |
| } | |
| [TestMethod] | |
| public void Day360ShouldReturnCorrectResult() | |
| { | |
| var result = _parser.Parse("Days360(Date(2012, 4, 2), Date(2012, 5, 2))"); | |
| Assert.AreEqual(30, result); | |
| } | |
| [TestMethod] | |
| public void YearfracShouldReturnAResult() | |
| { | |
| var result = _parser.Parse("Yearfrac(Date(2012, 4, 2), Date(2012, 5, 2))"); | |
| Assert.IsInstanceOfType(result, typeof(double)); | |
| } | |
| [TestMethod] | |
| public void IsoWeekNumShouldReturnAResult() | |
| { | |
| var result = _parser.Parse("IsoWeekNum(Date(2012, 4, 2))"); | |
| Assert.IsInstanceOfType(result, typeof(int)); | |
| } | |
| [TestMethod] | |
| public void EomonthShouldReturnAResult() | |
| { | |
| var result = _parser.Parse("Eomonth(Date(2013, 2, 2), 3)"); | |
| Assert.IsInstanceOfType(result, typeof(double)); | |
| } | |
| [TestMethod] | |
| public void WorkdayShouldReturnAResult() | |
| { | |
| var result = _parser.Parse("Workday(Date(2013, 2, 2), 3)"); | |
| Assert.IsInstanceOfType(result, typeof(double)); | |
| } | |
| [TestMethod] | |
| public void DateNotEqualToStringShouldBeTrue() | |
| { | |
| var result = _parser.Parse("TODAY() <> \"\""); | |
| Assert.IsTrue((bool)result); | |
| } | |
| [TestMethod] | |
| public void Calculation5() | |
| { | |
| var pck = new ExcelPackage(); | |
| var ws = pck.Workbook.Worksheets.Add("Calc1"); | |
| ws.Cells["A1"].Value = "John"; | |
| ws.Cells["B1"].Value = "Doe"; | |
| ws.Cells["C1"].Formula = "B1&\", \"&A1"; | |
| ws.Calculate(); | |
| Assert.AreEqual("Doe, John", ws.Cells["C1"].Value); | |
| } | |
| [TestMethod] | |
| public void HourWithExcelReference() | |
| { | |
| var pck = new ExcelPackage(); | |
| var ws = pck.Workbook.Worksheets.Add("Calc1"); | |
| ws.Cells["A1"].Value = new DateTime(2014, 1, 1, 10, 11, 12).ToOADate(); | |
| ws.Cells["B1"].Formula = "HOUR(A1)"; | |
| ws.Calculate(); | |
| Assert.AreEqual(10, ws.Cells["B1"].Value); | |
| } | |
| [TestMethod] | |
| public void MinuteWithExcelReference() | |
| { | |
| var pck = new ExcelPackage(); | |
| var ws = pck.Workbook.Worksheets.Add("Calc1"); | |
| ws.Cells["A1"].Value = new DateTime(2014, 1, 1, 10, 11, 12).ToOADate(); | |
| ws.Cells["B1"].Formula = "MINUTE(A1)"; | |
| ws.Calculate(); | |
| Assert.AreEqual(11, ws.Cells["B1"].Value); | |
| } | |
| [TestMethod] | |
| public void SecondWithExcelReference() | |
| { | |
| var pck = new ExcelPackage(); | |
| var ws = pck.Workbook.Worksheets.Add("Calc1"); | |
| ws.Cells["A1"].Value = new DateTime(2014, 1, 1, 10, 11, 12).ToOADate(); | |
| ws.Cells["B1"].Formula = "SECOND(A1)"; | |
| ws.Calculate(); | |
| Assert.AreEqual(12, ws.Cells["B1"].Value); | |
| } | |
| } | |
| } |