public void EvaluateUsingDefaultValuesForArguments() { IList<Parameter> parameters = new Parameter[] { new Parameter("a", 1, false), new Parameter("b", 2, false) }; ICommand body = new ReturnCommand(new BinaryOperatorExpression(new NameExpression("a"), new NameExpression("b"), BinaryOperator.Add)); DefinedFunction func = new DefinedFunction("foo", parameters, body, null); Assert.AreEqual(3, func.Apply(new BindingEnvironment(), null, null)); }
public void EvaluateUsingEmptyListArgument() { IList<Parameter> parameters = new Parameter[] { new Parameter("a", null, false), new Parameter("b", null, true) }; ICommand body = new ReturnCommand(new NameExpression("b")); DefinedFunction func = new DefinedFunction("foo", parameters, body, null); var result = func.Apply(new BindingEnvironment(), new object[] { 1 }, null); Assert.IsNotNull(result); Assert.IsInstanceOfType(result, typeof(IList<object>)); var list = (IList<object>)result; Assert.AreEqual(0, list.Count); }
public void ExecuteCompositeCommandWithReturn() { SetCommand command1 = new SetCommand("foo", new ConstantExpression("bar")); ReturnCommand command2 = new ReturnCommand(new ConstantExpression("spam")); SetCommand command3 = new SetCommand("one", new ConstantExpression(1)); CompositeCommand command = new CompositeCommand(); command.AddCommand(command1); command.AddCommand(command2); command.AddCommand(command3); Machine machine = new Machine(); BindingEnvironment environment = new BindingEnvironment(machine.Environment); command.Execute(environment); Assert.AreEqual("bar", environment.GetValue("foo")); Assert.IsNull(environment.GetValue("one")); Assert.IsTrue(environment.HasReturnValue()); Assert.AreEqual("spam", environment.GetReturnValue()); Assert.IsNotNull(command.Commands); }
private ICommand CompileReturnCommand() { if (this.TryPeekCompileEndOfCommand()) { this.CompileEndOfCommand(); return new ReturnCommand(null); } ICommand command = new ReturnCommand(this.CompileExpression()); this.CompileEndOfCommand(); return command; }
public void RaiseWhenMultipleValuesForKeywordArgument() { IList<Parameter> parameters = new Parameter[] { new Parameter("a", 1, false), new Parameter("b", 2, false) }; ICommand body = new ReturnCommand(new BinaryOperatorExpression(new NameExpression("a"), new NameExpression("b"), BinaryOperator.Add)); DefinedFunction func = new DefinedFunction("foo", parameters, body, null); try { func.Apply(new BindingEnvironment(), new object[] { 1 }, new Dictionary<string, object> { { "a", 2 } }); Assert.Fail("Exception expected"); } catch (Exception ex) { Assert.IsInstanceOfType(ex, typeof(TypeError)); Assert.AreEqual("foo() got multiple values for keyword argument 'a'", ex.Message); } }
public void EvaluateUsingTwoNamedArguments() { IList<Parameter> parameters = new Parameter[] { new Parameter("a", 1, false), new Parameter("b", 2, false) }; ICommand body = new ReturnCommand(new BinaryOperatorExpression(new NameExpression("a"), new NameExpression("b"), BinaryOperator.Add)); DefinedFunction func = new DefinedFunction("foo", parameters, body, null); var result = func.Apply(new BindingEnvironment(), null, new Dictionary<string, object> { { "a", 2 }, { "b", 3 } }); Assert.IsNotNull(result); Assert.AreEqual(5, result); }