public CallMethodAction(ParseInfo parseInfo, Scope scope, FunctionExpression methodContext, bool usedAsExpression, Scope getter)
        {
            _parseInfo        = parseInfo;
            _usedAsExpression = usedAsExpression;

            // Get the invoke target.
            var resolveInvoke = new ResolveInvokeInfo();
            var target        = parseInfo.SetInvokeInfo(resolveInvoke).GetExpression(scope, methodContext.Target, getter: getter);

            // Get the invoke info.
            IInvokeInfo invokeInfo = resolveInvoke.WasResolved ? resolveInvoke.InvokeInfo : target.Type()?.InvokeInfo;

            if (invokeInfo != null)
            {
                Result = invokeInfo.Invoke(new InvokeData(parseInfo, methodContext, target, scope, getter, usedAsExpression));
            }
            // If the target is not invocable and the target is not a missing element, add error.
            else
            {
                DiscardParameters(parseInfo, getter, methodContext.Parameters);
                if (target is MissingElementAction == false)
                {
                    parseInfo.Script.Diagnostics.Error("Method name expected", methodContext.Target.Range);
                }
            }
        }
Exemplo n.º 2
0
 public override void InvokeException(IInvokeInfo info, Exception e, params object[] args)
 {
     Assert.IsNotNull(info);
     Assert.IsNotNull(e);
     Assert.AreEqual(info.Name, "TestException");
     Assert.AreEqual(e.Message, "test exception");
     Assert.AreEqual(args.Length, 0);
     base.InvokeException(info, e, args);
     checkException++;
 }
Exemplo n.º 3
0
            public override void InvokeAfter(IInvokeInfo info, object returnValue, params object[] args)
            {
                Assert.IsNotNull(info);
                var nodeInfo = getNodeInfo((INode)info.Target);

                Assert.IsNotNull(nodeInfo);
                base.InvokeAfter(info, returnValue, args);
                switch (info.Name)
                {
                case "OnParentChanged":
                    nodeInfo.parentChangedCount++;
                    break;

                case "OnChildAdd":
                    nodeInfo.addChildCount++;
                    break;

                case "OnChildRemove":
                    nodeInfo.removeChildCount++;
                    break;
                }
            }
Exemplo n.º 4
0
        public override void InvokeAfter(IInvokeInfo info, object returnValue, params object[] args)
        {
            Assert.IsNotNull(info);
            switch (info.Name)
            {
            case "Test11":
                Assert.AreEqual(args.Length, 0);
                Assert.IsNull(returnValue);
                checkAfter++;
                break;

            case "Test21":
                Assert.AreEqual(args.Length, 0);
                Assert.AreEqual(returnValue.GetType(), typeof(int));
                Assert.AreEqual(returnValue, 0);
                checkAfter++;
                break;

            case "Test31":
                Assert.AreEqual(args.Length, 0);
                Assert.IsNull(returnValue);
                checkAfter++;
                break;

            case "Test12":
                Assert.AreEqual(args.Length, 2);
                Assert.AreEqual(args[0].GetType(), typeof(int));
                Assert.AreEqual(args[1].GetType(), typeof(string));
                Assert.AreEqual(args[0], 1);
                Assert.AreEqual(args[1], "1");
                Assert.IsNull(returnValue);
                checkAfter++;
                break;

            case "Test22":
                Assert.AreEqual(args.Length, 2);
                Assert.AreEqual(args[0].GetType(), typeof(int));
                Assert.AreEqual(args[1].GetType(), typeof(string));
                Assert.AreEqual(args[0], 2);
                Assert.AreEqual(args[1], "2");
                Assert.AreEqual(returnValue.GetType(), typeof(int));
                Assert.AreEqual(returnValue, 0);
                checkAfter++;
                break;

            case "Test32":
                Assert.AreEqual(args.Length, 2);
                Assert.AreEqual(args[0].GetType(), typeof(int));
                Assert.AreEqual(args[1].GetType(), typeof(string));
                Assert.AreEqual(args[0], 3);
                Assert.AreEqual(args[1], "3");
                Assert.IsNull(returnValue);
                checkAfter++;
                break;

            case "TestException":
                Assert.AreEqual(args.Length, 0);
                checkAfter++;
                break;

            default:
                if (info.Name.StartsWith("get_"))
                {
                    Assert.AreEqual(args.Length, 0);
                    Assert.AreEqual(returnValue.GetType(), typeof(bool));
                    checkAfter++;
                }
                else if (info.Name.StartsWith("set_"))
                {
                    Assert.AreEqual(args.Length, 1);
                    Assert.AreEqual(args[0].GetType(), typeof(bool));
                    Assert.IsTrue((bool)args[0]);
                    Assert.IsNull(returnValue);
                    checkAfter++;
                }
                else
                {
                    Assert.Fail();
                }
                break;
            }
        }
Exemplo n.º 5
0
 public override bool InvokeBefore(IInvokeInfo info, params object[] args)
 {
     base.InvokeBefore(info, args);
     return(false);
 }
Exemplo n.º 6
0
        public override bool InvokeBefore(IInvokeInfo info, params object[] args)
        {
            Assert.IsNotNull(info);
            var ret = base.InvokeBefore(info, args);

            switch (info.Name)
            {
            case "Test11":
            case "Test21":
            case "Test31":
                Assert.AreEqual(args.Length, 0);
                checkBefore++;
                break;

            case "Test12":
                Assert.AreEqual(args.Length, 2);
                Assert.AreEqual(args[0].GetType(), typeof(int));
                Assert.AreEqual(args[0], 1);
                Assert.AreEqual(args[1], "1");
                checkBefore++;
                break;

            case "Test22":
                Assert.AreEqual(args.Length, 2);
                Assert.AreEqual(args[0].GetType(), typeof(int));
                Assert.AreEqual(args[0], 2);
                Assert.AreEqual(args[1], "2");
                checkBefore++;
                break;

            case "Test32":
                Assert.AreEqual(args.Length, 2);
                Assert.AreEqual(args[0].GetType(), typeof(int));
                Assert.AreEqual(args[0], 3);
                Assert.AreEqual(args[1], "3");
                checkBefore++;
                break;

            case "TestException":
                checkBefore++;
                break;

            default:
                if (info.Name.StartsWith("get_"))
                {
                    Assert.AreEqual(args.Length, 0);
                    checkBefore++;
                }
                else if (info.Name.StartsWith("set_"))
                {
                    Assert.AreEqual(args.Length, 1);
                    Assert.AreEqual(args[0].GetType(), typeof(bool));
                    Assert.IsTrue((bool)args[0]);
                    checkBefore++;
                }
                else
                {
                    Assert.Fail();
                }
                break;
            }
            return(ret);
        }
 public void Resolve(IInvokeInfo invokeInfo)
 {
     InvokeInfo  = invokeInfo;
     WasResolved = true;
 }