public void Delete_Vertex_With_Related_Edges_Test() { //begin setup var graph = new Model.GraphArea(); var v1 = new DataVertex(100) { }; var v2 = new DataVertex(103) { }; var v3 = new DataVertex(105) { }; var vc1 = new VertexControl(v1); var vc2 = new VertexControl(v2); var vc3 = new VertexControl(v3); var e1 = new DataEdge(v1, v2); var ec1 = new EdgeControl(vc1, vc2, e1); var e2 = new DataEdge(v1, v3); var ec2 = new EdgeControl(vc1, vc3, e2); graph.Graph.AddVertex(v1); graph.AddVertex(v1, vc1); graph.Graph.AddVertex(v2); graph.AddVertex(v2, vc2); graph.Graph.AddVertex(v3); graph.AddVertex(v3, vc3); graph.Graph.AddEdge(e1); graph.AddEdge(e1, ec1); graph.Graph.AddEdge(e2); graph.AddEdge(e2, ec2); //end setup bool doCalled = false; bool undoCalled = false; var dvo = new DeleteVertexOperation(graph, v1, (dv, vc) => { doCalled = true; }, (dv) => { undoCalled = true; }); dvo.Do(); Assert.IsTrue(doCalled); Assert.IsFalse(graph.VertexList.Any(v => v.Key.Id == v1.Id)); Assert.IsTrue(graph.VertexList.Any(v => v.Key.Id == v2.Id)); Assert.IsTrue(graph.VertexList.Any(v => v.Key.Id == v3.Id)); Assert.IsFalse(graph.EdgesList.Any(e => e.Key == e1)); Assert.IsFalse(graph.EdgesList.Any(e => e.Key == e2)); dvo.UnDo(); Assert.IsTrue(undoCalled); Assert.IsTrue(graph.VertexList.Any(v => v.Key.Id == v1.Id)); Assert.IsTrue(graph.VertexList.Any(v => v.Key.Id == v2.Id)); Assert.IsTrue(graph.VertexList.Any(v => v.Key.Id == v3.Id)); Assert.IsTrue(graph.EdgesList.Any(e => e.Key == e1)); Assert.IsTrue(graph.EdgesList.Any(e => e.Key == e2)); dvo.Do(); Assert.IsTrue(doCalled); Assert.IsFalse(graph.VertexList.Any(v => v.Key.Id == v1.Id)); Assert.IsTrue(graph.VertexList.Any(v => v.Key.Id == v2.Id)); Assert.IsTrue(graph.VertexList.Any(v => v.Key.Id == v3.Id)); Assert.IsFalse(graph.EdgesList.Any(e => e.Key == e1)); Assert.IsFalse(graph.EdgesList.Any(e => e.Key == e2)); }