public IEnumerator DestroyAll()
        {
            var source = new GameObject().AddComponent <GameObjectPoolBehaviour>();

            source.PoolDisable();

            var       builder = new GameObjectBuilder <GameObjectPoolBehaviour>(source);
            var       pool    = new GameObjectPoolCollection <GameObjectPoolBehaviour>(builder);
            Transform parent  = new GameObject().transform;

            for (int i = 0; i < 10; i++)
            {
                pool.Enable(parent);
            }

            Assert.AreEqual(10, pool.Count);
            Assert.AreEqual(10, parent.childCount);

            pool.DisableAll();
            pool.DestroyAll();

            yield return(null);

            Assert.AreEqual(0, pool.Count);
            Assert.AreEqual(0, parent.childCount);
        }
        public void EnableWithParent()
        {
            var source = new GameObject().AddComponent <GameObjectPoolBehaviour>();

            source.PoolDisable();

            var       builder = new GameObjectBuilder <GameObjectPoolBehaviour>(source);
            var       pool    = new GameObjectPoolCollection <GameObjectPoolBehaviour>(builder);
            Transform parent  = new GameObject().transform;

            GameObjectPoolBehaviour behaviour = pool.Enable(parent);

            behaviour.PoolEnable();

            Assert.NotNull(behaviour);
            Assert.True(behaviour.IsPoolEnabled());
            Assert.AreEqual(parent, behaviour.transform.parent);
        }
        public void EnableWithPositionAndRotation()
        {
            var source = new GameObject().AddComponent <GameObjectPoolBehaviour>();

            source.PoolDisable();

            var builder = new GameObjectBuilder <GameObjectPoolBehaviour>(source);
            var pool    = new GameObjectPoolCollection <GameObjectPoolBehaviour>(builder);

            GameObjectPoolBehaviour behaviour = pool.Enable(Vector3.one, Quaternion.Euler(Vector3.one));

            behaviour.PoolEnable();

            Assert.NotNull(behaviour);
            Assert.True(behaviour.IsPoolEnabled());
            Assert.AreEqual(Vector3.one, behaviour.transform.position);
            Assert.True(QuaternionEqualityComparer.Instance.Equals(Quaternion.Euler(Vector3.one), behaviour.transform.rotation));
        }
        public void Disable()
        {
            var source = new GameObject().AddComponent <GameObjectPoolBehaviour>();

            source.PoolDisable();

            var builder = new GameObjectBuilder <GameObjectPoolBehaviour>(source);
            var pool    = new GameObjectPoolCollection <GameObjectPoolBehaviour>(builder);

            GameObjectPoolBehaviour behaviour = pool.Enable();

            behaviour.PoolEnable();

            Assert.NotNull(behaviour);
            Assert.True(behaviour.IsPoolEnabled());

            bool result0 = pool.Disable(behaviour);

            behaviour.PoolDisable();

            Assert.True(result0);
            Assert.False(behaviour.IsPoolEnabled());
        }