private static void SerializeAndRead <TVertex, TEdge, TGraph>( [NotNull] XmlSerializableGraph <TVertex, TEdge, TGraph> graph, [NotNull, InstantHandle] Action <string> checkSerializedContent) where TEdge : IEdge <TVertex> where TGraph : IMutableVertexAndEdgeListGraph <TVertex, TEdge>, new() { using (var memory = new MemoryStream()) { var writer = new StreamWriter(memory); try { var serializer = new XmlSerializer(graph.GetType()); serializer.Serialize(writer, graph); memory.Position = 0; using (var reader = new StreamReader(memory)) { checkSerializedContent(reader.ReadToEnd()); } } finally { writer.Dispose(); } } }
public void XmlEdgeList_Add_Throws() { var graph = new AdjacencyGraph <int, Edge <int> >(); var edgeList = new XmlSerializableGraph <int, Edge <int>, AdjacencyGraph <int, Edge <int> > > .XmlEdgeList(graph); // ReSharper disable once AssignNullToNotNullAttribute Assert.Throws <ArgumentNullException>(() => edgeList.Add(null)); }
public void SerializeToXml_Empty() { var emptyGraph = new XmlSerializableGraph <Person, XmlSerializableEdge <Person>, AdjacencyGraph <Person, XmlSerializableEdge <Person> > >(); SerializeAndRead( emptyGraph, content => { var regex = new Regex($@"{Regex.Escape(XmlHeader)}\s*<graph\s*.*?\s*>\s*<vertices\s*\/>\s*<edges\s*\/>\s*<\/graph>"); Assert.IsTrue(regex.Match(content).Success); }); }
public void XmlSerializableGraph() { var wrappedGraph = new AdjacencyGraph <int, Edge <int> >(); var graph = new XmlSerializableGraph <int, Edge <int>, AdjacencyGraph <int, Edge <int> > >(wrappedGraph); CollectionAssert.IsEmpty(graph.Vertices); CollectionAssert.IsEmpty(graph.Edges); var vertices = new XmlSerializableGraph < int, Edge <int>, AdjacencyGraph <int, Edge <int> > > .XmlVertexList( wrappedGraph ) { 1, 2 }; graph.Vertices = vertices; CollectionAssert.AreEqual( new[] { 1, 2 }, graph.Vertices); CollectionAssert.IsEmpty(graph.Edges); var edge12 = new Edge <int>(1, 2); var edge22 = new Edge <int>(2, 2); var edges = new XmlSerializableGraph < int, Edge <int>, AdjacencyGraph <int, Edge <int> > > .XmlEdgeList( wrappedGraph ) { edge12, edge22 }; graph.Edges = edges; CollectionAssert.AreEqual( new[] { 1, 2 }, graph.Vertices); CollectionAssert.AreEqual( new[] { edge12, edge22 }, graph.Edges); }
public void SerializeToXml() { var wrappedGraph = new AdjacencyGraph <int, XmlSerializableEdge <int> >(); wrappedGraph.AddVerticesAndEdgeRange(new[] { new XmlSerializableEdge <int> { Source = 1, Target = 2 }, new XmlSerializableEdge <int> { Source = 1, Target = 3 }, new XmlSerializableEdge <int> { Source = 2, Target = 2 }, }); wrappedGraph.AddVertex(4); var graph = new XmlSerializableGraph <int, XmlSerializableEdge <int>, AdjacencyGraph <int, XmlSerializableEdge <int> > >(wrappedGraph); SerializeAndRead( graph, content => { var graphContent = new StringBuilder(); graphContent.Append(@"<vertices>\s*"); foreach (int vertex in graph.Vertices) { graphContent.Append( $@"<vertex>{vertex}<\/vertex>\s*"); } graphContent.Append(@"<\/vertices>\s*"); graphContent.Append(@"<edges>\s*"); foreach (XmlSerializableEdge <int> edge in graph.Edges) { graphContent.Append( $@"<edge>\s*<Source>{edge.Source}<\/Source>\s*<Target>{edge.Target}<\/Target>\s*<\/edge>\s*"); } graphContent.Append(@"<\/edges>"); var regex = new Regex( $@"{Regex.Escape(XmlHeader)}\s*<graph\s*.*?\s*>\s*{graphContent}\s*<\/graph>"); Assert.IsTrue(regex.Match(content).Success); }); }
public void XmlVertexList_Add() { var graph = new AdjacencyGraph <int, Edge <int> >(); var vertexList = new XmlSerializableGraph <int, Edge <int>, AdjacencyGraph <int, Edge <int> > > .XmlVertexList(graph); CollectionAssert.IsEmpty(vertexList); vertexList.Add(1); CollectionAssert.AreEqual( new[] { 1 }, vertexList); vertexList.Add(2); CollectionAssert.AreEqual( new[] { 1, 2 }, vertexList); }
public void XmlEdgeList_Add() { var graph = new AdjacencyGraph <int, Edge <int> >(); var edgeList = new XmlSerializableGraph <int, Edge <int>, AdjacencyGraph <int, Edge <int> > > .XmlEdgeList(graph); CollectionAssert.IsEmpty(edgeList); var edge12 = new Edge <int>(1, 2); edgeList.Add(edge12); CollectionAssert.AreEqual( new[] { edge12 }, edgeList); var edge22 = new Edge <int>(2, 2); edgeList.Add(edge22); CollectionAssert.AreEqual( new[] { edge12, edge22 }, edgeList); }
public void XmlVertexList() { var graph = new AdjacencyGraph <int, Edge <int> >(); var vertexList = new XmlSerializableGraph <int, Edge <int>, AdjacencyGraph <int, Edge <int> > > .XmlVertexList(graph); CollectionAssert.IsEmpty(vertexList); var edge12 = new Edge <int>(1, 2); var edge22 = new Edge <int>(2, 2); graph.AddVerticesAndEdgeRange(new[] { edge12, edge22 }); CollectionAssert.AreEqual( new[] { 1, 2 }, vertexList); graph = new AdjacencyGraph <int, Edge <int> >(); graph.AddVerticesAndEdgeRange(new[] { edge12, edge22 }); vertexList = new XmlSerializableGraph <int, Edge <int>, AdjacencyGraph <int, Edge <int> > > .XmlVertexList(graph); CollectionAssert.AreEqual( new[] { 1, 2 }, vertexList); }