Ejemplo n.º 1
0
        public void testCreateTerminalVariable()
        {
            TerminalParameterVariableCreateRequest createRequest = new TerminalParameterVariableCreateRequest();
            ParameterVariable parameterVariable1 = new ParameterVariable();

            parameterVariable1.Key         = "testCreateVariable1Api3";
            parameterVariable1.Value       = "testApiCreate3";
            parameterVariable1.PackageName = "com.pax.android.demoapp";
            parameterVariable1.Remarks     = "今日头条app testCreateApi3";

            ParameterVariable parameterVariable2 = new ParameterVariable();

            parameterVariable2.Key         = "testCreateVariable1Api4";
            parameterVariable2.Value       = "testApiCreate4";
            parameterVariable2.PackageName = "com.pax.android.demoapp";
            parameterVariable2.Remarks     = "今日头条app testCreateApi4";

            List <ParameterVariable> variableList = new List <ParameterVariable>();

            variableList.Add(parameterVariable1);
            variableList.Add(parameterVariable2);
            createRequest.TID          = "JDEW5LCP";
            createRequest.VariableList = variableList;
            Result <String> createResult = API.CreateTerminalVariable(createRequest);

            _logger.DebugFormat("Result=\n{0}", JsonConvert.SerializeObject(createResult));
            Assert.AreEqual(createResult.BusinessCode, 0);
        }
Ejemplo n.º 2
0
        public LambdaAction(ParseInfo parseInfo, Scope scope, DeltinScriptParser.LambdaContext context)
        {
            Scope lambdaScope = scope.Child();

            RecursiveCallHandler = new LambdaRecursionHandler(this);
            CallInfo             = new CallInfo(RecursiveCallHandler, parseInfo.Script);

            // Get the lambda parameters.
            Parameters   = new Var[context.define().Length];
            InvokedState = new SubLambdaInvoke[Parameters.Length];
            for (int i = 0; i < Parameters.Length; i++)
            {
                InvokedState[i] = new SubLambdaInvoke();
                // TODO: Make custom builder.
                Parameters[i] = new ParameterVariable(lambdaScope, new DefineContextHandler(parseInfo, context.define(i)), InvokedState[i]);
            }

            CodeType[] argumentTypes = Parameters.Select(arg => arg.CodeType).ToArray();

            // context.block() will not be null if the lambda is a block.
            // () => {}
            if (context.block() != null)
            {
                // Parse the block.
                Block = new BlockAction(parseInfo.SetCallInfo(CallInfo), lambdaScope, context.block());

                // Validate the block.
                BlockTreeScan validation = new BlockTreeScan(parseInfo, Block, "lambda", DocRange.GetRange(context.INS()));
                validation.ValidateReturns();

                if (validation.ReturnsValue)
                {
                    LambdaType    = new ValueBlockLambda(validation.ReturnType, argumentTypes);
                    MultiplePaths = validation.MultiplePaths;
                }
                else
                {
                    LambdaType = new BlockLambda(argumentTypes);
                }
            }
            // context.expr() will not be null if the lambda is an expression.
            // () => 2 * x
            else if (context.expr() != null)
            {
                // Get the lambda expression.
                Expression = parseInfo.SetCallInfo(CallInfo).GetExpression(lambdaScope, context.expr());
                LambdaType = new MacroLambda(Expression.Type(), argumentTypes);
            }

            // Add so the lambda can be recursive-checked.
            parseInfo.TranslateInfo.RecursionCheck(CallInfo);

            // Add hover info
            parseInfo.Script.AddHover(DocRange.GetRange(context.INS()), new MarkupBuilder().StartCodeLine().Add(LambdaType.GetName()).EndCodeLine().ToString());
        }
 private static TVec GetVariables(IDictionary <IEditParameter, ParameterVariable[]> paramsToVars, IEditParameter editParameter)
 {
     ParameterVariable[] vars;
     if (!paramsToVars.TryGetValue(editParameter, out vars))
     {
         vars = new ParameterVariable[editParameter.Dimension];
         for (int i = 0; i < editParameter.Dimension; i++)
         {
             vars[i] = new ParameterVariable(editParameter, i);
         }
         paramsToVars.Add(editParameter, vars);
     }
     return(new TVec(vars));
 }
Ejemplo n.º 4
0
        public LambdaAction(ParseInfo parseInfo, Scope scope, DeltinScriptParser.LambdaContext context)
        {
            Scope lambdaScope = scope.Child();

            // Get the lambda parameters.
            Parameters = new Var[context.define().Length];
            for (int i = 0; i < Parameters.Length; i++)
            {
                // TODO: Make custom builder.
                Parameters[i] = new ParameterVariable(lambdaScope, new DefineContextHandler(parseInfo, context.define(i)));
            }

            CodeType[] argumentTypes = Parameters.Select(arg => arg.CodeType).ToArray();

            // context.block() will not be null if the lambda is a block.
            // () => {}
            if (context.block() != null)
            {
                // Parse the block.
                Block = new BlockAction(parseInfo, lambdaScope, context.block());

                // Validate the block.
                BlockTreeScan validation = new BlockTreeScan(parseInfo, Block, "lambda", DocRange.GetRange(context.INS()));
                validation.ValidateReturns();

                if (validation.ReturnsValue)
                {
                    LambdaType    = new ValueBlockLambda(validation.ReturnType, argumentTypes);
                    MultiplePaths = validation.MultiplePaths;
                }
                else
                {
                    LambdaType = new BlockLambda(argumentTypes);
                }
            }
            // context.expr() will not be null if the lambda is an expression.
            // () => 2 * x
            else if (context.expr() != null)
            {
                // Get the lambda expression.
                Expression = parseInfo.GetExpression(lambdaScope, context.expr());
                LambdaType = new MacroLambda(Expression.Type(), argumentTypes);
            }
        }
        public LambdaAction(ParseInfo parseInfo, Scope scope, LambdaExpression context)
        {
            _context             = context;
            _lambdaScope         = scope.Child();
            _parseInfo           = parseInfo;
            RecursiveCallHandler = new LambdaRecursionHandler(this);
            CallInfo             = new CallInfo(RecursiveCallHandler, parseInfo.Script);
            This = scope.GetThis();

            _isExplicit = context.Parameters.Any(p => p.Type != null);
            var parameterState = context.Parameters.Count == 0 || _isExplicit ? ParameterState.CountAndTypesKnown : ParameterState.CountKnown;

            // Get the lambda parameters.
            Parameters     = new Var[context.Parameters.Count];
            InvokedState   = new SubLambdaInvoke[Parameters.Length];
            _argumentTypes = new CodeType[Parameters.Length];

            for (int i = 0; i < Parameters.Length; i++)
            {
                if (_isExplicit && context.Parameters[i].Type == null)
                {
                    parseInfo.Script.Diagnostics.Error("Inconsistent lambda parameter usage; parameter types must be all explicit or all implicit", context.Parameters[i].Range);
                }

                InvokedState[i]   = new SubLambdaInvoke();
                Parameters[i]     = new ParameterVariable(_lambdaScope, new LambdaContextHandler(parseInfo, context.Parameters[i]), InvokedState[i]);
                _argumentTypes[i] = Parameters[i].CodeType;
            }

            new CheckLambdaContext(
                parseInfo,
                this,
                "Cannot determine lambda in the current context",
                context.Range,
                parameterState
                ).Check();

            // Add hover info
            // parseInfo.Script.AddHover(context.Arrow.Range, new MarkupBuilder().StartCodeLine().Add(LambdaType.GetName()).EndCodeLine().ToString());
        }