public void TestAddBaseRemoveDerivedAndAddInBaseWithSubDerived() { var asset = new Types.MyAsset2 { MyStrings = { "String1", "String2" } }; var context = DeriveAssetTest <Types.MyAsset2, Types.MyAssetBasePropertyGraph> .DeriveAsset(asset); var baseIds = CollectionItemIdHelper.GetCollectionItemIds(context.BaseAsset.MyStrings); var derivedIds = CollectionItemIdHelper.GetCollectionItemIds(context.DerivedAsset.MyStrings); var subDerivedIds = CollectionItemIdHelper.GetCollectionItemIds(context.SubDerivedAsset.MyStrings); var basePropertyNode = context.BaseGraph.RootNode[nameof(Types.MyAsset2.MyStrings)]; var derivedPropertyNode = context.DerivedGraph.RootNode[nameof(Types.MyAsset2.MyStrings)]; var subDerivedPropertyNode = context.SubDerivedGraph.RootNode[nameof(Types.MyAsset2.MyStrings)]; // Delete an item from the derived and then update the same from the base basePropertyNode.Target.Add("String3"); var derivedDeletedId = derivedIds[2]; derivedPropertyNode.Target.Remove("String3", new NodeIndex(2)); basePropertyNode.Target.Add("String4"); Assert.Equal(4, context.BaseAsset.MyStrings.Count); Assert.Equal(3, context.DerivedAsset.MyStrings.Count); Assert.Equal(3, context.SubDerivedAsset.MyStrings.Count); Assert.Equal("String1", basePropertyNode.Retrieve(new NodeIndex(0))); Assert.Equal("String2", basePropertyNode.Retrieve(new NodeIndex(1))); Assert.Equal("String3", basePropertyNode.Retrieve(new NodeIndex(2))); Assert.Equal("String4", basePropertyNode.Retrieve(new NodeIndex(3))); Assert.Equal("String1", derivedPropertyNode.Retrieve(new NodeIndex(0))); Assert.Equal("String2", derivedPropertyNode.Retrieve(new NodeIndex(1))); Assert.Equal("String4", derivedPropertyNode.Retrieve(new NodeIndex(2))); Assert.Equal("String1", subDerivedPropertyNode.Retrieve(new NodeIndex(0))); Assert.Equal("String2", subDerivedPropertyNode.Retrieve(new NodeIndex(1))); Assert.Equal("String4", subDerivedPropertyNode.Retrieve(new NodeIndex(2))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(0))); Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(2))); Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new NodeIndex(3))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); Assert.Equal(OverrideType.Base, subDerivedPropertyNode.GetContentOverride()); Assert.Equal(OverrideType.Base, subDerivedPropertyNode.Target.GetItemOverride(new NodeIndex(0))); Assert.Equal(OverrideType.Base, subDerivedPropertyNode.Target.GetItemOverride(new NodeIndex(1))); Assert.Equal(OverrideType.Base, subDerivedPropertyNode.Target.GetItemOverride(new NodeIndex(2))); Assert.Equal(4, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); Assert.Equal(3, derivedIds.KeyCount); Assert.Equal(1, derivedIds.DeletedCount); Assert.Equal(3, subDerivedIds.KeyCount); Assert.Equal(0, subDerivedIds.DeletedCount); Assert.Equal(baseIds[0], derivedIds[0]); Assert.Equal(baseIds[1], derivedIds[1]); Assert.Equal(baseIds[3], derivedIds[2]); Assert.Equal(derivedIds[0], subDerivedIds[0]); Assert.Equal(derivedIds[1], subDerivedIds[1]); Assert.Equal(derivedIds[2], subDerivedIds[2]); Assert.True(derivedIds.IsDeleted(derivedDeletedId)); }
public void TestCollectionItemIdentifierWithDuplicates() { var container = new AssetPropertyGraphContainer(new AssetNodeContainer { NodeBuilder = { NodeFactory = new AssetNodeFactory() } }); var asset = new Types.MyAsset2 { MyStrings = { "aaa", "bbb", "ccc" } }; var ids = CollectionItemIdHelper.GetCollectionItemIds(asset.MyStrings); ids.Add(0, IdentifierGenerator.Get(100)); ids.Add(1, IdentifierGenerator.Get(200)); ids.Add(2, IdentifierGenerator.Get(100)); var assetItem = new AssetItem("MyAsset", asset); Assert.Equal(IdentifierGenerator.Get(100), ids[0]); Assert.Equal(IdentifierGenerator.Get(200), ids[1]); Assert.Equal(IdentifierGenerator.Get(100), ids[2]); var graph = AssetQuantumRegistry.ConstructPropertyGraph(container, assetItem, null); Assert.IsAssignableFrom <AssetObjectNode>(graph.RootNode); Assert.True(CollectionItemIdHelper.TryGetCollectionItemIds(asset.MyStrings, out ids)); Assert.Equal(3, ids.KeyCount); Assert.Equal(0, ids.DeletedCount); Assert.Equal(IdentifierGenerator.Get(100), ids[0]); Assert.Equal(IdentifierGenerator.Get(200), ids[1]); Assert.NotEqual(IdentifierGenerator.Get(100), ids[2]); Assert.NotEqual(IdentifierGenerator.Get(200), ids[2]); }
public void TestSimpleCollectionUpdate() { var container = new AssetPropertyGraphContainer(new AssetNodeContainer { NodeBuilder = { NodeFactory = new AssetNodeFactory() } }); var asset = new Types.MyAsset2 { MyStrings = { "aaa", "bbb", "ccc" } }; var assetItem = new AssetItem("MyAsset", asset); var graph = AssetQuantumRegistry.ConstructPropertyGraph(container, assetItem, null); var node = graph.RootNode[nameof(Types.MyAsset2.MyStrings)]; //var ids = CollectionItemIdHelper.TryGetCollectionItemIds(asset.MyStrings, out itemIds); }
public void TestSimpleCollectionRemoveDeleted() { var asset = new Types.MyAsset2 { MyStrings = { "String1", "String2", "String3", "String4" } }; var context = DeriveAssetTest <Types.MyAsset2, Types.MyAssetBasePropertyGraph> .DeriveAsset(asset); var baseIds = CollectionItemIdHelper.GetCollectionItemIds(context.BaseAsset.MyStrings); var derivedIds = CollectionItemIdHelper.GetCollectionItemIds(context.DerivedAsset.MyStrings); var basePropertyNode = context.BaseGraph.RootNode[nameof(Types.MyAsset2.MyStrings)]; var derivedPropertyNode = context.DerivedGraph.RootNode[nameof(Types.MyAsset2.MyStrings)]; // Delete an item from the derived and then delete the same from the base var derivedDeletedId = derivedIds[2]; var baseDeletedId = baseIds[2]; derivedPropertyNode.Target.Remove("String3", new Index(2)); basePropertyNode.Target.Remove("String3", new Index(2)); Assert.Equal(3, context.BaseAsset.MyStrings.Count); Assert.Equal(3, context.DerivedAsset.MyStrings.Count); Assert.Equal("String1", basePropertyNode.Retrieve(new Index(0))); Assert.Equal("String2", basePropertyNode.Retrieve(new Index(1))); Assert.Equal("String4", basePropertyNode.Retrieve(new Index(2))); Assert.Equal("String1", derivedPropertyNode.Retrieve(new Index(0))); Assert.Equal("String2", derivedPropertyNode.Retrieve(new Index(1))); Assert.Equal("String4", derivedPropertyNode.Retrieve(new Index(2))); Assert.Equal(OverrideType.Base, basePropertyNode.GetContentOverride()); Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(0))); Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(1))); Assert.Equal(OverrideType.Base, basePropertyNode.Target.GetItemOverride(new Index(2))); Assert.Equal(OverrideType.Base, derivedPropertyNode.GetContentOverride()); Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(0))); Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(1))); Assert.Equal(OverrideType.Base, derivedPropertyNode.Target.GetItemOverride(new Index(2))); Assert.Equal(3, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); Assert.Equal(3, derivedIds.KeyCount); Assert.Equal(0, derivedIds.DeletedCount); Assert.Equal(baseIds[0], derivedIds[0]); Assert.Equal(baseIds[1], derivedIds[1]); Assert.Equal(baseIds[2], derivedIds[2]); Assert.False(derivedIds.IsDeleted(derivedDeletedId)); Assert.False(baseIds.IsDeleted(baseDeletedId)); }
public void TestCollectionConstruction() { var container = new AssetPropertyGraphContainer(new AssetNodeContainer { NodeBuilder = { NodeFactory = new AssetNodeFactory() } }); var asset = new Types.MyAsset2 { MyStrings = { "aaa", "bbb", "ccc" } }; var assetItem = new AssetItem("MyAsset", asset); var graph = AssetQuantumRegistry.ConstructPropertyGraph(container, assetItem, null); Assert.IsAssignableFrom <AssetObjectNode>(graph.RootNode); CollectionItemIdentifiers ids; Assert.True(CollectionItemIdHelper.TryGetCollectionItemIds(asset.MyStrings, out ids)); Assert.Equal(3, ids.KeyCount); Assert.Equal(0, ids.DeletedCount); Assert.True(ids.ContainsKey(0)); Assert.True(ids.ContainsKey(1)); Assert.True(ids.ContainsKey(2)); }
public void TestSimpleCollectionAddMultipleAndCheckOrder() { var asset = new Types.MyAsset2 { MyStrings = { "String1", "String2", "String3", "String4" } }; var context = DeriveAssetTest <Types.MyAsset2, Types.MyAssetBasePropertyGraph> .DeriveAsset(asset); var baseIds = CollectionItemIdHelper.GetCollectionItemIds(context.BaseAsset.MyStrings); var derivedIds = CollectionItemIdHelper.GetCollectionItemIds(context.DerivedAsset.MyStrings); var basePropertyNode = context.BaseGraph.RootNode[nameof(Types.MyAsset2.MyStrings)]; var derivedPropertyNode = context.DerivedGraph.RootNode[nameof(Types.MyAsset2.MyStrings)]; derivedPropertyNode.Target.Add("String3.5", new NodeIndex(3)); derivedPropertyNode.Target.Add("String1.5", new NodeIndex(1)); Assert.Equal(6, context.DerivedAsset.MyStrings.Count); AssertCollection(derivedPropertyNode, "String1", "String1.5", "String2", "String3", "String3.5", "String4"); basePropertyNode.Target.Add("String0.1", new NodeIndex(0)); Assert.Equal(5, context.BaseAsset.MyStrings.Count); AssertCollection(basePropertyNode, "String0.1", "String1", "String2", "String3", "String4"); Assert.Equal(7, context.DerivedAsset.MyStrings.Count); AssertCollection(derivedPropertyNode, "String0.1", "String1", "String1.5", "String2", "String3", "String3.5", "String4"); basePropertyNode.Target.Add("String1.1", new NodeIndex(2)); Assert.Equal(6, context.BaseAsset.MyStrings.Count); AssertCollection(basePropertyNode, "String0.1", "String1", "String1.1", "String2", "String3", "String4"); Assert.Equal(8, context.DerivedAsset.MyStrings.Count); AssertCollection(derivedPropertyNode, "String0.1", "String1", "String1.1", "String1.5", "String2", "String3", "String3.5", "String4"); basePropertyNode.Target.Add("String2.1", new NodeIndex(4)); Assert.Equal(7, context.BaseAsset.MyStrings.Count); AssertCollection(basePropertyNode, "String0.1", "String1", "String1.1", "String2", "String2.1", "String3", "String4"); Assert.Equal(9, context.DerivedAsset.MyStrings.Count); AssertCollection(derivedPropertyNode, "String0.1", "String1", "String1.1", "String1.5", "String2", "String2.1", "String3", "String3.5", "String4"); basePropertyNode.Target.Add("String3.1", new NodeIndex(6)); Assert.Equal(8, context.BaseAsset.MyStrings.Count); AssertCollection(basePropertyNode, "String0.1", "String1", "String1.1", "String2", "String2.1", "String3", "String3.1", "String4"); Assert.Equal(10, context.DerivedAsset.MyStrings.Count); AssertCollection(derivedPropertyNode, "String0.1", "String1", "String1.1", "String1.5", "String2", "String2.1", "String3", "String3.1", "String3.5", "String4"); basePropertyNode.Target.Add("String4.1", new NodeIndex(8)); Assert.Equal(9, context.BaseAsset.MyStrings.Count); AssertCollection(basePropertyNode, "String0.1", "String1", "String1.1", "String2", "String2.1", "String3", "String3.1", "String4", "String4.1"); Assert.Equal(11, context.DerivedAsset.MyStrings.Count); AssertCollection(derivedPropertyNode, "String0.1", "String1", "String1.1", "String1.5", "String2", "String2.1", "String3", "String3.1", "String3.5", "String4", "String4.1"); Assert.Equal(9, baseIds.KeyCount); Assert.Equal(0, baseIds.DeletedCount); Assert.Equal(11, derivedIds.KeyCount); Assert.Equal(0, derivedIds.DeletedCount); Assert.Equal(baseIds[0], derivedIds[0]); Assert.Equal(baseIds[1], derivedIds[1]); Assert.Equal(baseIds[2], derivedIds[2]); Assert.Equal(baseIds[3], derivedIds[4]); Assert.Equal(baseIds[4], derivedIds[5]); Assert.Equal(baseIds[5], derivedIds[6]); Assert.Equal(baseIds[6], derivedIds[7]); Assert.Equal(baseIds[7], derivedIds[9]); Assert.Equal(baseIds[8], derivedIds[10]); }