Exemple #1
0
        public void TestAddNode()
        {
            // create some nodes and initialize graph
            BlurNode       blur0  = new BlurNode();
            BlurNode       blur1  = new BlurNode();
            BlurNode       blur2  = new BlurNode();
            BlurNode       blur3  = new BlurNode();
            BlurNode       blur4  = new BlurNode();
            NoiseInputNode noise0 = new NoiseInputNode();
            NoiseInputNode noise1 = new NoiseInputNode();
            PipelineGraph  graph  = new PipelineGraph();

            graph.AddNode(blur0);
            graph.AddNode(blur1);
            graph.AddNode(noise0);
            graph.AddNode(blur2);
            graph.AddNode(noise1);

            Assert.Equal("Blur", blur0.Name);
            Assert.Equal("Blur 2", blur1.Name);
            Assert.Equal("Blur 3", blur2.Name);
            Assert.Equal("Noise", noise0.Name);
            Assert.Equal("Noise 2", noise1.Name);

            graph.RemoveNode(blur1);
            graph.AddNode(blur3);
            graph.AddNode(blur4);

            Assert.Equal("Blur 2", blur3.Name);
            Assert.Equal("Blur 4", blur4.Name);
        }
Exemple #2
0
        public PipelineGraph BuildPipeline()
        {
            // Create the pipeline pipelineGraph
            var graph = new PipelineGraph();

            // Create the pipeline nodes
            var getGameObjects     = new PP_GameObjectCollector();
            var meshRendererFilter = new PP_FilterByComponent <Renderer>();
            var removeOldCollider  = new PP_RemoveComponents <Collider>();
            var addCollider        = new PP_AddCollider();

            // Add nodes to pipelineGraph
            graph.AddNode(getGameObjects);
            graph.AddNode(meshRendererFilter);
            graph.AddNode(removeOldCollider);
            graph.AddNode(addCollider);

            // Add node connections
            getGameObjects.AddFollowupStep(meshRendererFilter);
            meshRendererFilter.AddFollowupStep(removeOldCollider);
            removeOldCollider.AddFollowupStep(addCollider);
            // removeOldCollider doesn't need a followup step, as it is the last node

            return(graph);
        }
        private void writeConfigurationAndValidate(DoctorReport report, PluginGraph graph)
        {
            var pipelineGraph = new PipelineGraph(graph);
            var writer        = new WhatDoIHaveWriter(pipelineGraph);

            report.WhatDoIHave = writer.GetText();

            var session = new ValidationBuildSession(pipelineGraph, graph.InterceptorLibrary);

            session.PerformValidations();

            if (session.HasBuildErrors())
            {
                report.Result = DoctorResult.BuildErrors;
            }
            else if (session.HasValidationErrors())
            {
                report.Result = DoctorResult.ValidationErrors;
            }

            if (!session.Success)
            {
                report.ErrorMessages = session.BuildErrorMessages();
            }
        }
Exemple #4
0
        public void DfsFindsCorrectNodes()
        {
            // create graph
            AnonymousNode node0 = new AnonymousNode()
            {
                Name = "node0"
            };
            AnonymousNode node1 = new AnonymousNode()
            {
                Name = "node1"
            };
            AnonymousNode node2 = new AnonymousNode(node0)
            {
                Name = "node2"
            };
            AnonymousNode node3 = new AnonymousNode(node0, node1)
            {
                Name = "node3"
            };
            AnonymousNode node4 = new AnonymousNode(node3)
            {
                Name = "node4"
            };
            PipelineGraph graph = new PipelineGraph {
                Nodes = { node0, node1, node2, node3, node4 }
            };

            Assert.Contains <Node>(node0, graph.DepthFirstSearch(node4));
            Assert.Contains <Node>(node1, graph.DepthFirstSearch(node4));
            Assert.DoesNotContain <Node>(node2, graph.DepthFirstSearch(node4));
            Assert.DoesNotContain <Node>(node4, graph.DepthFirstSearch(node3));
        }
        public ObjectBuilder(PipelineGraph pipeline, InterceptorLibrary library)
        {
            if (pipeline == null) throw new ArgumentNullException("pipeline");

            _pipeline = pipeline;
            _library = library;
        }
Exemple #6
0
        public void SetUp()
        {
            family = new PluginFamily(typeof(IService <>));
            PluginGraph.CreateRoot("something").AddFamily(family);

            configuration = new GenericFamilyConfiguration(family, PipelineGraph.BuildEmpty());
        }
Exemple #7
0
        public void PipelineGraphCanDetectCycles()
        {
            // create graph
            AnonymousNode node0 = new AnonymousNode()
            {
                Name = "node0"
            };
            AnonymousNode node1 = new AnonymousNode(node0)
            {
                Name = "node1"
            };
            AnonymousNode node2 = new AnonymousNode(node1)
            {
                Name = "node2"
            };
            AnonymousNode node3 = new AnonymousNode(node2)
            {
                Name = "node3"
            };
            PipelineGraph graph = new PipelineGraph {
                Nodes = { node0, node1, node2, node3 }
            };

            Assert.Equal(false, graph.AddEdge(node3.Outputs[0], node1.Inputs[0]));
            Assert.Equal(true, graph.AddEdge(node2.Outputs[0], node3.Inputs[0]));
        }
        public void transient_cache_of_nested_pipeline_graph_is_a_stateful_cache()
        {
            var plugins = new PluginGraph();

            var pipeline = PipelineGraph.BuildRoot(plugins);

            pipeline.ToNestedGraph().Transients.ShouldBeOfType <LifecycleObjectCache>();
        }
        public void transient_cache_by_default_is_a_nullo()
        {
            var plugins = PluginGraph.CreateRoot();

            var pipeline = PipelineGraph.BuildRoot(plugins);

            pipeline.Transients.ShouldBeOfType <NulloTransientCache>();
        }
        public void transient_cache_of_nested_pipeline_graph_is_a_stateful_cache()
        {
            var plugins = PluginGraph.CreateRoot();

            var pipeline = PipelineGraph.BuildRoot(plugins);

            pipeline.ToNestedGraph().Transients.ShouldBeOfType <ContainerSpecificObjectCache>();
        }
        public void SetUp()
        {
            graph = new PluginGraph();
            pipeline = new PipelineGraph(graph);
            library = new InterceptorLibrary();

            builder = new ObjectBuilder(pipeline, library);
        }
        public void SetUp()
        {
            graph    = new PluginGraph();
            pipeline = new PipelineGraph(graph);
            library  = new InterceptorLibrary();

            builder = new ObjectBuilder(pipeline, library);
        }
Exemple #13
0
        public void build_root_for_default_tracking_style()
        {
            var pluginGraph = PluginGraph.CreateRoot();

            pluginGraph.TransientTracking = TransientTracking.DefaultNotTrackedAtRoot;
            var graph = PipelineGraph.BuildRoot(pluginGraph);

            graph.Transients.ShouldBeOfType <NulloTransientCache>();
        }
Exemple #14
0
        public void build_root_for_tracked_transients()
        {
            var pluginGraph = PluginGraph.CreateRoot();

            pluginGraph.TransientTracking = TransientTracking.ExplicitReleaseMode;
            var graph = PipelineGraph.BuildRoot(pluginGraph);

            graph.Transients.ShouldBeOfType <TrackingTransientCache>();
        }
Exemple #15
0
        public void default_lifecycle_not_set_on_any_level()
        {
            var graph = PluginGraph.CreateRoot();

            var pipeline = PipelineGraph.BuildRoot(graph).Profiles.For("Red");

            pipeline.Instances.DefaultLifecycleFor(typeof(IGateway))
            .ShouldBeNull();
        }
Exemple #16
0
        public ObjectBuilder(PipelineGraph pipeline, InterceptorLibrary library)
        {
            if (pipeline == null)
            {
                throw new ArgumentNullException("pipeline");
            }

            _pipeline = pipeline;
            _library  = library;
        }
        public void singleton_is_just_the_plugin_graph_singletons()
        {
            var plugins = PluginGraph.CreateRoot();

            plugins.SingletonCache.ShouldNotBeNull();

            var pipeline = PipelineGraph.BuildRoot(plugins);

            pipeline.Singletons.ShouldBeTheSameAs(plugins.SingletonCache);
        }
        public void Throw_200_When_trying_to_build_an_instance_that_cannot_be_found()
        {
            var graph = new PipelineGraph(new PluginGraph());

            assertActionThrowsErrorCode(200, delegate
            {
                var session = new BuildSession(graph, null);
                session.CreateInstance(typeof(IGateway), "Gateway that is not configured");
            });
        }
        public void When_calling_CreateInstance_if_no_default_can_be_found_throw_202()
        {
            var graph = new PipelineGraph(new PluginGraph());

            assertActionThrowsErrorCode(202, delegate
            {
                var session = new BuildSession(graph, null);
                session.CreateInstance(typeof(IGateway));
            });
        }
Exemple #20
0
        public void Throw_exception_When_trying_to_build_an_instance_that_cannot_be_found()
        {
            var graph = PipelineGraph.BuildEmpty();

            var ex = Exception <StructureMapConfigurationException> .ShouldBeThrownBy(() => {
                var session = new BuildSession(graph);
                session.CreateInstance(typeof(IGateway), "Gateway that is not configured");
            });

            ex.Title.ShouldEqual("Could not find an Instance named 'Gateway that is not configured' for PluginType StructureMap.Testing.Widget3.IGateway");
        }
Exemple #21
0
        public void lifecyle_for_pluginType_not_explicitly_set_falls_back_to_parent()
        {
            var graph = PluginGraph.CreateRoot();

            graph.Families[typeof(IGateway)].SetLifecycleTo <SingletonLifecycle>();

            var pipeline = PipelineGraph.BuildRoot(graph).Profiles.For("Red");

            pipeline.Instances.DefaultLifecycleFor(typeof(IGateway))
            .ShouldBeOfType <SingletonLifecycle>();
        }
        public void FindAPluginFamilyForAGenericTypeFromPluginTypeName()
        {
            Type        serviceType   = typeof(IService <string>);
            PluginGraph pluginGraph   = PluginGraph.BuildGraphFromAssembly(serviceType.Assembly);
            var         pipelineGraph = new PipelineGraph(pluginGraph);

            Type stringService = typeof(IService <string>);

            IInstanceFactory factory = pipelineGraph.ForType(stringService);

            Assert.AreEqual(stringService, factory.PluginType);
        }
        public void lifecycle_for_pluginType_explicitly_set()
        {
            var graph   = new PluginGraph();
            var profile = graph.Profile("Red");

            profile.Families[typeof(IGateway)].SetLifecycleTo <SingletonLifecycle>();

            var pipeline = PipelineGraph.BuildRoot(graph).Profiles.For("Red");

            pipeline.Instances.DefaultLifecycleFor(typeof(IGateway))
            .ShouldBeOfType <SingletonLifecycle>();
        }
Exemple #24
0
        public void When_calling_GetInstance_if_no_default_can_be_found_throw_202()
        {
            var graph = PipelineGraph.BuildEmpty();


            var ex = Exception <StructureMapConfigurationException> .ShouldBeThrownBy(() => {
                var session = new BuildSession(graph);
                session.GetInstance(typeof(IGateway));
            });

            ex.Context.ShouldContain("There is no configuration specified for StructureMap.Testing.Widget3.IGateway");

            ex.Title.ShouldEqual("No default Instance is registered and cannot be automatically determined for type 'StructureMap.Testing.Widget3.IGateway'");
        }
Exemple #25
0
        public void TestReturnNumberOfFramesToPrecompute()
        {
            // create graph
            AnonymousNode node0 = new AnonymousNode()
            {
                Name = "node0"
            };
            AnonymousNode node1 = new AnonymousNode()
            {
                Name = "node1"
            };
            AnonymousNode node2 = new AnonymousNode(node0)
            {
                Name = "node2"
            };
            AnonymousNode node3 = new AnonymousNode(node0, node1)
            {
                Name = "node3"
            };
            AnonymousNode node4 = new AnonymousNode(node3)
            {
                Name = "node4"
            };
            PipelineGraph graph = new PipelineGraph {
                Nodes = { node0, node1, node2, node3, node4 }
            };

            //set number of frames to precompute in the graph's nodes
            node0.SettableNumberOfFramesToPrecompute = 0;
            node1.SettableNumberOfFramesToPrecompute = 1;
            node2.SettableNumberOfFramesToPrecompute = 2;
            node3.SettableNumberOfFramesToPrecompute = 4;
            node4.SettableNumberOfFramesToPrecompute = 8;

            List <AnonymousNode> nodeList = new List <AnonymousNode>();

            nodeList.Add(node0);
            Assert.Equal(0, graph.NumberOfTicksToPrecompute(nodeList));
            nodeList.Add(node1);
            Assert.Equal(1, graph.NumberOfTicksToPrecompute(nodeList));
            nodeList.Add(node2);
            Assert.Equal(2, graph.NumberOfTicksToPrecompute(nodeList));
            nodeList.Add(node3);
            Assert.Equal(5, graph.NumberOfTicksToPrecompute(nodeList));
            nodeList.Add(node4);
            Assert.Equal(13, graph.NumberOfTicksToPrecompute(nodeList));
        }
        public void SetUp()
        {
            var registry = new Registry();

            registry.BuildInstancesOf <Rule>();
            registry.Scan(x =>
            {
                x.Assembly("StructureMap.Testing.Widget");
                x.Assembly("StructureMap.Testing.Widget2");
            });

            PluginGraph graph = registry.Build();

            var pipelineGraph = new PipelineGraph(graph);

            _session = new BuildSession(pipelineGraph, graph.InterceptorLibrary);
        }
        public void CanMakeAClassWithNoConstructorParametersWithoutADefinedMemento()
        {
            var registry = new Registry();
            registry.Scan(x => x.Assembly("StructureMap.Testing.Widget3"));

            registry.BuildInstancesOf<IGateway>();

            PluginGraph graph = registry.Build();
            var pipelineGraph = new PipelineGraph(graph);

            var session = new BuildSession(graph);

            var gateway =
                (DefaultGateway) session.CreateInstance(typeof (IGateway), "Default");

            Assert.IsNotNull(gateway);
        }
Exemple #28
0
        public void CanMakeAClassWithNoConstructorParametersWithoutADefinedMemento()
        {
            var registry = new Registry();

            registry.Scan(x => x.Assembly("StructureMap.Testing.Widget3"));

            registry.BuildInstancesOf <IGateway>();

            PluginGraph graph         = registry.Build();
            var         pipelineGraph = new PipelineGraph(graph);

            var session = new BuildSession(graph);

            var gateway =
                (DefaultGateway)session.CreateInstance(typeof(IGateway), "Default");

            Assert.IsNotNull(gateway);
        }
        public void SetUp()
        {
            var registry = new Registry();

            registry.ForRequestedType(typeof(IService <>))
            .AddConcreteType(typeof(Service <>))
            .AddConcreteType(typeof(Service2 <>));

            registry.BuildInstancesOf <ISomething>()
            .TheDefaultIsConcreteType <SomethingOne>()
            .AddConcreteType <SomethingTwo>();

            registry.BuildInstancesOf <IServiceProvider>().AddConcreteType <MyDataSet>().AddConcreteType <MyDataView>();

            PluginGraph graph    = registry.Build();
            var         pipeline = new PipelineGraph(graph);

            _model = new Container(graph).Model;

            _container = new Container(graph);
        }
        public when_the_singleton_Lifecycle_ejects_all()
        {
            lifecycle = new SingletonLifecycle();

            disposable1 = new StubDisposable();
            disposable2 = new StubDisposable();

            pipeline = PipelineGraph.BuildRoot(PluginGraph.CreateRoot());

            lifecycle.FindCache(pipeline)
            .As <LifecycleObjectCache>()
            .Set(typeof(IGateway), new StubInstance("a"), disposable1);
            lifecycle.FindCache(pipeline)
            .As <LifecycleObjectCache>()
            .Set(typeof(IGateway), new StubInstance("b"), disposable2);
            lifecycle.FindCache(pipeline)
            .As <LifecycleObjectCache>()
            .Set(typeof(IGateway), new StubInstance("c"), new object());

            lifecycle.EjectAll(pipeline);
        }
Exemple #31
0
        public void TestRemoveNode()
        {
            // create graph
            AnonymousNode node0 = new AnonymousNode()
            {
                Name = "node0"
            };
            AnonymousNode node1 = new AnonymousNode()
            {
                Name = "node1"
            };
            AnonymousNode node2 = new AnonymousNode(node0, node1)
            {
                Name = "node2"
            };
            AnonymousNode node3 = new AnonymousNode(node2)
            {
                Name = "node3"
            };
            AnonymousNode node4 = new AnonymousNode(node2)
            {
                Name = "node4"
            };
            PipelineGraph graph = new PipelineGraph {
                Nodes = { node0, node1, node2, node3, node4 }
            };

            graph.RemoveNode(node2);

            foreach (Node.Input input in node3.Inputs)
            {
                Assert.Equal(null, input.Source);
            }

            foreach (Node.Input input in node4.Inputs)
            {
                Assert.Equal(null, input.Source);
            }
        }
Exemple #32
0
        public void SetUp()
        {
            lifecycle = new SingletonLifecycle();

            disposable1 = new StubDisposable();
            disposable2 = new StubDisposable();

            pipeline = PipelineGraph.BuildRoot(new PluginGraph());

            lifecycle.FindCache(pipeline)
            .As <LifecycleObjectCache>()
            .Set(typeof(IGateway), new StubInstance("a"), disposable1);
            lifecycle.FindCache(pipeline)
            .As <LifecycleObjectCache>()
            .Set(typeof(IGateway), new StubInstance("b"), disposable2);
            lifecycle.FindCache(pipeline)
            .As <LifecycleObjectCache>()
            .Set(typeof(IGateway), new StubInstance("c"), new object());


            lifecycle.EjectAll(pipeline);
        }
Exemple #33
0
        private void writeConfigurationAndValidate(DoctorReport report, PluginGraph graph)
        {
            var pipelineGraph = new PipelineGraph(graph);
            var writer = new WhatDoIHaveWriter(pipelineGraph);
            report.WhatDoIHave = writer.GetText();

            var session = new ValidationBuildSession(pipelineGraph, graph.InterceptorLibrary);
            session.PerformValidations();

            if (session.HasBuildErrors())
            {
                report.Result = DoctorResult.BuildErrors;
            }
            else if (session.HasValidationErrors())
            {
                report.Result = DoctorResult.ValidationErrors;
            }

            if (!session.Success)
            {
                report.ErrorMessages = session.BuildErrorMessages();
            }
        }
 public InstanceFactoryTypeConfiguration(Type pluginType, IContainer container, PipelineGraph graph)
 {
     _pluginType = pluginType;
     _container = container;
     _graph = graph;
 }
        public void SetUp()
        {
            var registry = new Registry();
            registry.ForRequestedType(typeof (IService<>))
                .AddConcreteType(typeof (Service<>))
                .AddConcreteType(typeof (Service2<>));

            registry.BuildInstancesOf<ISomething>()
                .TheDefaultIsConcreteType<SomethingOne>()
                .AddConcreteType<SomethingTwo>();

            registry.BuildInstancesOf<IServiceProvider>().AddConcreteType<MyDataSet>().AddConcreteType<MyDataView>();

            PluginGraph graph = registry.Build();
            var pipeline = new PipelineGraph(graph);

            _model = new Container(graph).Model;

            _container = new Container(graph);
        }
        public void When_calling_CreateInstance_if_no_default_can_be_found_throw_202()
        {
            var graph = new PipelineGraph(new PluginGraph());

            assertActionThrowsErrorCode(202, delegate
            {
                var session = new BuildSession(graph, null);
                session.CreateInstance(typeof (IGateway));
            });
        }
 public WhatDoIHaveWriter(PipelineGraph graph)
 {
     _graph = graph;
 }
 public ValidationBuildSession(PipelineGraph pipelineGraph, InterceptorLibrary interceptorLibrary)
     : base(pipelineGraph, interceptorLibrary)
 {
 }
        public void SetUp()
        {
            var registry = new Registry();
            registry.BuildInstancesOf<Rule>();
            registry.Scan(x =>
            {
                x.Assembly("StructureMap.Testing.Widget");
                x.Assembly("StructureMap.Testing.Widget2");
            });

            PluginGraph graph = registry.Build();

            var pipelineGraph = new PipelineGraph(graph);
            _session = new BuildSession(pipelineGraph, graph.InterceptorLibrary);
        }
Exemple #40
0
 public WhatDoIHaveWriter(PipelineGraph graph)
 {
     _graph = graph;
 }
        public void Throw_200_When_trying_to_build_an_instance_that_cannot_be_found()
        {
            var graph = new PipelineGraph(new PluginGraph());

            assertActionThrowsErrorCode(200, delegate
            {
                var session = new BuildSession(graph, null);
                session.CreateInstance(typeof (IGateway), "Gateway that is not configured");
            });
        }