public void TestDefinition() { var def = new ArrayPushFunction(); Assert.That(def.Name.Name, Is.EqualTo("array_push")); Assert.That(def.Parameters.Count, Is.EqualTo(2)); Assert.That(def.Parameters.ElementAt(0).Name, Is.EqualTo("array")); Assert.That(def.Parameters.ElementAt(1).Name, Is.EqualTo("value")); }
private void Evaluate(string input, InterpreterScope scope, string expectedError = null) { var funcDef = new ArrayPushFunction(); var expression = ExpressionBase.Parse(new PositionalTokenizer(Tokenizer.CreateTokenizer(input))); Assert.That(expression, Is.InstanceOf <FunctionCallExpression>()); var funcCall = (FunctionCallExpression)expression; ExpressionBase error; var parameterScope = funcCall.GetParameters(funcDef, scope, out error); if (expectedError == null) { Assert.That(error, Is.Null); ExpressionBase result; Assert.That(funcDef.Evaluate(parameterScope, out result), Is.True); Assert.That(result, Is.Null); } else { if (error == null) { Assert.That(funcDef.Evaluate(parameterScope, out error), Is.False); } Assert.That(error, Is.InstanceOf <ParseErrorExpression>()); var parseError = (ParseErrorExpression)error; while (parseError.InnerError != null) { parseError = parseError.InnerError; } Assert.That(parseError.Message, Is.EqualTo(expectedError)); } }