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