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 }