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); } } }
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++; }
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; } }
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; } }
public override bool InvokeBefore(IInvokeInfo info, params object[] args) { base.InvokeBefore(info, args); return(false); }
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; }