50 lines
3.0 KiB
C#
50 lines
3.0 KiB
C#
using System.Linq;
|
|
using BumpCombat.Constants;
|
|
using NUnit.Framework;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace BumpCombat.Tests
|
|
{
|
|
public sealed class Defense25DMonsterPoolPrefabAssetTests
|
|
{
|
|
private const string PoolPath = "Assets/_Project/Constants/Defense25DComparison/MonsterPools.asset";
|
|
private const string PrefabRoot = "Assets/_Project/Prefabs/Defense25DMonsters/Roster25D-v1/";
|
|
|
|
[Test]
|
|
public void EveryAllowedSpeciesHasADistinctVisualPrefabWithASprite()
|
|
{
|
|
GameObject existingPrefab = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/_Project/Prefabs/Enemies/Slime.prefab");
|
|
Assert.That(existingPrefab, Is.Not.Null, "The existing Slime prefab must load as the control asset.");
|
|
Assert.That(PrefabUtility.IsPartOfPrefabAsset(existingPrefab), Is.True,
|
|
$"The existing prefab control was not recognized: {AssetDatabase.GetAssetPath(existingPrefab)} / {PrefabUtility.GetPrefabAssetType(existingPrefab)}.");
|
|
|
|
Defense25DMonsterPoolDefinition pool = AssetDatabase.LoadAssetAtPath<Defense25DMonsterPoolDefinition>(PoolPath);
|
|
Assert.That(pool, Is.Not.Null, $"Missing pool asset at {PoolPath}.");
|
|
|
|
Assert.That(pool.TryValidate(out string validationError), Is.True, validationError);
|
|
var entries = pool.Tiers.SelectMany(tier => tier.Entries).ToArray();
|
|
Assert.That(entries.Length, Is.EqualTo(28));
|
|
Assert.That(entries.Select(entry => entry.VisualPrefab).All(prefab => prefab != null), Is.True);
|
|
Assert.That(entries.Select(entry => entry.VisualPrefab).Distinct().Count(), Is.EqualTo(28));
|
|
|
|
foreach (Defense25DMonsterPoolEntry entry in entries)
|
|
{
|
|
GameObject prefab = entry.VisualPrefab;
|
|
string assetPath = AssetDatabase.GetAssetPath(prefab);
|
|
GlobalObjectId globalId = GlobalObjectId.GetGlobalObjectIdSlow(prefab);
|
|
string assetGuid = AssetDatabase.AssetPathToGUID(assetPath);
|
|
TestContext.WriteLine($"{entry.EnemyDefinitionId}: path={assetPath}; globalObjectId={globalId}; prefabAsset={PrefabUtility.IsPartOfPrefabAsset(prefab)}");
|
|
Assert.That(PrefabUtility.IsPartOfPrefabAsset(prefab), Is.True,
|
|
$"{entry.EnemyDefinitionId}: {assetPath} / {PrefabUtility.GetPrefabAssetType(prefab)} / persistent={EditorUtility.IsPersistent(prefab)} / {globalId}.");
|
|
Assert.That(assetPath, Does.StartWith(PrefabRoot), entry.EnemyDefinitionId);
|
|
Assert.That(globalId.ToString(), Does.Contain(assetGuid), $"GlobalObjectId doesn't identify the prefab asset for {entry.EnemyDefinitionId}.");
|
|
|
|
SpriteRenderer renderer = prefab.GetComponent<SpriteRenderer>();
|
|
Assert.That(renderer, Is.Not.Null, $"{entry.EnemyDefinitionId} prefab has no root SpriteRenderer.");
|
|
Assert.That(renderer.sprite, Is.Not.Null, $"{entry.EnemyDefinitionId} prefab has no Idle sprite.");
|
|
}
|
|
}
|
|
}
|
|
}
|