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