From d4cc94ec4d59c3b5d6626da5cd14943c7a00d47f Mon Sep 17 00:00:00 2001 From: oO <47592289+oocytanb@users.noreply.github.com> Date: Tue, 8 Jun 2021 19:45:06 +0900 Subject: [PATCH] Add a test case for exporting nodes contains null mesh --- Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs | 73 ++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs b/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs index 91edd9abc..2273be95e 100644 --- a/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs +++ b/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs @@ -651,6 +651,79 @@ namespace UniGLTF } } + [Test] + public void ExportingNullMeshTest() + { + 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()); + } + + { + var child = GameObject.CreatePrimitive(PrimitiveType.Cube); + child.transform.SetParent(root.transform); + // set null + child.GetComponent().sharedMesh = null; + } + + // validate + validator.SetRoot(root, MeshExportSettings.Default, new DefualtBlendShapeExportFilter()); + var vs = validator.Validate(root); + Assert.True(vs.All(x => x.CanExport)); + + // export + var gltf = new glTF(); + string json; + using (var exporter = new gltfExporter(gltf)) + { + exporter.Prepare(root); + exporter.Export(UniGLTF.MeshExportSettings.Default, new EditorTextureSerializer()); + + json = gltf.ToJson(); + } + + Assert.AreEqual(0, gltf.meshes.Count); + Assert.AreEqual(2, gltf.nodes.Count); + Assert.AreEqual(-1, gltf.nodes[0].mesh); + Assert.AreEqual(-1, gltf.nodes[1].mesh); + + // import + { + var parser = new GltfParser(); + parser.ParseJson(json, new SimpleStorage(new ArraySegment(new byte[1024 * 1024]))); + + using (var context = new ImporterContext(parser)) + { + context.Load(); + + Assert.AreEqual(2, context.Root.transform.GetChildren().Count()); + + { + var child = context.Root.transform.GetChild(0); + Assert.IsNull(child.GetSharedMesh()); + } + + { + var child = context.Root.transform.GetChild(1); + Assert.IsNull(child.GetSharedMesh()); + } + } + } + } + finally + { + GameObject.DestroyImmediate(root); + ScriptableObject.DestroyImmediate(validator); + } + } + [Serializable] class CantConstruct {