public IEnumerator DraggingFromPortCreateGhostEdge()
        {
            var nodeModel = GraphModel.CreateNode <SingleOutputNodeModel>();

            MarkGraphViewStateDirty();
            yield return(null);

            var portModel = nodeModel.Ports.First();
            var port      = portModel.GetUI <Port>(GraphView);

            Assert.IsNotNull(port);
            Assert.IsNull(port.EdgeConnector.edgeDragHelper.edgeCandidateModel);

            var     portConnector = port.SafeQ(PortConnectorPart.connectorUssName);
            var     clickPosition = portConnector.parent.LocalToWorld(portConnector.layout.center);
            Vector2 move          = new Vector2(0, 100);

            EventHelper.DragToNoRelease(clickPosition, clickPosition + move);
            yield return(null);

            // edgeCandidateModel != null is the sign that we have a ghost edge
            Assert.IsNotNull(port.EdgeConnector.edgeDragHelper.edgeCandidateModel);

            EventHelper.MouseUpEvent(clickPosition + move);
            yield return(null);
        }