public void Setup() { var provider = MockRepository.GenerateStub<ExcelDataProvider>(); _factory = new RangeAddressFactory(provider); _lifeTimeEventHandler = MockRepository.GenerateStub<IParsingLifetimeEventHandler>(); _parsingScopes = MockRepository.GenerateStub<ParsingScopes>(_lifeTimeEventHandler); }
public void Setup() { var provider = MockRepository.GenerateStub<ExcelDataProvider>(); _factory = new RangeAddressFactory(provider); _lifetimeEventHandler = MockRepository.GenerateStub<IParsingLifetimeEventHandler>(); _scopes = MockRepository.GenerateStub<ParsingScopes>(_lifetimeEventHandler); _formulaDependencyFactory = MockRepository.GenerateStub<FormulaDependencyFactory>(); _formulaDependencies = new FormulaDependencies(_formulaDependencyFactory); }
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); }
public ExcelAddressExpression(string expression, ExcelDataProvider excelDataProvider, ParsingContext parsingContext, RangeAddressFactory rangeAddressFactory) : base(expression) { Require.That(excelDataProvider).Named("excelDataProvider").IsNotNull(); Require.That(parsingContext).Named("parsingContext").IsNotNull(); Require.That(rangeAddressFactory).Named("rangeAddressFactory").IsNotNull(); _excelDataProvider = excelDataProvider; _parsingContext = parsingContext; _rangeAddressFactory = rangeAddressFactory; }
public override CompileResult Execute(IEnumerable<FunctionArgument> arguments, ParsingContext context) { ValidateArguments(arguments, 1); var range = ArgToString(arguments, 0); if (Regex.IsMatch(range, RegexConstants.ExcelAddress)) { var factory = new RangeAddressFactory(context.ExcelDataProvider); var address = factory.Create(range); return CreateResult(address.ToRow - address.FromRow + 1, DataType.Integer); } throw new ArgumentException("Invalid range supplied"); }
public override CompileResult Execute(IEnumerable<FunctionArgument> arguments, ParsingContext context) { if (arguments == null || arguments.Count() == 0) { return CreateResult(context.Scopes.Current.Address.FromCol + 1, DataType.Integer); } var rangeAddress = ArgToString(arguments, 0); if (Regex.IsMatch(rangeAddress, RegexConstants.ExcelAddress)) { var factory = new RangeAddressFactory(context.ExcelDataProvider); var address = factory.Create(rangeAddress); return CreateResult(address.FromCol + 1, DataType.Integer); } throw new ArgumentException("An invalid argument was supplied"); }
public override CompileResult Execute(IEnumerable<FunctionArgument> arguments, ParsingContext context) { ValidateArguments(arguments, 2); var searchedValue = arguments.ElementAt(0).Value; var address = ArgToString(arguments, 1); var rangeAddressFactory = new RangeAddressFactory(context.ExcelDataProvider); var rangeAddress = rangeAddressFactory.Create(address); var matchType = GetMatchType(arguments); var args = new LookupArguments(searchedValue, address, 0, 0, false); var lookupDirection = GetLookupDirection(rangeAddress); var navigator = new LookupNavigator(lookupDirection, args, context); int? lastMatchResult = default(int?); do { var matchResult = IsMatch(navigator.CurrentValue, searchedValue); if (matchType == MatchType.ClosestBelow && matchResult >= 0) { if (!lastMatchResult.HasValue && matchResult > 0) { // TODO: error handling. This happens only if the first item is // below the searched value. } var index = matchResult == 0 ? navigator.Index + 1 : navigator.Index; return CreateResult(index, DataType.Integer); } if (matchType == MatchType.ClosestAbove && matchResult <= 0) { if (!lastMatchResult.HasValue && matchResult < 0) { // TODO: error handling. This happens only if the first item is // above the searched value } var index = matchResult == 0 ? navigator.Index + 1 : navigator.Index; return CreateResult(index, DataType.Integer); } if (matchType == MatchType.ExactMatch && matchResult == 0) { return CreateResult(navigator.Index + 1, DataType.Integer); } lastMatchResult = matchResult; } while (navigator.MoveNext()); return CreateResult(null, DataType.Integer); }
private CompileResult HandleSingleRange(IEnumerable<FunctionArgument> arguments, ParsingContext context) { var searchedValue = arguments.ElementAt(0).Value; Require.That(arguments.ElementAt(1).Value).Named("firstAddress").IsNotNull(); var firstAddress = ArgToString(arguments, 1); var rangeAddressFactory = new RangeAddressFactory(context.ExcelDataProvider); var address = rangeAddressFactory.Create(firstAddress); var nRows = address.ToRow - address.FromRow; var nCols = address.ToCol - address.FromCol; var lookupIndex = nCols + 1; var lookupDirection = LookupDirection.Vertical; if (nCols > nRows) { lookupIndex = nRows + 1; lookupDirection = LookupDirection.Horizontal; } var lookupArgs = new LookupArguments(searchedValue, firstAddress, lookupIndex, 0, true); var navigator = new LookupNavigator(lookupDirection, lookupArgs, context); return Lookup(navigator, lookupArgs); }
private CompileResult HandleTwoRanges(IEnumerable<FunctionArgument> arguments, ParsingContext context) { var searchedValue = arguments.ElementAt(0).Value; Require.That(arguments.ElementAt(1).Value).Named("firstAddress").IsNotNull(); Require.That(arguments.ElementAt(2).Value).Named("secondAddress").IsNotNull(); var firstAddress = ArgToString(arguments, 1); var secondAddress = ArgToString(arguments, 2); var rangeAddressFactory = new RangeAddressFactory(context.ExcelDataProvider); var address1 = rangeAddressFactory.Create(firstAddress); var address2 = rangeAddressFactory.Create(secondAddress); var lookupIndex = (address2.FromCol - address1.FromCol) + 1; var lookupOffset = address2.FromRow - address1.FromRow; var lookupDirection = GetLookupDirection(address1); if (lookupDirection == LookupDirection.Horizontal) { lookupIndex = (address2.FromRow - address1.FromRow) + 1; lookupOffset = address2.FromCol - address1.FromCol; } var lookupArgs = new LookupArguments(searchedValue, firstAddress, lookupIndex, lookupOffset, true); var navigator = new LookupNavigator(lookupDirection, lookupArgs, context); return Lookup(navigator, lookupArgs); }
private void Initialize() { var factory = new RangeAddressFactory(_parsingContext.ExcelDataProvider); _rangeAddress = factory.Create(_arguments.RangeAddress); _currentCol = _rangeAddress.FromCol; _currentRow = _rangeAddress.FromRow; SetCurrentValue(); }
public void Setup() { var provider = MockRepository.GenerateStub<ExcelDataProvider>(); _factory = new RangeAddressFactory(provider); }
public EPPlusExcelDataProvider(ExcelPackage package) { _package = package; _rangeAddressFactory = new RangeAddressFactory(this); }
public void Setup() { var provider = MockRepository.GenerateStub<ExcelDataProvider>(); provider.Stub(x => x.ExcelMaxRows).Return(ExcelMaxRows); _factory = new RangeAddressFactory(provider); }