/******************************************************************************
* Copyright (c) 2006, 2010 VMware Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0
* is available at http://www.opensource.org/licenses/apache2.0.php.
* You may elect to redistribute this code under either of these licenses.
*
* Contributors:
* VMware Inc.
*****************************************************************************/
package org.eclipse.gemini.blueprint.util;
import java.net.URL;
import java.util.Enumeration;
import junit.framework.TestCase;
import org.easymock.MockControl;
import org.eclipse.gemini.blueprint.util.BundleDelegatingClassLoader;
import org.osgi.framework.Bundle;
import org.springframework.aop.framework.ProxyFactory;
/**
* @author Costin Leau
*
*/
public class BundleDelegatingClassLoaderTest extends TestCase {
private BundleDelegatingClassLoader classLoader;
private MockControl bundleCtrl;
private Bundle bundle;
protected void setUp() throws Exception {
bundleCtrl = MockControl.createStrictControl(Bundle.class);
bundle = (Bundle) bundleCtrl.getMock();
classLoader =
BundleDelegatingClassLoader.createBundleClassLoaderFor(bundle, ProxyFactory.class.getClassLoader());
bundleCtrl.reset();
}
protected void tearDown() throws Exception {
bundleCtrl.verify();
classLoader = null;
bundleCtrl = null;
bundle = null;
}
public void tstEquals() {
bundleCtrl.replay();
assertFalse(classLoader.equals(new Object()));
assertEquals(classLoader, classLoader);
assertTrue(classLoader.equals(BundleDelegatingClassLoader.createBundleClassLoaderFor(bundle, ProxyFactory.class
.getClassLoader())));
// assertEquals(bundle.hashCode(), clientClassLoader.hashCode());
}
public void testFindClass() throws Exception {
String className = "foo.bar";
String anotherClassName = "bar.foo";
bundleCtrl.expectAndReturn(bundle.loadClass(className), Object.class);
bundleCtrl.expectAndThrow(bundle.loadClass(anotherClassName), new ClassNotFoundException());
bundleCtrl.expectAndReturn(bundle.getSymbolicName(), "Test Bundle Symbolic Name");
//bundleCtrl.expectAndReturn(bundle.getHeaders(), new Properties());
bundleCtrl.replay();
assertSame(Object.class, classLoader.findClass(className));
try {
classLoader.findClass(anotherClassName);
} catch (ClassNotFoundException ex) {
// expected
}
}
public void testFindResource() throws Exception {
String resource = "file://bla-bla";
URL url = new URL(resource);
bundleCtrl.expectAndReturn(bundle.getResource(resource), url);
bundleCtrl.replay();
assertSame(url, classLoader.findResource(resource));
}
public void testFindResources() throws Exception {
String resource = "bla-bla";
MockControl enumCtrl = MockControl.createStrictControl(Enumeration.class);
Enumeration enumeration = (Enumeration) enumCtrl.getMock();
bundleCtrl.expectAndReturn(bundle.getResources(resource), enumeration);
bundleCtrl.replay();
assertSame(enumeration, classLoader.findResources(resource));
}
}