1
2
3
4
5
6
7
8
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 }