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