Author: bdelacretaz
Date: Wed Nov  4 23:50:31 2009
New Revision: 832916

URL: http://svn.apache.org/viewvc?rev=832916&view=rev
Log:
SLING-1166 - Provide helper class for simpler unit testing of sling code. 
Contributed by Alex Klimetschek, thanks!

Added:
    sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/
    
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/
    
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/AdapterManagerTestHelper.java
   (with props)
    
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockAdapterFactory.java
   (with props)
    
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockBundleContext.java
   (with props)
    
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockComponentContext.java
   (with props)
    
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockServiceReference.java
   (with props)
    
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/commons/testing/SlingTestHelper.java
   (with props)
Modified:
    sling/trunk/bundles/commons/testing/pom.xml

Modified: sling/trunk/bundles/commons/testing/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/testing/pom.xml?rev=832916&r1=832915&r2=832916&view=diff
==============================================================================
--- sling/trunk/bundles/commons/testing/pom.xml (original)
+++ sling/trunk/bundles/commons/testing/pom.xml Wed Nov  4 23:50:31 2009
@@ -91,6 +91,18 @@
             <scope>compile</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.adapter</artifactId>
+            <version>2.0.4</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.jcr.resource</artifactId>
+            <version>2.0.6</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
             <groupId>rhino</groupId>
             <artifactId>js</artifactId>
             <version>1.6R6</version>

Added: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/AdapterManagerTestHelper.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/AdapterManagerTestHelper.java?rev=832916&view=auto
==============================================================================
--- 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/AdapterManagerTestHelper.java
 (added)
+++ 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/AdapterManagerTestHelper.java
 Wed Nov  4 23:50:31 2009
@@ -0,0 +1,76 @@
+/*
+ * 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.sling.adapter.internal;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.sling.api.adapter.AdapterFactory;
+import org.apache.sling.commons.testing.osgi.MockBundle;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceReference;
+
+
+/**
+ * Sets up an {...@link AdapterManagerImpl} in a junit testing environment. 
This
+ * class is in the same package as the {...@link AdapterManagerImpl} in order 
to
+ * access the protected activate method.
+ * 
+ */
+public class AdapterManagerTestHelper {
+    
+    private static AdapterManagerImpl adapterMgr;
+    
+    private static MockComponentContext mockContext;
+    
+    private static List<ServiceReference> registeredFactories = new 
ArrayList<ServiceReference>();
+
+    private static void initAdapterManager() {
+        if (adapterMgr == null) {
+            adapterMgr = new AdapterManagerImpl();
+    
+            mockContext = new MockComponentContext();
+            adapterMgr.activate(mockContext);
+        }
+    }
+    
+    public static void registerAdapterFactory(AdapterFactory adapterFactory,
+            String[] adaptableClasses, String[] adapterClasses) {
+        initAdapterManager();
+        
+        Bundle bundle = new MockBundle(1L);
+        MockServiceReference ref = new MockServiceReference(bundle);
+        mockContext.addService(ref, adapterFactory);
+        ref.setProperty(Constants.SERVICE_ID, 1L);
+        ref.setProperty(AdapterFactory.ADAPTABLE_CLASSES, adaptableClasses);
+        ref.setProperty(AdapterFactory.ADAPTER_CLASSES, adapterClasses);
+        adapterMgr.bindAdapterFactory(ref);
+        
+        registeredFactories.add(ref);
+    }
+
+    public static void resetAdapterFactories() {
+        if (adapterMgr != null) {
+            for (ServiceReference ref : registeredFactories) {
+                adapterMgr.unbindAdapterFactory(ref);
+            }
+        }
+    }
+}

Propchange: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/AdapterManagerTestHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/AdapterManagerTestHelper.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockAdapterFactory.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockAdapterFactory.java?rev=832916&view=auto
==============================================================================
--- 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockAdapterFactory.java
 (added)
+++ 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockAdapterFactory.java
 Wed Nov  4 23:50:31 2009
@@ -0,0 +1,53 @@
+/*
+ * 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.sling.adapter.internal;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+import org.apache.sling.api.adapter.AdapterFactory;
+
+public class MockAdapterFactory implements AdapterFactory {
+
+    private static final InvocationHandler NOP_INVOCATION_HANDLER = new 
InvocationHandler() {
+        public Object invoke(Object proxy, Method method, Object[] args)
+                throws Throwable {
+            return null;
+        }
+    };
+
+    @SuppressWarnings("unchecked")
+    public <AdapterType> AdapterType getAdapter(Object adaptable,
+            Class<AdapterType> type) {
+
+        try {
+            if (type.isInterface()) {
+                return (AdapterType) 
Proxy.newProxyInstance(type.getClassLoader(),
+                    new Class[] { type }, NOP_INVOCATION_HANDLER);
+            }
+
+            return type.newInstance();
+        } catch (Exception e) {
+            // ignore
+        }
+
+        return null;
+    }
+}

Propchange: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockAdapterFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockAdapterFactory.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockBundleContext.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockBundleContext.java?rev=832916&view=auto
==============================================================================
--- 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockBundleContext.java
 (added)
+++ 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockBundleContext.java
 Wed Nov  4 23:50:31 2009
@@ -0,0 +1,154 @@
+/*
+ * 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.sling.adapter.internal;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.Dictionary;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.BundleListener;
+import org.osgi.framework.Filter;
+import org.osgi.framework.FrameworkListener;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceListener;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+
+public class MockBundleContext implements BundleContext {
+
+    public void addBundleListener(BundleListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void addFrameworkListener(FrameworkListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void addServiceListener(ServiceListener listener, String filter)
+            throws InvalidSyntaxException {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void addServiceListener(ServiceListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public Filter createFilter(String filter) throws InvalidSyntaxException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public ServiceReference[] getAllServiceReferences(String clazz,
+            String filter) throws InvalidSyntaxException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Bundle getBundle() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Bundle getBundle(long id) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Bundle[] getBundles() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public File getDataFile(String filename) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String getProperty(String key) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Object getService(ServiceReference reference) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public ServiceReference getServiceReference(String clazz) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public ServiceReference[] getServiceReferences(String clazz, String filter)
+            throws InvalidSyntaxException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Bundle installBundle(String location, InputStream input)
+            throws BundleException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public Bundle installBundle(String location) throws BundleException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public ServiceRegistration registerService(String clazz, Object service,
+            Dictionary properties) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public ServiceRegistration registerService(String[] clazzes,
+            Object service, Dictionary properties) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void removeBundleListener(BundleListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void removeFrameworkListener(FrameworkListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void removeServiceListener(ServiceListener listener) {
+        // TODO Auto-generated method stub
+
+    }
+
+    public boolean ungetService(ServiceReference reference) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+}

Propchange: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockBundleContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockBundleContext.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockComponentContext.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockComponentContext.java?rev=832916&view=auto
==============================================================================
--- 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockComponentContext.java
 (added)
+++ 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockComponentContext.java
 Wed Nov  4 23:50:31 2009
@@ -0,0 +1,77 @@
+/*
+ * 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.sling.adapter.internal;
+
+import java.util.Dictionary;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.ComponentInstance;
+
+public class MockComponentContext implements ComponentContext {
+
+    private Map<ServiceReference, Object> services = new 
HashMap<ServiceReference, Object>();
+
+    public void addService(ServiceReference reference, Object service) {
+        services.put(reference, service);
+    }
+
+    public Object locateService(String name, ServiceReference reference) {
+        return services.get(reference);
+    }
+
+    public Object locateService(String name) {
+        return null;
+    }
+
+    public Object[] locateServices(String name) {
+        return null;
+    }
+
+    public void disableComponent(String name) {
+    }
+
+    public void enableComponent(String name) {
+    }
+
+    public BundleContext getBundleContext() {
+        return new MockBundleContext();
+    }
+
+    public ComponentInstance getComponentInstance() {
+        return null;
+    }
+
+    public Dictionary<?, ?> getProperties() {
+        return null;
+    }
+
+    public ServiceReference getServiceReference() {
+        return null;
+    }
+
+    public Bundle getUsingBundle() {
+        return null;
+    }
+
+}

Propchange: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockComponentContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockComponentContext.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockServiceReference.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockServiceReference.java?rev=832916&view=auto
==============================================================================
--- 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockServiceReference.java
 (added)
+++ 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockServiceReference.java
 Wed Nov  4 23:50:31 2009
@@ -0,0 +1,65 @@
+/*
+ * 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.sling.adapter.internal;
+
+import java.util.Collections;
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceReference;
+
+public class MockServiceReference implements ServiceReference {
+
+    private Bundle bundle;
+    private Dictionary<String, Object> props;
+
+    public MockServiceReference(Bundle bundle) {
+        this.bundle = bundle;
+        this.props = new Hashtable<String, Object>();
+    }
+
+    public Bundle getBundle() {
+        return bundle;
+    }
+
+    public void setProperty(String key, Object value) {
+        props.put(key, value);
+    }
+
+    public Object getProperty(String key) {
+        return props.get(key);
+    }
+
+    public String[] getPropertyKeys() {
+        return Collections.list(props.keys()).toArray(new 
String[props.size()]);
+    }
+
+    public Bundle[] getUsingBundles() {
+        return null;
+    }
+
+    public boolean isAssignableTo(Bundle bundle, String className) {
+        return false;
+    }
+
+    public int compareTo(Object reference) {
+        return 0;
+    }
+}

Propchange: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockServiceReference.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/adapter/internal/MockServiceReference.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/commons/testing/SlingTestHelper.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/commons/testing/SlingTestHelper.java?rev=832916&view=auto
==============================================================================
--- 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/commons/testing/SlingTestHelper.java
 (added)
+++ 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/commons/testing/SlingTestHelper.java
 Wed Nov  4 23:50:31 2009
@@ -0,0 +1,126 @@
+/*
+ * 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.sling.commons.testing;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.Property;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.apache.sling.adapter.internal.AdapterManagerTestHelper;
+import org.apache.sling.api.adapter.AdapterFactory;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.jcr.api.SlingRepository;
+import org.apache.sling.jcr.resource.JcrResourceResolverFactory;
+import org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl;
+import org.apache.sling.jcr.resource.internal.helper.Mapping;
+
+/**
+ * <code>SlingTestHelper</code> provides various helper methods for accessing
+ * standard sling features in a test environment without the OSGi service 
framework
+ * available. This includes:
+ * 
+ * - access to a {...@link JcrResourceResolverFactory} and a jcr-based 
{...@link ResourceResolver}
+ * - register standard sling node types
+ * - simple adaptable manager implementation (requires {...@link 
AdapterManagerTestHelper})
+ */
+public class SlingTestHelper {
+    
+    public static JcrResourceResolverFactory 
+            getJcrResourceResolverFactory(SlingRepository repository) throws 
Exception {
+        
+        JcrResourceResolverFactoryImpl resFac = new 
JcrResourceResolverFactoryImpl();
+
+        // set all fields that are normally resolved by OSGi SCR via reflection
+        
+        Field repoField = resFac.getClass().getDeclaredField("repository");
+        repoField.setAccessible(true);
+        repoField.set(resFac, repository);
+
+        Field mappingsField = resFac.getClass().getDeclaredField("mappings");
+        mappingsField.setAccessible(true);
+        mappingsField.set(resFac, new Mapping[] { Mapping.DIRECT });
+
+        Field searchPathField = 
resFac.getClass().getDeclaredField("searchPath");
+        searchPathField.setAccessible(true);
+        searchPathField.set(resFac, new String[] { "/apps", "/libs" });
+
+        return resFac;
+    }
+
+    public static ResourceResolver getResourceResolver(SlingRepository 
repository, Session session) throws Exception {
+        JcrResourceResolverFactory factory = 
getJcrResourceResolverFactory(repository);
+        return factory.getResourceResolver(session);
+    }
+    
+    public static void registerSlingNodeTypes(Session adminSession) throws 
IOException, RepositoryException {
+        Class<SlingTestHelper> clazz = SlingTestHelper.class;
+        
org.apache.sling.commons.testing.jcr.RepositoryUtil.registerNodeType(adminSession,
+                clazz.getResourceAsStream("/SLING-INF/nodetypes/folder.cnd"));
+        
org.apache.sling.commons.testing.jcr.RepositoryUtil.registerNodeType(adminSession,
+                
clazz.getResourceAsStream("/SLING-INF/nodetypes/resource.cnd"));
+        
org.apache.sling.commons.testing.jcr.RepositoryUtil.registerNodeType(adminSession,
+                
clazz.getResourceAsStream("/SLING-INF/nodetypes/vanitypath.cnd"));
+    }
+    
+    public static void registerAdapterFactory(AdapterFactory adapterFactory,
+            String[] adaptableClasses, String[] adapterClasses) {
+        AdapterManagerTestHelper.registerAdapterFactory(adapterFactory, 
adaptableClasses, adapterClasses);
+    }
+    
+    public static void resetAdapterFactories() {
+        AdapterManagerTestHelper.resetAdapterFactories();
+    }
+
+    public static void printJCR(Session session) throws RepositoryException {
+        printJCR(session.getRootNode(), new String[] {});
+    }
+    
+    public static void printJCR(Node node) throws RepositoryException {
+        printJCR(node, new String[] {});
+    }
+    
+    public static void printJCR(Session session, String path, String... props) 
throws RepositoryException {
+        printJCR((Node) session.getItem(path), props);
+    }
+    
+    public static void printJCR(Node node, String... props) throws 
RepositoryException {
+        System.out.println(node.getPath());
+        if (props != null) {
+            for (String prop: props) {
+                if (node.hasProperty(prop)) {
+                    Property property = node.getProperty(prop);
+                    System.out.println(property.getPath() + " = " + 
property.getString());
+                }
+            }
+        }
+        NodeIterator nodes = node.getNodes();
+        while (nodes.hasNext()) {
+            Node child = nodes.nextNode();
+            if (!child.getName().equals("jcr:system")) {
+                printJCR(child, props);
+            }
+        }
+    }
+    
+}

Propchange: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/commons/testing/SlingTestHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/trunk/bundles/commons/testing/src/main/java/org/apache/sling/commons/testing/SlingTestHelper.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL


Reply via email to