public void IfEntityMatches_RemovesNodeFromList()
        {
            var family = new ComponentMatchingFamily <Node <MockComponentA> >();

            var entity1 = new MockEntity <MockComponentA>();

            family.EntityAdded(entity1);
            family.EntityRemoved(entity1);

            Assert.IsEmpty(family.Nodes);
        }
        public void WhenEntityRemoved_NodeReturnedToPool()
        {
            var pool   = Substitute.For <INodePool <Node <MockComponentA> > >();
            var family = new ComponentMatchingFamily <Node <MockComponentA> >(pool);

            var node = new Node <MockComponentA>();

            pool.UnPool().Returns(node);

            var entity1 = new MockEntity <MockComponentA>();

            family.EntityAdded(entity1);
            family.EntityRemoved(entity1);

            pool.Received().UnPool();
            pool.Received().Pool(node);
        }
        public void IfEntityOfSameTypeButDifferentInstanceIsRemoved_CorrectInstanceIsRemoved()
        {
            var family = new ComponentMatchingFamily <Node <MockComponentA> >();

            var entity1 = new MockEntity <MockComponentA>();

            family.EntityAdded(entity1);

            var entity2 = new MockEntity <MockComponentA>();

            family.EntityAdded(entity2);

            Assert.IsTrue(family.Nodes.Count() == 2);

            family.EntityRemoved(entity1);

            Assert.IsTrue(family.Nodes.Count() == 1);
            Assert.IsTrue(family.Nodes.First().Component1 == entity2.Components[0]);
        }