Exemple #1
0
        /// <summary>
        /// Initializes resolvers.
        /// </summary>
        static ModelResolvers()
        {
            Mock <ExpressionResolver> exprResolverMock = new Mock <ExpressionResolver>();

            exprResolverMock.Setup(o => o(null)).Returns(() => { return(new Expression()); });
            exprResolverMock.Setup(o => o(It.IsNotNull <IExpression>())).Returns((IExpression parentExpr) => { return(new Expression(parentExpr)); });

            Mock <RuleExpressionResolver> ruleExprResolverMock = new Mock <RuleExpressionResolver>();

            ruleExprResolverMock.Setup(o => o(It.IsNotNull <IExpression>(), It.IsAny <IRuleset>(), It.IsAny <string>(), It.IsAny <int?>()))
            .Returns((IExpression expression, IRuleset containingRuleset, string errorCode, int?errorLevel) => { return(new RuleExpression(expression, containingRuleset, errorCode, errorLevel)); });

            Mock <JoinExpressionResolver> joinExprResolverMock = new Mock <JoinExpressionResolver>();

            joinExprResolverMock.Setup(o => o(It.IsNotNull <IExpression>())).Returns((IExpression expression) => { return(new JoinExpression(expression)); });

            Mock <DataStructureResolver> dsResolverMock = new Mock <DataStructureResolver>();

            dsResolverMock.Setup(o => o(null, null, null)).Returns(() => { return(new DataStructure()); });
            dsResolverMock.Setup(o => o(It.IsNotNull <string>(), It.IsNotNull <ComponentType?>(), It.IsNotNull <BasicDataType?>()))
            .Returns((string compName, ComponentType? compType, BasicDataType? dataType) => { return(new DataStructure(compName, (ComponentType)compType, (BasicDataType)dataType)); });

            Mock <TransformationSchemaResolver> schemaResolverMock = new Mock <TransformationSchemaResolver>();

            schemaResolverMock.Setup(o => o()).Returns(() => { return(new TransformationSchema()); });

            ModelResolvers.ExprResolver     = exprResolverMock.Object;
            ModelResolvers.RuleExprResolver = ruleExprResolverMock.Object;
            ModelResolvers.JoinExprResolver = joinExprResolverMock.Object;
            ModelResolvers.DsResolver       = dsResolverMock.Object;
            ModelResolvers.SchemaResolver   = schemaResolverMock.Object;
            ModelResolvers.OperatorResolver = ModelResolvers.InitOperatorResolver();
        }
Exemple #2
0
        /// <summary>
        /// Folds expression from given expressions.
        /// </summary>
        /// <param name="expressions">The expressions.</param>
        /// <returns>The expression.</returns>
        public static IExpression FoldExpression(ICollection <IExpression> expressions)
        {
            IExpression expr = ModelResolvers.ExprResolver();

            for (int i = 0; i < expressions.ToArray().Length; i++)
            {
                expr.AddOperand($"ds_{i + 1}", expressions.ToArray()[i]);
            }

            return(expr);
        }
Exemple #3
0
        /// <summary>
        /// Initializes expression factory.
        /// </summary>
        static TestExprFactory()
        {
            Mock <IExpressionFactory> exprFactoryMock = new Mock <IExpressionFactory>();

            exprFactoryMock.Setup(o => o.GetExpression(It.IsAny <string>(), ExpressionFactoryNameTarget.ResultName))
            .Returns((string name, ExpressionFactoryNameTarget field) =>
            {
                IExpression expr = ModelResolvers.ExprResolver();
                expr.ResultName  = name;
                return(expr);
            });

            exprFactoryMock.Setup(o => o.GetExpression(It.IsAny <string>(), ExpressionFactoryNameTarget.OperatorSymbol))
            .Returns((string name, ExpressionFactoryNameTarget field) =>
            {
                IExpression expr        = ModelResolvers.ExprResolver();
                expr.OperatorDefinition = ModelResolvers.OperatorResolver(name);
                expr.ResultName         = expr.OperatorDefinition.Name;
                return(expr);
            });

            TestExprFactory._exprFactory = exprFactoryMock.Object;
        }
Exemple #4
0
        /// <summary>
        /// Gets dataset expression by a given components colection.
        /// </summary>
        /// <param name="components">The components collection.</param>
        /// <returns>The expression.</returns>
        public static IExpression GetDatasetExpr(params KeyValuePair <ComponentType, BasicDataType>[] components)
        {
            string      componentName = string.Empty;
            IExpression expr          = ModelResolvers.ExprResolver();

            expr.Structure = ModelResolvers.DsResolver();

            for (int i = 0; i < components.Length; i++)
            {
                switch (components[i].Key)
                {
                case ComponentType.Identifier:
                    componentName = "Id" + (expr.Structure.Identifiers.Count + 1);
                    expr.Structure.Identifiers.Add(new StructureComponent(components[i].Value, componentName));
                    break;

                case ComponentType.Measure:
                    componentName = "Me" + (expr.Structure.Measures.Count + 1);
                    expr.Structure.Measures.Add(new StructureComponent(components[i].Value, componentName));
                    break;

                case ComponentType.NonViralAttribute:
                    componentName = "At" + (expr.Structure.NonViralAttributes.Count + expr.Structure.ViralAttributes.Count + 1);
                    expr.Structure.NonViralAttributes.Add(new StructureComponent(components[i].Value, componentName));
                    break;

                case ComponentType.ViralAttribute:
                    componentName = "At" + (expr.Structure.NonViralAttributes.Count + expr.Structure.ViralAttributes.Count + 1);
                    expr.Structure.ViralAttributes.Add(new StructureComponent(components[i].Value, componentName));
                    break;

                default: break;
                }
            }

            return(expr);
        }
Exemple #5
0
        /// <summary>
        /// Gets the expression by testing data types.
        /// </summary>
        /// <param name="noChildren">Specifies if returning expression has to have descendant expressions.</param>
        /// <param name="types">The testing data types.</param>
        /// <returns>The expression.</returns>
        private static IExpression GetExpression(bool noChildren, params TestExprType[] types)
        {
            if (noChildren && types.Length != 1)
            {
                throw new Exception();
            }

            IExpression expr = ModelResolvers.ExprResolver();

            for (int i = 0; i < types.Length; i++)
            {
                IExpression operand = ModelResolvers.ExprResolver();
                switch (types[i])
                {
                case TestExprType.IntsDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Integer));
                    break;

                case TestExprType.NumbersDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Number),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Number));
                    break;

                case TestExprType.StringsDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.String),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.String));
                    break;

                case TestExprType.BoolsDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Boolean),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Boolean));
                    break;

                case TestExprType.TimesDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Time),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Time));
                    break;

                case TestExprType.DatesDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Date),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Date));
                    break;

                case TestExprType.TimePeriodsDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.TimePeriod),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.TimePeriod));
                    break;

                case TestExprType.DurationsDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Duration),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Duration));
                    break;

                case TestExprType.NonesDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.None),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.None));
                    break;

                case TestExprType.MixedIntNumDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Number));
                    break;

                case TestExprType.MixedNumStrDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Number),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.String));
                    break;

                case TestExprType.MixedNoneIntDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.None),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Integer));
                    break;

                case TestExprType.MixedNoneNumDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.None),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Number));
                    break;

                case TestExprType.MixedNoneStrDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.None),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.String));
                    break;

                case TestExprType.MixedNoneBoolDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.None),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Boolean));
                    break;

                case TestExprType.MixedNoneTimeDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.None),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Time));
                    break;

                case TestExprType.MixedNoneDateDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.None),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Date));
                    break;

                case TestExprType.MixedNoneTimePerDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.None),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.TimePeriod));
                    break;

                case TestExprType.MixedNoneDurDataset:
                    operand =
                        TestExprFactory.GetDatasetExpr(
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Identifier, BasicDataType.Integer),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.None),
                            new KeyValuePair <ComponentType, BasicDataType>(ComponentType.Measure, BasicDataType.Duration));
                    break;

                default:
                    operand.Structure = ModelResolvers.DsResolver("const", ComponentType.Measure, (BasicDataType)types[i]);
                    break;
                }

                if (!noChildren)
                {
                    expr.AddOperand($"ds_{i + 1}", operand);
                }
                else
                {
                    expr = operand;
                }
            }

            return(expr);
        }