Anterior Post
Primer Post de la Serie
Esta vez, quiero agregar una pieza que falta: un composite command. El intérprete necesita una manera de ejecutar una lista de comandos, en cualquier lugar donde haya un comando: en un if/then, en el if/else, en el while, etc… Primero, escribí un test (esta version de abajo no es la versión inicial, es la final actual):
[TestMethod]
public void CreateAndEvaluateCompositeCommand()
{
BindingEnvironment environment = new BindingEnvironment();
environment.SetValue("a", 0);
ICommand add1 = this.MakeAddCommand("a", "a", 1);
ICommand add2 = this.MakeAddCommand("a", "a", 2);
CompositeCommand cmd = new CompositeCommand(new ICommand[] { add1, add2 });
Assert.IsNotNull(cmd.Commands);
Assert.AreEqual(2, cmd.Commands.Count);
Assert.AreEqual(add1, cmd.Commands.First());
Assert.AreEqual(add2, cmd.Commands.Skip(1).First());
cmd.Execute(environment);
Assert.AreEqual(3, environment.GetValue("a"));
}
private ICommand MakeAddCommand(string target, string source, int number)
{
IExpression add = new BinaryArithmeticBLOCKED EXPRESSION;
}
El código mostrado es la versión ACTUAL. Durante el desarrollo, y usando TDD, escribí el código de a pasos cortos, y también apliqué refactoring. Pero la lección es: usar los tests para guiar nuestro desarrollo.
Todos los tests en verde:
Buen code coverage:
Pueden bajar la versión actual desde from InterpreterStep09.zip. Si quieren ver todos los steps, sigo enviando mi código a trunk/Interpreter en mi Google Code Project AjCodeKatas.
Próximos pasos: comando foreach, comando for, declaración de funciones, etc…
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez