public void TestSimpleDictionaryRemoveDeleted() { var asset = new Types.MyAsset3 { MyDictionary = { { "Key1", "String1" }, { "Key2", "String2" }, { "Key3", "String3" }, { "Key4", "String4" } } }; var context = DeriveAssetTest <Types.MyAsset3> .DeriveAsset(asset); var baseIds = CollectionItemIdHelper.GetCollectionItemIds(context.BaseAsset.MyDictionary); var derivedIds = CollectionItemIdHelper.GetCollectionItemIds(context.DerivedAsset.MyDictionary); var basePropertyNode = (AssetNode)((IGraphNode)context.BaseGraph.RootNode).TryGetChild(nameof(Types.MyAsset3.MyDictionary)); var derivedPropertyNode = (AssetNode)((IGraphNode)context.DerivedGraph.RootNode).TryGetChild(nameof(Types.MyAsset3.MyDictionary)); // Delete an item from the derived and then delete the same from the base var derivedDeletedId = derivedIds["Key3"]; derivedPropertyNode.Content.Remove("String3", new Index("Key3")); var baseDeletedId = baseIds["Key3"]; basePropertyNode.Content.Remove("String3", new Index("Key3")); Assert.AreEqual(3, context.BaseAsset.MyDictionary.Count); Assert.AreEqual(3, context.DerivedAsset.MyDictionary.Count); Assert.AreEqual("String1", basePropertyNode.Content.Retrieve(new Index("Key1"))); Assert.AreEqual("String2", basePropertyNode.Content.Retrieve(new Index("Key2"))); Assert.AreEqual("String4", basePropertyNode.Content.Retrieve(new Index("Key4"))); Assert.AreEqual("String1", derivedPropertyNode.Content.Retrieve(new Index("Key1"))); Assert.AreEqual("String2", derivedPropertyNode.Content.Retrieve(new Index("Key2"))); Assert.AreEqual("String4", derivedPropertyNode.Content.Retrieve(new Index("Key4"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key4"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key4"))); Assert.AreEqual(3, baseIds.Count); Assert.AreEqual(3, baseIds.KeyCount); Assert.AreEqual(0, baseIds.DeletedCount); Assert.AreEqual(3, derivedIds.Count); Assert.AreEqual(3, derivedIds.KeyCount); Assert.AreEqual(0, derivedIds.DeletedCount); Assert.AreEqual(baseIds["Key1"], derivedIds["Key1"]); Assert.AreEqual(baseIds["Key2"], derivedIds["Key2"]); Assert.AreEqual(baseIds["Key4"], derivedIds["Key4"]); Assert.False(derivedIds.IsDeleted(derivedDeletedId)); Assert.False(baseIds.IsDeleted(baseDeletedId)); }
public void TestSimpleDictionaryAddWithCollision() { var asset = new Types.MyAsset3 { MyDictionary = { { "Key1", "String1" }, { "Key2", "String2" } } }; var context = DeriveAssetTest <Types.MyAsset3> .DeriveAsset(asset); var baseIds = CollectionItemIdHelper.GetCollectionItemIds(context.BaseAsset.MyDictionary); var derivedIds = CollectionItemIdHelper.GetCollectionItemIds(context.DerivedAsset.MyDictionary); var basePropertyNode = (AssetMemberNode)context.BaseGraph.RootNode[nameof(Types.MyAsset3.MyDictionary)]; var derivedPropertyNode = (AssetMemberNode)context.DerivedGraph.RootNode[nameof(Types.MyAsset3.MyDictionary)]; // Update a key to derived and then the same key to the base derivedPropertyNode.Add("String3", new Index("Key3")); basePropertyNode.Add("String4", new Index("Key3")); Assert.AreEqual(3, context.BaseAsset.MyDictionary.Count); Assert.AreEqual(3, context.DerivedAsset.MyDictionary.Count); Assert.AreEqual("String1", basePropertyNode.Retrieve(new Index("Key1"))); Assert.AreEqual("String2", basePropertyNode.Retrieve(new Index("Key2"))); Assert.AreEqual("String4", basePropertyNode.Retrieve(new Index("Key3"))); Assert.AreEqual("String1", derivedPropertyNode.Retrieve(new Index("Key1"))); Assert.AreEqual("String2", derivedPropertyNode.Retrieve(new Index("Key2"))); Assert.AreEqual("String3", derivedPropertyNode.Retrieve(new Index("Key3"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key3"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreEqual(OverrideType.New, derivedPropertyNode.GetItemOverride(new Index("Key3"))); Assert.AreNotSame(baseIds, derivedIds); Assert.AreEqual(3, baseIds.KeyCount); Assert.AreEqual(0, baseIds.DeletedCount); Assert.AreEqual(3, derivedIds.KeyCount); Assert.AreEqual(1, derivedIds.DeletedCount); Assert.AreEqual(baseIds["Key1"], derivedIds["Key1"]); Assert.AreEqual(baseIds["Key2"], derivedIds["Key2"]); Assert.AreNotEqual(baseIds["Key3"], derivedIds["Key3"]); Assert.AreEqual(baseIds["Key3"], derivedIds.DeletedItems.Single()); Assert.AreEqual(3, context.BaseAsset.MyDictionary.Count); Assert.AreEqual(3, context.DerivedAsset.MyDictionary.Count); }
public void TestSimpleDictionaryAddWithCollision() { var asset = new Types.MyAsset3 { MyDictionary = { { "Key1", "String1" }, { "Key2", "String2" } } }; var context = DeriveAssetTest<Types.MyAsset3>.DeriveAsset(asset); var baseIds = CollectionItemIdHelper.GetCollectionItemIds(context.BaseAsset.MyDictionary); var derivedIds = CollectionItemIdHelper.GetCollectionItemIds(context.DerivedAsset.MyDictionary); var basePropertyNode = (AssetNode)((IGraphNode)context.BaseGraph.RootNode).TryGetChild(nameof(Types.MyAsset3.MyDictionary)); var derivedPropertyNode = (AssetNode)((IGraphNode)context.DerivedGraph.RootNode).TryGetChild(nameof(Types.MyAsset3.MyDictionary)); // Update a key to derived and then the same key to the base derivedPropertyNode.Content.Add("String3", new Index("Key3")); basePropertyNode.Content.Add("String4", new Index("Key3")); Assert.AreEqual(3, context.BaseAsset.MyDictionary.Count); Assert.AreEqual(3, context.DerivedAsset.MyDictionary.Count); Assert.AreEqual("String1", basePropertyNode.Content.Retrieve(new Index("Key1"))); Assert.AreEqual("String2", basePropertyNode.Content.Retrieve(new Index("Key2"))); Assert.AreEqual("String4", basePropertyNode.Content.Retrieve(new Index("Key3"))); Assert.AreEqual("String1", derivedPropertyNode.Content.Retrieve(new Index("Key1"))); Assert.AreEqual("String2", derivedPropertyNode.Content.Retrieve(new Index("Key2"))); Assert.AreEqual("String3", derivedPropertyNode.Content.Retrieve(new Index("Key3"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key3"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreEqual(OverrideType.New, derivedPropertyNode.GetItemOverride(new Index("Key3"))); Assert.AreNotSame(baseIds, derivedIds); Assert.AreEqual(3, baseIds.KeyCount); Assert.AreEqual(0, baseIds.DeletedCount); Assert.AreEqual(3, derivedIds.KeyCount); Assert.AreEqual(1, derivedIds.DeletedCount); Assert.AreEqual(baseIds["Key1"], derivedIds["Key1"]); Assert.AreEqual(baseIds["Key2"], derivedIds["Key2"]); Assert.AreNotEqual(baseIds["Key3"], derivedIds["Key3"]); Assert.AreEqual(baseIds["Key3"], derivedIds.DeletedItems.Single()); Assert.AreEqual(3, context.BaseAsset.MyDictionary.Count); Assert.AreEqual(3, context.DerivedAsset.MyDictionary.Count); }
public static TestArchetypesRun PrepareSimpleDictionaryRemove() { var asset = new Types.MyAsset3 { MyDictionary = { { "Key1", "String1" }, { "Key2", "String2" }, { "Key3", "String3" }, { "Key4", "String4" } } }; var context = DeriveAssetTest<Types.MyAsset3>.DeriveAsset(asset); var baseIds = CollectionItemIdHelper.GetCollectionItemIds(context.BaseAsset.MyDictionary); var derivedIds = CollectionItemIdHelper.GetCollectionItemIds(context.DerivedAsset.MyDictionary); var basePropertyNode = (AssetNode)((IGraphNode)context.BaseGraph.RootNode).TryGetChild(nameof(Types.MyAsset3.MyDictionary)); var derivedPropertyNode = (AssetNode)((IGraphNode)context.DerivedGraph.RootNode).TryGetChild(nameof(Types.MyAsset3.MyDictionary)); ItemId derivedDeletedId = ItemId.Empty; ItemId baseDeletedId = ItemId.Empty; var test = new TestArchetypesRun(context) { InitialCheck = () => { Assert.AreEqual(4, context.BaseAsset.MyDictionary.Count); Assert.AreEqual(4, context.DerivedAsset.MyDictionary.Count); Assert.AreEqual("String1", basePropertyNode.Content.Retrieve(new Index("Key1"))); Assert.AreEqual("String2", basePropertyNode.Content.Retrieve(new Index("Key2"))); Assert.AreEqual("String3", basePropertyNode.Content.Retrieve(new Index("Key3"))); Assert.AreEqual("String4", basePropertyNode.Content.Retrieve(new Index("Key4"))); Assert.AreEqual("String1", derivedPropertyNode.Content.Retrieve(new Index("Key1"))); Assert.AreEqual("String2", derivedPropertyNode.Content.Retrieve(new Index("Key2"))); Assert.AreEqual("String3", derivedPropertyNode.Content.Retrieve(new Index("Key3"))); Assert.AreEqual("String4", derivedPropertyNode.Content.Retrieve(new Index("Key4"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key3"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key4"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key3"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key4"))); Assert.AreEqual(0, derivedPropertyNode.GetOverriddenItemIndices().Count()); Assert.AreEqual(0, derivedPropertyNode.GetOverriddenKeyIndices().Count()); Assert.AreNotSame(baseIds, derivedIds); Assert.AreEqual(4, baseIds.KeyCount); Assert.AreEqual(0, baseIds.DeletedCount); Assert.AreEqual(4, derivedIds.KeyCount); Assert.AreEqual(0, derivedIds.DeletedCount); Assert.AreEqual(baseIds["Key1"], derivedIds["Key1"]); Assert.AreEqual(baseIds["Key2"], derivedIds["Key2"]); Assert.AreEqual(baseIds["Key3"], derivedIds["Key3"]); Assert.AreEqual(baseIds["Key4"], derivedIds["Key4"]); }, FirstChange = () => { derivedDeletedId = derivedIds["Key3"]; derivedPropertyNode.Content.Remove("String3", new Index("Key3")); }, FirstChangeCheck = () => { Assert.AreEqual(4, context.BaseAsset.MyDictionary.Count); Assert.AreEqual(3, context.DerivedAsset.MyDictionary.Count); Assert.AreEqual("String1", basePropertyNode.Content.Retrieve(new Index("Key1"))); Assert.AreEqual("String2", basePropertyNode.Content.Retrieve(new Index("Key2"))); Assert.AreEqual("String3", basePropertyNode.Content.Retrieve(new Index("Key3"))); Assert.AreEqual("String4", basePropertyNode.Content.Retrieve(new Index("Key4"))); Assert.AreEqual("String1", derivedPropertyNode.Content.Retrieve(new Index("Key1"))); Assert.AreEqual("String2", derivedPropertyNode.Content.Retrieve(new Index("Key2"))); Assert.AreEqual("String4", derivedPropertyNode.Content.Retrieve(new Index("Key4"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key3"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key4"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key4"))); Assert.AreEqual(0, derivedPropertyNode.GetOverriddenItemIndices().Count()); Assert.AreEqual(0, derivedPropertyNode.GetOverriddenKeyIndices().Count()); Assert.AreNotSame(baseIds, derivedIds); Assert.AreEqual(4, baseIds.KeyCount); Assert.AreEqual(0, baseIds.DeletedCount); Assert.AreEqual(3, derivedIds.KeyCount); Assert.AreEqual(1, derivedIds.DeletedCount); Assert.AreEqual(baseIds["Key1"], derivedIds["Key1"]); Assert.AreEqual(baseIds["Key2"], derivedIds["Key2"]); Assert.AreEqual(baseIds["Key4"], derivedIds["Key4"]); Assert.True(derivedIds.IsDeleted(derivedDeletedId)); }, SecondChange = () => { baseDeletedId = baseIds["Key4"]; basePropertyNode.Content.Remove("String4", new Index("Key4")); }, SecondChangeCheck = () => { Assert.AreEqual(3, context.BaseAsset.MyDictionary.Count); Assert.AreEqual(2, context.DerivedAsset.MyDictionary.Count); Assert.AreEqual("String1", basePropertyNode.Content.Retrieve(new Index("Key1"))); Assert.AreEqual("String2", basePropertyNode.Content.Retrieve(new Index("Key2"))); Assert.AreEqual("String3", basePropertyNode.Content.Retrieve(new Index("Key3"))); Assert.AreEqual("String1", derivedPropertyNode.Content.Retrieve(new Index("Key1"))); Assert.AreEqual("String2", derivedPropertyNode.Content.Retrieve(new Index("Key2"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key3"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreEqual(0, derivedPropertyNode.GetOverriddenItemIndices().Count()); Assert.AreEqual(0, derivedPropertyNode.GetOverriddenKeyIndices().Count()); Assert.AreEqual(3, baseIds.KeyCount); Assert.AreEqual(0, baseIds.DeletedCount); Assert.AreEqual(2, derivedIds.KeyCount); Assert.AreEqual(1, derivedIds.DeletedCount); Assert.AreEqual(baseIds["Key1"], derivedIds["Key1"]); Assert.AreEqual(baseIds["Key2"], derivedIds["Key2"]); Assert.True(derivedIds.IsDeleted(derivedDeletedId)); Assert.True(!baseIds.IsDeleted(baseDeletedId)); } }; return test; }
public void TestSimpleDictionaryRemoveDeleted() { var asset = new Types.MyAsset3 { MyDictionary = { { "Key1", "String1" }, { "Key2", "String2" }, { "Key3", "String3" }, { "Key4", "String4" } } }; var context = DeriveAssetTest<Types.MyAsset3>.DeriveAsset(asset); var baseIds = CollectionItemIdHelper.GetCollectionItemIds(context.BaseAsset.MyDictionary); var derivedIds = CollectionItemIdHelper.GetCollectionItemIds(context.DerivedAsset.MyDictionary); var basePropertyNode = (AssetNode)((IGraphNode)context.BaseGraph.RootNode).TryGetChild(nameof(Types.MyAsset3.MyDictionary)); var derivedPropertyNode = (AssetNode)((IGraphNode)context.DerivedGraph.RootNode).TryGetChild(nameof(Types.MyAsset3.MyDictionary)); // Delete an item from the derived and then delete the same from the base var derivedDeletedId = derivedIds["Key3"]; derivedPropertyNode.Content.Remove("String3", new Index("Key3")); var baseDeletedId = baseIds["Key3"]; basePropertyNode.Content.Remove("String3", new Index("Key3")); Assert.AreEqual(3, context.BaseAsset.MyDictionary.Count); Assert.AreEqual(3, context.DerivedAsset.MyDictionary.Count); Assert.AreEqual("String1", basePropertyNode.Content.Retrieve(new Index("Key1"))); Assert.AreEqual("String2", basePropertyNode.Content.Retrieve(new Index("Key2"))); Assert.AreEqual("String4", basePropertyNode.Content.Retrieve(new Index("Key4"))); Assert.AreEqual("String1", derivedPropertyNode.Content.Retrieve(new Index("Key1"))); Assert.AreEqual("String2", derivedPropertyNode.Content.Retrieve(new Index("Key2"))); Assert.AreEqual("String4", derivedPropertyNode.Content.Retrieve(new Index("Key4"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key4"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key4"))); Assert.AreEqual(3, baseIds.KeyCount); Assert.AreEqual(0, baseIds.DeletedCount); Assert.AreEqual(3, derivedIds.KeyCount); Assert.AreEqual(0, derivedIds.DeletedCount); Assert.AreEqual(baseIds["Key1"], derivedIds["Key1"]); Assert.AreEqual(baseIds["Key2"], derivedIds["Key2"]); Assert.AreEqual(baseIds["Key4"], derivedIds["Key4"]); Assert.False(derivedIds.IsDeleted(derivedDeletedId)); Assert.False(baseIds.IsDeleted(baseDeletedId)); }
public void TestSimpleDictionaryAddSerialization() { var asset = new Types.MyAsset3 { MyDictionary = { { "Key1", "String1" }, { "Key2", "String2" } } }; var baseIds = CollectionItemIdHelper.GetCollectionItemIds(asset.MyDictionary); baseIds.Add("Key1", IdentifierGenerator.Get(10)); baseIds.Add("Key2", IdentifierGenerator.Get(20)); var context = DeriveAssetTest<Types.MyAsset3>.DeriveAsset(asset); var basePropertyNode = (AssetNode)((IGraphNode)context.BaseGraph.RootNode).TryGetChild(nameof(Types.MyAsset3.MyDictionary)); var derivedPropertyNode = (AssetNode)((IGraphNode)context.DerivedGraph.RootNode).TryGetChild(nameof(Types.MyAsset3.MyDictionary)); // Update derived and check derivedPropertyNode.Content.Add("String3", new Index("Key3")); basePropertyNode.Content.Add("String4", new Index("Key4")); var derivedIds = CollectionItemIdHelper.GetCollectionItemIds(context.DerivedAsset.MyDictionary); var expectedBaseYaml = string.Format(SimpleDictionaryAddBaseYaml.Replace("{}", "{{}}"), baseIds["Key4"]); var expectedDerivedYaml = string.Format(SimpleDictionaryAddDerivedYaml.Replace("{}", "{{}}"), baseIds["Key4"], derivedIds["Key3"]); SerializeAndCompare(context.BaseAssetItem, context.BaseGraph, expectedBaseYaml, false); SerializeAndCompare(context.DerivedAssetItem, context.DerivedGraph, expectedDerivedYaml, true); }
public void TestSimpleDictionaryUpdateSerialization() { var asset = new Types.MyAsset3 { MyDictionary = { { "Key1", "String1" }, { "Key2", "String2" } } }; var ids = CollectionItemIdHelper.GetCollectionItemIds(asset.MyDictionary); ids.Add("Key1", IdentifierGenerator.Get(10)); ids.Add("Key2", IdentifierGenerator.Get(20)); var context = DeriveAssetTest<Types.MyAsset3>.DeriveAsset(asset); var basePropertyNode = (AssetNode)((IGraphNode)context.BaseGraph.RootNode).TryGetChild(nameof(Types.MyAsset3.MyDictionary)); var derivedPropertyNode = (AssetNode)((IGraphNode)context.DerivedGraph.RootNode).TryGetChild(nameof(Types.MyAsset3.MyDictionary)); basePropertyNode.Content.Update("MyBaseString", new Index("Key2")); derivedPropertyNode.Content.Update("MyDerivedString", new Index("Key1")); SerializeAndCompare(context.BaseAssetItem, context.BaseGraph, SimpleDictionaryUpdateBaseYaml, false); SerializeAndCompare(context.DerivedAssetItem, context.DerivedGraph, SimpleDictionaryUpdateDerivedYaml, true); context = DeriveAssetTest<Types.MyAsset3>.LoadFromYaml(SimpleDictionaryUpdateBaseYaml, SimpleDictionaryUpdateDerivedYaml); basePropertyNode = (AssetNode)((IGraphNode)context.BaseGraph.RootNode).TryGetChild(nameof(Types.MyAsset3.MyDictionary)); derivedPropertyNode = (AssetNode)((IGraphNode)context.DerivedGraph.RootNode).TryGetChild(nameof(Types.MyAsset3.MyDictionary)); var baseIds = CollectionItemIdHelper.GetCollectionItemIds(context.BaseAsset.MyDictionary); var derivedIds = CollectionItemIdHelper.GetCollectionItemIds(context.DerivedAsset.MyDictionary); Assert.AreEqual(2, context.BaseAsset.MyDictionary.Count); Assert.AreEqual(2, context.DerivedAsset.MyDictionary.Count); Assert.AreEqual("String1", basePropertyNode.Content.Retrieve(new Index("Key1"))); Assert.AreEqual("MyBaseString", basePropertyNode.Content.Retrieve(new Index("Key2"))); Assert.AreEqual("MyDerivedString", derivedPropertyNode.Content.Retrieve(new Index("Key1"))); Assert.AreEqual("MyBaseString", derivedPropertyNode.Content.Retrieve(new Index("Key2"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, basePropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetContentOverride()); Assert.AreEqual(OverrideType.New, derivedPropertyNode.GetItemOverride(new Index("Key1"))); Assert.AreEqual(OverrideType.Base, derivedPropertyNode.GetItemOverride(new Index("Key2"))); Assert.AreNotSame(baseIds, derivedIds); Assert.AreEqual(2, baseIds.KeyCount); Assert.AreEqual(0, baseIds.DeletedCount); Assert.AreEqual(2, derivedIds.KeyCount); Assert.AreEqual(0, derivedIds.DeletedCount); Assert.AreEqual(baseIds["Key1"], derivedIds["Key1"]); Assert.AreEqual(baseIds["Key2"], derivedIds["Key2"]); }