From 6780767c0cc6e024eb05846373b47e403410c25b Mon Sep 17 00:00:00 2001 From: "andrew.lee" Date: Wed, 18 Jan 2023 21:00:33 -0500 Subject: [PATCH 1/3] [USDU-275] Adds testcase for checking if export keeps the original data structure --- .../Common/CustomAsserts/ExportAssert.cs | 34 +++++++++++++++++ .../Common/CustomAsserts/ExportAssert.cs.meta | 11 ++++++ .../Tests/Runtime/ExportHelpersTests.cs | 37 +++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 package/com.unity.formats.usd/Tests/Common/CustomAsserts/ExportAssert.cs create mode 100644 package/com.unity.formats.usd/Tests/Common/CustomAsserts/ExportAssert.cs.meta diff --git a/package/com.unity.formats.usd/Tests/Common/CustomAsserts/ExportAssert.cs b/package/com.unity.formats.usd/Tests/Common/CustomAsserts/ExportAssert.cs new file mode 100644 index 000000000..5bbaa7208 --- /dev/null +++ b/package/com.unity.formats.usd/Tests/Common/CustomAsserts/ExportAssert.cs @@ -0,0 +1,34 @@ +using UnityEngine; +using NUnit.Framework; + +namespace Unity.Formats.USD.Tests +{ + public static class ExportAssert + { + public static class Runtime + { + public static void IsDataStructureKeptInUsdz(GameObject importedObject, string expectedObjectName, string expectedRootPrimName, string expectedMaterialsName) + { + Assert.AreEqual(importedObject.name, expectedObjectName); + + var rootPrim = importedObject.transform.Find(expectedRootPrimName); + var materials = importedObject.transform.Find(expectedMaterialsName); + + Assert.IsNotNull(rootPrim, string.Format("Root Prim was not found under expected name '{0}'", expectedRootPrimName)); + Assert.IsNotNull(materials, string.Format("Materials was not found under expected name '{0}'", expectedMaterialsName)); + + Assert.IsNotNull(rootPrim.GetComponent(), "Root Prim GameObject did not contain UsdPrimSource component"); + Assert.IsNotNull(materials.GetComponent(), "Materials GameObject did not contain UsdPrimSource component"); + + var materialsData = materials.transform.Find(expectedObjectName); + var rootPrimData = rootPrim.transform.Find(expectedObjectName); + + Assert.IsNotNull(rootPrimData, string.Format("Root Prim Data was not found under expected name '{0}'", expectedObjectName)); + Assert.IsNotNull(materialsData, string.Format("Materials Data was not found under expected name '{0}'", expectedObjectName)); + + Assert.IsNotNull(rootPrimData.GetComponent(), "Root Prim Data GameObject did not contain UsdPrimSource component"); + Assert.IsNotNull(materialsData.GetComponent(), "Materials Data GameObject did not contain UsdPrimSource component"); + } + } + } +} diff --git a/package/com.unity.formats.usd/Tests/Common/CustomAsserts/ExportAssert.cs.meta b/package/com.unity.formats.usd/Tests/Common/CustomAsserts/ExportAssert.cs.meta new file mode 100644 index 000000000..8d393bbcd --- /dev/null +++ b/package/com.unity.formats.usd/Tests/Common/CustomAsserts/ExportAssert.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d5a3ec5d050a6c64197a4333979de0bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/package/com.unity.formats.usd/Tests/Runtime/ExportHelpersTests.cs b/package/com.unity.formats.usd/Tests/Runtime/ExportHelpersTests.cs index 5575ab601..913a4ad43 100644 --- a/package/com.unity.formats.usd/Tests/Runtime/ExportHelpersTests.cs +++ b/package/com.unity.formats.usd/Tests/Runtime/ExportHelpersTests.cs @@ -110,5 +110,42 @@ public void ExportGameObjects_SceneClosedAfterExport() ExportHelpers.ExportGameObjects(new[] { new GameObject("test") }, scene, BasisTransformation.SlowAndSafe); Assert.IsNull(scene.Stage); } + + [Ignore("[USDU-275] | [USDU-279]")] + [Test] + public void ExportAsUsdz_DataStructureKept() + { + var scene = ImportHelpers.InitForOpen(GetTestAssetPath(TestAssetData.FileName.TexturedOpaque)); + var importedUsdObject = ImportHelpers.ImportSceneAsGameObject(scene, importOptions: + new SceneImportOptions() + { + materialImportMode = MaterialImportMode.ImportPreviewSurface + } + ); + + var usdzPath = GetUSDScenePath(importedUsdObject.name + ".usdz"); + UsdzExporter.ExportUsdz(usdzPath, importedUsdObject); + + var usdObjectRootPath = importedUsdObject.GetComponent().m_usdRootPath; + + Assert.AreEqual(usdObjectRootPath, "/"); + + var usdzScene = ImportHelpers.InitForOpen(usdzPath); + var usdzObject = ImportHelpers.ImportSceneAsGameObject(usdzScene, importOptions: + new SceneImportOptions() + { + materialImportMode = MaterialImportMode.ImportPreviewSurface + } + ); + + Assert.AreEqual(usdzObject.GetComponent().m_usdRootPath, usdObjectRootPath); + + ExportAssert.Runtime.IsDataStructureKeptInUsdz( + usdzObject, + expectedMaterialsName: TestAssetData.ImportGameObjectName.Material, + expectedRootPrimName: TestAssetData.ImportGameObjectName.RootPrim, + expectedObjectName: TestAssetData.FileName.TexturedOpaque + ); + } } } From 8deb028541499541367e143de9a63cf00c8d34a7 Mon Sep 17 00:00:00 2001 From: "andrew.lee" Date: Wed, 18 Jan 2023 21:10:53 -0500 Subject: [PATCH 2/3] Make the test case name better reflect the actions taken for the test --- .../com.unity.formats.usd/Tests/Runtime/ExportHelpersTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/com.unity.formats.usd/Tests/Runtime/ExportHelpersTests.cs b/package/com.unity.formats.usd/Tests/Runtime/ExportHelpersTests.cs index 913a4ad43..cd8e48569 100644 --- a/package/com.unity.formats.usd/Tests/Runtime/ExportHelpersTests.cs +++ b/package/com.unity.formats.usd/Tests/Runtime/ExportHelpersTests.cs @@ -113,7 +113,7 @@ public void ExportGameObjects_SceneClosedAfterExport() [Ignore("[USDU-275] | [USDU-279]")] [Test] - public void ExportAsUsdz_DataStructureKept() + public void ExportAsUsdz_DataStructureKeptOnImport() { var scene = ImportHelpers.InitForOpen(GetTestAssetPath(TestAssetData.FileName.TexturedOpaque)); var importedUsdObject = ImportHelpers.ImportSceneAsGameObject(scene, importOptions: From 645cccddcc96f55ecf0317b557f7811168a03672 Mon Sep 17 00:00:00 2001 From: "andrew.lee" Date: Thu, 2 Feb 2023 16:53:22 -0500 Subject: [PATCH 3/3] Applies review comments --- .../Common/CustomAsserts/ExportAssert.cs | 31 +++++++--------- .../Tests/Editor/ExportTests.cs | 35 ++++++++++++++++++ .../Tests/Runtime/ExportHelpersTests.cs | 37 ------------------- 3 files changed, 49 insertions(+), 54 deletions(-) diff --git a/package/com.unity.formats.usd/Tests/Common/CustomAsserts/ExportAssert.cs b/package/com.unity.formats.usd/Tests/Common/CustomAsserts/ExportAssert.cs index 5bbaa7208..8db301475 100644 --- a/package/com.unity.formats.usd/Tests/Common/CustomAsserts/ExportAssert.cs +++ b/package/com.unity.formats.usd/Tests/Common/CustomAsserts/ExportAssert.cs @@ -5,30 +5,27 @@ namespace Unity.Formats.USD.Tests { public static class ExportAssert { - public static class Runtime + public static void IsDataStructureKeptInUsdz(GameObject importedObject, string expectedObjectName, string expectedRootPrimName, string expectedMaterialsName) { - public static void IsDataStructureKeptInUsdz(GameObject importedObject, string expectedObjectName, string expectedRootPrimName, string expectedMaterialsName) - { - Assert.AreEqual(importedObject.name, expectedObjectName); + Assert.AreEqual(importedObject.name, expectedObjectName); - var rootPrim = importedObject.transform.Find(expectedRootPrimName); - var materials = importedObject.transform.Find(expectedMaterialsName); + var rootPrim = importedObject.transform.Find(expectedRootPrimName); + var materials = importedObject.transform.Find(expectedMaterialsName); - Assert.IsNotNull(rootPrim, string.Format("Root Prim was not found under expected name '{0}'", expectedRootPrimName)); - Assert.IsNotNull(materials, string.Format("Materials was not found under expected name '{0}'", expectedMaterialsName)); + Assert.IsNotNull(rootPrim, string.Format("Root Prim was not found under expected name '{0}'", expectedRootPrimName)); + Assert.IsNotNull(materials, string.Format("Materials was not found under expected name '{0}'", expectedMaterialsName)); - Assert.IsNotNull(rootPrim.GetComponent(), "Root Prim GameObject did not contain UsdPrimSource component"); - Assert.IsNotNull(materials.GetComponent(), "Materials GameObject did not contain UsdPrimSource component"); + Assert.IsNotNull(rootPrim.GetComponent(), "Root Prim GameObject did not contain UsdPrimSource component"); + Assert.IsNotNull(materials.GetComponent(), "Materials GameObject did not contain UsdPrimSource component"); - var materialsData = materials.transform.Find(expectedObjectName); - var rootPrimData = rootPrim.transform.Find(expectedObjectName); + var materialsData = materials.transform.Find(expectedObjectName); + var rootPrimData = rootPrim.transform.Find(expectedObjectName); - Assert.IsNotNull(rootPrimData, string.Format("Root Prim Data was not found under expected name '{0}'", expectedObjectName)); - Assert.IsNotNull(materialsData, string.Format("Materials Data was not found under expected name '{0}'", expectedObjectName)); + Assert.IsNotNull(rootPrimData, string.Format("Root Prim Data was not found under expected name '{0}'", expectedObjectName)); + Assert.IsNotNull(materialsData, string.Format("Materials Data was not found under expected name '{0}'", expectedObjectName)); - Assert.IsNotNull(rootPrimData.GetComponent(), "Root Prim Data GameObject did not contain UsdPrimSource component"); - Assert.IsNotNull(materialsData.GetComponent(), "Materials Data GameObject did not contain UsdPrimSource component"); - } + Assert.IsNotNull(rootPrimData.GetComponent(), "Root Prim Data GameObject did not contain UsdPrimSource component"); + Assert.IsNotNull(materialsData.GetComponent(), "Materials Data GameObject did not contain UsdPrimSource component"); } } } diff --git a/package/com.unity.formats.usd/Tests/Editor/ExportTests.cs b/package/com.unity.formats.usd/Tests/Editor/ExportTests.cs index f470e90af..4cfae41f7 100644 --- a/package/com.unity.formats.usd/Tests/Editor/ExportTests.cs +++ b/package/com.unity.formats.usd/Tests/Editor/ExportTests.cs @@ -117,5 +117,40 @@ public void ExportMultipleSiblingGameObjectsWithSameName_AllGameObjectsHaveCorre } Assert.AreEqual(cubes.Length, exportedPrims.Count, "One or more GameObjects don't have a corresponding Prim"); } + + [Test] + [Ignore("[USDU-275] | [USDU-279]")] + public void ExportAsUsdz_DataStructureKeptOnImport() + { + var scene = ImportHelpers.InitForOpen(GetTestAssetPath(TestAssetData.FileName.TexturedOpaque)); + var importedUsdObject = ImportHelpers.ImportSceneAsGameObject(scene, importOptions: + new SceneImportOptions() + { + materialImportMode = MaterialImportMode.ImportPreviewSurface + } + ); + + var usdzPath = GetUSDScenePath(importedUsdObject.name + ".usdz"); + UsdzExporter.ExportUsdz(usdzPath, importedUsdObject); + + var usdObjectRootPath = importedUsdObject.GetComponent().m_usdRootPath; + + var usdzScene = ImportHelpers.InitForOpen(usdzPath); + var usdzObject = ImportHelpers.ImportSceneAsGameObject(usdzScene, importOptions: + new SceneImportOptions() + { + materialImportMode = MaterialImportMode.ImportPreviewSurface + } + ); + + Assert.AreEqual(usdzObject.GetComponent().m_usdRootPath, usdObjectRootPath); + + ExportAssert.IsDataStructureKeptInUsdz( + usdzObject, + expectedMaterialsName: TestAssetData.ImportGameObjectName.Material, + expectedRootPrimName: TestAssetData.ImportGameObjectName.RootPrim, + expectedObjectName: TestAssetData.FileName.TexturedOpaque + ); + } } } diff --git a/package/com.unity.formats.usd/Tests/Runtime/ExportHelpersTests.cs b/package/com.unity.formats.usd/Tests/Runtime/ExportHelpersTests.cs index cd8e48569..5575ab601 100644 --- a/package/com.unity.formats.usd/Tests/Runtime/ExportHelpersTests.cs +++ b/package/com.unity.formats.usd/Tests/Runtime/ExportHelpersTests.cs @@ -110,42 +110,5 @@ public void ExportGameObjects_SceneClosedAfterExport() ExportHelpers.ExportGameObjects(new[] { new GameObject("test") }, scene, BasisTransformation.SlowAndSafe); Assert.IsNull(scene.Stage); } - - [Ignore("[USDU-275] | [USDU-279]")] - [Test] - public void ExportAsUsdz_DataStructureKeptOnImport() - { - var scene = ImportHelpers.InitForOpen(GetTestAssetPath(TestAssetData.FileName.TexturedOpaque)); - var importedUsdObject = ImportHelpers.ImportSceneAsGameObject(scene, importOptions: - new SceneImportOptions() - { - materialImportMode = MaterialImportMode.ImportPreviewSurface - } - ); - - var usdzPath = GetUSDScenePath(importedUsdObject.name + ".usdz"); - UsdzExporter.ExportUsdz(usdzPath, importedUsdObject); - - var usdObjectRootPath = importedUsdObject.GetComponent().m_usdRootPath; - - Assert.AreEqual(usdObjectRootPath, "/"); - - var usdzScene = ImportHelpers.InitForOpen(usdzPath); - var usdzObject = ImportHelpers.ImportSceneAsGameObject(usdzScene, importOptions: - new SceneImportOptions() - { - materialImportMode = MaterialImportMode.ImportPreviewSurface - } - ); - - Assert.AreEqual(usdzObject.GetComponent().m_usdRootPath, usdObjectRootPath); - - ExportAssert.Runtime.IsDataStructureKeptInUsdz( - usdzObject, - expectedMaterialsName: TestAssetData.ImportGameObjectName.Material, - expectedRootPrimName: TestAssetData.ImportGameObjectName.RootPrim, - expectedObjectName: TestAssetData.FileName.TexturedOpaque - ); - } } }