public void StandardFactory_Throws()
        {
            var graph             = new BidirectionalGraph <int, Edge <int> >();
            var verticesPositions = new Dictionary <int, Point>();
            var verticesSizes     = new Dictionary <int, Size>();
            var context           = new LayoutContext <int, Edge <int>, BidirectionalGraph <int, Edge <int> > >(
                graph,
                verticesPositions,
                verticesSizes,
                LayoutMode.Simple);

            var factory = new StandardEdgeRoutingAlgorithmFactory <int, Edge <int>, BidirectionalGraph <int, Edge <int> > >();

            // ReSharper disable ReturnValueOfPureMethodIsNotUsed
            // ReSharper disable AssignNullToNotNullAttribute
            Assert.Throws <ArgumentNullException>(
                () => factory.CreateAlgorithm(null, context, null));
            Assert.Throws <ArgumentNullException>(
                () => factory.CreateAlgorithm(string.Empty, null, null));
            Assert.Throws <ArgumentNullException>(
                () => factory.CreateAlgorithm(null, null, null));

            Assert.Throws <ArgumentNullException>(
                () => factory.CreateParameters(null, new EdgeRoutingParameters()));
            Assert.Throws <ArgumentNullException>(
                () => factory.CreateParameters(null, null));

            Assert.Throws <ArgumentNullException>(() => factory.GetAlgorithmType(null));
            // ReSharper restore AssignNullToNotNullAttribute
            // ReSharper restore ReturnValueOfPureMethodIsNotUsed
        }
        public void StandardFactory()
        {
            var graph             = new BidirectionalGraph <int, Edge <int> >();
            var verticesPositions = new Dictionary <int, Point>();
            var verticesSizes     = new Dictionary <int, Size>();
            var context           = new LayoutContext <int, Edge <int>, BidirectionalGraph <int, Edge <int> > >(
                graph,
                verticesPositions,
                verticesSizes,
                LayoutMode.Simple);

            var factory = new StandardEdgeRoutingAlgorithmFactory <int, Edge <int>, BidirectionalGraph <int, Edge <int> > >();

            CollectionAssert.IsEmpty(factory.AlgorithmTypes);


            Assert.IsNull(factory.CreateAlgorithm(
                              string.Empty,
                              context,
                              null));

            Assert.IsNull(factory.CreateAlgorithm(
                              string.Empty,
                              context,
                              new EdgeRoutingParameters()));

            Assert.IsNull(factory.CreateAlgorithm(
                              "TestType",
                              context,
                              new EdgeRoutingParameters()));


            var parameters = new EdgeRoutingParameters();
            IEdgeRoutingParameters createdParameters = factory.CreateParameters(string.Empty, null);

            Assert.IsInstanceOf <EdgeRoutingParameters>(createdParameters);
            Assert.AreNotSame(parameters, createdParameters);

            createdParameters = factory.CreateParameters(string.Empty, null);
            Assert.IsInstanceOf <EdgeRoutingParameters>(createdParameters);
            Assert.AreNotSame(parameters, createdParameters);

            createdParameters = factory.CreateParameters("TestType", null);
            Assert.IsInstanceOf <EdgeRoutingParameters>(createdParameters);
            Assert.AreNotSame(parameters, createdParameters);

            createdParameters = factory.CreateParameters("TestType", null);
            Assert.IsInstanceOf <EdgeRoutingParameters>(createdParameters);
            Assert.AreNotSame(parameters, createdParameters);


            Assert.IsFalse(factory.IsValidAlgorithm(null));
            Assert.IsFalse(factory.IsValidAlgorithm(string.Empty));
            Assert.IsFalse(factory.IsValidAlgorithm("TestType"));


            var algorithm = new TestEdgeRoutingAlgorithm(graph, verticesPositions);

            Assert.IsEmpty(factory.GetAlgorithmType(algorithm));
        }