You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ga...@apache.org on 2009/10/07 05:00:44 UTC

svn commit: r822565 [1/4] - in /incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries: mocks/ unittest/junit/ unittest/mocks/ unittest/mocks/annotations/

Author: gawor
Date: Wed Oct  7 03:00:43 2009
New Revision: 822565

URL: http://svn.apache.org/viewvc?rev=822565&view=rev
Log:
set svn:eol-style property on all Java files

Modified:
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/BundleContextMock.java   (contents, props changed)
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/BundleMock.java   (contents, props changed)
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/MockInitialContextFactoryBuilder.java   (contents, props changed)
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/junit/Assert.java   (contents, props changed)
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/mocks/DefaultInvocationHandler.java   (contents, props changed)
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/mocks/DefaultMethodCallHandlers.java   (contents, props changed)
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/mocks/DefaultReturnTypeHandlers.java   (contents, props changed)
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/mocks/ExceptionListener.java   (contents, props changed)
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/mocks/MethodCall.java   (contents, props changed)
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/mocks/MethodCallHandler.java   (contents, props changed)
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/mocks/ReturnTypeHandler.java   (contents, props changed)
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/mocks/Skeleton.java   (contents, props changed)
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/mocks/annotations/InjectSkeleton.java   (contents, props changed)
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/mocks/annotations/Singleton.java   (contents, props changed)

Modified: incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/BundleContextMock.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/BundleContextMock.java?rev=822565&r1=822564&r2=822565&view=diff
==============================================================================
--- incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/BundleContextMock.java (original)
+++ incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/BundleContextMock.java Wed Oct  7 03:00:43 2009
@@ -1,734 +1,734 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.apache.aries.mocks;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.jar.Attributes;
-import java.util.jar.JarInputStream;
-import java.util.jar.Manifest;
-
-import junit.framework.AssertionFailedError;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.Constants;
-import org.osgi.framework.Filter;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceEvent;
-import org.osgi.framework.ServiceFactory;
-import org.osgi.framework.ServiceListener;
-import org.osgi.framework.ServiceReference;
-import org.osgi.framework.ServiceRegistration;
-
-import org.apache.aries.unittest.mocks.Skeleton;
-
-/**
- *
- */
-/**
- * This class is a partial implementation of BundleContext. Its main function
- * is to provide a service registry implementation
- */
-public class BundleContextMock
-{
-  /** The service registry */
-  private static Map<String, List<ServiceData>> registry = new HashMap<String, List<ServiceData>>();
-  /** A list of bundles installed into the runtime */
-  private static List<Bundle> bundles = new ArrayList<Bundle>();
-  /** A list of service listeners */
-  private static List<ServiceListener> listeners = new ArrayList<ServiceListener>();
-  /** The next service id to be assigned */
-  private static long nextId = 0;
-
-  private static class MockServiceFactory implements ServiceFactory
-  {
-    private final Object service;
-    
-    public MockServiceFactory(Object obj)
-    {
-      service = obj;
-    }
-    
-    public Object getService(Bundle arg0, ServiceRegistration arg1)
-    {
-      return service;
-    }
-
-    public void ungetService(Bundle arg0, ServiceRegistration arg1, Object arg2)
-    {
-    }
-  }
-  
-  private static class FilteredServiceListener implements ServiceListener
-  {
-    private Filter filter;
-    private final ServiceListener listener;
-    
-    public FilteredServiceListener(String f, ServiceListener l)
-    {
-      listener = l;
-      
-      if (f != null) {
-        try {
-          filter = FrameworkUtil.createFilter(f);
-        } catch (InvalidSyntaxException e) {
-          AssertionFailedError err = new AssertionFailedError("The filter " + f + " is invalid");
-          err.initCause(e);
-          
-          throw err;
-        }
-      }
-    }
-
-    public void serviceChanged(ServiceEvent arg0)
-    {
-      if (matches(arg0)) listener.serviceChanged(arg0);
-    }
-
-    private boolean matches(ServiceEvent arg0)
-    {
-      if (filter == null) return true;
-      
-      ServiceReference ref = arg0.getServiceReference();
-      
-      if (Skeleton.isSkeleton(ref)) {
-        Object template = Skeleton.getSkeleton(ref).getTemplateObject();
-        
-        if (template instanceof ServiceData) {
-          return filter.match(((ServiceData)template).getProperties());
-        }
-      }
-      
-      return filter.match(ref);
-    }
-    
-    @Override
-    public boolean equals(Object obj)
-    {
-      if (obj == null) return false;
-      else if (obj instanceof FilteredServiceListener) {
-        return listener.equals(((FilteredServiceListener)obj).listener);
-      }
-      
-      return false;
-    }
-    
-    @Override
-    public int hashCode()
-    {
-      return listener.hashCode();
-    }
-  }
-  
-  /**
-   * This class represents the information registered about a service. It also
-   * implements part of the ServiceRegistration and ServiceReference interfaces.
-   */
-  private class ServiceData
-  {
-    /** The service that was registered */
-    private ServiceFactory serviceImpl;
-    /** the service properties */
-    @SuppressWarnings("unused")
-    private final Hashtable<String, Object> serviceProps = new Hashtable<String, Object>();
-    /** The interfaces the service publishes with */
-    private String[] interfaceNames;
-
-    /**
-     * This method unregisters the service from the registry.
-     */
-    public void unregister()
-    {
-      for (String interfaceName : interfaceNames) {
-        List<ServiceData> list = registry.get(interfaceName);
-        if (list != null) {
-          list.remove(this);
-          if (list.isEmpty()) {
-            registry.remove(interfaceName);
-          }
-        }
-      }
-      notifyAllListeners(ServiceEvent.UNREGISTERING);
-    }
-
-    /**
-     * This method is used to register the service data in the registry
-     */
-    public void register()
-    {
-      for (String interfaceName : interfaceNames) {
-        List<ServiceData> list = registry.get(interfaceName);
-        if (list == null) {
-          list = new ArrayList<ServiceData>();
-          registry.put(interfaceName, list);
-        }
-        list.add(this);
-      }
-      notifyAllListeners(ServiceEvent.REGISTERED);
-    }
-    
-    private void notifyAllListeners(int eventType) {
-      List<ServiceListener> copy = new ArrayList<ServiceListener>(listeners.size());
-      copy.addAll(listeners);
-      for(ServiceListener listener : copy) {
-        listener.serviceChanged(new ServiceEvent(eventType, Skeleton.newMock(this, ServiceReference.class)));
-      }
-    }
-    
-    /**
-     * Change the service properties
-     * @param newProps
-     */
-    public void setProperties(Dictionary<String,Object> newProps)
-    {
-      // make sure we don't overwrite framework properties
-      newProps.put(Constants.OBJECTCLASS, serviceProps.get(Constants.OBJECTCLASS));
-      newProps.put(Constants.SERVICE_ID, serviceProps.get(Constants.SERVICE_ID));
-
-      Enumeration<String> keys = newProps.keys();
-      
-      serviceProps.clear();
-      while (keys.hasMoreElements()) {
-        String key = keys.nextElement();
-        serviceProps.put(key, newProps.get(key));
-      }
-      
-      notifyAllListeners(ServiceEvent.MODIFIED);
-    }
-    
-    /**
-     * This implements the isAssignableTo method from ServiceReference.
-     * 
-     * @param b
-     * @param className
-     * @return true if the referenced service can be assigned to the requested
-     *              class name.
-     */
-    public boolean isAssignableTo(Bundle b, String className)
-    {
-      boolean result = false;
-      
-      for (String iName : interfaceNames)
-      {
-        result = iName.equals(className);
-        
-        if (result) break;
-      }
-      
-      return result;
-    }
-    
-    /**
-     * Returns the requested service property.
-     * @param key the property to return.
-     * @return the property value.
-     */
-    public Object getProperty(String key)
-    {
-      return serviceProps.get(key);
-    }
-    
-    @Override
-    public boolean equals(Object o) {
-      if(o == null) return false;
-      
-      if(o == this) return true;
-      
-      if (o instanceof ServiceData) {
-        ServiceData other = (ServiceData) o;
-        return serviceImpl == other.serviceImpl;
-      }
-      
-      return false;
-    }
-    
-    @Override
-    public int hashCode()
-    {
-      return serviceImpl.hashCode();
-    }
-    
-    /**
-     * @return the keys of all the service properties.
-     */
-    public String[] getPropertyKeys()
-    {
-      Enumeration<String> e = serviceProps.keys();
-      
-      String[] toReturn = new String[serviceProps.size()];
-      
-      for(int i = 0 ; i < serviceProps.size(); i++)
-        toReturn[i] = e.nextElement();
-      
-      return toReturn;
-    }
-    
-    /**
-     * @return the bundle this service reference was registered against.
-     */
-    public Bundle getBundle()
-    {
-      return bundle;
-    }
-    
-    /**
-     * @return a service reference for this service registration.
-     */
-    public ServiceReference getReference()
-    {
-      return Skeleton.newMock(this, ServiceReference.class);
-    }
-    
-    public Hashtable<String, Object> getProperties()
-    {
-      return new Hashtable<String, Object>(serviceProps);
-    }
-  }
-
-  /** The bundle associated with this bundle context */
-  private Bundle bundle;
-
-  /**
-   * Default constructor, widely used in the tests.
-   */
-  public BundleContextMock()
-  {
-    
-  }
-  
-  /**
-   * Constructor used by BundleMock, it ensures the bundle and its context are wired together correctly.
-   * 
-   * TODO We have to many Bundle mocks objects for a single OSGi bundle, we need to update this.
-   * 
-   * @param b
-   */
-  public BundleContextMock(Bundle b)
-  {
-    bundle = b;
-  }
-  
-  /**
-   * This checks that we have at least one service with this interface name.
-   * 
-   * @param interfaceName the name of the interface.
-   */
-  public static void assertServiceExists(String interfaceName)
-  {
-    assertTrue("No service registered with interface " + interfaceName + ". Services found: " + registry.keySet(), registry.containsKey(interfaceName));
-  }
-  
-  /**
-   * This checks that we have at no services with this interface name.
-   * 
-   * @param interfaceName the name of the interface.
-   */
-  public static void assertNoServiceExists(String interfaceName)
-  {
-    assertFalse("Services registered with interface " + interfaceName + ". Services found: " + registry.keySet(), registry.containsKey(interfaceName));
-  }
-  
-  /**
-   * This implements the registerService method from BundleContext.
-   * 
-   * @param interFace
-   * @param service
-   * @param properties
-   * @return the ServiceRegistration object for this service.
-   */
-  public ServiceRegistration registerService(String interFace, final Object service, Dictionary<String, Object> properties)
-  {
-    // validate that the service implements interFace
-    try {
-      Class<?> clazz = Class.forName(interFace, false, service.getClass().getClassLoader());
-      
-      if (!!!clazz.isInstance(service) && !!!(service instanceof ServiceFactory)) {
-        throw new AssertionFailedError("The service " + service + " does not implement " + interFace);
-      }
-    } catch (ClassNotFoundException e) {
-      // TODO Auto-generated catch block
-      e.printStackTrace();
-    }
-
-    ServiceFactory factory = new MockServiceFactory(service);
-    return registerService(new String[] {interFace}, factory, properties);
-  }
-  
-  /**
-   * This implements the registerService method from BundleContext.
-   * 
-   * @param interfaces
-   * @param service
-   * @param properties
-   * @return the ServiceRegistration object for this service.
-   */
-  public ServiceRegistration registerService(String[] interfaces, Object service, Dictionary<String, Object> properties)
-  {
-    if (properties == null) properties = new Hashtable<String, Object>();
-    
-    ServiceData data = new ServiceData();
-    // cast the service to a service factory because in our framework we only ever register
-    // a service factory. If we every put a non-service factory object in that is a failure.
-    properties.put(Constants.OBJECTCLASS, interfaces);
-    properties.put(Constants.SERVICE_ID, nextId++);
-    if (service instanceof ServiceFactory) {
-      data.serviceImpl = (ServiceFactory)service;
-    } else {
-      data.serviceImpl = new MockServiceFactory(service);
-    }
-    data.interfaceNames = interfaces;
-    
-    Enumeration<String> keys = properties.keys();
-    
-    while (keys.hasMoreElements()) {
-      String key = keys.nextElement();
-      data.serviceProps.put(key, properties.get(key));
-    }
-    
-    data.register();
-    
-    return Skeleton.newMock(data, ServiceRegistration.class);
-  }
-
-  /**
-   * This helper method is used to get the service from the registry with the
-   * given interface name.
-   * 
-   * <p>This should really return multiple services.
-   * </p>
-   * 
-   * @param interfaceName the interface name.
-   * @param bundle        the bundle name.
-   * @return the registered service.
-   */
-  public static Object getService(String interfaceName, Bundle bundle)
-  {
-    List<ServiceData> datum = registry.get(interfaceName);
-    
-    if (datum == null) return null;
-    else if (datum.isEmpty()) return null;
-    // this is safe for now, but may not be when we do other scoped components.
-    else {
-      ServiceRegistration reg = Skeleton.newMock(ServiceRegistration.class);
-      return datum.iterator().next().serviceImpl.getService(bundle, reg);
-    }
-  }
-  
-  /**
-   * A mock implementation of the getServiceReferences method. It does not currently
-   * process the filter, this is probably a bit hard, so we might cheat when we do.
-   * 
-   * <p>Note this does not check that the service classes are visible to the
-   *   caller as OSGi does. It is equivalent to getAllServiceReferences.
-   * </p>
-   * 
-   * @param className the name of the class the lookup is for.
-   * @param filter
-   * @return an array of matching service references.
-   * @throws InvalidSyntaxException
-   */
-  public ServiceReference[] getServiceReferences(String className, String filter) throws InvalidSyntaxException
-  {
-    List<ServiceData> data = new ArrayList<ServiceData>();
-    
-    if (className != null) {
-      List<ServiceData> tmpData = registry.get(className);
-      if (tmpData != null) data.addAll(tmpData);
-    } else {
-      data = new ArrayList<ServiceData>();
-      for (List<ServiceData> value : registry.values())
-      data.addAll(value);
-    }
-    
-    ServiceReference[] refs;
-
-    if (data == null) {
-      refs = null;
-    } else {
-      
-      if (filter != null) {
-        Filter f = FrameworkUtil.createFilter(filter);
-        
-        Iterator<ServiceData> it = data.iterator();
-        
-        while (it.hasNext()) {
-          ServiceData sd = it.next();
-          
-          if (!!!f.match(sd.getProperties())) it.remove();
-        }
-      }
-      
-      if (data.isEmpty()) return null;
-      
-      refs = new ServiceReference[data.size()];
-      for (int i = 0; i < refs.length; i++) {
-        refs[i] = Skeleton.newMock(data.get(i), ServiceReference.class);
-      }
-    }
-    
-    return refs;
-  }
-  
-  /**
-   * Gets the first matching service reference.
-   * 
-   * @param className the class name wanted.
-   * @return the matchine service, or null if one cannot be found.
-   */
-  public ServiceReference getServiceReference(String className)
-  {
-    ServiceReference[] refs;
-    try {
-      refs = getServiceReferences(className, null);
-      if (refs != null) return refs[0];
-      
-      return null;
-    } catch (InvalidSyntaxException e) {
-      // should never happen.
-      e.printStackTrace();
-    }
-    return null;
-  }
-  
-  /**
-   * This method finds all the service references in the registry with the
-   * matching class name and filter.
-   * 
-   * @param className
-   * @param filter
-   * @return the matching service references.
-   * @throws InvalidSyntaxException
-   */
-  public ServiceReference[] getAllServiceReferences(String className, String filter) throws InvalidSyntaxException
-  {
-    return getServiceReferences(className, filter);
-  }
-  
-  /**
-   * Retrieve a service from the registry.
-   * @param ref the service reference.
-   * @return    the returned service.
-   */
-  public Object getService(ServiceReference ref)
-  {
-    ServiceData data = (ServiceData)Skeleton.getSkeleton(ref).getTemplateObject();
-    
-    return data.serviceImpl.getService(getBundle(), Skeleton.newMock(data, ServiceRegistration.class));
-  }
-  
-  /**
-   * This method implements the installBundle method from BundleContext. It
-   * makes use of the java.util.jar package to parse the manifest from the input
-   * stream.
-   * 
-   * @param location the location of the bundle.
-   * @param is       the input stream to read from.
-   * @return         the created bundle.
-   * @throws BundleException
-   */
-  public Bundle installBundle(String location, InputStream is) throws BundleException
-  {
-    Bundle b;
-    JarInputStream jis;
-    try {
-      jis = new JarInputStream(is);
-
-      Manifest man = jis.getManifest();
-      
-      b = createBundle(man, null);
-      
-    } catch (IOException e) {
-      throw new BundleException(e.getMessage(), e);
-    }
-    
-    return b;
-  }
-
-  /**
-   * Create a mock bundle correctly configured using the supplied manifest and
-   * location.
-   * 
-   * @param man      the manifest to load.
-   * @param location the location on disk.
-   * @return the created bundle
-   * @throws MalformedURLException
-   */
-  private Bundle createBundle(Manifest man, String location) throws MalformedURLException
-  {
-    Attributes attribs = man.getMainAttributes();
-    String symbolicName = attribs.getValue(Constants.BUNDLE_SYMBOLICNAME);
-    
-    Hashtable<Object, Object> attribMap = new Hashtable<Object, Object>();
-    
-    for (Map.Entry<Object, Object> entry : attribs.entrySet()) {
-      Attributes.Name name = (Attributes.Name)entry.getKey();
-      attribMap.put(name.toString(), entry.getValue());
-    }
-    
-    BundleMock mock = new BundleMock(symbolicName, attribMap, location);
-
-    mock.addToClassPath(new File("build/unittest/classes").toURL());
-
-    Bundle b = Skeleton.newMock(mock, Bundle.class);
-    
-    bundles.add(b);
-
-    return b;
-  }
-  
-  /**
-   * Asks to install an OSGi bundle from the given location.
-   * 
-   * @param location the location of the bundle on the file system.
-   * @return the installed bundle.
-   * @throws BundleException
-   */
-  public Bundle installBundle(String location) throws BundleException
-  {
-    try {
-      URI uri = new URI(location.replaceAll(" ", "%20"));
-
-      File baseDir = new File(uri);
-      Manifest man = null;
-      //check if it is a directory
-      if (baseDir.isDirectory()){
-      man = new Manifest(new FileInputStream(new File(baseDir, "META-INF/MANIFEST.MF")));
-      }
-      //if it isn't assume it is a jar file
-      else{
-        InputStream is = new FileInputStream(baseDir);
-        JarInputStream jis = new JarInputStream(is);
-        man = jis.getManifest();
-        jis.close();
-        if (man == null){
-          throw new BundleException("Null manifest");
-        }
-      }
-      
-      return createBundle(man, location);
-    } catch (IOException e) {
-      throw new BundleException(e.getMessage(), e);
-    } catch (URISyntaxException e) {
-      // TODO Auto-generated catch block
-      throw new BundleException(e.getMessage(), e);
-    }
-  }
-  
-  /**
-   * @return all the bundles in the system
-   */
-    public Bundle[] getBundles()
-  {
-    return bundles.toArray(new Bundle[bundles.size()]);
-  }
-  
-  /**
-   * Add a service listener.
-   * 
-   * @param listener
-   * @param filter
-   */
-  public void addServiceListener(ServiceListener listener, String filter)
-  {
-    listeners.add(new FilteredServiceListener(filter, listener));
-  }
-
-  /**
-   * Add a service listener.
-   * 
-   * @param listener
-   */
-  public void addServiceListener(ServiceListener listener) 
-  {
-    listeners.add(listener);
-  }
-  
-  /**
-   * Remove a service listener
-   * @param listener
-   */
-  public void removeServiceListener(ServiceListener listener)
-  {
-    listeners.remove(new FilteredServiceListener(null, listener));
-  }
-  
-  public String getProperty(String name)
-  {
-    if (Constants.FRAMEWORK_VERSION.equals(name)) {
-      return "4.1";
-    }
-    /*added System.getProperty so that tests can set a system property
-     * but it is retrieved via the BundleContext.
-     * This allows tests to emulate different properties being set on the
-     * context, helpful for the feature pack launcher/kernel relationship
-     */
-    else if (System.getProperty(name) != null){
-      return System.getProperty(name);
-    }
-    
-    return "";
-  }
-  
-  /**
-   * @return the bundle associated with this bundle context (if we created one).
-   */
-  public Bundle getBundle()
-  {
-    return bundle;
-  }
-  
-  /**
-   * This method clears the service registry.
-   */
-  public static void clear()
-  {
-    registry.clear();
-    bundles.clear();
-    listeners.clear();
-    nextId = 0;
-  }
-  
-  public static List<ServiceListener> getServiceListeners()
-  {
-    return listeners;
-  }
-
-  public void addBundle(Bundle b)
-  {
-    bundles.add(b);
-  }
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.aries.mocks;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.jar.Attributes;
+import java.util.jar.JarInputStream;
+import java.util.jar.Manifest;
+
+import junit.framework.AssertionFailedError;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.Constants;
+import org.osgi.framework.Filter;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceFactory;
+import org.osgi.framework.ServiceListener;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+
+import org.apache.aries.unittest.mocks.Skeleton;
+
+/**
+ *
+ */
+/**
+ * This class is a partial implementation of BundleContext. Its main function
+ * is to provide a service registry implementation
+ */
+public class BundleContextMock
+{
+  /** The service registry */
+  private static Map<String, List<ServiceData>> registry = new HashMap<String, List<ServiceData>>();
+  /** A list of bundles installed into the runtime */
+  private static List<Bundle> bundles = new ArrayList<Bundle>();
+  /** A list of service listeners */
+  private static List<ServiceListener> listeners = new ArrayList<ServiceListener>();
+  /** The next service id to be assigned */
+  private static long nextId = 0;
+
+  private static class MockServiceFactory implements ServiceFactory
+  {
+    private final Object service;
+    
+    public MockServiceFactory(Object obj)
+    {
+      service = obj;
+    }
+    
+    public Object getService(Bundle arg0, ServiceRegistration arg1)
+    {
+      return service;
+    }
+
+    public void ungetService(Bundle arg0, ServiceRegistration arg1, Object arg2)
+    {
+    }
+  }
+  
+  private static class FilteredServiceListener implements ServiceListener
+  {
+    private Filter filter;
+    private final ServiceListener listener;
+    
+    public FilteredServiceListener(String f, ServiceListener l)
+    {
+      listener = l;
+      
+      if (f != null) {
+        try {
+          filter = FrameworkUtil.createFilter(f);
+        } catch (InvalidSyntaxException e) {
+          AssertionFailedError err = new AssertionFailedError("The filter " + f + " is invalid");
+          err.initCause(e);
+          
+          throw err;
+        }
+      }
+    }
+
+    public void serviceChanged(ServiceEvent arg0)
+    {
+      if (matches(arg0)) listener.serviceChanged(arg0);
+    }
+
+    private boolean matches(ServiceEvent arg0)
+    {
+      if (filter == null) return true;
+      
+      ServiceReference ref = arg0.getServiceReference();
+      
+      if (Skeleton.isSkeleton(ref)) {
+        Object template = Skeleton.getSkeleton(ref).getTemplateObject();
+        
+        if (template instanceof ServiceData) {
+          return filter.match(((ServiceData)template).getProperties());
+        }
+      }
+      
+      return filter.match(ref);
+    }
+    
+    @Override
+    public boolean equals(Object obj)
+    {
+      if (obj == null) return false;
+      else if (obj instanceof FilteredServiceListener) {
+        return listener.equals(((FilteredServiceListener)obj).listener);
+      }
+      
+      return false;
+    }
+    
+    @Override
+    public int hashCode()
+    {
+      return listener.hashCode();
+    }
+  }
+  
+  /**
+   * This class represents the information registered about a service. It also
+   * implements part of the ServiceRegistration and ServiceReference interfaces.
+   */
+  private class ServiceData
+  {
+    /** The service that was registered */
+    private ServiceFactory serviceImpl;
+    /** the service properties */
+    @SuppressWarnings("unused")
+    private final Hashtable<String, Object> serviceProps = new Hashtable<String, Object>();
+    /** The interfaces the service publishes with */
+    private String[] interfaceNames;
+
+    /**
+     * This method unregisters the service from the registry.
+     */
+    public void unregister()
+    {
+      for (String interfaceName : interfaceNames) {
+        List<ServiceData> list = registry.get(interfaceName);
+        if (list != null) {
+          list.remove(this);
+          if (list.isEmpty()) {
+            registry.remove(interfaceName);
+          }
+        }
+      }
+      notifyAllListeners(ServiceEvent.UNREGISTERING);
+    }
+
+    /**
+     * This method is used to register the service data in the registry
+     */
+    public void register()
+    {
+      for (String interfaceName : interfaceNames) {
+        List<ServiceData> list = registry.get(interfaceName);
+        if (list == null) {
+          list = new ArrayList<ServiceData>();
+          registry.put(interfaceName, list);
+        }
+        list.add(this);
+      }
+      notifyAllListeners(ServiceEvent.REGISTERED);
+    }
+    
+    private void notifyAllListeners(int eventType) {
+      List<ServiceListener> copy = new ArrayList<ServiceListener>(listeners.size());
+      copy.addAll(listeners);
+      for(ServiceListener listener : copy) {
+        listener.serviceChanged(new ServiceEvent(eventType, Skeleton.newMock(this, ServiceReference.class)));
+      }
+    }
+    
+    /**
+     * Change the service properties
+     * @param newProps
+     */
+    public void setProperties(Dictionary<String,Object> newProps)
+    {
+      // make sure we don't overwrite framework properties
+      newProps.put(Constants.OBJECTCLASS, serviceProps.get(Constants.OBJECTCLASS));
+      newProps.put(Constants.SERVICE_ID, serviceProps.get(Constants.SERVICE_ID));
+
+      Enumeration<String> keys = newProps.keys();
+      
+      serviceProps.clear();
+      while (keys.hasMoreElements()) {
+        String key = keys.nextElement();
+        serviceProps.put(key, newProps.get(key));
+      }
+      
+      notifyAllListeners(ServiceEvent.MODIFIED);
+    }
+    
+    /**
+     * This implements the isAssignableTo method from ServiceReference.
+     * 
+     * @param b
+     * @param className
+     * @return true if the referenced service can be assigned to the requested
+     *              class name.
+     */
+    public boolean isAssignableTo(Bundle b, String className)
+    {
+      boolean result = false;
+      
+      for (String iName : interfaceNames)
+      {
+        result = iName.equals(className);
+        
+        if (result) break;
+      }
+      
+      return result;
+    }
+    
+    /**
+     * Returns the requested service property.
+     * @param key the property to return.
+     * @return the property value.
+     */
+    public Object getProperty(String key)
+    {
+      return serviceProps.get(key);
+    }
+    
+    @Override
+    public boolean equals(Object o) {
+      if(o == null) return false;
+      
+      if(o == this) return true;
+      
+      if (o instanceof ServiceData) {
+        ServiceData other = (ServiceData) o;
+        return serviceImpl == other.serviceImpl;
+      }
+      
+      return false;
+    }
+    
+    @Override
+    public int hashCode()
+    {
+      return serviceImpl.hashCode();
+    }
+    
+    /**
+     * @return the keys of all the service properties.
+     */
+    public String[] getPropertyKeys()
+    {
+      Enumeration<String> e = serviceProps.keys();
+      
+      String[] toReturn = new String[serviceProps.size()];
+      
+      for(int i = 0 ; i < serviceProps.size(); i++)
+        toReturn[i] = e.nextElement();
+      
+      return toReturn;
+    }
+    
+    /**
+     * @return the bundle this service reference was registered against.
+     */
+    public Bundle getBundle()
+    {
+      return bundle;
+    }
+    
+    /**
+     * @return a service reference for this service registration.
+     */
+    public ServiceReference getReference()
+    {
+      return Skeleton.newMock(this, ServiceReference.class);
+    }
+    
+    public Hashtable<String, Object> getProperties()
+    {
+      return new Hashtable<String, Object>(serviceProps);
+    }
+  }
+
+  /** The bundle associated with this bundle context */
+  private Bundle bundle;
+
+  /**
+   * Default constructor, widely used in the tests.
+   */
+  public BundleContextMock()
+  {
+    
+  }
+  
+  /**
+   * Constructor used by BundleMock, it ensures the bundle and its context are wired together correctly.
+   * 
+   * TODO We have to many Bundle mocks objects for a single OSGi bundle, we need to update this.
+   * 
+   * @param b
+   */
+  public BundleContextMock(Bundle b)
+  {
+    bundle = b;
+  }
+  
+  /**
+   * This checks that we have at least one service with this interface name.
+   * 
+   * @param interfaceName the name of the interface.
+   */
+  public static void assertServiceExists(String interfaceName)
+  {
+    assertTrue("No service registered with interface " + interfaceName + ". Services found: " + registry.keySet(), registry.containsKey(interfaceName));
+  }
+  
+  /**
+   * This checks that we have at no services with this interface name.
+   * 
+   * @param interfaceName the name of the interface.
+   */
+  public static void assertNoServiceExists(String interfaceName)
+  {
+    assertFalse("Services registered with interface " + interfaceName + ". Services found: " + registry.keySet(), registry.containsKey(interfaceName));
+  }
+  
+  /**
+   * This implements the registerService method from BundleContext.
+   * 
+   * @param interFace
+   * @param service
+   * @param properties
+   * @return the ServiceRegistration object for this service.
+   */
+  public ServiceRegistration registerService(String interFace, final Object service, Dictionary<String, Object> properties)
+  {
+    // validate that the service implements interFace
+    try {
+      Class<?> clazz = Class.forName(interFace, false, service.getClass().getClassLoader());
+      
+      if (!!!clazz.isInstance(service) && !!!(service instanceof ServiceFactory)) {
+        throw new AssertionFailedError("The service " + service + " does not implement " + interFace);
+      }
+    } catch (ClassNotFoundException e) {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+
+    ServiceFactory factory = new MockServiceFactory(service);
+    return registerService(new String[] {interFace}, factory, properties);
+  }
+  
+  /**
+   * This implements the registerService method from BundleContext.
+   * 
+   * @param interfaces
+   * @param service
+   * @param properties
+   * @return the ServiceRegistration object for this service.
+   */
+  public ServiceRegistration registerService(String[] interfaces, Object service, Dictionary<String, Object> properties)
+  {
+    if (properties == null) properties = new Hashtable<String, Object>();
+    
+    ServiceData data = new ServiceData();
+    // cast the service to a service factory because in our framework we only ever register
+    // a service factory. If we every put a non-service factory object in that is a failure.
+    properties.put(Constants.OBJECTCLASS, interfaces);
+    properties.put(Constants.SERVICE_ID, nextId++);
+    if (service instanceof ServiceFactory) {
+      data.serviceImpl = (ServiceFactory)service;
+    } else {
+      data.serviceImpl = new MockServiceFactory(service);
+    }
+    data.interfaceNames = interfaces;
+    
+    Enumeration<String> keys = properties.keys();
+    
+    while (keys.hasMoreElements()) {
+      String key = keys.nextElement();
+      data.serviceProps.put(key, properties.get(key));
+    }
+    
+    data.register();
+    
+    return Skeleton.newMock(data, ServiceRegistration.class);
+  }
+
+  /**
+   * This helper method is used to get the service from the registry with the
+   * given interface name.
+   * 
+   * <p>This should really return multiple services.
+   * </p>
+   * 
+   * @param interfaceName the interface name.
+   * @param bundle        the bundle name.
+   * @return the registered service.
+   */
+  public static Object getService(String interfaceName, Bundle bundle)
+  {
+    List<ServiceData> datum = registry.get(interfaceName);
+    
+    if (datum == null) return null;
+    else if (datum.isEmpty()) return null;
+    // this is safe for now, but may not be when we do other scoped components.
+    else {
+      ServiceRegistration reg = Skeleton.newMock(ServiceRegistration.class);
+      return datum.iterator().next().serviceImpl.getService(bundle, reg);
+    }
+  }
+  
+  /**
+   * A mock implementation of the getServiceReferences method. It does not currently
+   * process the filter, this is probably a bit hard, so we might cheat when we do.
+   * 
+   * <p>Note this does not check that the service classes are visible to the
+   *   caller as OSGi does. It is equivalent to getAllServiceReferences.
+   * </p>
+   * 
+   * @param className the name of the class the lookup is for.
+   * @param filter
+   * @return an array of matching service references.
+   * @throws InvalidSyntaxException
+   */
+  public ServiceReference[] getServiceReferences(String className, String filter) throws InvalidSyntaxException
+  {
+    List<ServiceData> data = new ArrayList<ServiceData>();
+    
+    if (className != null) {
+      List<ServiceData> tmpData = registry.get(className);
+      if (tmpData != null) data.addAll(tmpData);
+    } else {
+      data = new ArrayList<ServiceData>();
+      for (List<ServiceData> value : registry.values())
+      data.addAll(value);
+    }
+    
+    ServiceReference[] refs;
+
+    if (data == null) {
+      refs = null;
+    } else {
+      
+      if (filter != null) {
+        Filter f = FrameworkUtil.createFilter(filter);
+        
+        Iterator<ServiceData> it = data.iterator();
+        
+        while (it.hasNext()) {
+          ServiceData sd = it.next();
+          
+          if (!!!f.match(sd.getProperties())) it.remove();
+        }
+      }
+      
+      if (data.isEmpty()) return null;
+      
+      refs = new ServiceReference[data.size()];
+      for (int i = 0; i < refs.length; i++) {
+        refs[i] = Skeleton.newMock(data.get(i), ServiceReference.class);
+      }
+    }
+    
+    return refs;
+  }
+  
+  /**
+   * Gets the first matching service reference.
+   * 
+   * @param className the class name wanted.
+   * @return the matchine service, or null if one cannot be found.
+   */
+  public ServiceReference getServiceReference(String className)
+  {
+    ServiceReference[] refs;
+    try {
+      refs = getServiceReferences(className, null);
+      if (refs != null) return refs[0];
+      
+      return null;
+    } catch (InvalidSyntaxException e) {
+      // should never happen.
+      e.printStackTrace();
+    }
+    return null;
+  }
+  
+  /**
+   * This method finds all the service references in the registry with the
+   * matching class name and filter.
+   * 
+   * @param className
+   * @param filter
+   * @return the matching service references.
+   * @throws InvalidSyntaxException
+   */
+  public ServiceReference[] getAllServiceReferences(String className, String filter) throws InvalidSyntaxException
+  {
+    return getServiceReferences(className, filter);
+  }
+  
+  /**
+   * Retrieve a service from the registry.
+   * @param ref the service reference.
+   * @return    the returned service.
+   */
+  public Object getService(ServiceReference ref)
+  {
+    ServiceData data = (ServiceData)Skeleton.getSkeleton(ref).getTemplateObject();
+    
+    return data.serviceImpl.getService(getBundle(), Skeleton.newMock(data, ServiceRegistration.class));
+  }
+  
+  /**
+   * This method implements the installBundle method from BundleContext. It
+   * makes use of the java.util.jar package to parse the manifest from the input
+   * stream.
+   * 
+   * @param location the location of the bundle.
+   * @param is       the input stream to read from.
+   * @return         the created bundle.
+   * @throws BundleException
+   */
+  public Bundle installBundle(String location, InputStream is) throws BundleException
+  {
+    Bundle b;
+    JarInputStream jis;
+    try {
+      jis = new JarInputStream(is);
+
+      Manifest man = jis.getManifest();
+      
+      b = createBundle(man, null);
+      
+    } catch (IOException e) {
+      throw new BundleException(e.getMessage(), e);
+    }
+    
+    return b;
+  }
+
+  /**
+   * Create a mock bundle correctly configured using the supplied manifest and
+   * location.
+   * 
+   * @param man      the manifest to load.
+   * @param location the location on disk.
+   * @return the created bundle
+   * @throws MalformedURLException
+   */
+  private Bundle createBundle(Manifest man, String location) throws MalformedURLException
+  {
+    Attributes attribs = man.getMainAttributes();
+    String symbolicName = attribs.getValue(Constants.BUNDLE_SYMBOLICNAME);
+    
+    Hashtable<Object, Object> attribMap = new Hashtable<Object, Object>();
+    
+    for (Map.Entry<Object, Object> entry : attribs.entrySet()) {
+      Attributes.Name name = (Attributes.Name)entry.getKey();
+      attribMap.put(name.toString(), entry.getValue());
+    }
+    
+    BundleMock mock = new BundleMock(symbolicName, attribMap, location);
+
+    mock.addToClassPath(new File("build/unittest/classes").toURL());
+
+    Bundle b = Skeleton.newMock(mock, Bundle.class);
+    
+    bundles.add(b);
+
+    return b;
+  }
+  
+  /**
+   * Asks to install an OSGi bundle from the given location.
+   * 
+   * @param location the location of the bundle on the file system.
+   * @return the installed bundle.
+   * @throws BundleException
+   */
+  public Bundle installBundle(String location) throws BundleException
+  {
+    try {
+      URI uri = new URI(location.replaceAll(" ", "%20"));
+
+      File baseDir = new File(uri);
+      Manifest man = null;
+      //check if it is a directory
+      if (baseDir.isDirectory()){
+      man = new Manifest(new FileInputStream(new File(baseDir, "META-INF/MANIFEST.MF")));
+      }
+      //if it isn't assume it is a jar file
+      else{
+        InputStream is = new FileInputStream(baseDir);
+        JarInputStream jis = new JarInputStream(is);
+        man = jis.getManifest();
+        jis.close();
+        if (man == null){
+          throw new BundleException("Null manifest");
+        }
+      }
+      
+      return createBundle(man, location);
+    } catch (IOException e) {
+      throw new BundleException(e.getMessage(), e);
+    } catch (URISyntaxException e) {
+      // TODO Auto-generated catch block
+      throw new BundleException(e.getMessage(), e);
+    }
+  }
+  
+  /**
+   * @return all the bundles in the system
+   */
+    public Bundle[] getBundles()
+  {
+    return bundles.toArray(new Bundle[bundles.size()]);
+  }
+  
+  /**
+   * Add a service listener.
+   * 
+   * @param listener
+   * @param filter
+   */
+  public void addServiceListener(ServiceListener listener, String filter)
+  {
+    listeners.add(new FilteredServiceListener(filter, listener));
+  }
+
+  /**
+   * Add a service listener.
+   * 
+   * @param listener
+   */
+  public void addServiceListener(ServiceListener listener) 
+  {
+    listeners.add(listener);
+  }
+  
+  /**
+   * Remove a service listener
+   * @param listener
+   */
+  public void removeServiceListener(ServiceListener listener)
+  {
+    listeners.remove(new FilteredServiceListener(null, listener));
+  }
+  
+  public String getProperty(String name)
+  {
+    if (Constants.FRAMEWORK_VERSION.equals(name)) {
+      return "4.1";
+    }
+    /*added System.getProperty so that tests can set a system property
+     * but it is retrieved via the BundleContext.
+     * This allows tests to emulate different properties being set on the
+     * context, helpful for the feature pack launcher/kernel relationship
+     */
+    else if (System.getProperty(name) != null){
+      return System.getProperty(name);
+    }
+    
+    return "";
+  }
+  
+  /**
+   * @return the bundle associated with this bundle context (if we created one).
+   */
+  public Bundle getBundle()
+  {
+    return bundle;
+  }
+  
+  /**
+   * This method clears the service registry.
+   */
+  public static void clear()
+  {
+    registry.clear();
+    bundles.clear();
+    listeners.clear();
+    nextId = 0;
+  }
+  
+  public static List<ServiceListener> getServiceListeners()
+  {
+    return listeners;
+  }
+
+  public void addBundle(Bundle b)
+  {
+    bundles.add(b);
+  }
 }
\ No newline at end of file

Propchange: incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/BundleContextMock.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/BundleMock.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/BundleMock.java?rev=822565&r1=822564&r2=822565&view=diff
==============================================================================
--- incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/BundleMock.java (original)
+++ incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/BundleMock.java Wed Oct  7 03:00:43 2009
@@ -1,391 +1,391 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.apache.aries.mocks;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Vector;
-import java.util.regex.Pattern;
-
-import junit.framework.AssertionFailedError;
-
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleReference;
-import org.osgi.framework.Constants;
-import org.osgi.framework.Version;
-
-import org.apache.aries.unittest.mocks.MethodCall;
-import org.apache.aries.unittest.mocks.MethodCallHandler;
-import org.apache.aries.unittest.mocks.Skeleton;
-import org.apache.aries.unittest.mocks.annotations.Singleton;
-
-@Singleton
-public class BundleMock
-{
-  private final String symbolicName;
-  private final Dictionary<?, ?> headers;
-  private final BundleContext bc;
-  private String location;
-  private BundleClassLoader cl;
-  
-  private class BundleClassLoader extends URLClassLoader implements BundleReference
-  {
-    List<Bundle> otherBundlesToCheck = new ArrayList<Bundle>();
-    
-    public BundleClassLoader(URL[] urls)
-    {
-      super(urls);
-    }
-
-    public BundleClassLoader(URL[] urls, ClassLoader parent)
-    {
-      super(urls, parent);
-    }
-    
-    public void addBundle(Bundle ... otherBundles)
-    {
-      otherBundlesToCheck.addAll(Arrays.asList(otherBundles));
-    }
-    
-    public Bundle[] getBundles()
-    {
-      return otherBundlesToCheck.toArray(new Bundle[otherBundlesToCheck.size()]);
-    }
-
-    @Override
-    protected Class<?> findClass(String name) throws ClassNotFoundException
-    {
-      Class<?> result = null;
-      for (Bundle b : otherBundlesToCheck) {
-        try {
-          result = b.loadClass(name);
-        } catch (ClassNotFoundException e) {
-          // do nothing here.
-        }
-        
-        if (result != null) return result;
-      }
-      
-      return super.findClass(name);
-    }
-
-    public Bundle getBundle()
-    {
-      return Skeleton.newMock(BundleMock.this, Bundle.class);
-    }
-  }
-  
-  public BundleMock(String name, Dictionary<?, ?> bundleHeaders)
-  {
-    symbolicName = name;
-    headers = bundleHeaders;
-    bc = Skeleton.newMock(new BundleContextMock(Skeleton.newMock(this, Bundle.class)), BundleContext.class);
-    
-    cl = AccessController.doPrivileged(new PrivilegedAction<BundleClassLoader>() {
-
-      public BundleClassLoader run()
-      {
-        return new BundleClassLoader(new URL[0], this.getClass().getClassLoader());
-      }
-    });
-  }
-  
-  public BundleMock(String name, Dictionary<?,?> bundleHeaders, boolean dummy)
-  {
-    this(name, bundleHeaders);
-    
-    cl = null;
-  }
-  
-  public BundleMock(String name, Dictionary<?, ?> bundleHeaders, String location)
-  {
-    this(name, bundleHeaders);
-    this.location = location;
-        
-    if (location != null) {
-      String cp = (String)bundleHeaders.get(Constants.BUNDLE_CLASSPATH);
-      
-      if (cp == null) cp = ".";
-      
-      String[] cpEntries = cp.split(",");
-      
-      final List<URL> urls = new ArrayList<URL>();
-      
-      try {
-        for (String cpEntry : cpEntries) {
-          if (".".equals(cpEntry.trim())) {
-            urls.add(new URL(location));
-          } else {
-            urls.add(new URL(location + "/" + cpEntry));
-          }
-        }
-        
-        cl = AccessController.doPrivileged(new PrivilegedAction<BundleClassLoader>() {
-          public BundleClassLoader run()
-          {
-            return new BundleClassLoader(urls.toArray(new URL[urls.size()]));
-          }
-        });
-      } catch (MalformedURLException e) {
-        Error err = new AssertionFailedError("The location was not a valid url");
-        err.initCause(e);
-        throw err;
-      }
-    }
-  }
-  
-  private static class PrivateDataFileHandler implements MethodCallHandler
-  {
-    private final File location;
-    
-    public PrivateDataFileHandler(File f)
-    {
-      this.location = f;
-    }
-    
-    public Object handle(MethodCall call, Skeleton parent)
-    {
-      File privateStorage = new File(location.getAbsolutePath(), "_private");
-      if (!!!privateStorage.exists())
-        privateStorage.mkdirs();
-      
-      return new File(privateStorage, (String) call.getArguments()[0]);
-    }
-  }
-  
-  public BundleMock(String name, Dictionary<?, ?> properties, File location) throws Exception
-  {
-    this(name,properties,location.toURL().toExternalForm());
-    
-    Skeleton bcSkel = Skeleton.getSkeleton(bc);
-    bcSkel.registerMethodCallHandler(
-        new MethodCall(BundleContext.class,"getDataFile", new Object[] { String.class }),
-        new PrivateDataFileHandler(location)
-    );
-  }
-  
-  public String getSymbolicName()
-  {
-    return symbolicName;
-  }
-  
-  public Dictionary<?, ?> getHeaders()
-  {
-    return headers;
-  }
-  
-  public Enumeration<URL> findEntries(String baseDir, String matchRule, boolean recurse)
-  {
-    System.err.println("findEntries: " + baseDir + ", " + matchRule + ", " + recurse);
-    File base;
-    try {
-      base = new File(new File(new URL(location.replaceAll(" ", "%20")).toURI()), baseDir);
-      System.err.println("Base dir: " + base);
-    } catch (Exception e) {
-      Error err = new AssertionFailedError("Unable to findEntries from " + location);
-      err.initCause(e);
-      throw err;
-    }
-    
-    if (matchRule.equals("*.xml")) matchRule = ".*\\.xml";
-    else matchRule = matchRule.replaceAll("\\*", ".*");
-    
-    System.err.println("matchrule: " + matchRule);
-    
-    final Pattern p = Pattern.compile(matchRule);
-    
-    File[] files = base.listFiles(new FileFilter(){
-      public boolean accept(File pathname)
-      {
-        return pathname.isFile() &&
-               p.matcher(pathname.getName()).matches();
-      }
-    });
-    
-    Vector<URL> v = new Vector<URL>();
-    
-    if (files != null) {
-      for (File f : files) {
-        try {
-          v.add(f.toURL());
-        } catch (MalformedURLException e) {
-          // TODO Auto-generated catch block
-          e.printStackTrace();
-        }
-      }
-    } else {
-      System.err.println("no matching files");
-    }
-    
-    if (v.isEmpty()) {
-      return null;
-    } else {
-      System.err.println(v);
-      return v.elements();
-    }
-  }
-  
-  public URL getResource(String name)
-  {
-    if (cl != null) return cl.getResource(name);
-    
-    try {
-      File f = new File(name);
-      if(f.exists() || "Entities.jar".equals(name)) return f.toURL();
-      else return null;
-    } catch (MalformedURLException e) {
-      Error err = new AssertionFailedError("The resource " + name + " could not be found.");
-      err.initCause(e);
-      throw err;
-    }
-  }
-  
-  public Enumeration<URL> getResources(String name)
-  {
-    if (cl != null)
-    {
-      try {
-        return cl.getResources(name);
-      } catch (IOException e) {
-      // TODO Auto-generated catch block
-        e.printStackTrace();
-      }
-    }
-    else {
-      final URL resource = getResource(name);
-      
-      if(resource != null) {
-        return new Enumeration<URL>() {
-
-          boolean hasMore = true;
-          public boolean hasMoreElements()
-          {
-            return hasMore;
-          }
-
-          public URL nextElement()
-          {
-            hasMore = false;
-            return resource;
-          }
-          
-        };
-      }
-    }
-    return new Enumeration<URL>(){
-      public URL nextElement()
-      {
-        return null;
-      }
-
-      public boolean hasMoreElements()
-      {
-        return false;
-      }
-    };
-    
-  }
-  
-  public Class<?> loadClass(String name) throws ClassNotFoundException
-  {
-    if (cl != null) return Class.forName(name, false, cl);
-    
-    throw new ClassNotFoundException("Argh, things went horribly wrong trying to load " + name);
-  }
-  
-  public String getLocation()
-  {
-    try {
-      return (location == null) ? new File(symbolicName + ".jar").toURL().toString() : location;
-    } catch (MalformedURLException e) {
-      Error err = new AssertionFailedError("We could not generate a valid url for the bundle");
-      err.initCause(e);
-      throw err;
-    }
-  }
-  
-  public BundleContext getBundleContext()
-  {
-    return bc;
-  }
-
-  public Version getVersion()
-  {
-    String res = (String) headers.get("Bundle-Version");
-    if (res != null)
-      return new Version(res);
-    else
-      return new Version("0.0.0");
-  }
-  
-  public int getState()
-  {
-    return Bundle.ACTIVE;
-  }
-
-  public void addToClassPath(URL ... urls)
-  {
-    if (cl != null) {
-      URL[] existingURLs = cl.getURLs();
-      final URL[] mergedURLs = new URL[urls.length + existingURLs.length];
-      int i = 0;
-      for (; i < existingURLs.length; i++) {
-        mergedURLs[i] = existingURLs[i];
-      }
-      
-      for (int j = 0; j < urls.length; j++, i++) {
-        mergedURLs[i] = urls[j];
-      }
-      
-      BundleClassLoader newCl = AccessController.doPrivileged(new PrivilegedAction<BundleClassLoader>() {
-
-        public BundleClassLoader run()
-        {
-          return new BundleClassLoader(mergedURLs, cl.getParent());
-        }
-        
-      });
-      newCl.addBundle(cl.getBundles());
-      cl = newCl;
-    }
-  }
-    
-  public void addBundleToClassPath(Bundle ... bundles) {
-    if (cl != null) {
-      cl.addBundle(bundles);
-    }
-  }
-
-  public ClassLoader getClassLoader()
-  {
-    return cl;
-  }
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.aries.mocks;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Vector;
+import java.util.regex.Pattern;
+
+import junit.framework.AssertionFailedError;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleReference;
+import org.osgi.framework.Constants;
+import org.osgi.framework.Version;
+
+import org.apache.aries.unittest.mocks.MethodCall;
+import org.apache.aries.unittest.mocks.MethodCallHandler;
+import org.apache.aries.unittest.mocks.Skeleton;
+import org.apache.aries.unittest.mocks.annotations.Singleton;
+
+@Singleton
+public class BundleMock
+{
+  private final String symbolicName;
+  private final Dictionary<?, ?> headers;
+  private final BundleContext bc;
+  private String location;
+  private BundleClassLoader cl;
+  
+  private class BundleClassLoader extends URLClassLoader implements BundleReference
+  {
+    List<Bundle> otherBundlesToCheck = new ArrayList<Bundle>();
+    
+    public BundleClassLoader(URL[] urls)
+    {
+      super(urls);
+    }
+
+    public BundleClassLoader(URL[] urls, ClassLoader parent)
+    {
+      super(urls, parent);
+    }
+    
+    public void addBundle(Bundle ... otherBundles)
+    {
+      otherBundlesToCheck.addAll(Arrays.asList(otherBundles));
+    }
+    
+    public Bundle[] getBundles()
+    {
+      return otherBundlesToCheck.toArray(new Bundle[otherBundlesToCheck.size()]);
+    }
+
+    @Override
+    protected Class<?> findClass(String name) throws ClassNotFoundException
+    {
+      Class<?> result = null;
+      for (Bundle b : otherBundlesToCheck) {
+        try {
+          result = b.loadClass(name);
+        } catch (ClassNotFoundException e) {
+          // do nothing here.
+        }
+        
+        if (result != null) return result;
+      }
+      
+      return super.findClass(name);
+    }
+
+    public Bundle getBundle()
+    {
+      return Skeleton.newMock(BundleMock.this, Bundle.class);
+    }
+  }
+  
+  public BundleMock(String name, Dictionary<?, ?> bundleHeaders)
+  {
+    symbolicName = name;
+    headers = bundleHeaders;
+    bc = Skeleton.newMock(new BundleContextMock(Skeleton.newMock(this, Bundle.class)), BundleContext.class);
+    
+    cl = AccessController.doPrivileged(new PrivilegedAction<BundleClassLoader>() {
+
+      public BundleClassLoader run()
+      {
+        return new BundleClassLoader(new URL[0], this.getClass().getClassLoader());
+      }
+    });
+  }
+  
+  public BundleMock(String name, Dictionary<?,?> bundleHeaders, boolean dummy)
+  {
+    this(name, bundleHeaders);
+    
+    cl = null;
+  }
+  
+  public BundleMock(String name, Dictionary<?, ?> bundleHeaders, String location)
+  {
+    this(name, bundleHeaders);
+    this.location = location;
+        
+    if (location != null) {
+      String cp = (String)bundleHeaders.get(Constants.BUNDLE_CLASSPATH);
+      
+      if (cp == null) cp = ".";
+      
+      String[] cpEntries = cp.split(",");
+      
+      final List<URL> urls = new ArrayList<URL>();
+      
+      try {
+        for (String cpEntry : cpEntries) {
+          if (".".equals(cpEntry.trim())) {
+            urls.add(new URL(location));
+          } else {
+            urls.add(new URL(location + "/" + cpEntry));
+          }
+        }
+        
+        cl = AccessController.doPrivileged(new PrivilegedAction<BundleClassLoader>() {
+          public BundleClassLoader run()
+          {
+            return new BundleClassLoader(urls.toArray(new URL[urls.size()]));
+          }
+        });
+      } catch (MalformedURLException e) {
+        Error err = new AssertionFailedError("The location was not a valid url");
+        err.initCause(e);
+        throw err;
+      }
+    }
+  }
+  
+  private static class PrivateDataFileHandler implements MethodCallHandler
+  {
+    private final File location;
+    
+    public PrivateDataFileHandler(File f)
+    {
+      this.location = f;
+    }
+    
+    public Object handle(MethodCall call, Skeleton parent)
+    {
+      File privateStorage = new File(location.getAbsolutePath(), "_private");
+      if (!!!privateStorage.exists())
+        privateStorage.mkdirs();
+      
+      return new File(privateStorage, (String) call.getArguments()[0]);
+    }
+  }
+  
+  public BundleMock(String name, Dictionary<?, ?> properties, File location) throws Exception
+  {
+    this(name,properties,location.toURL().toExternalForm());
+    
+    Skeleton bcSkel = Skeleton.getSkeleton(bc);
+    bcSkel.registerMethodCallHandler(
+        new MethodCall(BundleContext.class,"getDataFile", new Object[] { String.class }),
+        new PrivateDataFileHandler(location)
+    );
+  }
+  
+  public String getSymbolicName()
+  {
+    return symbolicName;
+  }
+  
+  public Dictionary<?, ?> getHeaders()
+  {
+    return headers;
+  }
+  
+  public Enumeration<URL> findEntries(String baseDir, String matchRule, boolean recurse)
+  {
+    System.err.println("findEntries: " + baseDir + ", " + matchRule + ", " + recurse);
+    File base;
+    try {
+      base = new File(new File(new URL(location.replaceAll(" ", "%20")).toURI()), baseDir);
+      System.err.println("Base dir: " + base);
+    } catch (Exception e) {
+      Error err = new AssertionFailedError("Unable to findEntries from " + location);
+      err.initCause(e);
+      throw err;
+    }
+    
+    if (matchRule.equals("*.xml")) matchRule = ".*\\.xml";
+    else matchRule = matchRule.replaceAll("\\*", ".*");
+    
+    System.err.println("matchrule: " + matchRule);
+    
+    final Pattern p = Pattern.compile(matchRule);
+    
+    File[] files = base.listFiles(new FileFilter(){
+      public boolean accept(File pathname)
+      {
+        return pathname.isFile() &&
+               p.matcher(pathname.getName()).matches();
+      }
+    });
+    
+    Vector<URL> v = new Vector<URL>();
+    
+    if (files != null) {
+      for (File f : files) {
+        try {
+          v.add(f.toURL());
+        } catch (MalformedURLException e) {
+          // TODO Auto-generated catch block
+          e.printStackTrace();
+        }
+      }
+    } else {
+      System.err.println("no matching files");
+    }
+    
+    if (v.isEmpty()) {
+      return null;
+    } else {
+      System.err.println(v);
+      return v.elements();
+    }
+  }
+  
+  public URL getResource(String name)
+  {
+    if (cl != null) return cl.getResource(name);
+    
+    try {
+      File f = new File(name);
+      if(f.exists() || "Entities.jar".equals(name)) return f.toURL();
+      else return null;
+    } catch (MalformedURLException e) {
+      Error err = new AssertionFailedError("The resource " + name + " could not be found.");
+      err.initCause(e);
+      throw err;
+    }
+  }
+  
+  public Enumeration<URL> getResources(String name)
+  {
+    if (cl != null)
+    {
+      try {
+        return cl.getResources(name);
+      } catch (IOException e) {
+      // TODO Auto-generated catch block
+        e.printStackTrace();
+      }
+    }
+    else {
+      final URL resource = getResource(name);
+      
+      if(resource != null) {
+        return new Enumeration<URL>() {
+
+          boolean hasMore = true;
+          public boolean hasMoreElements()
+          {
+            return hasMore;
+          }
+
+          public URL nextElement()
+          {
+            hasMore = false;
+            return resource;
+          }
+          
+        };
+      }
+    }
+    return new Enumeration<URL>(){
+      public URL nextElement()
+      {
+        return null;
+      }
+
+      public boolean hasMoreElements()
+      {
+        return false;
+      }
+    };
+    
+  }
+  
+  public Class<?> loadClass(String name) throws ClassNotFoundException
+  {
+    if (cl != null) return Class.forName(name, false, cl);
+    
+    throw new ClassNotFoundException("Argh, things went horribly wrong trying to load " + name);
+  }
+  
+  public String getLocation()
+  {
+    try {
+      return (location == null) ? new File(symbolicName + ".jar").toURL().toString() : location;
+    } catch (MalformedURLException e) {
+      Error err = new AssertionFailedError("We could not generate a valid url for the bundle");
+      err.initCause(e);
+      throw err;
+    }
+  }
+  
+  public BundleContext getBundleContext()
+  {
+    return bc;
+  }
+
+  public Version getVersion()
+  {
+    String res = (String) headers.get("Bundle-Version");
+    if (res != null)
+      return new Version(res);
+    else
+      return new Version("0.0.0");
+  }
+  
+  public int getState()
+  {
+    return Bundle.ACTIVE;
+  }
+
+  public void addToClassPath(URL ... urls)
+  {
+    if (cl != null) {
+      URL[] existingURLs = cl.getURLs();
+      final URL[] mergedURLs = new URL[urls.length + existingURLs.length];
+      int i = 0;
+      for (; i < existingURLs.length; i++) {
+        mergedURLs[i] = existingURLs[i];
+      }
+      
+      for (int j = 0; j < urls.length; j++, i++) {
+        mergedURLs[i] = urls[j];
+      }
+      
+      BundleClassLoader newCl = AccessController.doPrivileged(new PrivilegedAction<BundleClassLoader>() {
+
+        public BundleClassLoader run()
+        {
+          return new BundleClassLoader(mergedURLs, cl.getParent());
+        }
+        
+      });
+      newCl.addBundle(cl.getBundles());
+      cl = newCl;
+    }
+  }
+    
+  public void addBundleToClassPath(Bundle ... bundles) {
+    if (cl != null) {
+      cl.addBundle(bundles);
+    }
+  }
+
+  public ClassLoader getClassLoader()
+  {
+    return cl;
+  }
 }
\ No newline at end of file

Propchange: incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/BundleMock.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/MockInitialContextFactoryBuilder.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/MockInitialContextFactoryBuilder.java?rev=822565&r1=822564&r2=822565&view=diff
==============================================================================
--- incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/MockInitialContextFactoryBuilder.java (original)
+++ incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/MockInitialContextFactoryBuilder.java Wed Oct  7 03:00:43 2009
@@ -1,56 +1,56 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.apache.aries.mocks;
-
-import java.util.Hashtable;
-
-import javax.naming.Context;
-import javax.naming.NamingException;
-import javax.naming.spi.InitialContextFactory;
-import javax.naming.spi.InitialContextFactoryBuilder;
-import javax.naming.spi.NamingManager;
-
-import org.apache.aries.unittest.mocks.MethodCall;
-import org.apache.aries.unittest.mocks.Skeleton;
-
-public class MockInitialContextFactoryBuilder implements InitialContextFactoryBuilder
-{
-  private static InitialContextFactory icf;
-  
-  public InitialContextFactory createInitialContextFactory(Hashtable<?, ?> environment)
-      throws NamingException
-  {
-    return icf;
-  }
-  
-  public static void start(Context ctx) throws NamingException
-  {
-    if (icf == null) {
-      NamingManager.setInitialContextFactoryBuilder(new MockInitialContextFactoryBuilder());
-    }
-    
-    icf = Skeleton.newMock(InitialContextFactory.class);
-    getSkeleton().setReturnValue(new MethodCall(InitialContextFactory.class, "getInitialContext", Hashtable.class), ctx);
-  }
-  
-  public static Skeleton getSkeleton()
-  {
-    return Skeleton.getSkeleton(icf);
-  }
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.aries.mocks;
+
+import java.util.Hashtable;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.spi.InitialContextFactory;
+import javax.naming.spi.InitialContextFactoryBuilder;
+import javax.naming.spi.NamingManager;
+
+import org.apache.aries.unittest.mocks.MethodCall;
+import org.apache.aries.unittest.mocks.Skeleton;
+
+public class MockInitialContextFactoryBuilder implements InitialContextFactoryBuilder
+{
+  private static InitialContextFactory icf;
+  
+  public InitialContextFactory createInitialContextFactory(Hashtable<?, ?> environment)
+      throws NamingException
+  {
+    return icf;
+  }
+  
+  public static void start(Context ctx) throws NamingException
+  {
+    if (icf == null) {
+      NamingManager.setInitialContextFactoryBuilder(new MockInitialContextFactoryBuilder());
+    }
+    
+    icf = Skeleton.newMock(InitialContextFactory.class);
+    getSkeleton().setReturnValue(new MethodCall(InitialContextFactory.class, "getInitialContext", Hashtable.class), ctx);
+  }
+  
+  public static Skeleton getSkeleton()
+  {
+    return Skeleton.getSkeleton(icf);
+  }
 }
\ No newline at end of file

Propchange: incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/mocks/MockInitialContextFactoryBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/junit/Assert.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/junit/Assert.java?rev=822565&r1=822564&r2=822565&view=diff
==============================================================================
--- incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/junit/Assert.java (original)
+++ incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/junit/Assert.java Wed Oct  7 03:00:43 2009
@@ -1,80 +1,80 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.apache.aries.unittest.junit;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-/**
- * A library of useful assertion routines.
- */
-public class Assert
-{
-  /**
-   * This method checks that the two objects have the same hashCode. If the
-   * equalsObjects parameter is true then the objects must also be .equals equal
-   * if the equalsObject parameter is false then they must not be .equals equal.
-   * 
-   * @param <T> 
-   * @param obj  the first object.
-   * @param obj2 the second object.
-   * @param equalObjects whether the objects are also equal.
-   */
-  public static <T> void assertHashCodeEquals(T obj, T obj2, boolean equalObjects)
-  {
-    assertEquals("The hashCodes were different, bad, bad, bad", obj.hashCode(), obj2.hashCode());
-    assertEquals("The two objects are not equal", equalObjects, obj.equals(obj2));
-  }
-
-  /**
-   * This method makes sure that the hashCodes are not equal. And that they
-   * are not .equals. This is because two objects of the same type cannot be
-   * .equals if they have different hashCodes.
-   * 
-   * @param <T> 
-   * @param obj
-   * @param obj2
-   */
-  public static <T> void assertHashCodeNotEquals(T obj, T obj2)
-  {
-    assertFalse("The the two hashCodes should be different: " + obj.hashCode() + ", " + obj2.hashCode(), obj.hashCode() == obj2.hashCode());
-    assertFalse("The two objects not equal", obj.equals(obj2));
-  }
-  
-  /**
-   * This method asserts that the equals contract is upheld by type T.
-   * 
-   * @param <T>
-   * @param info    an instance of T
-   * @param info2   a different instance of T that is .equal to info
-   * @param info3   an instance of T that is not equal to info
-   */
-  public static <T> void assertEqualsContract(T info, T info2, T info3)
-  {
-    Object other = new Object();
-    if (info.getClass() == Object.class) other = "A string";
-    
-    assertEquals(info, info);
-    assertFalse(info.equals(null));
-    assertTrue("Equals should be commutative", info.equals(info2) == info2.equals(info) && info2.equals(info3) == info3.equals(info2));
-    assertTrue("If two objects are equal, then they must both be equal (or not equal) to a third", info.equals(info3) == info2.equals(info3));
-    assertFalse("An object should not equal an object of a disparate type", info.equals(other));
-  }
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.aries.unittest.junit;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * A library of useful assertion routines.
+ */
+public class Assert
+{
+  /**
+   * This method checks that the two objects have the same hashCode. If the
+   * equalsObjects parameter is true then the objects must also be .equals equal
+   * if the equalsObject parameter is false then they must not be .equals equal.
+   * 
+   * @param <T> 
+   * @param obj  the first object.
+   * @param obj2 the second object.
+   * @param equalObjects whether the objects are also equal.
+   */
+  public static <T> void assertHashCodeEquals(T obj, T obj2, boolean equalObjects)
+  {
+    assertEquals("The hashCodes were different, bad, bad, bad", obj.hashCode(), obj2.hashCode());
+    assertEquals("The two objects are not equal", equalObjects, obj.equals(obj2));
+  }
+
+  /**
+   * This method makes sure that the hashCodes are not equal. And that they
+   * are not .equals. This is because two objects of the same type cannot be
+   * .equals if they have different hashCodes.
+   * 
+   * @param <T> 
+   * @param obj
+   * @param obj2
+   */
+  public static <T> void assertHashCodeNotEquals(T obj, T obj2)
+  {
+    assertFalse("The the two hashCodes should be different: " + obj.hashCode() + ", " + obj2.hashCode(), obj.hashCode() == obj2.hashCode());
+    assertFalse("The two objects not equal", obj.equals(obj2));
+  }
+  
+  /**
+   * This method asserts that the equals contract is upheld by type T.
+   * 
+   * @param <T>
+   * @param info    an instance of T
+   * @param info2   a different instance of T that is .equal to info
+   * @param info3   an instance of T that is not equal to info
+   */
+  public static <T> void assertEqualsContract(T info, T info2, T info3)
+  {
+    Object other = new Object();
+    if (info.getClass() == Object.class) other = "A string";
+    
+    assertEquals(info, info);
+    assertFalse(info.equals(null));
+    assertTrue("Equals should be commutative", info.equals(info2) == info2.equals(info) && info2.equals(info3) == info3.equals(info2));
+    assertTrue("If two objects are equal, then they must both be equal (or not equal) to a third", info.equals(info3) == info2.equals(info3));
+    assertFalse("An object should not equal an object of a disparate type", info.equals(other));
+  }
 }
\ No newline at end of file

Propchange: incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/junit/Assert.java
------------------------------------------------------------------------------
    svn:eol-style = native