From dcdb8e9632e72ee783d42348bb63a96d2250af17 Mon Sep 17 00:00:00 2001 From: Sayamame-beans <61457993+Sayamame-beans@users.noreply.github.com> Date: Sun, 20 Oct 2024 19:37:57 +0900 Subject: [PATCH] test: add some tests for SetupOutfit and InferPrefixSuffix --- ...eferFirstHipsMatch.cs => HipsMatchTest.cs} | 25 +++- ...ipsMatch.cs.meta => HipsMatchTest.cs.meta} | 0 .../EasySetupOutfit/InferPrefixSuffixTest.cs | 108 ++++++++++++++++++ .../InferPrefixSuffixTest.cs.meta | 11 ++ .../EasySetupOutfit/SetupOutfitRenameTest.cs | 71 ++++++++++++ .../SetupOutfitRenameTest.cs.meta | 11 ++ 6 files changed, 224 insertions(+), 2 deletions(-) rename UnitTests~/EasySetupOutfit/{PreferFirstHipsMatch.cs => HipsMatchTest.cs} (54%) rename UnitTests~/EasySetupOutfit/{PreferFirstHipsMatch.cs.meta => HipsMatchTest.cs.meta} (100%) create mode 100644 UnitTests~/EasySetupOutfit/InferPrefixSuffixTest.cs create mode 100644 UnitTests~/EasySetupOutfit/InferPrefixSuffixTest.cs.meta create mode 100644 UnitTests~/EasySetupOutfit/SetupOutfitRenameTest.cs create mode 100644 UnitTests~/EasySetupOutfit/SetupOutfitRenameTest.cs.meta diff --git a/UnitTests~/EasySetupOutfit/PreferFirstHipsMatch.cs b/UnitTests~/EasySetupOutfit/HipsMatchTest.cs similarity index 54% rename from UnitTests~/EasySetupOutfit/PreferFirstHipsMatch.cs rename to UnitTests~/EasySetupOutfit/HipsMatchTest.cs index 717e5332..46195fcf 100644 --- a/UnitTests~/EasySetupOutfit/PreferFirstHipsMatch.cs +++ b/UnitTests~/EasySetupOutfit/HipsMatchTest.cs @@ -4,7 +4,7 @@ using nadena.dev.modular_avatar.core.editor; using NUnit.Framework; using UnityEngine; -public class PreferFirstHipsMatch : TestBase +public class HipsMatchTest : TestBase { [Test] public void SetupHeuristicPrefersFirstHipsMatch() @@ -21,7 +21,28 @@ public class PreferFirstHipsMatch : TestBase var outfit = CreateChild(root, "Outfit"); var outfit_armature = CreateChild(outfit, "Armature"); var outfit_hips = CreateChild(outfit_armature, "Hips"); - + + Assert.IsTrue(SetupOutfit.FindBones(outfit, out var det_av_root, out var det_av_hips, out var det_outfit_hips)); + Assert.AreSame(root, det_av_root); + Assert.AreSame(root_hips, det_av_hips); + Assert.AreSame(outfit_hips, det_outfit_hips); + } + + [Test] + public void TestOutfitDeepHipsMatch() + { + var root = CreateCommonPrefab("shapell.fbx"); +#if MA_VRCSDK3_AVATARS + root.AddComponent(); +#endif + var root_hips = root.GetComponent().GetBoneTransform(HumanBodyBones.Hips).gameObject; + root_hips.name = "hip"; + + var outfit = CreateChild(root, "Outfit"); + var outfit_armature = CreateChild(outfit, "armature"); + var outfit_armature2 = CreateChild(outfit_armature, "armature2"); + var outfit_hips = CreateChild(outfit_armature2, "hips"); + Assert.IsTrue(SetupOutfit.FindBones(outfit, out var det_av_root, out var det_av_hips, out var det_outfit_hips)); Assert.AreSame(root, det_av_root); Assert.AreSame(root_hips, det_av_hips); diff --git a/UnitTests~/EasySetupOutfit/PreferFirstHipsMatch.cs.meta b/UnitTests~/EasySetupOutfit/HipsMatchTest.cs.meta similarity index 100% rename from UnitTests~/EasySetupOutfit/PreferFirstHipsMatch.cs.meta rename to UnitTests~/EasySetupOutfit/HipsMatchTest.cs.meta diff --git a/UnitTests~/EasySetupOutfit/InferPrefixSuffixTest.cs b/UnitTests~/EasySetupOutfit/InferPrefixSuffixTest.cs new file mode 100644 index 00000000..24c96a52 --- /dev/null +++ b/UnitTests~/EasySetupOutfit/InferPrefixSuffixTest.cs @@ -0,0 +1,108 @@ +using modular_avatar_tests; +using nadena.dev.modular_avatar.core; +using NUnit.Framework; +using UnityEngine; + +public class InferPrefixSuffixTest : TestBase +{ + [Test] + public void TestNoPrefixSuffix() + { + var root = CreateCommonPrefab("shapell.fbx"); +#if MA_VRCSDK3_AVATARS + root.AddComponent(); +#endif + var root_hips = root.GetComponent().GetBoneTransform(HumanBodyBones.Hips); + root_hips.name = "hip"; + + var outfit = CreateChild(root, "Outfit"); + var outfit_armature = CreateChild(outfit, "armature"); + var outfit_hips = CreateChild(outfit_armature, "hips"); + + var outfit_mama = outfit_armature.AddComponent(); + outfit_mama.mergeTarget = new AvatarObjectReference(); + outfit_mama.mergeTarget.referencePath = RuntimeUtil.RelativePath(root, root_hips.parent.gameObject); + outfit_mama.LockMode = ArmatureLockMode.BaseToMerge; + + outfit_mama.InferPrefixSuffix(); + + Assert.AreEqual("", outfit_mama.prefix); + Assert.AreEqual("", outfit_mama.suffix); + } + + [Test] + public void TestDifferentHipsName() + { + var root = CreateCommonPrefab("shapell.fbx"); +#if MA_VRCSDK3_AVATARS + root.AddComponent(); +#endif + var root_hips = root.GetComponent().GetBoneTransform(HumanBodyBones.Hips); + root_hips.name = "hip"; + + var outfit = CreateChild(root, "Outfit"); + var outfit_armature = CreateChild(outfit, "armature"); + var outfit_hips = CreateChild(outfit_armature, "pre_Hips.suf"); + + var outfit_mama = outfit_armature.AddComponent(); + outfit_mama.mergeTarget = new AvatarObjectReference(); + outfit_mama.mergeTarget.referencePath = RuntimeUtil.RelativePath(root, root_hips.parent.gameObject); + outfit_mama.LockMode = ArmatureLockMode.BaseToMerge; + + outfit_mama.InferPrefixSuffix(); + + Assert.AreEqual("pre_", outfit_mama.prefix); + Assert.AreEqual(".suf", outfit_mama.suffix); + } + + [Test] + public void TestSameHipsName_Success() + { + var root = CreateCommonPrefab("shapell.fbx"); +#if MA_VRCSDK3_AVATARS + root.AddComponent(); +#endif + var root_hips = root.GetComponent().GetBoneTransform(HumanBodyBones.Hips); + root_hips.name = "TEST_HI"; + + var outfit = CreateChild(root, "Outfit"); + var outfit_armature = CreateChild(outfit, "armature"); + var outfit_hips = CreateChild(outfit_armature, "pre_TEST_HI2.suf"); // Make it a little bit different name to confirm it matches the current implementation + + var outfit_mama = outfit_armature.AddComponent(); + outfit_mama.mergeTarget = new AvatarObjectReference(); + outfit_mama.mergeTarget.referencePath = RuntimeUtil.RelativePath(root, root_hips.parent.gameObject); + outfit_mama.LockMode = ArmatureLockMode.BaseToMerge; + + outfit_mama.InferPrefixSuffix(); + + Assert.AreEqual("pre_", outfit_mama.prefix); + Assert.AreEqual("2.suf", outfit_mama.suffix); + } + + [Test] + public void TestSameHipsName_Fail() + { + var root = CreateCommonPrefab("shapell.fbx"); +#if MA_VRCSDK3_AVATARS + root.AddComponent(); +#endif + var root_hips = root.GetComponent().GetBoneTransform(HumanBodyBones.Hips); + root_hips.name = "TE_HIPS_ST"; + + var outfit = CreateChild(root, "Outfit"); + var outfit_armature = CreateChild(outfit, "armature"); + var outfit_hips = CreateChild(outfit_armature, "pre_TE_HIPS_ST.suf"); + + var outfit_mama = outfit_armature.AddComponent(); + outfit_mama.mergeTarget = new AvatarObjectReference(); + outfit_mama.mergeTarget.referencePath = RuntimeUtil.RelativePath(root, root_hips.parent.gameObject); + outfit_mama.LockMode = ArmatureLockMode.BaseToMerge; + + outfit_mama.InferPrefixSuffix(); + + // Current(v1.10.x) InferPrefixSuffix fail to infer prefix/suffix when avatar has unique prefix/suffix and outfit has their name + Assert.AreNotEqual("pre_", outfit_mama.prefix); + Assert.AreNotEqual(".suf", outfit_mama.suffix); + } +} diff --git a/UnitTests~/EasySetupOutfit/InferPrefixSuffixTest.cs.meta b/UnitTests~/EasySetupOutfit/InferPrefixSuffixTest.cs.meta new file mode 100644 index 00000000..8fd3b1c4 --- /dev/null +++ b/UnitTests~/EasySetupOutfit/InferPrefixSuffixTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 426df05704d87424baeb85496181868d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnitTests~/EasySetupOutfit/SetupOutfitRenameTest.cs b/UnitTests~/EasySetupOutfit/SetupOutfitRenameTest.cs new file mode 100644 index 00000000..36d85f34 --- /dev/null +++ b/UnitTests~/EasySetupOutfit/SetupOutfitRenameTest.cs @@ -0,0 +1,71 @@ +using modular_avatar_tests; +using nadena.dev.modular_avatar.core; +using nadena.dev.modular_avatar.core.editor; +using NUnit.Framework; +using UnityEngine; + +public class SetupOutfitRenameTest : TestBase +{ + [Test] + public void TestSetupHumanoidOutfit() + { + var root = CreateCommonPrefab("shapell.fbx"); +#if MA_VRCSDK3_AVATARS + root.AddComponent(); +#endif + var root_chest = root.GetComponent().GetBoneTransform(HumanBodyBones.Chest); + + var outfit = CreateCommonPrefab("shapell.fbx"); + outfit.transform.SetParent(root.transform); + var outfit_chest = outfit.GetComponent().GetBoneTransform(HumanBodyBones.Chest); + outfit_chest.name = "c"; + + SetupOutfit.SetupOutfitUI(outfit); + + Assert.AreEqual(root_chest.name, outfit_chest.name); + } + + [Test] + public void TestSetupUpperChestOutfit() + { + var root = CreateCommonPrefab("shapell.fbx"); +#if MA_VRCSDK3_AVATARS + root.AddComponent(); +#endif + var root_armature = root.GetComponent().GetBoneTransform(HumanBodyBones.Hips).parent.gameObject; + var root_chest = root.GetComponent().GetBoneTransform(HumanBodyBones.Chest).gameObject; + + var outfit = CreateChild(root, "Outfit"); + var outfit_armature = CreateChild(outfit, "armature"); + var outfit_hips = CreateChild(outfit_armature, "hips"); + var outfit_spine = CreateChild(outfit_hips, "spine"); + var outfit_chest = CreateChild(outfit_spine, "chest"); + var outfit_upperchest = CreateChild(outfit_chest, "upperchest"); + + SetupOutfit.SetupOutfitUI(outfit); + + Assert.AreSame(root_armature, outfit_armature.GetComponent().mergeTargetObject); + Assert.AreSame(root_chest, outfit_upperchest.GetComponent().mergeTargetObject); + } + + [Test] + public void TestSetupSetupedOutfit() + { + var root = CreateCommonPrefab("shapell.fbx"); +#if MA_VRCSDK3_AVATARS + root.AddComponent(); +#endif + var root_hips = root.GetComponent().GetBoneTransform(HumanBodyBones.Hips); + var root_armature = root.GetComponent().GetBoneTransform(HumanBodyBones.Hips).parent.gameObject; + + var outfit = CreateChild(root, "Outfit"); + var outfit_armature = CreateChild(outfit, "armature"); + var outfit_hips = CreateChild(outfit_armature, "HIP"); + outfit_armature.AddComponent(); + + SetupOutfit.SetupOutfitUI(outfit); + + Assert.AreEqual(root_armature, outfit_armature.GetComponent().mergeTargetObject); + Assert.AreEqual(root_hips.name, outfit_hips.name); + } +} diff --git a/UnitTests~/EasySetupOutfit/SetupOutfitRenameTest.cs.meta b/UnitTests~/EasySetupOutfit/SetupOutfitRenameTest.cs.meta new file mode 100644 index 00000000..38a7ce2f --- /dev/null +++ b/UnitTests~/EasySetupOutfit/SetupOutfitRenameTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89b8a54f81c4e7244a858b30825de67c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: