/******************************************************************************
* 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.internal.context.support;
import java.awt.Polygon;
import java.awt.Shape;
import java.io.IOException;
import java.net.URL;
import java.util.Arrays;
import java.util.Enumeration;
import junit.framework.TestCase;
import org.eclipse.gemini.blueprint.context.support.OsgiBundleXmlApplicationContext;
import org.eclipse.gemini.blueprint.util.OsgiServiceReferenceUtils;
import org.osgi.framework.ServiceReference;
import org.springframework.core.io.ClassPathResource;
import org.eclipse.gemini.blueprint.mock.ArrayEnumerator;
import org.eclipse.gemini.blueprint.mock.MockBundle;
import org.eclipse.gemini.blueprint.mock.MockBundleContext;
/**
*
* @author Costin Leau
*
*/
public class OsgiReferenceToServiceReferenceConversionTest extends TestCase {
private MockBundleContext context;
private OsgiBundleXmlApplicationContext appCtx;
private Shape service;
public static class RefContainer {
private static ServiceReference reference;
public void setServiceReference(ServiceReference ref) {
RefContainer.reference = ref;
}
}
protected void setUp() throws Exception {
service = new Polygon();
RefContainer.reference = null;
MockBundle bundle = new MockBundle() {
public Enumeration findEntries(String path, String filePattern, boolean recurse) {
try {
return new ArrayEnumerator(
new URL[] { new ClassPathResource(
"/org/eclipse/gemini/blueprint/internal/context/support/serviceReferenceConversion.xml").getURL() });
}
catch (IOException io) {
throw new RuntimeException(io);
}
}
};
context = new MockBundleContext(bundle) {
public Object getService(ServiceReference reference) {
String[] classes = OsgiServiceReferenceUtils.getServiceObjectClasses(reference);
if (Arrays.equals(classes, new String[] { Shape.class.getName() }))
return service;
else
return null;
}
};
appCtx = new OsgiBundleXmlApplicationContext(new String[] { "serviceReferenceConversion.xml" });
appCtx.setBundleContext(context);
appCtx.setPublishContextAsService(false);
appCtx.refresh();
}
protected void tearDown() throws Exception {
context = null;
appCtx.close();
appCtx = null;
service = null;
RefContainer.reference = null;
}
public void testApplicationContextStarted() throws Exception {
assertEquals(2, appCtx.getBeanDefinitionCount());
}
public void testConversion() throws Exception {
assertNotNull(RefContainer.reference);
System.out.println(RefContainer.reference);
}
}