public void Build_CrossJoinWithUsinngBranch_ThrowsException()
        {
            JoinBuilder joinBuilder = new JoinBuilder(ModelResolvers.JoinExprResolver, this.joinBranches);

            joinBuilder.AddMainExpr(TestExprFactory.GetExpression("join", ExpressionFactoryNameTarget.OperatorSymbol));
            joinBuilder.AddBranch("ds", ModelResolvers.ExprResolver());
            joinBuilder.AddBranch("using", ModelResolvers.ExprResolver());
            joinBuilder.Branches["main"].OperatorDefinition.Keyword = "cross";

            Assert.ThrowsAny <VtlOperatorError>(() => { joinBuilder.Build(); });
        }
        public void AddMainExpr_ScalarExpr_ThrowsException()
        {
            JoinBuilder joinBuilder = new JoinBuilder(ModelResolvers.JoinExprResolver, this.joinBranches);

            IExpression mainExpr = TestExprFactory.GetExpression("+", ExpressionFactoryNameTarget.OperatorSymbol);

            mainExpr.ResultName = "main";
            mainExpr.Structure  = ModelResolvers.DsResolver();
            mainExpr.Structure.Measures.Add(new StructureComponent(BasicDataType.Integer));

            Assert.ThrowsAny <Exception>(() => { joinBuilder.AddMainExpr(mainExpr); });
        }
        public void Build_WrongBranchesCombination_ThrowsException(params string[] branches)
        {
            JoinBuilder joinBuilder = new JoinBuilder(ModelResolvers.JoinExprResolver, this.joinBranches);

            joinBuilder.AddMainExpr(TestExprFactory.GetExpression("join", ExpressionFactoryNameTarget.OperatorSymbol));

            foreach (string branch in branches)
            {
                joinBuilder.AddBranch(branch, TestExprFactory.GetExpression("opt", ExpressionFactoryNameTarget.OperatorSymbol));
            }

            Assert.ThrowsAny <VtlOperatorError>(() => { joinBuilder.Build(); });
        }
        public void AddMainExpr_JoinExpr_AddsMainExpr()
        {
            JoinBuilder joinBuilder = new JoinBuilder(ModelResolvers.JoinExprResolver, this.joinBranches);

            IExpression mainExpr = TestExprFactory.GetExpression("join", ExpressionFactoryNameTarget.OperatorSymbol);

            mainExpr.ResultName = "main";
            mainExpr.Structure  = ModelResolvers.DsResolver();
            mainExpr.Structure.Identifiers.Add(new StructureComponent(BasicDataType.Integer));
            mainExpr.Structure.Measures.Add(new StructureComponent(BasicDataType.Integer));

            joinBuilder.AddMainExpr(mainExpr);

            Assert.Equal(mainExpr.ResultName, joinBuilder.Branches["main"].ResultName);
            Assert.Equal(mainExpr.OperatorSymbol, joinBuilder.Branches["main"].OperatorSymbol);
            Assert.True(mainExpr.Structure.EqualsObj(joinBuilder.Branches["main"].Structure));
            Assert.False(joinBuilder.IsCleared);
        }
        public void AddMainExpr_NonScalarConvertableToJoinExpr_AddsMainExpr()
        {
            JoinBuilder joinBuilder = new JoinBuilder(ModelResolvers.JoinExprResolver, this.joinBranches);

            foreach (string symbol in JoinOperators.Operators)
            {
                IExpression mainExpr = TestExprFactory.GetExpression(symbol, ExpressionFactoryNameTarget.OperatorSymbol);
                mainExpr.ResultName = "main";
                mainExpr.Structure  = ModelResolvers.DsResolver();
                mainExpr.Structure.Identifiers.Add(new StructureComponent(BasicDataType.Integer));
                mainExpr.Structure.Measures.Add(new StructureComponent(BasicDataType.Integer));

                joinBuilder.AddMainExpr(mainExpr);

                Assert.Equal(mainExpr, joinBuilder.Branches["main"]);
                Assert.False(joinBuilder.IsCleared);
            }
        }
        public void Build_CorrectBranches_JoinExpr(params string[] branches)
        {
            JoinBuilder joinBuilder = new JoinBuilder(ModelResolvers.JoinExprResolver, this.joinBranches);

            joinBuilder.AddMainExpr(TestExprFactory.GetExpression("join", ExpressionFactoryNameTarget.OperatorSymbol));

            Assert.Empty(joinBuilder.Branches["main"].OperandsCollection);

            foreach (string branch in branches)
            {
                joinBuilder.AddBranch(branch, TestExprFactory.GetExpression("opt", ExpressionFactoryNameTarget.OperatorSymbol));
            }

            IJoinExpression result = joinBuilder.Build();

            Assert.Equal(branches.Length, joinBuilder.Branches["main"].OperandsCollection.Count);
            Assert.Equal(branches.Length, result.OperandsCollection.Count);

            foreach (string branch in branches)
            {
                Assert.True(joinBuilder.Branches["main"].Operands.ContainsKey(branch));
                Assert.True(result.Operands.ContainsKey(branch));
            }
        }