public void Function_xElementsRefernceInPredicate_CorrectIndexing(string[] elements, string id, int expected)
        {
            AST ast       = Utilities.GetAstSkeleton();
            var condition = Utilities.GetConditionNode(elements, id);

            Utilities.AddFunctionNode(ast, Utilities.GetFunctionNode("func", elements.ToList(), condition));

            ReferenceHandler referenceHandler = Utilities.GetReferenceHandler();

            referenceHandler.InsertReferences(ast);

            var res = (IdentifierExpression)condition.Condition;

            Assert.AreEqual(expected, res.Reference);
        }
        public void FunctionCall_VariableNumberOfLocalReferences_CorrectIndexing(string[] functionNames, string functionId, int index)
        {
            AST ast       = Utilities.GetAstSkeleton();
            var condition = Utilities.GetConditionNode(Utilities.GetFunctionCallExpression(functionId));
            var func      = Utilities.GetFunctionNode("Global", functionNames.ToList(), condition);

            Utilities.AddFunctionNode(ast, func);

            ReferenceHandler referenceHandler = Utilities.GetReferenceHandler();

            referenceHandler.InsertReferences(ast);
            var res = (FunctionCallExpression)condition.ReturnExpression;

            Assert.AreEqual(index, res.LocalReference);
            Assert.AreEqual(0, res.GlobalReferences.Count);
        }
        public void Function_xElements_CorrectIndexing(string[] elements)
        {
            AST ast       = Utilities.GetAstSkeleton();
            var condition = Utilities.GetConditionNode(elements);

            Utilities.AddFunctionNode(ast, Utilities.GetFunctionNode("func", elements.ToList(), condition));

            ReferenceHandler referenceHandler = Utilities.GetReferenceHandler();

            referenceHandler.InsertReferences(ast);

            for (int i = 0; i < elements.Length; i++)
            {
                Assert.AreEqual(i, condition.Elements[i].Reference);
            }
        }
        public void Set_xBounds_AccesibleInPredicate(string elementId, string[] indecies, string id, int expected)
        {
            AST ast       = Utilities.GetAstSkeleton();
            var predicate = Utilities.GetIdentifierExpr(id);
            var setExpr   = Utilities.GetSetExpr(elementId, indecies.ToList(), indecies.ToList(), predicate);
            var condition = Utilities.GetConditionNode(setExpr);

            Utilities.AddFunctionNode(ast, Utilities.GetFunctionNode("func", condition));

            ReferenceHandler referenceHandler = Utilities.GetReferenceHandler();

            referenceHandler.InsertReferences(ast);
            var res = (IdentifierExpression)setExpr.Predicate;

            Assert.AreEqual(expected, res.Reference);
        }
        private static void AnonymousTests(string[] parameters, string[] anonymIds, string id, int expected)
        {
            AST ast    = Utilities.GetAstSkeleton();
            var anonym = Utilities.GetAnonymousFunction(anonymIds, id);
            var cond   = Utilities.GetConditionNode(anonym);
            var func   = Utilities.GetFunctionNode("func", parameters.ToList(), cond);

            Utilities.AddFunctionNode(ast, func);

            ReferenceHandler referenceHandler = Utilities.GetReferenceHandler();

            referenceHandler.InsertReferences(ast);
            var res = (IdentifierExpression)anonym.ReturnValue;

            Assert.AreEqual(expected, res.Reference);
        }
        public void FunctionCall_VariableNumberOfGlobalReferencesWithSameName_CorrectIndexing(string[] functionNames, string functionId, int expected)
        {
            AST ast = Utilities.GetAstSkeleton();
            FunctionCallExpression funcCallExpr = Utilities.GetFunctionCallExpression(functionId);

            Utilities.AddExportNode(ast, Utilities.GetExportNode(funcCallExpr));
            foreach (var functionName in functionNames)
            {
                Utilities.AddFunctionNode(ast, Utilities.GetFunctionNode(functionName));
            }

            ReferenceHandler referenceHandler = Utilities.GetReferenceHandler();

            referenceHandler.InsertReferences(ast);

            Assert.AreEqual(expected, funcCallExpr.GlobalReferences.Count);
        }
        public void Set_xBounds_SortBounds(string[] indecies, string[] bounds, bool doNotUse)
        {
            AST ast       = Utilities.GetAstSkeleton();
            var setExpr   = Utilities.GetSetExpr(indecies.ToList(), bounds.ToList());
            var condition = Utilities.GetConditionNode(setExpr);

            Utilities.AddFunctionNode(ast, Utilities.GetFunctionNode("func", condition));

            ReferenceHandler referenceHandler = Utilities.GetReferenceHandler();

            referenceHandler.InsertReferences(ast);
            var res = setExpr.Bounds;

            for (int i = 0; i < indecies.Length; i++)
            {
                Assert.AreEqual(indecies[i], res[i].Identifier);
            }
        }
        public void InsertReferences_AST_CorrectNumberOfCallsToBuildTable()
        {
            List <ExportNode> exports = new List <ExportNode> {
                new ExportNode(null, 0, 0),
                new ExportNode(null, 0, 0),
                new ExportNode(null, 0, 0)
            };
            List <FunctionNode> functions = new List <FunctionNode> {
                new FunctionNode("", null, null, null, 0, 0),
                new FunctionNode("", null, null, null, 0, 0),
                new FunctionNode("", null, null, null, 0, 0),
                new FunctionNode("", null, null, null, 0, 0)
            };
            AST ast = new AST(functions, exports, 0, 0);
            IReferenceHelper helper     = Substitute.For <IReferenceHelper>();
            ReferenceHandler refHandler = new ReferenceHandler(helper);

            refHandler.InsertReferences(ast);

            // helper.Received(1).BuildTable(Arg.Any<List<FunctionNode>>());
        }
        public void FunctionCall_VariableNumberOfBothReferences_CorrectCountIndexing(string[] global, string[] local, string functionId, int globalCount, bool hasLocal)
        {
            AST ast = Utilities.GetAstSkeleton();

            foreach (var functionName in global)
            {
                Utilities.AddFunctionNode(ast, Utilities.GetFunctionNode(functionName));
            }
            var condition = Utilities.GetConditionNode(Utilities.GetFunctionCallExpression(functionId));
            var func      = Utilities.GetFunctionNode("Global", local.ToList(), condition);

            Utilities.AddFunctionNode(ast, func);

            ReferenceHandler referenceHandler = Utilities.GetReferenceHandler();

            referenceHandler.InsertReferences(ast);
            var res = (FunctionCallExpression)condition.ReturnExpression;

            Assert.AreEqual(globalCount, res.GlobalReferences.Count);
            Assert.AreEqual(hasLocal, res.LocalReference != FunctionCallExpression.NO_LOCAL_REF);
        }