/// <summary> /// Adds a new command to the end of this composite command</summary> /// <param name="command">Command to add to the end</param> public void Add(Command command) { CompositeCommand compositeCommand = command as CompositeCommand; if (compositeCommand != null) { m_commands.AddRange(compositeCommand.m_commands); } else { m_commands.Add(command); } }
public void TestCompositeCommand() { PositiveInt x = new PositiveInt(); CompositeCommand composite1 = new CompositeCommand("1", new Command[] { new IncCommand(x), new IncCommand(x) }); composite1.Do(); Assert.IsTrue(x.Value == 2); composite1.Undo(); Assert.IsTrue(x.Value == 0); CompositeCommand composite2 = new CompositeCommand("1", new Command[] { new IncCommand(x), new DecCommand(x), new DecCommand(x) }); // Try to execute a composite that will cause an exception try { composite2.Do(); Assert.Fail(); } catch { } Assert.IsTrue(x.Value == 0); // make sure command was backed out }