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