83 lines
2.5 KiB
C#
83 lines
2.5 KiB
C#
using NUnit.Framework;
|
|
using UnityEngine;
|
|
using XGame;
|
|
|
|
public sealed class ResourcePoolManagerTests
|
|
{
|
|
private const string EffectPath = "Assets/Game/Art/Effect/Prefab/test.prefab";
|
|
private GameObject _mainBefore;
|
|
private GameObject _cacheBefore;
|
|
private GameObject _parent;
|
|
private GameObject _instance;
|
|
|
|
[SetUp]
|
|
public void SetUp()
|
|
{
|
|
_mainBefore = GameObject.Find("Main");
|
|
_cacheBefore = _mainBefore != null
|
|
? _mainBefore.transform.Find("Cache")?.gameObject
|
|
: null;
|
|
}
|
|
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
ResourcePoolManager.ClearAll();
|
|
|
|
if (_parent != null)
|
|
{
|
|
Object.DestroyImmediate(_parent);
|
|
_parent = null;
|
|
}
|
|
|
|
if (_instance != null)
|
|
{
|
|
Object.DestroyImmediate(_instance);
|
|
_instance = null;
|
|
}
|
|
|
|
GameObject main = GameObject.Find("Main");
|
|
if (_mainBefore == null && main != null)
|
|
{
|
|
Object.DestroyImmediate(main);
|
|
}
|
|
else if (_mainBefore != null && _cacheBefore == null)
|
|
{
|
|
Transform createdCache = _mainBefore.transform.Find("Cache");
|
|
if (createdCache != null)
|
|
{
|
|
Object.DestroyImmediate(createdCache.gameObject);
|
|
}
|
|
}
|
|
|
|
_mainBefore = null;
|
|
_cacheBefore = null;
|
|
}
|
|
|
|
[Test]
|
|
public void ReleaseAndTryGet_ReusesInactiveInstanceForSamePath()
|
|
{
|
|
_parent = new GameObject("parent");
|
|
_instance = new GameObject("pooled-effect");
|
|
_instance.transform.SetParent(_parent.transform);
|
|
_instance.transform.localPosition = new Vector3(1f, 2f, 3f);
|
|
_instance.SetActive(true);
|
|
|
|
ResourcePoolManager.Release(EffectPath, _instance);
|
|
|
|
Assert.IsFalse(_instance.activeSelf);
|
|
Assert.IsNotNull(_instance.transform.parent);
|
|
Assert.That(_instance.transform.parent.name, Is.EqualTo("Cache"));
|
|
Assert.IsNotNull(_instance.transform.parent.parent);
|
|
Assert.That(_instance.transform.parent.parent.name, Is.EqualTo("Main"));
|
|
Assert.That(ResourcePoolManager.GetPooledCount(EffectPath), Is.EqualTo(1));
|
|
|
|
GameObject reused = ResourcePoolManager.TryGet(EffectPath, _parent.transform, Vector3.one, Quaternion.identity);
|
|
|
|
Assert.AreSame(_instance, reused);
|
|
Assert.IsTrue(reused.activeSelf);
|
|
Assert.AreSame(_parent.transform, reused.transform.parent);
|
|
Assert.That(reused.transform.localPosition, Is.EqualTo(Vector3.one));
|
|
}
|
|
}
|