public void ExecuteWhileCommand()
{
IExpression incrementX = new ArithmeticBinaryExpression(ArithmeticOperator.Add, new ConstantExpression(1), new VariableExpression("a"));
IExpression decrementY = new ArithmeticBinaryExpression(ArithmeticOperator.Subtract, new VariableExpression("b"), new ConstantExpression(1));
ICommand setX = new SetVariableCommand("a", incrementX);
ICommand setY = new SetVariableCommand("b", decrementY);
List<ICommand> commands = new List<ICommand>();
commands.Add(setX);
commands.Add(setY);
ICommand command = new CompositeCommand(commands);
IExpression yexpr = new VariableExpression("b");
WhileCommand whilecmd = new WhileCommand(yexpr, command);
Context context = new Context();
context.SetValue("a", 0);
context.SetValue("b", 5);
whilecmd.Execute(context);
Assert.AreEqual(0, context.GetValue("b"));
Assert.AreEqual(5, context.GetValue("a"));
}