using NUnit.Framework; using System.Linq; using UnityEngine; namespace UniGLTF { public class MeshExportValidatorTests { static GameObject CreateTestObject(Material[] materials) { var root = new GameObject("root"); var cube = GameObject.CreatePrimitive(PrimitiveType.Cube); cube.transform.SetParent(root.transform); var renderer = cube.GetComponent(); renderer.sharedMaterials = materials; return root; } [Test] public void NoMaterialTest() { var validator = ScriptableObject.CreateInstance(); // 0 material var root = CreateTestObject(new Material[0]); try { validator.SetRoot(root, new GltfExportSettings(), new DefualtBlendShapeExportFilter()); var vs = validator.Validate(root); Assert.False(vs.All(x => x.CanExport)); } finally { GameObject.DestroyImmediate(root); ScriptableObject.DestroyImmediate(validator); } } [Test] public void NullMaterialTest() { var validator = ScriptableObject.CreateInstance(); // null を含む var root = CreateTestObject(new Material[] { null }); try { validator.SetRoot(root, new GltfExportSettings(), new DefualtBlendShapeExportFilter()); var vs = validator.Validate(root); Assert.False(vs.All(x => x.CanExport)); } finally { GameObject.DestroyImmediate(root); ScriptableObject.DestroyImmediate(validator); } } [Test] public void NullMaterialsTest() { var validator = ScriptableObject.CreateInstance(); // null を含むかつ submeshCount より多い var root = CreateTestObject(new Material[] { null, null }); try { validator.SetRoot(root, new GltfExportSettings(), new DefualtBlendShapeExportFilter()); var vs = validator.Validate(root); Assert.False(vs.All(x => x.CanExport)); } finally { GameObject.DestroyImmediate(root); ScriptableObject.DestroyImmediate(validator); } } [Test] public void NoMeshTest() { var validator = ScriptableObject.CreateInstance(); var root = new GameObject("root"); try { var child = GameObject.CreatePrimitive(PrimitiveType.Cube); child.transform.SetParent(root.transform); // remove MeshFilter Component.DestroyImmediate(child.GetComponent()); validator.SetRoot(root, new GltfExportSettings(), new DefualtBlendShapeExportFilter()); var vs = validator.Validate(root); Assert.True(vs.All(x => x.CanExport)); } finally { GameObject.DestroyImmediate(root); ScriptableObject.DestroyImmediate(validator); } } [Test] public void NullMeshTest() { var validator = ScriptableObject.CreateInstance(); var root = new GameObject("root"); try { var child = GameObject.CreatePrimitive(PrimitiveType.Cube); child.transform.SetParent(root.transform); // set null child.GetComponent().sharedMesh = null; validator.SetRoot(root, new GltfExportSettings(), new DefualtBlendShapeExportFilter()); var vs = validator.Validate(root); Assert.True(vs.All(x => x.CanExport)); } finally { GameObject.DestroyImmediate(root); ScriptableObject.DestroyImmediate(validator); } } } }