[Test, Ignore] // ignore as long as Shadow Object info is not support by data binary serialization public void TestCreateChildAsset() { // ------------------------- // Init // ------------------------- var localComponentDescriptor = TypeDescriptorFactory.Default.Find(typeof(LocalComponent)); var baseAsset = new LocalAsset { Name = "base", Value = 1 }; baseAsset.Parameters.Set(LocalAsset.StringKey, "string"); var component = new LocalComponent() { Name = "comp1", Position = Vector4.UnitX }; component.SetOverride(localComponentDescriptor["Name"], OverrideType.Sealed); baseAsset.Parameters.Set(LocalAsset.ComponentKey, component); var baseAssetItem = new AssetItem("base1", baseAsset); // Create a child asset var newAsset = (LocalAsset)baseAssetItem.CreateChildAsset(); // ------------------------- // Check base asset // ------------------------- Assert.NotNull(newAsset.Base); Assert.IsFalse(newAsset.Base.IsRootImport); Assert.AreEqual(baseAsset.Id, newAsset.Base.Id); // Check override on member "Name" var newComponent = newAsset.Parameters[LocalAsset.ComponentKey]; var overrideType = newComponent.GetOverride(localComponentDescriptor["Name"]); Assert.AreEqual(OverrideType.Sealed, overrideType); }
public void TestAccessor() { // ------------------------- // Init // ------------------------- var localAssetDescriptor = TypeDescriptorFactory.Default.Find(typeof(LocalAsset)); var localComponentDescriptor = TypeDescriptorFactory.Default.Find(typeof(LocalComponent)); var collectionDescriptor = (DictionaryDescriptor)TypeDescriptorFactory.Default.Find(typeof(CustomParameterCollection)); var baseAsset = new LocalAsset { Name = "base", Value = 1 }; baseAsset.Parameters.Set(LocalAsset.StringKey, "string"); var component = new LocalComponent() { Name = "comp1", Position = Vector4.UnitX }; component.SetOverride(localComponentDescriptor["Name"], OverrideType.Sealed); baseAsset.Parameters.Set(LocalAsset.ComponentKey, component); var baseAssetItem = new AssetItem("base1", baseAsset); // Create a child asset var newAsset = (LocalAsset)baseAssetItem.CreateChildAsset(); var newAssetItem = new AssetItem("new1", newAsset); // ------------------------- // Setup project + assets // ------------------------- var project = new Package(); project.Assets.Add(baseAssetItem); project.Assets.Add(newAssetItem); var session = new PackageSession(project); // Create accessor on new item var accessor = new AssetItemAccessor(newAssetItem); var memberPath = new MemberPath(); memberPath.Push(localAssetDescriptor["Parameters"]); memberPath.Push(collectionDescriptor, LocalAsset.ComponentKey); memberPath.Push(localComponentDescriptor["Name"]); // Get value for member path var memberValue = accessor.TryGetMemberValue(memberPath); Assert.IsTrue(memberValue.IsValid); Assert.AreEqual(OverrideType.Sealed, memberValue.Override); Assert.NotNull(memberValue.OverriderItem); Assert.AreEqual(baseAsset.Id, memberValue.OverriderItem.Id); memberPath.Pop(); memberPath.Push(localComponentDescriptor["Position"]); // Get value for member path memberValue = accessor.TryGetMemberValue(memberPath); Assert.IsTrue(memberValue.IsValid); Assert.AreEqual(OverrideType.Base, memberValue.Override); Assert.NotNull(memberValue.OverriderItem); Assert.AreEqual(baseAsset.Id, memberValue.OverriderItem.Id); // Set Position as a new value newAsset.Parameters[LocalAsset.ComponentKey].SetOverride(localComponentDescriptor["Position"], OverrideType.New); memberValue = accessor.TryGetMemberValue(memberPath); Assert.IsTrue(memberValue.IsValid); Assert.AreEqual(OverrideType.New, memberValue.Override); Assert.IsNull(memberValue.OverriderItem); }