public void Reduce_FunctionWithConstantParameters() { _runtime .Setup(mock => mock.FindAndCall("f", It.Is <IExecutionContext>(context => context.Line == 0 && context.Column == 0 && context.Count == 2 && context[0].Equals(new IntValue(1)) && context[1].Equals(new IntValue(2)) ))) .Returns(new IntValue(3)); var expr = new FunctionCallExpression(0, 0, "f", new [] { new ConstantExpression(0, 1, new IntValue(1)), new ConstantExpression(0, 3, new IntValue(2)), }); var reduced = expr.Accept(_visitor); Assert.IsInstanceOfType(reduced, typeof(ConstantExpression)); var constant = (ConstantExpression)reduced; Assert.AreEqual(new IntValue(3), constant.Value); Assert.AreEqual(0, constant.Line); Assert.AreEqual(0, constant.Column); }
public void Visit(FunctionCallExpression functionCallExpression) { if (_innerVisitor != null) { functionCallExpression.Accept(_innerVisitor); } foreach (var p in functionCallExpression.Parameters) { p.Accept(this); } }
public void Reduce_FunctionWithSomeConstantParameters() { _runtime .Setup(mock => mock.FindAndCall("+", It.Is <IExecutionContext>(context => context.Line == 0 && context.Column == 3 && context.Count == 2 && context[0].Equals(new IntValue(1)) && context[1].Equals(new IntValue(2)) ))) .Returns(new IntValue(3)); var expr = new FunctionCallExpression(0, 0, "f", new ValueExpression[] { new AdditionExpression(0, 3, new ConstantExpression(0, 2, new IntValue(1)), new ConstantExpression(0, 4, new IntValue(2))), new AttributeAccessExpression(0, 5, "a"), }); var reduced = expr.Accept(_visitor); Assert.IsInstanceOfType(reduced, typeof(FunctionCallExpression)); var parameters = ((FunctionCallExpression)reduced).Parameters; Assert.AreEqual(2, parameters.Count); Assert.AreEqual(new IntValue(3), ((ConstantExpression)parameters[0]).Value); Assert.AreEqual(0, parameters[0].Line); Assert.AreEqual(3, parameters[0].Column); Assert.AreEqual("a", ((AttributeAccessExpression)parameters[1]).Name); Assert.AreEqual(0, parameters[1].Line); Assert.AreEqual(5, parameters[1].Column); }