/* * Copyright 2004-2015 the Seasar Foundation and the Others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package org.seasar.framework.jpa.util; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import junit.framework.TestCase; import org.seasar.framework.container.S2Container; /** * @author taedium */ public class ChildFirstClassLoaderTest extends TestCase { private String className = getClass().getPackage().getName() + ".Hoge"; /** * @throws Exception */ public void testLoadClass() throws Exception { ChildFirstClassLoader loader = new ChildFirstClassLoader(); Class<?> clazz = loader.loadClass(className); assertSame(loader, clazz.getClassLoader()); assertSame(clazz, loader.loadClass(className)); clazz = loader.loadClass("java.lang.Integer"); assertNotSame(loader, clazz.getClassLoader()); clazz = loader.loadClass("junit.framework.TestCase"); assertSame(TestCase.class, clazz); try { loader.loadClass(getClass().getPackage().getName() + ".xxx"); fail(); } catch (ClassNotFoundException ignore) { } } /** * @throws Exception */ public void testIsIncludedClass() throws Exception { ChildFirstClassLoader loader = new ChildFirstClassLoader(); assertFalse(loader.isIncludedClass("javax.persistence.EntityManager")); assertTrue(loader.isIncludedClass("org.seasar.framework.util.Foo")); assertTrue(loader.isIncludedClass("org.seasar.framework.util.Bar")); assertTrue(loader.isIncludedClass("org.seasar.framework.util.Baz")); Set<String> set = new HashSet<String>(); set.add("org.seasar.framework.util.Foo"); set.add("org.seasar.framework.util.Bar"); loader = new ChildFirstClassLoader(Thread.currentThread() .getContextClassLoader(), set); assertFalse(loader.isIncludedClass("javax.persistence.EntityManager")); assertTrue(loader.isIncludedClass("org.seasar.framework.util.Foo")); assertTrue(loader.isIncludedClass("org.seasar.framework.util.Bar")); assertFalse(loader.isIncludedClass("org.seasar.framework.util.Baz")); assertFalse(loader.isIncludedClass(S2Container.class.getName())); } /** * @throws Exception */ public void testClassLoaderEvent() throws Exception { ChildFirstClassLoader loader = new ChildFirstClassLoader(); final List<String> order = new ArrayList<String>(); loader.addClassLoaderListener(new ClassLoaderListener() { public void classFinded(ClassLoaderEvent event) { order.add(event.getClassName()); } }); String prefix = getClass().getName() + "$"; loader.loadClass(prefix + "Foo"); loader.loadClass(prefix + "Bar"); loader.loadClass(prefix + "Baz"); assertEquals(3, order.size()); assertEquals(prefix + "Baz", order.get(0)); assertEquals(prefix + "Bar", order.get(1)); assertEquals(prefix + "Foo", order.get(2)); } /** * @author taedium */ public static class Foo extends Bar { } /** * @author taedium */ public static class Bar extends Baz { } /** * @author taedium */ public static class Baz { } }