KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > quilt > graph > TestA2O


1 /* TestA2O.java */
2
3 package org.quilt.graph;
4
5 import junit.framework.*;
6
7 public class TestA2O extends TestCase {
8
9     Directed graph = null;
10     Entry entry = null;
11     Exit exit = null;
12     Directed subgraph = null;
13     Vertex A, C, D, E, F, G, H, I, J, K, L, M, N, O;
14     Entry Try = null;
15     Exit subExit = null;
16
17     public TestA2O(String JavaDoc name) {
18         super(name);
19     }
20    
21     public class Hansel implements Visitor {
22         private StringBuffer JavaDoc crumbs = new StringBuffer JavaDoc();
23         public Hansel () {}
24         public void discoverGraph (Directed g) {}
25         public void finishGraph (Directed g) {}
26         public void discoverVertex (Vertex v) {
27             String JavaDoc d = v.getLabel();
28             if (d != null) {
29                 crumbs.append( d );
30             }
31         }
32         public void finishVertex (Vertex v) {}
33         public void discoverEdge (Edge e) {}
34         public void finishEdge (Edge e) {}
35
36         public String JavaDoc getCrumbs () {
37             return crumbs.toString();
38         }
39     }
40     public void setUp() {
41         graph = new Directed();
42         entry = graph.getEntry();
43         entry.setLabel( "W");
44         exit = graph.getExit();
45         exit.setLabel( "Z");
46         
47         Edge e = entry.getEdge();
48
49         A = graph.insertVertex(e);
50         A.setLabel( "A");
51         e = A.getEdge();
52
53         // try with three catch clauses
54
subgraph = graph.subgraph (e, 3);
55         Try = subgraph.getEntry();
56         Try.setLabel( "X");
57
58         Exit Y = subgraph.getExit();
59         Y.setLabel ("Y");
60
61         e = Try.getEdge();
62         // block ending with if
63
F = subgraph.insertVertex(e);
64         F.setLabel( "F");
65         e = F.makeBinary(); // returns 'other' or 'then' edge
66

67         // return block; its target should be exit
68
G = subgraph.insertVertex(e);
69         G.setLabel( "G");
70         
71         e = F.getEdge();
72         // else leads to another if
73
L = subgraph.insertVertex(e);
74         L.setLabel( "L");
75         e = L.getEdge(); // else edge
76
// else leads to a throw; M's edge should go to exit
77
M = subgraph.insertVertex(e);
78         M.setLabel( "M");
79
80         e = L.makeBinary(); // then edge
81
H = subgraph.insertVertex(e);
82         H.setLabel( "H");
83         H.makeMulti(3);
84         // all of H's children should have exit as target
85
e = ((MultiConnector)H.getConnector()).getEdge(0);
86         I = subgraph.insertVertex(e);
87         I.setLabel( "I");
88         e = ((MultiConnector)H.getConnector()).getEdge(1);
89         J = subgraph.insertVertex(e);
90         J.setLabel( "J");
91         e = ((MultiConnector)H.getConnector()).getEdge(2);
92         K = subgraph.insertVertex(e);
93         K.setLabel( "K");
94
95         // catch blocks; these should also all have exit as target
96
e = ((ComplexConnector) Try.getConnector()).getEdge(0);
97         C = subgraph.insertVertex(e);
98         C.setLabel( "C");
99         e = ((ComplexConnector) Try.getConnector()).getEdge(1);
100         D = subgraph.insertVertex(e);
101         D.setLabel( "D");
102         e = ((ComplexConnector) Try.getConnector()).getEdge(2);
103         E = subgraph.insertVertex(e);
104         E.setLabel( "E");
105
106         subExit = subgraph.getExit();
107         e = subExit.getEdge();
108
109         // vertices in the main graph
110
N = graph.insertVertex(e);
111         N.setLabel( "N");
112         e = N.getEdge();
113         O = graph.insertVertex(e);
114         O.setLabel( "O");
115     }
116
117     public void testRecheck() {
118         assertNotNull("graph is null", graph);
119         assertNotNull("subgraph is null", subgraph);
120         
121         // C D E F G H I J K L M entry exit, total of 13
122
assertEquals ("wrong number of vertices in subgraph",
123                                                13, subgraph.size() );
124         // subgraph A N O entry exit = 13 + 5 = 18
125
assertEquals ("wrong number of vertices in graph",
126                                                18, graph.size() );
127         assertEquals ("Vertex O's target is not exit",
128                                                 exit, O.getTarget() );
129         assertEquals ("subgraph's exit doesn't point to Vertex N",
130                                                 N, subExit.getTarget() );
131         // catch blocks
132
assertEquals ("Vertex C's target is not subgraph exit",
133                                                 subExit, C.getTarget() );
134         assertEquals ("Vertex D's target is not subgraph exit",
135                                                 subExit, D.getTarget() );
136         assertEquals ("Vertex E's target is not subgraph exit",
137                                                 subExit, E.getTarget() );
138
139         // return blocks; arguably these should point to top-level exit
140
assertEquals ("Vertex G's target is not subgraph exit",
141                                                 subExit, G.getTarget() );
142
143         // select targets
144
assertEquals ("Vertex I's target is not subgraph exit",
145                                                 subExit, I.getTarget() );
146         assertEquals ("Vertex J's target is not subgraph exit",
147                                                 subExit, J.getTarget() );
148         assertEquals ("Vertex K's target is not subgraph exit",
149                                                 subExit, K.getTarget() );
150         // throw block
151
assertEquals ("Vertex M's target is not subgraph exit",
152                                                 subExit, M.getTarget() );
153         
154     }
155     public void testHanselAndGretel() {
156        Walker gretel = new Walker();
157        Hansel hansel = new Hansel();
158        gretel.visit(subgraph, hansel);
159        String JavaDoc crumbs = hansel.getCrumbs();
160        assertEquals ("unexpected path taken through subgraph",
161                "XFLMYHIJKGCDE", crumbs);
162        
163        gretel = new Walker();
164        hansel = new Hansel();
165        gretel.visit(graph, hansel);
166        crumbs = hansel.getCrumbs();
167        assertEquals ("unexpected path taken through graph",
168                "WAXFLMYHIJKGCDENOZ", crumbs);
169    }
170 }
171         
172
Popular Tags