View Javadoc
1   /*
2    * Copyright (c) 2008, The JUNG Authors
3    *
4    * All rights reserved.
5    *
6    * This software is open-source under the BSD license; see either
7    * "license.txt" or
8    * https://github.com/jrtom/jung/blob/master/LICENSE for a description.
9    */
10  
11  package edu.uci.ics.jung.io.graphml.parser;
12  
13  import java.util.ArrayList;
14  import java.util.Collections;
15  import java.util.Comparator;
16  import java.util.List;
17  
18  import org.junit.Assert;
19  import org.junit.Test;
20  
21  import edu.uci.ics.jung.io.GraphIOException;
22  import edu.uci.ics.jung.io.graphml.EdgeMetadata;
23  import edu.uci.ics.jung.io.graphml.GraphMetadata;
24  import edu.uci.ics.jung.io.graphml.NodeMetadata;
25  import edu.uci.ics.jung.io.graphml.GraphMetadata.EdgeDefault;
26  
27  public class TestGraphElementParser extends AbstractParserTest {
28  
29      @Test(expected= GraphIOException.class)
30      public void testNoEdgeDefault() throws Exception {
31          
32          String xml = 
33              "<graph/>";
34          
35          readObject(xml);
36      }
37  
38      @Test
39      public void testEdgeDefaultDirected() throws Exception {
40          
41          String xml = 
42              "<graph edgedefault=\"directed\"/>";
43          
44          GraphMetadata g = (GraphMetadata) readObject(xml);
45          Assert.assertNotNull(g);
46          Assert.assertEquals(EdgeDefault.DIRECTED, g.getEdgeDefault());
47          Assert.assertEquals(null, g.getId());
48          Assert.assertEquals(null, g.getDescription());
49          Assert.assertEquals(0, g.getNodeMap().size());
50          Assert.assertEquals(0, g.getEdgeMap().size());
51          Assert.assertEquals(0, g.getHyperEdgeMap().size());
52      }
53  
54      @Test
55      public void testEdgeDefaultUndirected() throws Exception {
56          
57          String xml = 
58              "<graph edgedefault=\"undirected\"/>";
59          
60          GraphMetadata g = (GraphMetadata) readObject(xml);
61          Assert.assertNotNull(g);
62          Assert.assertEquals(EdgeDefault.UNDIRECTED, g.getEdgeDefault());
63          Assert.assertEquals(null, g.getId());
64          Assert.assertEquals(null, g.getDescription());
65          Assert.assertEquals(0, g.getNodeMap().size());
66          Assert.assertEquals(0, g.getEdgeMap().size());
67          Assert.assertEquals(0, g.getHyperEdgeMap().size());
68      }
69  
70      @Test
71      public void testDesc() throws Exception {
72          
73          String xml = 
74              "<graph edgedefault=\"undirected\">" +
75                  "<desc>hello world</desc>" +
76              "</graph>";
77          
78          GraphMetadata g = (GraphMetadata) readObject(xml);
79          Assert.assertNotNull(g);
80          Assert.assertEquals(EdgeDefault.UNDIRECTED, g.getEdgeDefault());
81          Assert.assertEquals(null, g.getId());
82          Assert.assertEquals("hello world", g.getDescription());
83          Assert.assertEquals(0, g.getNodeMap().size());
84          Assert.assertEquals(0, g.getEdgeMap().size());
85          Assert.assertEquals(0, g.getHyperEdgeMap().size());
86      }
87  
88      @Test
89      public void testNodes() throws Exception {
90          
91          String xml = 
92              "<graph edgedefault=\"undirected\">" +
93                  "<node id=\"1\"/>" +
94                  "<node id=\"2\"/>" +
95                  "<node id=\"3\"/>" +
96              "</graph>";
97          
98          GraphMetadata g = (GraphMetadata) readObject(xml);
99          Assert.assertNotNull(g);
100         Assert.assertEquals(EdgeDefault.UNDIRECTED, g.getEdgeDefault());
101         Assert.assertEquals(null, g.getId());
102         Assert.assertEquals(null, g.getDescription());
103         Assert.assertEquals(3, g.getNodeMap().size());        
104         List<NodeMetadata> nodes = new ArrayList<NodeMetadata>(g.getNodeMap().values());
105         Collections.sort(nodes, new Comparator<NodeMetadata>() {
106             public int compare(NodeMetadata o1, NodeMetadata o2) {
107                 return o1.getId().compareTo(o2.getId());
108             }
109         });
110         Assert.assertEquals("1", nodes.get(0).getId());
111         Assert.assertEquals("2", nodes.get(1).getId());
112         Assert.assertEquals("3", nodes.get(2).getId());
113     }
114 
115     @Test
116     public void testEdges() throws Exception {
117         
118         String xml = 
119             "<graph edgedefault=\"undirected\">" +
120                 "<node id=\"1\"/>" +
121                 "<node id=\"2\"/>" +
122                 "<node id=\"3\"/>" +
123                 "<edge source=\"1\" target=\"2\"/>" +
124                 "<edge source=\"2\" target=\"3\"/>" +
125             "</graph>";
126         
127         GraphMetadata g = (GraphMetadata) readObject(xml);
128         Assert.assertNotNull(g);
129         Assert.assertEquals(EdgeDefault.UNDIRECTED, g.getEdgeDefault());
130         Assert.assertEquals(null, g.getId());
131         Assert.assertEquals(null, g.getDescription());
132         List<EdgeMetadata> edges = new ArrayList<EdgeMetadata>(g.getEdgeMap().values());
133         Collections.sort(edges, new Comparator<EdgeMetadata>() {
134             public int compare(EdgeMetadata o1, EdgeMetadata o2) {
135                 return o1.getSource().compareTo(o2.getSource());
136             }
137         });
138         Assert.assertEquals(2, edges.size());
139         Assert.assertEquals("1", edges.get(0).getSource());
140         Assert.assertEquals("2", edges.get(1).getSource());
141     }
142 
143     @Test
144     public void testHyperEdges() throws Exception {
145         
146         String xml = 
147             "<graph edgedefault=\"undirected\">" +
148                 "<node id=\"1\"/>" +
149                 "<node id=\"2\"/>" +
150                 "<node id=\"3\"/>" +
151                 "<hyperedge>" +
152                     "<endpoint node=\"1\"/>" +
153                     "<endpoint node=\"2\"/>" +
154                 "</hyperedge>" +
155                 "<hyperedge>" +
156                     "<endpoint node=\"2\"/>" +
157                     "<endpoint node=\"3\"/>" +
158                 "</hyperedge>" +
159                 "<hyperedge>" +
160                     "<endpoint node=\"3\"/>" +
161                     "<endpoint node=\"1\"/>" +
162                 "</hyperedge>" +
163             "</graph>";
164         
165         GraphMetadata g = (GraphMetadata) readObject(xml);
166         Assert.assertNotNull(g);
167         Assert.assertEquals(EdgeDefault.UNDIRECTED, g.getEdgeDefault());
168         Assert.assertEquals(null, g.getId());
169         Assert.assertEquals(null, g.getDescription());
170         Assert.assertEquals(3, g.getHyperEdgeMap().size());
171     }
172 
173     @Test
174     public void testUserAttributes() throws Exception {
175         
176         String xml = 
177             "<graph edgedefault=\"undirected\" bob=\"abc123\">" +
178             "</graph>";
179         
180         GraphMetadata g = (GraphMetadata) readObject(xml);
181         Assert.assertNotNull(g);
182         Assert.assertEquals(EdgeDefault.UNDIRECTED, g.getEdgeDefault());
183         Assert.assertEquals(null, g.getId());
184         Assert.assertEquals(null, g.getDescription());
185         Assert.assertEquals(1, g.getProperties().size());
186         Assert.assertEquals("abc123", g.getProperty("bob"));
187     }
188 
189     @Test
190     public void testData() throws Exception {
191         
192         String xml = 
193             "<graph edgedefault=\"undirected\">" +
194                 "<data key=\"d1\">value1</data>" +
195                 "<data key=\"d2\">value2</data>" +
196             "</graph>";
197         
198         GraphMetadata g = (GraphMetadata) readObject(xml);
199         Assert.assertNotNull(g);
200         Assert.assertEquals(EdgeDefault.UNDIRECTED, g.getEdgeDefault());
201         Assert.assertEquals(null, g.getId());
202         Assert.assertEquals(null, g.getDescription());
203         Assert.assertEquals(2, g.getProperties().size());
204         Assert.assertEquals("value1", g.getProperty("d1"));
205         Assert.assertEquals("value2", g.getProperty("d2"));
206     }
207 }