01: /* TestNestedTryBlocks.java */
02: package org.quilt.cl;
03:
04: import java.io.*;
05: import java.lang.Class;
06: import java.lang.reflect.*;
07: import java.net.*;
08: import junit.framework.*;
09:
10: /**
11: * A stripped-down TestTransformer.
12: *
13: * @author <a href="jddixon@users.sourceforge.net">Jim Dixon</a>
14: */
15: public class TestNestedTryBlocks extends TestCase {
16:
17: private URL[] cp = null;
18:
19: private String[] delegating = {
20: // NOTHING beyond standard defaults
21: };
22: // we want everything to be instrumented
23: private String[] include = { "test.data.", "AnonymousClass",
24: "AnonymousClass2Catches", "BasicLoad", "ExceptionLoad",
25: "ExceptionThrow", "InnerClass", "NestedTryBlocks",
26: "PrivateClass", "SuperClass", "Wimple" };
27: private String[] exclude = {
28: // NOTHING
29: };
30: private QuiltClassLoader qLoader = null;
31:
32: private GraphXformer spy;
33: private GraphXformer talker;
34:
35: public TestNestedTryBlocks(String name) {
36: super (name);
37: }
38:
39: public void setUp() {
40: File sam1 = new File("target/test-data-classes/");
41: String fullPath1 = sam1.getAbsolutePath() + "/";
42: File sam2 = new File("target/classes");
43: String fullPath2 = sam2.getAbsolutePath() + "/";
44: File sam3 = new File("target/test-classes");
45: String fullPath3 = sam3.getAbsolutePath() + "/";
46: try {
47: // Terminating slash is required. Relative paths don't
48: // work.
49: URL[] samples = { new URL("file://" + fullPath1),
50: new URL("file://" + fullPath2),
51: new URL("file://" + fullPath3) };
52: cp = samples;
53: } catch (MalformedURLException e) {
54: e.printStackTrace();
55: fail("problem creating class path");
56: }
57: qLoader = new QuiltClassLoader(cp, null, // parent
58: delegating, // delegated classes
59: include, // being instrumented
60: exclude); // do NOT instrument
61: spy = new GraphSpy();
62: qLoader.addGraphXformer(spy);
63: talker = new GraphTalker();
64: qLoader.addGraphXformer(talker);
65: }
66:
67: private RunTest loadAsRunTest(String name) {
68: Class clazz = null;
69: try {
70: clazz = qLoader.loadClass(name);
71: } catch (ClassNotFoundException e) {
72: e.printStackTrace();
73: fail("exception loading " + name + " using loadClass");
74: }
75: RunTest rt = null;
76: try {
77: rt = (RunTest) clazz.newInstance();
78: } catch (InstantiationException e) {
79: fail("InstantiationException instantiating loaded class "
80: + name);
81: } catch (IllegalAccessException e) {
82: fail("IllegalAccessException instantiating loaded class "
83: + name);
84: } catch (ClassCastException e) {
85: fail("ClassCastException instantiating loaded class "
86: + name);
87: }
88: return rt;
89: }
90:
91: public void testNestedTries() {
92: RunTest rt = loadAsRunTest("NestedTryBlocks");
93: assertEquals("NestedTryBlocks isn't working", 22, rt.runTest(7));
94: }
95:
96: }
|