|  | using System; | 
|  | using System.Text; | 
|  | using System.Collections.Generic; | 
|  | using System.Linq; | 
|  | using Microsoft.VisualStudio.TestTools.UnitTesting; | 
|  | using OfficeOpenXml; | 
|  | using Rhino.Mocks; | 
|  | using EPPlusTest.FormulaParsing.TestHelpers; | 
|  | using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; | 
|  | using OfficeOpenXml.FormulaParsing; | 
|  | using OfficeOpenXml.FormulaParsing.Exceptions; | 
|  | using OfficeOpenXml.FormulaParsing.ExcelUtilities; | 
|  | using OfficeOpenXml.FormulaParsing.Excel.Functions; | 
|  | using AddressFunction = OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup.Address; | 
|  |  | 
|  | namespace EPPlusTest.Excel.Functions | 
|  | { | 
|  | [TestClass] | 
|  | public class RefAndLookupTests | 
|  | { | 
|  | const string WorksheetName = null; | 
|  | [TestMethod] | 
|  | public void LookupArgumentsShouldSetSearchedValue() | 
|  | { | 
|  | var args = FunctionsHelper.CreateArgs(1, "A:B", 2); | 
|  | var lookupArgs = new LookupArguments(args); | 
|  | Assert.AreEqual(1, lookupArgs.SearchedValue); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void LookupArgumentsShouldSetRangeAddress() | 
|  | { | 
|  | var args = FunctionsHelper.CreateArgs(1, "A:B", 2); | 
|  | var lookupArgs = new LookupArguments(args); | 
|  | Assert.AreEqual("A:B", lookupArgs.RangeAddress); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void LookupArgumentsShouldSetColIndex() | 
|  | { | 
|  | var args = FunctionsHelper.CreateArgs(1, "A:B", 2); | 
|  | var lookupArgs = new LookupArguments(args); | 
|  | Assert.AreEqual(2, lookupArgs.LookupIndex); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void LookupArgumentsShouldSetRangeLookupToTrueAsDefaultValue() | 
|  | { | 
|  | var args = FunctionsHelper.CreateArgs(1, "A:B", 2); | 
|  | var lookupArgs = new LookupArguments(args); | 
|  | Assert.IsTrue(lookupArgs.RangeLookup); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void LookupArgumentsShouldSetRangeLookupToTrueWhenTrueIsSupplied() | 
|  | { | 
|  | var args = FunctionsHelper.CreateArgs(1, "A:B", 2, true); | 
|  | var lookupArgs = new LookupArguments(args); | 
|  | Assert.IsTrue(lookupArgs.RangeLookup); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void VLookupShouldReturnResultFromMatchingRow() | 
|  | { | 
|  | var func = new VLookup(); | 
|  | var args = FunctionsHelper.CreateArgs(2, "A1:B2", 2); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.Scopes.NewScope(RangeAddress.Empty); | 
|  |  | 
|  | var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(1); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 2)).Return(1); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,2, 1)).Return(2); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,2, 2)).Return(5); | 
|  |  | 
|  | parsingContext.ExcelDataProvider = provider; | 
|  | var result = func.Execute(args, parsingContext); | 
|  | Assert.AreEqual(5, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void VLookupShouldReturnClosestValueBelowWhenRangeLookupIsTrue() | 
|  | { | 
|  | var func = new VLookup(); | 
|  | var args = FunctionsHelper.CreateArgs(4, "A1:B2", 2, true); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.Scopes.NewScope(RangeAddress.Empty); | 
|  |  | 
|  | var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(3); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 2)).Return(1); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,2, 1)).Return(5); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,2, 2)).Return(4); | 
|  |  | 
|  | parsingContext.ExcelDataProvider = provider; | 
|  | var result = func.Execute(args, parsingContext); | 
|  | Assert.AreEqual(1, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void VLookupShouldReturnClosestStringValueBelowWhenRangeLookupIsTrue() | 
|  | { | 
|  | var func = new VLookup(); | 
|  | var args = FunctionsHelper.CreateArgs("B", "A1:B2", 2, true); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.Scopes.NewScope(RangeAddress.Empty); | 
|  |  | 
|  | var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | //provider.Stub(x => x.GetCellValue(WorksheetName,0, 0)).Return(new ExcelCell("A", null, 0, 0)); | 
|  | //provider.Stub(x => x.GetCellValue(WorksheetName,0, 1)).Return(new ExcelCell(1, null, 0, 0)); | 
|  | //provider.Stub(x => x.GetCellValue(WorksheetName,1, 0)).Return(new ExcelCell("C", null, 0, 0)); | 
|  | //provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(new ExcelCell(4, null, 0, 0)); | 
|  |  | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 1, 1)).Return("A"); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 1, 2)).Return(1); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 2, 1)).Return("C"); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 2, 2)).Return(4); | 
|  |  | 
|  | parsingContext.ExcelDataProvider = provider; | 
|  | var result = func.Execute(args, parsingContext); | 
|  | Assert.AreEqual(1, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void HLookupShouldReturnResultFromMatchingRow() | 
|  | { | 
|  | var func = new HLookup(); | 
|  | var args = FunctionsHelper.CreateArgs(2, "A1:B2", 2); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.Scopes.NewScope(RangeAddress.Empty); | 
|  |  | 
|  | var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | //provider.Stub(x => x.GetCellValue(WorksheetName,0, 0)).Return(new ExcelCell(3, null, 0, 0)); | 
|  | //provider.Stub(x => x.GetCellValue(WorksheetName,0, 1)).Return(new ExcelCell(1, null, 0, 0)); | 
|  | //provider.Stub(x => x.GetCellValue(WorksheetName,1, 0)).Return(new ExcelCell(2, null, 0, 0)); | 
|  | //provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(new ExcelCell(5, null, 0, 0)); | 
|  |  | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 1, 1)).Return(1); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 1, 2)).Return(1); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 2, 1)).Return(2); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 2, 2)).Return(5); | 
|  |  | 
|  | parsingContext.ExcelDataProvider = provider; | 
|  | var result = func.Execute(args, parsingContext); | 
|  | Assert.AreEqual(5, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void HLookupShouldReturnNaErrorIfNoMatchingRecordIsFoundWhenRangeLookupIsFalse() | 
|  | { | 
|  | var func = new HLookup(); | 
|  | var args = FunctionsHelper.CreateArgs(2, "A1:B2", 2, false); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.Scopes.NewScope(RangeAddress.Empty); | 
|  |  | 
|  | var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  |  | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 1, 1)).Return(3); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 1, 2)).Return(1); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 2, 1)).Return(2); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 2, 2)).Return(5); | 
|  |  | 
|  | parsingContext.ExcelDataProvider = provider; | 
|  | var result = func.Execute(args, parsingContext); | 
|  | var expectedResult = ExcelErrorValue.Create(eErrorType.NA); | 
|  | Assert.AreEqual(expectedResult, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod, ExpectedException(typeof(ExcelErrorValueException))] | 
|  | public void HLookupShouldThrowIfNoMatchingRecordIsFoundWhenRangeLookupIsTrue() | 
|  | { | 
|  | var func = new HLookup(); | 
|  | var args = FunctionsHelper.CreateArgs(1, "A1:B2", 2, true); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.Scopes.NewScope(RangeAddress.Empty); | 
|  |  | 
|  | var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  |  | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 1, 1)).Return(2); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 1, 2)).Return(3); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 2, 1)).Return(3); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName, 2, 2)).Return(5); | 
|  |  | 
|  | parsingContext.ExcelDataProvider = provider; | 
|  | var result = func.Execute(args, parsingContext); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void LookupShouldReturnResultFromMatchingRowArrayVertical() | 
|  | { | 
|  | var func = new Lookup(); | 
|  | var args = FunctionsHelper.CreateArgs(4, "A1:B3", 2); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.Scopes.NewScope(RangeAddress.Empty); | 
|  |  | 
|  | var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(1); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 2)).Return("A"); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,2, 1)).Return(3); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,2, 2)).Return("B"); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,3, 1)).Return(5); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,3, 2)).Return("C"); | 
|  |  | 
|  | parsingContext.ExcelDataProvider = provider; | 
|  | var result = func.Execute(args, parsingContext); | 
|  | Assert.AreEqual("B", result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void LookupShouldReturnResultFromMatchingRowArrayHorizontal() | 
|  | { | 
|  | var func = new Lookup(); | 
|  | var args = FunctionsHelper.CreateArgs(4, "A1:C2", 2); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.Scopes.NewScope(RangeAddress.Empty); | 
|  |  | 
|  | var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(1); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 2)).Return(3); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 3)).Return(5); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,2, 1)).Return("A"); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,2, 2)).Return("B"); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,2, 3)).Return("C"); | 
|  |  | 
|  | parsingContext.ExcelDataProvider = provider; | 
|  | var result = func.Execute(args, parsingContext); | 
|  | Assert.AreEqual("B", result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void LookupShouldReturnResultFromMatchingSecondArrayHorizontal() | 
|  | { | 
|  | var func = new Lookup(); | 
|  | var args = FunctionsHelper.CreateArgs(4, "A1:C1", "A3:C3"); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.Scopes.NewScope(RangeAddress.Empty); | 
|  |  | 
|  | var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(1); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 2)).Return(3); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 3)).Return(5); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,3, 1)).Return("A"); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,3, 2)).Return("B"); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,3, 3)).Return("C"); | 
|  |  | 
|  | parsingContext.ExcelDataProvider = provider; | 
|  | var result = func.Execute(args, parsingContext); | 
|  | Assert.AreEqual("B", result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void LookupShouldReturnResultFromMatchingSecondArrayHorizontalWithOffset() | 
|  | { | 
|  | var func = new Lookup(); | 
|  | var args = FunctionsHelper.CreateArgs(4, "A1:C1", "B3:D3"); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.Scopes.NewScope(RangeAddress.Empty); | 
|  |  | 
|  | var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(1); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 2)).Return(3); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 3)).Return(5); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,3, 2)).Return("A"); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,3, 3)).Return("B"); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,3, 4)).Return("C"); | 
|  |  | 
|  | parsingContext.ExcelDataProvider = provider; | 
|  | var result = func.Execute(args, parsingContext); | 
|  | Assert.AreEqual("B", result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void MatchShouldReturnIndexOfMatchingValHorizontal_MatchTypeExact() | 
|  | { | 
|  | var func = new Match(); | 
|  | var args = FunctionsHelper.CreateArgs(3, "A1:C1", 0); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.Scopes.NewScope(RangeAddress.Empty); | 
|  |  | 
|  | var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(1); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 2)).Return(3); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 3)).Return(5); | 
|  | parsingContext.ExcelDataProvider = provider; | 
|  | var result = func.Execute(args, parsingContext); | 
|  | Assert.AreEqual(2, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void MatchShouldReturnIndexOfMatchingValVertical_MatchTypeExact() | 
|  | { | 
|  | var func = new Match(); | 
|  | var args = FunctionsHelper.CreateArgs(3, "A1:A3", 0); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.Scopes.NewScope(RangeAddress.Empty); | 
|  |  | 
|  | var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(1); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,2, 1)).Return(3); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,3, 1)).Return(5); | 
|  | parsingContext.ExcelDataProvider = provider; | 
|  | var result = func.Execute(args, parsingContext); | 
|  | Assert.AreEqual(2, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void MatchShouldReturnIndexOfMatchingValHorizontal_MatchTypeClosestBelow() | 
|  | { | 
|  | var func = new Match(); | 
|  | var args = FunctionsHelper.CreateArgs(4, "A1:C1", 1); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.Scopes.NewScope(RangeAddress.Empty); | 
|  |  | 
|  | var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(1); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 2)).Return(3); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 3)).Return(5); | 
|  | parsingContext.ExcelDataProvider = provider; | 
|  | var result = func.Execute(args, parsingContext); | 
|  | Assert.AreEqual(2, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void MatchShouldReturnIndexOfMatchingValHorizontal_MatchTypeClosestAbove() | 
|  | { | 
|  | var func = new Match(); | 
|  | var args = FunctionsHelper.CreateArgs(6, "A1:C1", -1); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.Scopes.NewScope(RangeAddress.Empty); | 
|  |  | 
|  | var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(10); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 2)).Return(8); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 3)).Return(5); | 
|  | parsingContext.ExcelDataProvider = provider; | 
|  | var result = func.Execute(args, parsingContext); | 
|  | Assert.AreEqual(2, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void MatchShouldReturnFirstItemWhenExactMatch_MatchTypeClosestAbove() | 
|  | { | 
|  | var func = new Match(); | 
|  | var args = FunctionsHelper.CreateArgs(10, "A1:C1", -1); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.Scopes.NewScope(RangeAddress.Empty); | 
|  |  | 
|  | var provider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 1)).Return(10); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 2)).Return(8); | 
|  | provider.Stub(x => x.GetCellValue(WorksheetName,1, 3)).Return(5); | 
|  | parsingContext.ExcelDataProvider = provider; | 
|  | var result = func.Execute(args, parsingContext); | 
|  | Assert.AreEqual(1, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void RowShouldReturnRowFromCurrentScopeIfNoAddressIsSupplied() | 
|  | { | 
|  | var func = new Row(); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | var rangeAddressFactory = new RangeAddressFactory(MockRepository.GenerateStub<ExcelDataProvider>()); | 
|  | parsingContext.Scopes.NewScope(rangeAddressFactory.Create("A2")); | 
|  | var result = func.Execute(Enumerable.Empty<FunctionArgument>(), parsingContext); | 
|  | Assert.AreEqual(2, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void RowShouldReturnRowSuppliedAddress() | 
|  | { | 
|  | var func = new Row(); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.ExcelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | var result = func.Execute(FunctionsHelper.CreateArgs("A3"), parsingContext); | 
|  | Assert.AreEqual(3, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ColumnShouldReturnRowFromCurrentScopeIfNoAddressIsSupplied() | 
|  | { | 
|  | var func = new Column(); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | var rangeAddressFactory = new RangeAddressFactory(MockRepository.GenerateStub<ExcelDataProvider>()); | 
|  | parsingContext.Scopes.NewScope(rangeAddressFactory.Create("B2")); | 
|  | var result = func.Execute(Enumerable.Empty<FunctionArgument>(), parsingContext); | 
|  | Assert.AreEqual(2, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ColumnShouldReturnRowSuppliedAddress() | 
|  | { | 
|  | var func = new Column(); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.ExcelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | var result = func.Execute(FunctionsHelper.CreateArgs("E3"), parsingContext); | 
|  | Assert.AreEqual(5, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void RowsShouldReturnNbrOfRowsSuppliedRange() | 
|  | { | 
|  | var func = new Rows(); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.ExcelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | var result = func.Execute(FunctionsHelper.CreateArgs("A1:B3"), parsingContext); | 
|  | Assert.AreEqual(3, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void RowsShouldReturnNbrOfRowsForEntireColumn() | 
|  | { | 
|  | var func = new Rows(); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.ExcelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | var result = func.Execute(FunctionsHelper.CreateArgs("A:B"), parsingContext); | 
|  | Assert.AreEqual(1048576, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ColumnssShouldReturnNbrOfRowsSuppliedRange() | 
|  | { | 
|  | var func = new Columns(); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.ExcelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | var result = func.Execute(FunctionsHelper.CreateArgs("A1:E3"), parsingContext); | 
|  | Assert.AreEqual(5, result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ChooseShouldReturnItemByIndex() | 
|  | { | 
|  | var func = new Choose(); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | var result = func.Execute(FunctionsHelper.CreateArgs(1, "A", "B"), parsingContext); | 
|  | Assert.AreEqual("A", result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void AddressShouldReturnAddressByIndexWithDefaultRefType() | 
|  | { | 
|  | var func = new AddressFunction(); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.ExcelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | parsingContext.ExcelDataProvider.Stub(x => x.ExcelMaxRows).Return(10); | 
|  | var result = func.Execute(FunctionsHelper.CreateArgs(1, 2), parsingContext); | 
|  | Assert.AreEqual("$B$1", result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void AddressShouldReturnAddressByIndexWithRelativeType() | 
|  | { | 
|  | var func = new AddressFunction(); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.ExcelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | parsingContext.ExcelDataProvider.Stub(x => x.ExcelMaxRows).Return(10); | 
|  | var result = func.Execute(FunctionsHelper.CreateArgs(1, 2, (int)ExcelReferenceType.RelativeRowAndColumn), parsingContext); | 
|  | Assert.AreEqual("B1", result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void AddressShouldReturnAddressByWithSpecifiedWorksheet() | 
|  | { | 
|  | var func = new AddressFunction(); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.ExcelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | parsingContext.ExcelDataProvider.Stub(x => x.ExcelMaxRows).Return(10); | 
|  | var result = func.Execute(FunctionsHelper.CreateArgs(1, 2, (int)ExcelReferenceType.RelativeRowAndColumn, true, "Worksheet1"), parsingContext); | 
|  | Assert.AreEqual("Worksheet1!B1", result.Result); | 
|  | } | 
|  |  | 
|  | [TestMethod, ExpectedException(typeof(InvalidOperationException))] | 
|  | public void AddressShouldThrowIfR1C1FormatIsSpecified() | 
|  | { | 
|  | var func = new AddressFunction(); | 
|  | var parsingContext = ParsingContext.Create(); | 
|  | parsingContext.ExcelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
|  | parsingContext.ExcelDataProvider.Stub(x => x.ExcelMaxRows).Return(10); | 
|  | var result = func.Execute(FunctionsHelper.CreateArgs(1, 2, (int)ExcelReferenceType.RelativeRowAndColumn, false), parsingContext); | 
|  | } | 
|  | } | 
|  | } |