Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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]);
        }
Esempio n. 3
0
 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);
 }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
        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]);
        }