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;
 }
Esempio n. 5
0
 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");
 }
Esempio n. 6
0
 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");
 }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
 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);
 }
Esempio n. 9
0
 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);
 }
Esempio n. 10
0
 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);
 }