public void EntityTransaction_RemoveComponent()
        {
            var transaction = new EntityTransaction(Enumerable.Empty<Entity>(), new Entity());
            transaction.AddComponent(transaction.AvailableComponents.First());
            transaction.SelectedComponent = transaction.SelectedComponents.First();
            int available = transaction.AvailableComponents.Count;

            CommandHelper.TestCommand(
                () => transaction.RemoveComponentCommand.Execute(null),
                () =>
                {
                    Assert.AreEqual(available + 1, transaction.AvailableComponents.Count);
                    Assert.AreEqual(0, transaction.SelectedComponents.Count);
                }
            );
        }
        public void EntityTransaction_Commit()
        {
            var prototype = new Entity() { Name = "prototype" };
            var entity = new Entity();
            var transaction = new EntityTransaction(Enumerable.Repeat(prototype, 1), entity);
            transaction.Name = "testEntity";
            transaction.AddPrototype(prototype);
            transaction.AddComponent(transaction.AvailableComponents.First());

            CommandHelper.TestUndoableCommand(
                () =>
                {
                    Assert.IsNull(entity.Name);
                    Assert.AreEqual(0, entity.Prototypes.Count);
                    Assert.AreEqual(0, entity.Components.Count);
                },
                () => transaction.CommitCommand.Execute(null),
                () =>
                {
                    Assert.AreEqual("testEntity", entity.Name);
                    Assert.AreEqual(1, entity.Prototypes.Count);
                    Assert.AreEqual(1, entity.Components.Count);
                }
            );
        }