| using System; | |
| using System.Text; | |
| using System.Collections.Generic; | |
| using System.Linq; | |
| using Microsoft.VisualStudio.TestTools.UnitTesting; | |
| using OfficeOpenXml; | |
| using Rhino.Mocks; | |
| using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; | |
| using EPPlusTest.FormulaParsing.TestHelpers; | |
| using OfficeOpenXml.FormulaParsing; | |
| using OfficeOpenXml.FormulaParsing.ExcelUtilities; | |
| namespace EPPlusTest.Excel.Functions.RefAndLookup | |
| { | |
| [TestClass] | |
| public class LookupNavigatorTests | |
| { | |
| const string WorksheetName = ""; | |
| private LookupArguments GetArgs(params object[] args) | |
| { | |
| var lArgs = FunctionsHelper.CreateArgs(args); | |
| return new LookupArguments(lArgs); | |
| } | |
| private ParsingContext GetContext(ExcelDataProvider provider) | |
| { | |
| var ctx = ParsingContext.Create(); | |
| ctx.Scopes.NewScope(new RangeAddress(){Worksheet = WorksheetName, FromCol = 1, FromRow = 1}); | |
| ctx.ExcelDataProvider = provider; | |
| return ctx; | |
| } | |
| //[TestMethod] | |
| //public void NavigatorShouldEvaluateFormula() | |
| //{ | |
| // var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | |
| // provider.Stub(x => x.GetCellValue(WorksheetName,0, 0)).Return(new ExcelCell(3); | |
| // provider.Stub(x => x.GetCellValue(WorksheetName,1, 0)).Return("B5"); | |
| // var args = GetArgs(4, "A1:B2", 1); | |
| // var context = GetContext(provider); | |
| // var parser = MockRepository.GenerateMock<FormulaParser>(provider); | |
| // context.Parser = parser; | |
| // var navigator = new LookupNavigator(LookupDirection.Vertical, args, context); | |
| // navigator.MoveNext(); | |
| // parser.AssertWasCalled(x => x.Parse("B5")); | |
| //} | |
| [TestMethod] | |
| public void CurrentValueShouldBeFirstCell() | |
| { | |
| var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | |
| provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(3); | |
| provider.Stub(x => x.GetCellValue(WorksheetName,2, 1)).Return(4); | |
| var args = GetArgs(3, "A1:B2", 1); | |
| var navigator = LookupNavigatorFactory.Create(LookupDirection.Vertical, args, GetContext(provider)); | |
| Assert.AreEqual(3, navigator.CurrentValue); | |
| } | |
| [TestMethod] | |
| public void MoveNextShouldReturnFalseIfLastCell() | |
| { | |
| var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | |
| provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(3); | |
| provider.Stub(x => x.GetCellValue(WorksheetName,2, 1)).Return(4); | |
| var args = GetArgs(3, "A1:B1", 1); | |
| var navigator = LookupNavigatorFactory.Create(LookupDirection.Vertical, args, GetContext(provider)); | |
| Assert.IsFalse(navigator.MoveNext()); | |
| } | |
| [TestMethod] | |
| public void HasNextShouldBeTrueIfNotLastCell() | |
| { | |
| var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | |
| provider.Stub(x => x.GetDimensionEnd(Arg<string>.Is.Anything)).Return(new ExcelCellAddress(5, 5)); | |
| provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(3); | |
| provider.Stub(x => x.GetCellValue(WorksheetName,2, 1)).Return(4); | |
| var args = GetArgs(3, "A1:B2", 1); | |
| var navigator = LookupNavigatorFactory.Create(LookupDirection.Vertical, args, GetContext(provider)); | |
| Assert.IsTrue(navigator.MoveNext()); | |
| } | |
| [TestMethod] | |
| public void MoveNextShouldNavigateVertically() | |
| { | |
| var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | |
| provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(3); | |
| provider.Stub(x => x.GetCellValue(WorksheetName,2, 1)).Return(4); | |
| var args = GetArgs(6, "A1:B2", 1); | |
| var navigator = LookupNavigatorFactory.Create(LookupDirection.Vertical, args, GetContext(provider)); | |
| navigator.MoveNext(); | |
| Assert.AreEqual(4, navigator.CurrentValue); | |
| } | |
| [TestMethod] | |
| public void MoveNextShouldIncreaseIndex() | |
| { | |
| var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | |
| provider.Stub(x => x.GetDimensionEnd(Arg<string>.Is.Anything)).Return(new ExcelCellAddress(5, 5)); | |
| provider.Stub(x => x.GetCellValue(WorksheetName, 1, 1)).Return(3); | |
| provider.Stub(x => x.GetCellValue(WorksheetName, 1, 2)).Return(4); | |
| var args = GetArgs(6, "A1:B2", 1); | |
| var navigator = LookupNavigatorFactory.Create(LookupDirection.Vertical, args, GetContext(provider)); | |
| Assert.AreEqual(0, navigator.Index); | |
| navigator.MoveNext(); | |
| Assert.AreEqual(1, navigator.Index); | |
| } | |
| [TestMethod] | |
| public void GetLookupValueShouldReturnCorrespondingValue() | |
| { | |
| var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | |
| provider.Stub(x => x.GetDimensionEnd(Arg<string>.Is.Anything)).Return(new ExcelCellAddress(5, 5)); | |
| provider.Stub(x => x.GetCellValue(WorksheetName, 1, 1)).Return(3); | |
| provider.Stub(x => x.GetCellValue(WorksheetName, 1, 2)).Return(4); | |
| var args = GetArgs(6, "A1:B2", 2); | |
| var navigator = LookupNavigatorFactory.Create(LookupDirection.Vertical, args, GetContext(provider)); | |
| Assert.AreEqual(4, navigator.GetLookupValue()); | |
| } | |
| [TestMethod] | |
| public void GetLookupValueShouldReturnCorrespondingValueWithOffset() | |
| { | |
| var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | |
| provider.Stub(x => x.GetDimensionEnd(Arg<string>.Is.Anything)).Return(new ExcelCellAddress(5, 5)); | |
| provider.Stub(x => x.GetCellValue(WorksheetName, 1, 1)).Return(3); | |
| provider.Stub(x => x.GetCellValue(WorksheetName, 3, 3)).Return(4); | |
| var args = new LookupArguments(3, "A1:A4", 3, 2, false); | |
| var navigator = LookupNavigatorFactory.Create(LookupDirection.Vertical, args, GetContext(provider)); | |
| Assert.AreEqual(4, navigator.GetLookupValue()); | |
| } | |
| } | |
| } |