1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.logging.tccl.logfactory;
19
20
21 import java.net.URL;
22
23 import junit.framework.Test;
24 import junit.framework.TestCase;
25
26 import org.apache.commons.logging.LogFactory;
27 import org.apache.commons.logging.PathableClassLoader;
28 import org.apache.commons.logging.PathableTestSuite;
29
30
31
32
33
34
35
36 public class TcclEnabledTestCase extends TestCase {
37
38
39
40
41
42
43
44 public static Test suite() throws Exception {
45 Class thisClass = TcclEnabledTestCase.class;
46
47
48
49
50
51 PathableClassLoader dummy = new PathableClassLoader(null);
52 dummy.useExplicitLoader("junit.", Test.class.getClassLoader());
53 dummy.addLogicalLib("testclasses");
54 dummy.addLogicalLib("commons-logging");
55
56 String thisClassPath = thisClass.getName().replace('.', '/') + ".class";
57 URL baseUrl = dummy.findResource(thisClassPath);
58
59
60
61
62
63
64
65
66 PathableClassLoader emptyLoader = new PathableClassLoader(null);
67
68 PathableClassLoader parentLoader = new PathableClassLoader(null);
69 parentLoader.useExplicitLoader("junit.", Test.class.getClassLoader());
70 parentLoader.addLogicalLib("commons-logging");
71 parentLoader.addLogicalLib("testclasses");
72
73
74 parentLoader.useExplicitLoader(
75 "org.apache.commons.logging.tccl.custom.", emptyLoader);
76
77 URL propsEnableUrl = new URL(baseUrl, "props_enable_tccl/");
78 parentLoader.addURL(propsEnableUrl);
79
80 PathableClassLoader tcclLoader = new PathableClassLoader(parentLoader);
81 tcclLoader.addLogicalLib("testclasses");
82
83 Class testClass = parentLoader.loadClass(thisClass.getName());
84 return new PathableTestSuite(testClass, tcclLoader);
85 }
86
87
88
89
90 public void setUp() throws Exception {
91 LogFactory.releaseAll();
92 }
93
94
95
96
97 public void tearDown() {
98 LogFactory.releaseAll();
99 }
100
101
102
103
104
105
106 public void testLoader() throws Exception {
107
108 ClassLoader thisClassLoader = this.getClass().getClassLoader();
109 ClassLoader tcclLoader = Thread.currentThread().getContextClassLoader();
110
111
112 assertNotSame("tccl not same as test classloader", thisClassLoader, tcclLoader);
113
114
115 try {
116 Class clazz = thisClassLoader.loadClass(
117 "org.apache.commons.logging.tccl.custom.MyLogFactoryImpl");
118 fail("Unexpectedly able to load MyLogFactoryImpl via test class classloader");
119 assertNotNull(clazz);
120 } catch(ClassNotFoundException ex) {
121
122 }
123
124
125 try {
126 Class clazz = tcclLoader.loadClass(
127 "org.apache.commons.logging.tccl.custom.MyLogFactoryImpl");
128 assertNotNull(clazz);
129 } catch(ClassNotFoundException ex) {
130 fail("Unexpectedly unable to load MyLogFactoryImpl via tccl classloader");
131 }
132 }
133
134
135
136
137
138
139 public void testTcclLoading() throws Exception {
140 LogFactory instance = LogFactory.getFactory();
141
142 assertEquals(
143 "Correct LogFactory loaded",
144 "org.apache.commons.logging.tccl.custom.MyLogFactoryImpl",
145 instance.getClass().getName());
146 }
147 }