2025-04-22 17:16:40 +08:00

143 lines
4.1 KiB
C#

using System.Collections;
using System.IO;
using NUnit.Framework;
using Unity.HLODSystem.Streaming;
using Unity.HLODSystem.Utils;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.TestTools;
namespace Unity.HLODSystem.EditorTests
{
[TestFixture]
public class EditorTests : IPrebuildSetup, IPostBuildCleanup
{
private static string mHlodArtifactName = "Assets/TestAssets/Artifacts/HLOD.hlod";
private static HLOD hlod;
private static GameObject mHlodGameObject;
public void Setup()
{
Scene scene = EditorSceneManager.OpenScene("Assets/TestAssets/EditModeTestScene.unity");
GameObject[] gameObjects = scene.GetRootGameObjects();
mHlodGameObject = gameObjects[0].transform.Find("HLOD").gameObject;
hlod = mHlodGameObject.GetComponent<HLOD>() as HLOD;
var coroutine = CoroutineRunner.RunCoroutine(HLODCreator.Create(hlod));
while (coroutine.MoveNext())
{
//Wait until coroutine is finished
}
}
public void Cleanup()
{
var coroutine = CoroutineRunner.RunCoroutine(HLODCreator.Destroy(hlod));
while (coroutine.MoveNext())
{
//Wait until coroutine is finished
}
File.Delete(mHlodArtifactName);
Assert.False(File.Exists(mHlodArtifactName));
}
[Test]
public void HlodGameObjectIsNotNull()
{
Assert.NotNull(mHlodGameObject);
}
[Test]
public void HlodIsNotNull()
{
Assert.NotNull(hlod);
}
[TestCase(11)]
public void HlodRootIsAddedToHlodGroup(int childCount)
{
Assert.True(mHlodGameObject.transform.childCount == childCount);
}
[Test]
public void HlodControllerIsNotNull()
{
Assert.NotNull(hlod.GetComponent<HLODControllerBase>());
}
[Test]
public void MaterialCountTest()
{
Object[] objs = AssetDatabase.LoadAllAssetsAtPath(mHlodArtifactName);
int count = 0;
for ( int i = 0; i < objs.Length; ++i )
{
if (objs[i] is Material)
count += 1;
}
Assert.AreEqual(0, count);
}
[Test]
public void HLODDataTest()
{
using (Stream stream = new FileStream(mHlodArtifactName, FileMode.Open, FileAccess.Read))
{
HLODData data = HLODDataSerializer.Read(stream);
Assert.AreEqual(0, data.GetMaterialCount());
Assert.AreEqual(85, data.GetObjects().Count);
}
}
[Test]
public void MaterialSetupTest()
{
var objects = AssetDatabase.LoadAllAssetsAtPath(mHlodArtifactName);
for ( int i = 0; i < objects.Length; ++i )
{
var go = objects[i] as GameObject;
if (go == null)
continue;
var mr = go.GetComponent<MeshRenderer>();
if (mr == null)
continue;
Assert.AreNotEqual(0, mr.sharedMaterials.Length);
}
}
/*[Test]
public void ArtifactIsCreated()
{
Assert.IsTrue(File.Exists(mHlodArtifactName));
}*/
[UnityTest]
[TestCase("Assets/TestAssets/BakedTerrainPatch.hlod", ExpectedResult = null)]
public IEnumerator HlodAssetIsImported(string assetPath)
{
AssetDatabase.ImportAsset(assetPath);
Object[] data = AssetDatabase.LoadAllAssetsAtPath(assetPath);
Assert.Greater(data.Length, 0);
foreach (Object obj in data)
{
if (obj is GameObject)
{
Assert.AreEqual(obj.name, "HLOD");
break;
}
}
yield return null;
}
}
}