You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:24:04 UTC

[sling-org-apache-sling-testing-sling-mock] 10/14: SLING-5428 Move MockSlingHttpServletRequest+Response to org.apache.sling.servlet-helpers

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.testing.sling-mock-1.6.2
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-sling-mock.git

commit dfd873ca60e47f6f70eac5d02a47f26f3a654e56
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Wed Jan 13 23:07:09 2016 +0000

    SLING-5428 Move MockSlingHttpServletRequest+Response to org.apache.sling.servlet-helpers
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/mocks/sling-mock@1724523 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml                                            |   6 +
 .../apache/sling/testing/mock/sling/MockSling.java |   2 +-
 .../testing/mock/sling/servlet/CookieSupport.java  |  53 --
 .../testing/mock/sling/servlet/HeaderSupport.java  | 175 -----
 .../mock/sling/servlet/MockHttpSession.java        | 136 +---
 .../servlet/MockRequestDispatcherFactory.java      |  23 +-
 .../mock/sling/servlet/MockRequestParameter.java   | 105 ---
 .../sling/servlet/MockRequestParameterMap.java     | 101 ---
 .../mock/sling/servlet/MockRequestPathInfo.java    |  62 +-
 .../mock/sling/servlet/MockServletContext.java     | 277 +-------
 .../sling/servlet/MockSlingHttpServletRequest.java | 759 +--------------------
 .../servlet/MockSlingHttpServletResponse.java      | 255 +------
 .../mock/sling/servlet/ResponseBodySupport.java    | 100 ---
 .../testing/mock/sling/servlet/package-info.java   |   2 +-
 .../mock/sling/MockSlingScriptHelperTest.java      |   2 +-
 .../mock/sling/servlet/MockHttpSessionTest.java    |  62 +-
 .../sling/servlet/MockRequestPathInfoTest.java     |  68 --
 .../mock/sling/servlet/MockServletContextTest.java |  42 --
 .../servlet/MockSlingHttpServletRequestTest.java   | 248 +------
 .../servlet/MockSlingHttpServletResponseTest.java  | 135 ----
 20 files changed, 36 insertions(+), 2577 deletions(-)

diff --git a/pom.xml b/pom.xml
index 0ab4ff8..ba433eb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -60,6 +60,12 @@
             <version>1.1.10</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.servlet-helpers</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
 
         <dependency>
             <groupId>org.apache.sling</groupId>
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java b/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java
index 843f9e8..b53faae 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java
@@ -216,7 +216,7 @@ public final class MockSling {
      * @return Sling script helper instance
      */
     public static SlingScriptHelper newSlingScriptHelper(BundleContext bundleContext) {
-        SlingHttpServletRequest request = new MockSlingHttpServletRequest(newResourceResolver(bundleContext));
+        SlingHttpServletRequest request = new MockSlingHttpServletRequest(newResourceResolver(bundleContext), bundleContext);
         SlingHttpServletResponse response = new MockSlingHttpServletResponse();
         return newSlingScriptHelper(request, response, bundleContext);
     }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/CookieSupport.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/CookieSupport.java
deleted file mode 100644
index ef7c171..0000000
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/CookieSupport.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.testing.mock.sling.servlet;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import javax.servlet.http.Cookie;
-
-/**
- * Manages cookies for request and response.
- */
-class CookieSupport {
-
-    private Map<String, Cookie> cookies = new LinkedHashMap<String, Cookie>();
-
-    public void addCookie(Cookie cookie) {
-        cookies.put(cookie.getName(), cookie);
-    }
-
-    public Cookie getCookie(String name) {
-        return cookies.get(name);
-    }
-
-    public Cookie[] getCookies() {
-        if (cookies.isEmpty()) {
-            return null;
-        } else {
-            return cookies.values().toArray(new Cookie[cookies.size()]);
-        }
-    }
-
-    public void reset() {
-        cookies.clear();
-    }
-
-}
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/HeaderSupport.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/HeaderSupport.java
deleted file mode 100644
index cc91c93..0000000
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/HeaderSupport.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * 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.testing.mock.sling.servlet;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
-import java.util.TimeZone;
-import java.util.Vector;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.math.NumberUtils;
-
-/**
- * Manage HTTP headers for request and response.
- */
-class HeaderSupport {
-
-    private static final String RFC_1123_DATE_PATTERN = "EEE, dd MMM yyyy HH:mm:ss z";
-    private static final DateFormat RFC1123_DATE_FORMAT = new SimpleDateFormat(RFC_1123_DATE_PATTERN, Locale.US);
-    private static final TimeZone TIMEZONE_GMT = TimeZone.getTimeZone("GMT");
-    static {
-        RFC1123_DATE_FORMAT.setTimeZone(TIMEZONE_GMT);
-    }
-
-    private List<HeaderValue> headers = new ArrayList<HeaderValue>();
-
-    private static class HeaderValue {
-
-        private String key;
-        private String value;
-
-        public HeaderValue(String key, String value) {
-            this.key = key;
-            this.value = value;
-        }
-
-        public String getKey() {
-            return this.key;
-        }
-
-        public String getValue() {
-            return this.value;
-        }
-
-    }
-
-    public void addHeader(String name, String value) {
-        headers.add(new HeaderValue(name, value));
-    }
-
-    public void addIntHeader(String name, int value) {
-        headers.add(new HeaderValue(name, Integer.toString(value)));
-    }
-
-    public void addDateHeader(String name, long date) {
-        Calendar calendar = Calendar.getInstance(TIMEZONE_GMT, Locale.US);
-        calendar.setTimeInMillis(date);
-        headers.add(new HeaderValue(name, formatDate(calendar)));
-    }
-
-    public void setHeader(String name, String value) {
-        removeHeaders(name);
-        addHeader(name, value);
-    }
-
-    public void setIntHeader(String name, int value) {
-        removeHeaders(name);
-        addIntHeader(name, value);
-    }
-
-    public void setDateHeader(String name, long date) {
-        removeHeaders(name);
-        addDateHeader(name, date);
-    }
-
-    private void removeHeaders(String name) {
-        for (int i = this.headers.size() - 1; i >= 0; i--) {
-            if (StringUtils.equals(this.headers.get(i).getKey(), name)) {
-                headers.remove(i);
-            }
-        }
-    }
-
-    public boolean containsHeader(String name) {
-        return !getHeaders(name).isEmpty();
-    }
-
-    public String getHeader(String name) {
-        Collection<String> values = getHeaders(name);
-        if (!values.isEmpty()) {
-            return values.iterator().next();
-        } else {
-            return null;
-        }
-    }
-
-    public int getIntHeader(String name) {
-        String value = getHeader(name);
-        return NumberUtils.toInt(value);
-    }
-
-    public long getDateHeader(String name) {
-        String value = getHeader(name);
-        if (StringUtils.isEmpty(value)) {
-            return 0L;
-        } else {
-            try {
-                return parseDate(value).getTimeInMillis();
-            } catch (ParseException ex) {
-                return 0L;
-            }
-        }
-    }
-
-    public Collection<String> getHeaders(String name) {
-        List<String> values = new ArrayList<String>();
-        for (HeaderValue entry : headers) {
-            if (StringUtils.equals(entry.getKey(), name)) {
-                values.add(entry.getValue());
-            }
-        }
-        return values;
-    }
-
-    public Collection<String> getHeaderNames() {
-        Set<String> values = new HashSet<String>();
-        for (HeaderValue entry : headers) {
-            values.add(entry.getKey());
-        }
-        return values;
-    }
-
-    public void reset() {
-        headers.clear();
-    }
-
-    public static Enumeration<String> toEnumeration(Collection<String> collection) {
-        return new Vector<String>(collection).elements();
-    }
-
-    private static synchronized String formatDate(Calendar date) {
-        return RFC1123_DATE_FORMAT.format(date.getTime());
-    }
-
-    private static synchronized Calendar parseDate(String dateString) throws ParseException {
-        RFC1123_DATE_FORMAT.parse(dateString);
-        return RFC1123_DATE_FORMAT.getCalendar();
-    }
-
-}
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockHttpSession.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockHttpSession.java
index 5ab82fd..b9692a6 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockHttpSession.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockHttpSession.java
@@ -18,141 +18,13 @@
  */
 package org.apache.sling.testing.mock.sling.servlet;
 
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.collections.IteratorUtils;
-
 /**
  * Mock {@link HttpSession} implementation.
  */
-public final class MockHttpSession implements HttpSession {
-
-    private final ServletContext servletContext = new MockServletContext();
-    private final Map<String, Object> attributeMap = new HashMap<String, Object>();
-    private final String sessionID = UUID.randomUUID().toString();
-    private final long creationTime = System.currentTimeMillis();
-    private boolean invalidated = false;
-    private boolean isNew = true;
-    private int maxActiveInterval = 1800;
-
-    @Override
-    public ServletContext getServletContext() {
-        return this.servletContext;
-    }
-
-    @Override
-    public Object getAttribute(final String name) {
-        checkInvalidatedState();
-        return this.attributeMap.get(name);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public Enumeration<String> getAttributeNames() {
-        checkInvalidatedState();
-        return IteratorUtils.asEnumeration(this.attributeMap.keySet().iterator());
-    }
-
-    @Override
-    public String getId() {
-        return this.sessionID;
-    }
-
-    @Override
-    public long getCreationTime() {
-        checkInvalidatedState();
-        return this.creationTime;
-    }
-
-    @Override
-    public Object getValue(final String name) {
-        checkInvalidatedState();
-        return getAttribute(name);
-    }
-
-    @Override
-    public String[] getValueNames() {
-        checkInvalidatedState();
-        return this.attributeMap.keySet().toArray(new String[this.attributeMap.keySet().size()]);
-    }
-
-    @Override
-    public void putValue(final String name, final Object value) {
-        checkInvalidatedState();
-        setAttribute(name, value);
-    }
-
-    @Override
-    public void removeAttribute(final String name) {
-        checkInvalidatedState();
-        this.attributeMap.remove(name);
-    }
-
-    @Override
-    public void removeValue(final String name) {
-        checkInvalidatedState();
-        this.attributeMap.remove(name);
-    }
-
-    @Override
-    public void setAttribute(final String name, final Object value) {
-        checkInvalidatedState();
-        this.attributeMap.put(name, value);
-    }
-
-    @Override
-    public void invalidate() {
-        checkInvalidatedState();
-        this.invalidated = true;
-    }
-    
-    private void checkInvalidatedState() {
-        if (invalidated) {
-            throw new IllegalStateException("Session is already invalidated.");
-        }
-    }
+public final class MockHttpSession extends org.apache.sling.servlethelpers.MockHttpSession {
     
-    public boolean isInvalidated() {
-        return invalidated;
-    }
-
-    @Override
-    public boolean isNew() {
-        checkInvalidatedState();
-        return isNew;
+    protected MockServletContext newMockServletContext() {
+        return new MockServletContext();
     }
     
-    public void setNew(boolean isNew) {
-        this.isNew = isNew;
-    }
-
-    @Override
-    public long getLastAccessedTime() {
-        checkInvalidatedState();
-        return creationTime;
-    }
-
-    @Override
-    public int getMaxInactiveInterval() {
-        return maxActiveInterval;
-    }
-
-    @Override
-    public void setMaxInactiveInterval(final int interval) {
-        this.maxActiveInterval = interval;
-    }
-
-    // --- unsupported operations ---
-    @Override
-    @SuppressWarnings("deprecation")
-    public javax.servlet.http.HttpSessionContext getSessionContext() {
-        throw new UnsupportedOperationException();
-    }
-
-}
+}
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockRequestDispatcherFactory.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockRequestDispatcherFactory.java
index 08f63c4..007a929 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockRequestDispatcherFactory.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockRequestDispatcherFactory.java
@@ -18,31 +18,12 @@
  */
 package org.apache.sling.testing.mock.sling.servlet;
 
-import javax.servlet.RequestDispatcher;
-
-import org.apache.sling.api.request.RequestDispatcherOptions;
-import org.apache.sling.api.resource.Resource;
-
 /**
  * Interface to create a mock {@link RequestDispatcher} when calling the getRequestDispatcher methods
  * on {@link MockSlingHttpServletRequest} instances.
  */
-public interface MockRequestDispatcherFactory {
-
-    /**
-     * Get request dispatcher for given path.
-     * @param path Path
-     * @param options Options. Null if no options are provided.
-     * @return Request dispatcher
-     */
-    RequestDispatcher getRequestDispatcher(String path, RequestDispatcherOptions options);
+public interface MockRequestDispatcherFactory extends org.apache.sling.servlethelpers.MockRequestDispatcherFactory {
 
-    /**
-     * Get request dispatcher for given resource.
-     * @param resource Resource
-     * @param options Options. Null if no options are provided.
-     * @return Request dispatcher
-     */
-    RequestDispatcher getRequestDispatcher(Resource resource, RequestDispatcherOptions options);
+    // inherit from superclass
 
 }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockRequestParameter.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockRequestParameter.java
deleted file mode 100644
index f69d5af..0000000
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockRequestParameter.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * 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.testing.mock.sling.servlet;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-
-import org.apache.sling.api.request.RequestParameter;
-
-/**
- * Mock implementation of {@link RequestParameter}.
- */
-class MockRequestParameter implements RequestParameter {
-
-    private String name;
-    private String encoding = "UTF-8";
-    private String value;
-
-    private byte[] content;
-
-    public MockRequestParameter(String name, String value) {
-        this.value = value;
-        this.content = null;
-    }
-    void setName(String name) {
-        this.name = name;
-    }
-
-    public String getName() {
-        return this.name;
-    }
-
-    public void setEncoding(String encoding) {
-        this.encoding = encoding;
-    }
-
-    public String getEncoding() {
-        return this.encoding;
-    }
-
-    public byte[] get() {
-        if (content == null) {
-            try {
-                content = getString().getBytes(getEncoding());
-            } catch (Exception e) {
-                // UnsupportedEncodingException, IllegalArgumentException
-                content = getString().getBytes();
-            }
-        }
-        return content;
-    }
-
-    public String getContentType() {
-        // none known for www-form-encoded parameters
-        return null;
-    }
-
-    public InputStream getInputStream() {
-        return new ByteArrayInputStream(this.get());
-    }
-
-    public String getFileName() {
-        // no original file name
-        return null;
-    }
-
-    public long getSize() {
-        return this.get().length;
-    }
-
-    public String getString() {
-        return value;
-    }
-
-    public String getString(String encoding) throws UnsupportedEncodingException {
-        return new String(this.get(), encoding);
-    }
-
-    public boolean isFormField() {
-        // www-form-encoded are always form fields
-        return true;
-    }
-
-    public String toString() {
-        return this.getString();
-    }
-
-}
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockRequestParameterMap.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockRequestParameterMap.java
deleted file mode 100644
index 3578dd1..0000000
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockRequestParameterMap.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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.testing.mock.sling.servlet;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.sling.api.request.RequestParameter;
-import org.apache.sling.api.request.RequestParameterMap;
-
-/**
- * Mock implementation of {@link RequestParameterMap}.
- */
-class MockRequestParameterMap implements RequestParameterMap {
-    
-    private final Map<String,RequestParameter[]> delegate = new HashMap<String, RequestParameter[]>();
-    
-    public RequestParameter getValue(String name) {
-        RequestParameter[] params = getValues(name);
-        return (params != null && params.length > 0) ? params[0] : null;
-    }
-
-    public RequestParameter[] getValues(String name) {
-        return delegate.get(name);
-    }
-
-    public int size() {
-        return delegate.size();
-    }
-
-    public boolean isEmpty() {
-        return delegate.isEmpty();
-    }
-
-    public boolean containsKey(Object key) {
-        return delegate.containsKey(key);
-    }
-
-    public boolean containsValue(Object value) {
-        return delegate.containsValue(value);
-    }
-
-    public RequestParameter[] get(Object key) {
-        return delegate.get(key);
-    }
-
-    public RequestParameter[] put(String key, RequestParameter[] value) {
-        return delegate.put(key, value);
-    }
-
-    public RequestParameter[] remove(Object key) {
-        return delegate.remove(key);
-    }
-
-    public void putAll(Map<? extends String, ? extends RequestParameter[]> m) {
-        delegate.putAll(m);
-    }
-
-    public void clear() {
-        delegate.clear();
-    }
-
-    public Set<String> keySet() {
-        return delegate.keySet();
-    }
-
-    public Collection<RequestParameter[]> values() {
-        return delegate.values();
-    }
-
-    public Set<java.util.Map.Entry<String, RequestParameter[]>> entrySet() {
-        return delegate.entrySet();
-    }
-
-    public boolean equals(Object o) {
-        return delegate.equals(o);
-    }
-
-    public int hashCode() {
-        return delegate.hashCode();
-    }
-
-}
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockRequestPathInfo.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockRequestPathInfo.java
index 6e058e4..60f71af 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockRequestPathInfo.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockRequestPathInfo.java
@@ -18,69 +18,11 @@
  */
 package org.apache.sling.testing.mock.sling.servlet;
 
-import org.apache.commons.lang3.StringUtils;
-import org.apache.sling.api.request.RequestPathInfo;
-import org.apache.sling.api.resource.Resource;
-
 /**
  * Mock {@link RequestPathInfo} implementation.
  */
-public final class MockRequestPathInfo implements RequestPathInfo {
-
-    private String extension;
-    private String resourcePath;
-    private String selectorString;
-    private String suffix;
-
-    @Override
-    public String getExtension() {
-        return this.extension;
-    }
-
-    @Override
-    public String getResourcePath() {
-        return this.resourcePath;
-    }
-
-    @Override
-    public String[] getSelectors() {
-        if (StringUtils.isEmpty(this.selectorString)) {
-            return new String[0];
-        } else {
-            return StringUtils.split(this.selectorString, ".");
-        }
-    }
-
-    @Override
-    public String getSelectorString() {
-        return this.selectorString;
-    }
-
-    @Override
-    public String getSuffix() {
-        return this.suffix;
-    }
-
-    public void setExtension(final String extension) {
-        this.extension = extension;
-    }
-
-    public void setResourcePath(final String resourcePath) {
-        this.resourcePath = resourcePath;
-    }
-
-    public void setSelectorString(final String selectorString) {
-        this.selectorString = selectorString;
-    }
-
-    public void setSuffix(final String suffix) {
-        this.suffix = suffix;
-    }
+public final class MockRequestPathInfo extends org.apache.sling.servlethelpers.MockRequestPathInfo {
 
-    // --- unsupported operations ---
-    @Override
-    public Resource getSuffixResource() {
-        throw new UnsupportedOperationException();
-    }
+    // inherit from superclass
 
 }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockServletContext.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockServletContext.java
index 107c22f..a88bf29 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockServletContext.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockServletContext.java
@@ -18,284 +18,11 @@
  */
 package org.apache.sling.testing.mock.sling.servlet;
 
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.EventListener;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterRegistration;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.Servlet;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRegistration;
-import javax.servlet.ServletRegistration.Dynamic;
-import javax.servlet.SessionCookieConfig;
-import javax.servlet.SessionTrackingMode;
-import javax.servlet.descriptor.JspConfigDescriptor;
-
 /**
  * Mock {@link ServletContext} implementation.
  */
-public final class MockServletContext implements ServletContext {
-
-    @Override
-    public String getMimeType(final String file) {
-        return "application/octet-stream";
-    }
-
-    // --- unsupported operations ---
-    @Override
-    public Object getAttribute(final String name) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Enumeration<String> getAttributeNames() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ServletContext getContext(final String uriPath) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getContextPath() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getInitParameter(final String name) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Enumeration<String> getInitParameterNames() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int getMajorVersion() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int getMinorVersion() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public RequestDispatcher getNamedDispatcher(final String name) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getRealPath(final String pPath) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public RequestDispatcher getRequestDispatcher(final String path) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public URL getResource(final String pPath) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public InputStream getResourceAsStream(final String path) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Set<String> getResourcePaths(final String path) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getServerInfo() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Servlet getServlet(final String name) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getServletContextName() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Enumeration<String> getServletNames() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Enumeration<Servlet> getServlets() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void log(final String msg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void log(final Exception exception, final String msg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void log(final String msg, final Throwable throwable) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void removeAttribute(final String name) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setAttribute(final String name, final Object object) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int getEffectiveMajorVersion() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int getEffectiveMinorVersion() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean setInitParameter(final String name, final String value) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Dynamic addServlet(final String servletName, final String className) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Dynamic addServlet(final String servletName, final Servlet servlet) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Dynamic addServlet(final String servletName, final Class<? extends Servlet> servletClass) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public <T extends Servlet> T createServlet(final Class<T> clazz) throws ServletException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ServletRegistration getServletRegistration(final String servletName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Map<String, ? extends ServletRegistration> getServletRegistrations() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public FilterRegistration.Dynamic addFilter(final String filterName, final String className) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public FilterRegistration.Dynamic addFilter(final String filterName, final Filter filter) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public FilterRegistration.Dynamic addFilter(final String filterName, final Class<? extends Filter> filterClass) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public <T extends Filter> T createFilter(final Class<T> clazz) throws ServletException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public FilterRegistration getFilterRegistration(final String filterName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Map<String, ? extends FilterRegistration> getFilterRegistrations() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public SessionCookieConfig getSessionCookieConfig() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setSessionTrackingModes(final Set<SessionTrackingMode> sessionTrackingModes) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Set<SessionTrackingMode> getDefaultSessionTrackingModes() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void addListener(final String pClassName) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public <T extends EventListener> void addListener(final T listener) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void addListener(final Class<? extends EventListener> listenerClass) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public <T extends EventListener> T createListener(final Class<T> clazz) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public JspConfigDescriptor getJspConfigDescriptor() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ClassLoader getClassLoader() {
-        throw new UnsupportedOperationException();
-    }
+public final class MockServletContext extends org.apache.sling.servlethelpers.MockServletContext {
 
-    @Override
-    public void declareRoles(final String... roleNames) {
-        throw new UnsupportedOperationException();
-    }
+    // inherit from superclass
 
 }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java
index 4aa59e0..c163758 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java
@@ -18,97 +18,22 @@
  */
 package org.apache.sling.testing.mock.sling.servlet;
 
-import static org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletResponse.CHARSET_SEPARATOR;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.net.URLEncoder;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.ListResourceBundle;
 import java.util.Locale;
-import java.util.Map;
 import java.util.ResourceBundle;
 
-import javax.servlet.AsyncContext;
-import javax.servlet.DispatcherType;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletInputStream;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.Part;
-
-import org.apache.commons.collections.IteratorUtils;
-import org.apache.commons.lang3.CharEncoding;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.adapter.SlingAdaptable;
-import org.apache.sling.api.request.RequestDispatcherOptions;
-import org.apache.sling.api.request.RequestParameter;
-import org.apache.sling.api.request.RequestParameterMap;
-import org.apache.sling.api.request.RequestPathInfo;
-import org.apache.sling.api.request.RequestProgressTracker;
-import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.api.servlets.HttpConstants;
 import org.apache.sling.i18n.ResourceBundleProvider;
 import org.apache.sling.testing.mock.osgi.MockOsgi;
 import org.apache.sling.testing.mock.sling.MockSling;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 
-import com.google.common.collect.ImmutableList;
-
 /**
  * Mock {@link SlingHttpServletRequest} implementation.
  */
-public class MockSlingHttpServletRequest extends SlingAdaptable implements SlingHttpServletRequest {
+public class MockSlingHttpServletRequest extends org.apache.sling.servlethelpers.MockSlingHttpServletRequest {
 
-    private final ResourceResolver resourceResolver;
     private final BundleContext bundleContext;
-    private RequestPathInfo requestPathInfo = new MockRequestPathInfo();
-    private Map<String, Object> attributeMap = new HashMap<String, Object>();
-    private Map<String, String[]> parameterMap = new LinkedHashMap<String, String[]>();
-    private HttpSession session;
-    private Resource resource;
-    private String contextPath;
-    private String queryString;
-    private String scheme = "http";
-    private String serverName = "localhost";
-    private int serverPort = 80;
-    private String method = HttpConstants.METHOD_GET;
-    private final HeaderSupport headerSupport = new HeaderSupport();
-    private final CookieSupport cookieSupport = new CookieSupport();
-    private String contentType;
-    private String characterEncoding;
-    private byte[] content;
-    private String remoteUser;
-    private String remoteAddr;
-    private String remoteHost;
-    private int remotePort;
-
-    private MockRequestDispatcherFactory requestDispatcherFactory;
-    
-    private static final ResourceBundle EMPTY_RESOURCE_BUNDLE = new ListResourceBundle() {
-        @Override
-        protected Object[][] getContents() {
-            return new Object[0][0];
-        }
-    };
 
     /**
      * Instantiate with default resource resolver
@@ -130,7 +55,10 @@ public class MockSlingHttpServletRequest extends SlingAdaptable implements Sling
 
     /**
      * @param resourceResolver Resource resolver
+     * @deprecated Please use {@link #MockSlingHttpServletRequest(ResourceResolver, BundleContext)}
+     *   and shutdown the bundle context after usage.
      */
+    @Deprecated
     public MockSlingHttpServletRequest(ResourceResolver resourceResolver) {
         this(resourceResolver, MockOsgi.newBundleContext());
     }
@@ -140,341 +68,18 @@ public class MockSlingHttpServletRequest extends SlingAdaptable implements Sling
      * @param bundleContext Bundle context
      */
     public MockSlingHttpServletRequest(ResourceResolver resourceResolver, BundleContext bundleContext) {
-        this.resourceResolver = resourceResolver;
+        super(resourceResolver);
         this.bundleContext = bundleContext;
     }
 
-    @Override
-    public ResourceResolver getResourceResolver() {
-        return this.resourceResolver;
-    }
-
-    @Override
-    public HttpSession getSession() {
-        return getSession(true);
-    }
-
-    @Override
-    public HttpSession getSession(boolean create) {
-        if (this.session == null && create) {
-            this.session = new MockHttpSession();
-        }
-        return this.session;
-    }
-
-    @Override
-    public RequestPathInfo getRequestPathInfo() {
-        return this.requestPathInfo;
-    }
-
-    @Override
-    public Object getAttribute(String name) {
-        return this.attributeMap.get(name);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public Enumeration<String> getAttributeNames() {
-        return IteratorUtils.asEnumeration(this.attributeMap.keySet().iterator());
-    }
-
-    @Override
-    public void removeAttribute(String name) {
-        this.attributeMap.remove(name);
-    }
-
-    @Override
-    public void setAttribute(String name, Object object) {
-        this.attributeMap.put(name, object);
-    }
-
-    @Override
-    public Resource getResource() {
-        return this.resource;
-    }
-
-    public void setResource(Resource resource) {
-        this.resource = resource;
-    }
-
-    @Override
-    public String getParameter(String name) {
-        Object object = this.parameterMap.get(name);
-        if (object instanceof String) {
-            return (String) object;
-        } else if (object instanceof String[]) {
-            String[] values = (String[]) object;
-            if (values.length > 0) {
-                return values[0];
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public Map<String, String[]> getParameterMap() {
-        return this.parameterMap;
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public Enumeration<String> getParameterNames() {
-        return IteratorUtils.asEnumeration(this.parameterMap.keySet().iterator());
-    }
-
-    @Override
-    public String[] getParameterValues(String name) { // NOPMD
-        Object object = this.parameterMap.get(name);
-        if (object instanceof String) {
-            return new String[] { (String) object };
-        } else if (object instanceof String[]) {
-            return (String[]) object;
-        }
-        return null; // NOPMD
-    }
-
-    /**
-     * @param parameterMap Map of parameters
-     */
-    public void setParameterMap(Map<String, Object> parameterMap) {
-        this.parameterMap.clear();
-        for (Map.Entry<String, Object> entry : parameterMap.entrySet()) {
-            String key = entry.getKey();
-            Object value = entry.getValue();
-            if (value instanceof String[]) {
-                this.parameterMap.put(key, (String[]) value);
-            } else if (value != null) {
-                this.parameterMap.put(key, new String[] { value.toString() });
-            } else {
-                this.parameterMap.put(key, null);
-            }
-        }
-        try {
-            this.queryString = formatQueryString(this.parameterMap);
-        } catch (UnsupportedEncodingException ex) {
-            throw new RuntimeException(ex);
-        }
-    }
-
-    private String formatQueryString(Map<String, String[]> map) throws UnsupportedEncodingException {
-        StringBuilder querystring = new StringBuilder();
-        for (Map.Entry<String, String[]> entry : this.parameterMap.entrySet()) {
-            if (entry.getValue() != null) {
-                for (String value : entry.getValue()) {
-                    if (querystring.length() != 0) {
-                        querystring.append('&');
-                    }
-                    querystring.append(URLEncoder.encode(entry.getKey(), CharEncoding.UTF_8));
-                    querystring.append('=');
-                    if (value != null) {
-                        querystring.append(URLEncoder.encode(value, CharEncoding.UTF_8));
-                    }
-                }
-            }
-        }
-        if (querystring.length() > 0) {
-            return querystring.toString();
-        } else {
-            return null;
-        }
+    protected MockRequestPathInfo newMockRequestPathInfo() {
+        return new MockRequestPathInfo();
     }
 
-    @Override
-    public Locale getLocale() {
-        return Locale.US;
+    protected MockHttpSession newMockHttpSession() {
+        return new MockHttpSession();
     }
-
-    @Override
-    public String getContextPath() {
-        return this.contextPath;
-    }
-
-    /**
-     * @param contextPath Webapp context path
-     */
-    public void setContextPath(String contextPath) {
-        this.contextPath = contextPath;
-    }
-
-    /**
-     * @param queryString Query string (with proper URL encoding)
-     */
-    public void setQueryString(String queryString) {
-        this.queryString = queryString;
-        try {
-            parseQueryString(this.parameterMap, this.queryString);
-        } catch (UnsupportedEncodingException ex) {
-            throw new RuntimeException(ex);
-        }
-    }
-
-    private void parseQueryString(Map<String, String[]> map, String query) throws UnsupportedEncodingException {
-        Map<String, List<String>> queryPairs = new LinkedHashMap<String, List<String>>();
-        String[] pairs = query.split("&");
-        for (String pair : pairs) {
-            int idx = pair.indexOf('=');
-            String key = idx > 0 ? URLDecoder.decode(pair.substring(0, idx), CharEncoding.UTF_8) : pair;
-            if (!queryPairs.containsKey(key)) {
-                queryPairs.put(key, new ArrayList<String>());
-            }
-            String value = idx > 0 && pair.length() > idx + 1 ? URLDecoder.decode(pair.substring(idx + 1),
-                    CharEncoding.UTF_8) : null;
-            queryPairs.get(key).add(value);
-        }
-        map.clear();
-        for (Map.Entry<String, List<String>> entry : queryPairs.entrySet()) {
-            map.put(entry.getKey(), entry.getValue().toArray(new String[entry.getValue().size()]));
-        }
-    }
-
-    @Override
-    public String getQueryString() {
-        return this.queryString;
-    }
-
-    @Override
-    public String getScheme() {
-        return this.scheme;
-    }
-
-    public void setScheme(String scheme) {
-        this.scheme = scheme;
-    }
-
-    @Override
-    public String getServerName() {
-        return this.serverName;
-    }
-
-    public void setServerName(String serverName) {
-        this.serverName = serverName;
-    }
-
-    @Override
-    public int getServerPort() {
-        return this.serverPort;
-    }
-
-    public void setServerPort(int serverPort) {
-        this.serverPort = serverPort;
-    }
-
-    @Override
-    public boolean isSecure() {
-        return StringUtils.equals("https", getScheme());
-    }
-
-    @Override
-    public String getMethod() {
-        return this.method;
-    }
-
-    public void setMethod(String method) {
-        this.method = method;
-    }
-
-    @Override
-    public long getDateHeader(String name) {
-        return headerSupport.getDateHeader(name);
-    }
-
-    @Override
-    public String getHeader(String name) {
-        return headerSupport.getHeader(name);
-    }
-
-    @Override
-    public Enumeration<String> getHeaderNames() {
-        return HeaderSupport.toEnumeration(headerSupport.getHeaderNames());
-    }
-
-    @Override
-    public Enumeration<String> getHeaders(String name) {
-        return HeaderSupport.toEnumeration(headerSupport.getHeaders(name));
-    }
-
-    @Override
-    public int getIntHeader(String name) {
-        return headerSupport.getIntHeader(name);
-    }
-
-    /**
-     * Add header, keep existing ones with same name.
-     * @param name Header name
-     * @param value Header value
-     */
-    public void addHeader(String name, String value) {
-        headerSupport.addHeader(name, value);
-    }
-
-    /**
-     * Add header, keep existing ones with same name.
-     * @param name Header name
-     * @param value Header value
-     */
-    public void addIntHeader(String name, int value) {
-        headerSupport.addIntHeader(name, value);
-    }
-
-    /**
-     * Add header, keep existing ones with same name.
-     * @param name Header name
-     * @param date Header value
-     */
-    public void addDateHeader(String name, long date) {
-        headerSupport.addDateHeader(name, date);
-    }
-
-    /**
-     * Set header, overwrite existing ones with same name.
-     * @param name Header name
-     * @param value Header value
-     */
-    public void setHeader(String name, String value) {
-        headerSupport.setHeader(name, value);
-    }
-
-    /**
-     * Set header, overwrite existing ones with same name.
-     * @param name Header name
-     * @param value Header value
-     */
-    public void setIntHeader(String name, int value) {
-        headerSupport.setIntHeader(name, value);
-    }
-
-    /**
-     * Set header, overwrite existing ones with same name.
-     * @param name Header name
-     * @param date Header value
-     */
-    public void setDateHeader(String name, long date) {
-        headerSupport.setDateHeader(name, date);
-    }
-
-    @Override
-    public Cookie getCookie(String name) {
-        return cookieSupport.getCookie(name);
-    }
-
-    @Override
-    public Cookie[] getCookies() {
-        return cookieSupport.getCookies();
-    }
-
-    /**
-     * Set cookie
-     * @param cookie Cookie
-     */
-    public void addCookie(Cookie cookie) {
-        cookieSupport.addCookie(cookie);
-    }
-
-    @Override
-    public ResourceBundle getResourceBundle(Locale locale) {
-        return getResourceBundle(null, locale);
-    }
-
+    
     @Override
     public ResourceBundle getResourceBundle(String baseName, Locale locale) {
         // check of ResourceBundleProvider is registered in mock OSGI context
@@ -491,348 +96,4 @@ public class MockSlingHttpServletRequest extends SlingAdaptable implements Sling
         return resourceBundle;
     }
 
-    @Override
-    public RequestParameter getRequestParameter(String name) {
-        String value = getParameter(name);
-        if (value != null) {
-            return new MockRequestParameter(name, value);
-        }
-        return null;
-    }
-
-    @Override
-    public RequestParameterMap getRequestParameterMap() {
-        MockRequestParameterMap map = new MockRequestParameterMap();
-        for (Map.Entry<String,String[]> entry : getParameterMap().entrySet()) {
-            map.put(entry.getKey(), getRequestParameters(entry.getKey()));
-        }
-        return map;
-    }
-
-    @Override
-    public RequestParameter[] getRequestParameters(String name) {
-        String[] values = getParameterValues(name);
-        if (values == null) {
-            return null;
-        }
-        RequestParameter[] requestParameters = new RequestParameter[values.length];
-        for (int i = 0; i < values.length; i++) {
-            requestParameters[i] = new MockRequestParameter(name, values[i]);
-        }
-        return requestParameters;
-    }
-
-    // part of Sling API 2.7
-    public List<RequestParameter> getRequestParameterList() {
-        List<RequestParameter> params = new ArrayList<RequestParameter>();
-        for (RequestParameter[] requestParameters : getRequestParameterMap().values()) {
-            params.addAll(ImmutableList.copyOf(requestParameters));
-        }
-        return params;
-    }
-
-    @Override
-    public String getCharacterEncoding() {
-        return this.characterEncoding;
-    }
-
-    @Override
-    public void setCharacterEncoding(String charset) {
-        this.characterEncoding = charset;
-    }
-
-    @Override
-    public String getContentType() {
-        if (this.contentType == null) {
-            return null;
-        } else {
-            return this.contentType
-                    + (StringUtils.isNotBlank(characterEncoding) ? CHARSET_SEPARATOR + characterEncoding : "");
-        }
-    }
-    
-    public void setContentType(String type) {
-        this.contentType = type;
-        if (StringUtils.contains(this.contentType, CHARSET_SEPARATOR)) {
-            this.characterEncoding = StringUtils.substringAfter(this.contentType, CHARSET_SEPARATOR);
-            this.contentType = StringUtils.substringBefore(this.contentType, CHARSET_SEPARATOR);
-        }
-    }
-
-    @Override
-    public ServletInputStream getInputStream() {
-        if (content == null) {
-            return null;
-        }
-        return new ServletInputStream() {
-            private final InputStream is = new ByteArrayInputStream(content);
-            @Override
-            public int read() throws IOException {
-                return is.read();
-            }
-        };  
-    }
-
-    @Override
-    public int getContentLength() {
-        if (content == null) {
-            return 0;
-        }
-        return content.length;
-    }
-    
-    public void setContent(byte[] content) {
-        this.content = content;
-    }
-
-    @Override
-    public RequestDispatcher getRequestDispatcher(String path) {
-        if (requestDispatcherFactory == null) {
-            throw new IllegalStateException("Please provdide a MockRequestDispatcherFactory (setRequestDispatcherFactory).");
-        }
-        return requestDispatcherFactory.getRequestDispatcher(path,  null);
-    }
-
-    @Override
-    public RequestDispatcher getRequestDispatcher(String path, RequestDispatcherOptions options) {
-        if (requestDispatcherFactory == null) {
-            throw new IllegalStateException("Please provdide a MockRequestDispatcherFactory (setRequestDispatcherFactory).");
-        }
-        return requestDispatcherFactory.getRequestDispatcher(path,  options);
-    }
-
-    @Override
-    public RequestDispatcher getRequestDispatcher(Resource resource) {
-        if (requestDispatcherFactory == null) {
-            throw new IllegalStateException("Please provdide a MockRequestDispatcherFactory (setRequestDispatcherFactory).");
-        }
-        return requestDispatcherFactory.getRequestDispatcher(resource, null);
-    }
-
-    @Override
-    public RequestDispatcher getRequestDispatcher(Resource resource, RequestDispatcherOptions options) {
-        if (requestDispatcherFactory == null) {
-            throw new IllegalStateException("Please provdide a MockRequestDispatcherFactory (setRequestDispatcherFactory).");
-        }
-        return requestDispatcherFactory.getRequestDispatcher(resource, options);
-    }
-    
-    public void setRequestDispatcherFactory(MockRequestDispatcherFactory requestDispatcherFactory) {
-        this.requestDispatcherFactory = requestDispatcherFactory;
-    }
-
-    @Override
-    public String getRemoteUser() {
-        return remoteUser;
-    }
-
-    public void setRemoteUser(String remoteUser) {
-        this.remoteUser = remoteUser;
-    }
-
-    @Override
-    public String getRemoteAddr() {
-        return remoteAddr;
-    }
-
-    public void setRemoteAddr(String remoteAddr) {
-        this.remoteAddr = remoteAddr;
-    }
-
-    @Override
-    public String getRemoteHost() {
-        return remoteHost;
-    }
-
-    public void setRemoteHost(String remoteHost) {
-        this.remoteHost = remoteHost;
-    }
-
-    @Override
-    public int getRemotePort() {
-        return remotePort;
-    }
-
-    public void setRemotePort(int remotePort) {
-        this.remotePort = remotePort;
-    }
-
-    
-    // --- unsupported operations ---
-
-    @Override
-    public RequestProgressTracker getRequestProgressTracker() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getResponseContentType() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Enumeration<String> getResponseContentTypes() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getAuthType() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getPathInfo() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getPathTranslated() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getRequestURI() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public StringBuffer getRequestURL() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getRequestedSessionId() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getServletPath() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Principal getUserPrincipal() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isRequestedSessionIdFromCookie() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isRequestedSessionIdFromURL() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isRequestedSessionIdFromUrl() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isRequestedSessionIdValid() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isUserInRole(String role) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getLocalAddr() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getLocalName() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public int getLocalPort() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Enumeration<Locale> getLocales() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getProtocol() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public BufferedReader getReader() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String getRealPath(String path) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean authenticate(HttpServletResponse response) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void login(String pUsername, String password) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void logout() throws ServletException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Collection<Part> getParts() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Part getPart(String name) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ServletContext getServletContext() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public AsyncContext startAsync() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isAsyncStarted() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isAsyncSupported() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public AsyncContext getAsyncContext() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public DispatcherType getDispatcherType() {
-        throw new UnsupportedOperationException();
-    }
-
 }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletResponse.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletResponse.java
index 6b9e7f8..8c79cc8 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletResponse.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletResponse.java
@@ -18,262 +18,11 @@
  */
 package org.apache.sling.testing.mock.sling.servlet;
 
-import java.io.PrintWriter;
-import java.util.Collection;
-import java.util.Locale;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.sling.api.SlingHttpServletResponse;
-import org.apache.sling.api.adapter.SlingAdaptable;
-
 /**
  * Mock {@link SlingHttpServletResponse} implementation.
  */
-public class MockSlingHttpServletResponse extends SlingAdaptable implements SlingHttpServletResponse {
-
-    static final String CHARSET_SEPARATOR = ";charset=";
-
-    private String contentType;
-    private String characterEncoding;
-    private int contentLength;
-    private int status = HttpServletResponse.SC_OK;
-    private int bufferSize = 1024 * 8;
-    private boolean isCommitted;
-    private final HeaderSupport headerSupport = new HeaderSupport();
-    private final ResponseBodySupport bodySupport = new ResponseBodySupport();
-    private final CookieSupport cookieSupport = new CookieSupport();
-
-    @Override
-    public String getContentType() {
-        if (this.contentType == null) {
-            return null;
-        } else {
-            return this.contentType
-                    + (StringUtils.isNotBlank(characterEncoding) ? CHARSET_SEPARATOR + characterEncoding : "");
-        }
-    }
-
-    @Override
-    public void setContentType(String type) {
-        this.contentType = type;
-        if (StringUtils.contains(this.contentType, CHARSET_SEPARATOR)) {
-            this.characterEncoding = StringUtils.substringAfter(this.contentType, CHARSET_SEPARATOR);
-            this.contentType = StringUtils.substringBefore(this.contentType, CHARSET_SEPARATOR);
-        }
-    }
-
-    @Override
-    public void setCharacterEncoding(String charset) {
-        this.characterEncoding = charset;
-    }
-
-    @Override
-    public String getCharacterEncoding() {
-        return this.characterEncoding;
-    }
-
-    @Override
-    public void setContentLength(int len) {
-        this.contentLength = len;
-    }
-
-    public int getContentLength() {
-        return this.contentLength;
-    }
-
-    @Override
-    public void setStatus(int sc, String sm) {
-        setStatus(sc);
-    }
-
-    @Override
-    public void setStatus(int sc) {
-        this.status = sc;
-    }
-
-    @Override
-    public int getStatus() {
-        return this.status;
-    }
-
-    @Override
-    public void sendError(int sc, String msg) {
-        setStatus(sc);
-    }
-
-    @Override
-    public void sendError(int sc) {
-        setStatus(sc);
-    }
-
-    @Override
-    public void sendRedirect(String location) {
-        setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
-        setHeader("Location", location);
-    }
-
-    @Override
-    public void addHeader(String name, String value) {
-        headerSupport.addHeader(name, value);
-    }
-
-    @Override
-    public void addIntHeader(String name, int value) {
-        headerSupport.addIntHeader(name, value);
-    }
-
-    @Override
-    public void addDateHeader(String name, long date) {
-        headerSupport.addDateHeader(name, date);
-    }
-
-    @Override
-    public void setHeader(String name, String value) {
-        headerSupport.setHeader(name, value);
-    }
-
-    @Override
-    public void setIntHeader(String name, int value) {
-        headerSupport.setIntHeader(name, value);
-    }
-
-    @Override
-    public void setDateHeader(String name, long date) {
-        headerSupport.setDateHeader(name, date);
-    }
-
-    @Override
-    public boolean containsHeader(String name) {
-        return headerSupport.containsHeader(name);
-    }
-
-    @Override
-    public String getHeader(String name) {
-        return headerSupport.getHeader(name);
-    }
-
-    @Override
-    public Collection<String> getHeaders(String name) {
-        return headerSupport.getHeaders(name);
-    }
-
-    @Override
-    public Collection<String> getHeaderNames() {
-        return headerSupport.getHeaderNames();
-    }
-
-    @Override
-    public PrintWriter getWriter() {
-        return bodySupport.getWriter(getCharacterEncoding());
-    }
-
-    @Override
-    public ServletOutputStream getOutputStream() {
-        return bodySupport.getOutputStream();
-    }
-
-    @Override
-    public void reset() {
-        if (isCommitted()) {
-            throw new IllegalStateException("Response already committed.");
-        }
-        bodySupport.reset();
-        headerSupport.reset();
-        cookieSupport.reset();
-        status = HttpServletResponse.SC_OK;
-        contentLength = 0;
-    }
-
-    @Override
-    public void resetBuffer() {
-        if (isCommitted()) {
-            throw new IllegalStateException("Response already committed.");
-        }
-        bodySupport.reset();
-    }
-
-    @Override
-    public int getBufferSize() {
-        return this.bufferSize;
-    }
-
-    @Override
-    public void setBufferSize(int size) {
-        this.bufferSize = size;
-    }
-
-    @Override
-    public void flushBuffer() {
-        isCommitted = true;
-    }
-
-    @Override
-    public boolean isCommitted() {
-        return isCommitted;
-    }
-
-    public byte[] getOutput() {
-        return bodySupport.getOutput();
-    }
-
-    public String getOutputAsString() {
-        return bodySupport.getOutputAsString(getCharacterEncoding());
-    }
-
-    @Override
-    public void addCookie(Cookie cookie) {
-        cookieSupport.addCookie(cookie);
-    }
-
-    /**
-     * Get cookie
-     * @param name Cookie name
-     * @return Cookie or null
-     */
-    public Cookie getCookie(String name) {
-        return cookieSupport.getCookie(name);
-    }
-
-    /**
-     * Get cookies
-     * @return Cookies array or null if no cookie defined
-     */
-    public Cookie[] getCookies() {
-        return cookieSupport.getCookies();
-    }
-
-    // --- unsupported operations ---
-    @Override
-    public Locale getLocale() {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void setLocale(Locale loc) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String encodeRedirectUrl(String url) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public String encodeRedirectURL(String url) {
-        throw new UnsupportedOperationException();
-    }
+public class MockSlingHttpServletResponse extends org.apache.sling.servlethelpers.MockSlingHttpServletResponse {
 
-    @Override
-    public String encodeUrl(String url) {
-        throw new UnsupportedOperationException();
-    }
+    // inherit from superclass
 
-    @Override
-    public String encodeURL(String url) {
-        throw new UnsupportedOperationException();
-    }
 }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/ResponseBodySupport.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/ResponseBodySupport.java
deleted file mode 100644
index 10db2cc..0000000
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/ResponseBodySupport.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * 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.testing.mock.sling.servlet;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.UnsupportedEncodingException;
-
-import javax.servlet.ServletOutputStream;
-
-import org.apache.commons.lang3.CharEncoding;
-import org.apache.commons.lang3.StringUtils;
-
-/**
- * Manage response body content.
- */
-class ResponseBodySupport {
-
-    private ByteArrayOutputStream outputStream;
-    private ServletOutputStream servletOutputStream;
-    private PrintWriter printWriter;
-
-    public ResponseBodySupport() {
-        reset();
-    }
-
-    public void reset() {
-        outputStream = new ByteArrayOutputStream();
-        servletOutputStream = null;
-        printWriter = null;
-    }
-
-    public ServletOutputStream getOutputStream() {
-        if (servletOutputStream == null) {
-            servletOutputStream = new ServletOutputStream() {
-                @Override
-                public void write(int b) throws IOException {
-                    outputStream.write(b);
-                }
-            };
-        }
-        return servletOutputStream;
-    }
-
-    public PrintWriter getWriter(String charset) {
-        if (printWriter == null) {
-            try {
-                printWriter = new PrintWriter(new OutputStreamWriter(getOutputStream(), defaultCharset(charset)));
-            } catch (UnsupportedEncodingException ex) {
-                throw new RuntimeException("Unsupported encoding: " + defaultCharset(charset), ex);
-            }
-        }
-        return printWriter;
-    }
-
-    public byte[] getOutput() {
-        if (servletOutputStream != null) {
-            try {
-                servletOutputStream.flush();
-            } catch (IOException ex) {
-                // ignore
-            }
-        }
-        return outputStream.toByteArray();
-    }
-
-    public String getOutputAsString(String charset) {
-        if (printWriter != null) {
-            printWriter.flush();
-        }
-        try {
-            return new String(getOutput(), defaultCharset(charset));
-        } catch (UnsupportedEncodingException ex) {
-            throw new RuntimeException("Unsupported encoding: " + defaultCharset(charset), ex);
-        }
-    }
-    
-    private String defaultCharset(String charset) {
-        return StringUtils.defaultString(charset, CharEncoding.UTF_8);
-    }
-
-}
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java
index 356283f..0408710 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Mock implementation of selected Servlet-related Sling APIs.
  */
-@aQute.bnd.annotation.Version("1.4")
+@aQute.bnd.annotation.Version("2.0")
 package org.apache.sling.testing.mock.sling.servlet;
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/MockSlingScriptHelperTest.java b/src/test/java/org/apache/sling/testing/mock/sling/MockSlingScriptHelperTest.java
index c4098b7..a0ea9e7 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/MockSlingScriptHelperTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/MockSlingScriptHelperTest.java
@@ -46,7 +46,7 @@ public class MockSlingScriptHelperTest {
     public void setUp() throws Exception {
         this.bundleContext = MockOsgi.newBundleContext();
         this.resourceResolver = MockSling.newResourceResolver(bundleContext);
-        this.request = new MockSlingHttpServletRequest(this.resourceResolver);
+        this.request = new MockSlingHttpServletRequest(this.resourceResolver, bundleContext);
         this.response = new MockSlingHttpServletResponse();
         this.scriptHelper = MockSling.newSlingScriptHelper(this.request, this.response, this.bundleContext);
     }
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockHttpSessionTest.java b/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockHttpSessionTest.java
index dda2e41..6a1eae5 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockHttpSessionTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockHttpSessionTest.java
@@ -18,8 +18,6 @@
  */
 package org.apache.sling.testing.mock.sling.servlet;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
@@ -38,65 +36,7 @@ public class MockHttpSessionTest {
     @Test
     public void testServletContext() {
         assertNotNull(httpSession.getServletContext());
-    }
-
-    @Test
-    public void testId() {
-        assertNotNull(httpSession.getId());
-    }
-
-    @Test
-    public void testCreationTime() {
-        assertNotNull(httpSession.getCreationTime());
-    }
-
-    @Test
-    public void testAttributes() {
-        httpSession.setAttribute("attr1", "value1");
-        assertTrue(httpSession.getAttributeNames().hasMoreElements());
-        assertEquals("value1", httpSession.getAttribute("attr1"));
-        httpSession.removeAttribute("attr1");
-        assertFalse(httpSession.getAttributeNames().hasMoreElements());
-    }
-
-    @Test
-    public void testValues() {
-        httpSession.putValue("attr1", "value1");
-        assertEquals(1, httpSession.getValueNames().length);
-        assertEquals("value1", httpSession.getValue("attr1"));
-        httpSession.removeValue("attr1");
-        assertEquals(0, httpSession.getValueNames().length);
-    }
-
-    @Test
-    public void testInvalidate() {
-        httpSession.invalidate();
-        assertTrue(httpSession.isInvalidated());
-    }
-
-    @Test(expected = IllegalStateException.class)
-    public void testInvalidateStateCheck() {
-        httpSession.invalidate();
-        httpSession.getAttribute("attr1");
-    }
-
-    @Test
-    public void testIsNew() {
-        assertTrue(httpSession.isNew());
-        httpSession.setNew(false);
-        assertFalse(httpSession.isNew());
-   }
-
-    @Test
-    public void testGetLastAccessedTime() {
-        assertNotNull(httpSession.getLastAccessedTime());
-    }
-
-    @Test
-    public void testGetMaxInactiveInterval() {
-        assertTrue(httpSession.getMaxInactiveInterval() > 0);
-        httpSession.setMaxInactiveInterval(123);
-        assertEquals(123, httpSession.getMaxInactiveInterval());
+        assertTrue(httpSession.getServletContext() instanceof MockServletContext);
     }
 
 }
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockRequestPathInfoTest.java b/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockRequestPathInfoTest.java
deleted file mode 100644
index 006a415..0000000
--- a/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockRequestPathInfoTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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.testing.mock.sling.servlet;
-
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-import org.junit.Before;
-import org.junit.Test;
-
-public class MockRequestPathInfoTest {
-
-    private MockRequestPathInfo requestPathInfo;
-
-    @Before
-    public void setUp() throws Exception {
-        this.requestPathInfo = new MockRequestPathInfo();
-    }
-
-    @Test
-    public void testExtension() {
-        assertNull(this.requestPathInfo.getExtension());
-        this.requestPathInfo.setExtension("ext");
-        assertEquals("ext", this.requestPathInfo.getExtension());
-    }
-
-    @Test
-    public void testResourcePath() {
-        assertNull(this.requestPathInfo.getResourcePath());
-        this.requestPathInfo.setResourcePath("/path");
-        assertEquals("/path", this.requestPathInfo.getResourcePath());
-    }
-
-    @Test
-    public void testSelector() {
-        assertNull(this.requestPathInfo.getSelectorString());
-        assertEquals(0, this.requestPathInfo.getSelectors().length);
-        this.requestPathInfo.setSelectorString("aa.bb");
-        assertEquals("aa.bb", this.requestPathInfo.getSelectorString());
-        assertEquals(2, this.requestPathInfo.getSelectors().length);
-        assertArrayEquals(new String[] { "aa", "bb" }, this.requestPathInfo.getSelectors());
-    }
-
-    @Test
-    public void testSuffix() {
-        assertNull(this.requestPathInfo.getSuffix());
-        this.requestPathInfo.setSuffix("/suffix");
-        assertEquals("/suffix", this.requestPathInfo.getSuffix());
-    }
-
-}
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockServletContextTest.java b/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockServletContextTest.java
deleted file mode 100644
index 4c7b116..0000000
--- a/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockServletContextTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.testing.mock.sling.servlet;
-
-import static org.junit.Assert.assertEquals;
-
-import javax.servlet.ServletContext;
-
-import org.junit.Before;
-import org.junit.Test;
-
-public class MockServletContextTest {
-
-    private ServletContext servletContext;
-
-    @Before
-    public void setUp() throws Exception {
-        this.servletContext = new MockServletContext();
-    }
-
-    @Test
-    public void testGetMimeType() {
-        assertEquals("application/octet-stream", this.servletContext.getMimeType("any"));
-    }
-
-}
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequestTest.java b/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequestTest.java
index 1fb14c9..0f12ed6 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequestTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequestTest.java
@@ -18,38 +18,24 @@
  */
 package org.apache.sling.testing.mock.sling.servlet;
 
-import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.Calendar;
-import java.util.Enumeration;
-import java.util.LinkedHashMap;
 import java.util.ListResourceBundle;
 import java.util.Locale;
-import java.util.Map;
 import java.util.ResourceBundle;
 
-import javax.servlet.RequestDispatcher;
-import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpSession;
 
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.CharEncoding;
-import org.apache.sling.api.request.RequestDispatcherOptions;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.api.servlets.HttpConstants;
 import org.apache.sling.i18n.ResourceBundleProvider;
+import org.apache.sling.servlethelpers.MockHttpSession;
 import org.apache.sling.testing.mock.osgi.MockOsgi;
 import org.junit.After;
 import org.junit.Before;
@@ -92,146 +78,18 @@ public class MockSlingHttpServletRequestTest {
 
     @Test
     public void testSession() {
-        HttpSession session = request.getSession(false);
-        assertNull(session);
-        session = request.getSession();
+        HttpSession session = request.getSession();
         assertNotNull(session);
+        assertTrue(session instanceof MockHttpSession);
     }
 
     @Test
     public void testRequestPathInfo() {
         assertNotNull(request.getRequestPathInfo());
+        assertTrue(request.getRequestPathInfo() instanceof MockRequestPathInfo);
     }
 
     @Test
-    public void testAttributes() {
-        request.setAttribute("attr1", "value1");
-        assertTrue(request.getAttributeNames().hasMoreElements());
-        assertEquals("value1", request.getAttribute("attr1"));
-        request.removeAttribute("attr1");
-        assertFalse(request.getAttributeNames().hasMoreElements());
-    }
-
-    @Test
-    public void testResource() {
-        assertNull(request.getResource());
-        request.setResource(resource);
-        assertSame(resource, request.getResource());
-    }
-
-    @Test
-    public void testContextPath() {
-        assertNull(request.getContextPath());
-        request.setContextPath("/ctx");
-        assertEquals("/ctx", request.getContextPath());
-    }
-
-    @Test
-    public void testLocale() {
-        assertEquals(Locale.US, request.getLocale());
-    }
-
-    @Test
-    public void testQueryString() throws UnsupportedEncodingException {
-        assertNull(request.getQueryString());
-        assertEquals(0, request.getParameterMap().size());
-        assertFalse(request.getParameterNames().hasMoreElements());
-
-        request.setQueryString("param1=123&param2=" + URLEncoder.encode("äöü߀!:!", CharEncoding.UTF_8)
-                + "&param3=a&param3=b");
-
-        assertNotNull(request.getQueryString());
-        assertEquals(3, request.getParameterMap().size());
-        assertTrue(request.getParameterNames().hasMoreElements());
-        assertEquals("123", request.getParameter("param1"));
-        assertEquals("äöü߀!:!", request.getParameter("param2"));
-        assertArrayEquals(new String[] { "a", "b" }, request.getParameterValues("param3"));
-
-        Map<String, Object> paramMap = new LinkedHashMap<String, Object>();
-        paramMap.put("p1", "a");
-        paramMap.put("p2", new String[] { "b", "c" });
-        paramMap.put("p3", null);
-        paramMap.put("p4", new String[] { null });
-        paramMap.put("p5", 22);
-        request.setParameterMap(paramMap);
-
-        assertEquals("p1=a&p2=b&p2=c&p4=&p5=22", request.getQueryString());
-    }
-
-    @Test
-    public void testSchemeSecure() {
-        assertEquals("http", request.getScheme());
-        assertFalse(request.isSecure());
-
-        request.setScheme("https");
-        assertEquals("https", request.getScheme());
-        assertTrue(request.isSecure());
-    }
-
-    @Test
-    public void testServerNamePort() {
-        assertEquals("localhost", request.getServerName());
-        assertEquals(80, request.getServerPort());
-
-        request.setServerName("myhost");
-        request.setServerPort(12345);
-        assertEquals("myhost", request.getServerName());
-        assertEquals(12345, request.getServerPort());
-    }
-
-    @Test
-    public void testMethod() {
-        assertEquals(HttpConstants.METHOD_GET, request.getMethod());
-
-        request.setMethod(HttpConstants.METHOD_POST);
-        assertEquals(HttpConstants.METHOD_POST, request.getMethod());
-    }
-
-    @Test
-    public void testHeaders() {
-        assertFalse(request.getHeaderNames().hasMoreElements());
-
-        Calendar calendar = Calendar.getInstance();
-        calendar.set(Calendar.MILLISECOND, 0);
-        long dateValue = calendar.getTimeInMillis();
-
-        request.addHeader("header1", "value1");
-        request.addIntHeader("header2", 5);
-        request.addDateHeader("header3", dateValue);
-
-        assertEquals("value1", request.getHeader("header1"));
-        assertEquals(5, request.getIntHeader("header2"));
-        assertEquals(dateValue, request.getDateHeader("header3"));
-
-        request.setHeader("header1", "value2");
-        request.addIntHeader("header2", 10);
-
-        Enumeration<String> header1Values = request.getHeaders("header1");
-        assertEquals("value2", header1Values.nextElement());
-        assertFalse(header1Values.hasMoreElements());
-
-        Enumeration<String> header2Values = request.getHeaders("header2");
-        assertEquals("5", header2Values.nextElement());
-        assertEquals("10", header2Values.nextElement());
-        assertFalse(header2Values.hasMoreElements());
-    }
-
-    @Test
-    public void testCookies() {
-        assertNull(request.getCookies());
-
-        request.addCookie(new Cookie("cookie1", "value1"));
-        request.addCookie(new Cookie("cookie2", "value2"));
-
-        assertEquals("value1", request.getCookie("cookie1").getValue());
-
-        Cookie[] cookies = request.getCookies();
-        assertEquals(2, cookies.length);
-        assertEquals("value1", cookies[0].getValue());
-        assertEquals("value2", cookies[1].getValue());
-    }
-    
-    @Test
     public void testDefaultResourceBundle() {
         ResourceBundle bundle = request.getResourceBundle(Locale.US);
         assertNotNull(bundle);
@@ -260,102 +118,4 @@ public class MockSlingHttpServletRequestTest {
         assertFalse(bundle2.getKeys().hasMoreElements());
     }
 
-    @Test
-    public void testRequestParameter() throws Exception {
-        request.setQueryString("param1=123&param2=" + URLEncoder.encode("äöü߀!:!", CharEncoding.UTF_8)
-                + "&param3=a&param3=b");
-
-        assertEquals(3, request.getRequestParameterMap().size());
-        assertEquals(4, request.getRequestParameterList().size());
-        assertEquals("123", request.getRequestParameter("param1").getString());
-        assertEquals("äöü߀!:!", request.getRequestParameter("param2").getString());
-        assertEquals("a",request.getRequestParameters("param3")[0].getString());
-        assertEquals("b",request.getRequestParameters("param3")[1].getString());
-
-        assertNull(request.getRequestParameter("unknown"));
-        assertNull(request.getRequestParameters("unknown"));
-    }
-
-    @Test
-    public void testContentTypeCharset() throws Exception {
-        assertNull(request.getContentType());
-        assertNull(request.getCharacterEncoding());
-
-        request.setContentType("image/gif");
-        assertEquals("image/gif", request.getContentType());
-        assertNull(request.getCharacterEncoding());
-        
-        request.setContentType("text/plain;charset=UTF-8");
-        assertEquals("text/plain;charset=UTF-8", request.getContentType());
-        assertEquals(CharEncoding.UTF_8, request.getCharacterEncoding());
-        
-        request.setCharacterEncoding(CharEncoding.ISO_8859_1);
-        assertEquals("text/plain;charset=ISO-8859-1", request.getContentType());
-        assertEquals(CharEncoding.ISO_8859_1, request.getCharacterEncoding());
-    }
-
-    @Test
-    public void testContent() throws Exception {
-        assertEquals(0, request.getContentLength());
-        assertNull(request.getInputStream());
-        
-        byte[] data = new byte[] { 0x01,0x02,0x03 };
-        request.setContent(data);
-
-        assertEquals(data.length, request.getContentLength());
-        assertArrayEquals(data, IOUtils.toByteArray(request.getInputStream()));
-    }
-
-    @Test
-    public void testGetRequestDispatcher() {
-        MockRequestDispatcherFactory requestDispatcherFactory = mock(MockRequestDispatcherFactory.class);
-        RequestDispatcher requestDispatcher = mock(RequestDispatcher.class);
-        when(requestDispatcherFactory.getRequestDispatcher(any(Resource.class), any(RequestDispatcherOptions.class))).thenReturn(requestDispatcher);
-        when(requestDispatcherFactory.getRequestDispatcher(any(String.class), any(RequestDispatcherOptions.class))).thenReturn(requestDispatcher);
-        
-        request.setRequestDispatcherFactory(requestDispatcherFactory);
-        
-        assertSame(requestDispatcher, request.getRequestDispatcher("/path"));
-        assertSame(requestDispatcher, request.getRequestDispatcher("/path", new RequestDispatcherOptions()));
-        assertSame(requestDispatcher, request.getRequestDispatcher(resource));
-        assertSame(requestDispatcher, request.getRequestDispatcher(resource, new RequestDispatcherOptions()));
-    }
-    
-    @Test(expected = IllegalStateException.class)
-    public void testGetRequestDispatcherWithoutFactory() {
-        request.getRequestDispatcher("/path");
-    }
-    
-    @Test
-    public void testGetRemoteUser() {
-        assertNull(null, request.getRemoteUser());
-        
-        request.setRemoteUser("admin");
-        assertEquals("admin", request.getRemoteUser());
-    }
-
-    @Test
-    public void testGetRemoteAddr() throws Exception {
-        assertNull(null, request.getRemoteAddr());
-        
-        request.setRemoteAddr("1.2.3.4");
-        assertEquals("1.2.3.4", request.getRemoteAddr());
-    }
-
-    @Test
-    public void testGetRemoteHost() throws Exception {
-        assertNull(null, request.getRemoteHost());
-        
-        request.setRemoteHost("host1");
-        assertEquals("host1", request.getRemoteHost());
-    }
-
-    @Test
-    public void testGetRemotePort() throws Exception {
-        assertEquals(0, request.getRemotePort());
-        
-        request.setRemotePort(1234);
-        assertEquals(1234, request.getRemotePort());
-    }
-
 }
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletResponseTest.java b/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletResponseTest.java
index 944b366..2a32976 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletResponseTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletResponseTest.java
@@ -18,20 +18,8 @@
  */
 package org.apache.sling.testing.mock.sling.servlet;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
 
-import java.util.Collection;
-import java.util.Iterator;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang3.CharEncoding;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -48,129 +36,6 @@ public class MockSlingHttpServletResponseTest {
     public void testContentTypeCharset() throws Exception {
         assertNull(response.getContentType());
         assertNull(response.getCharacterEncoding());
-
-        response.setContentType("image/gif");
-        assertEquals("image/gif", response.getContentType());
-        assertNull(response.getCharacterEncoding());
-        
-        response.setContentType("text/plain;charset=UTF-8");
-        assertEquals("text/plain;charset=UTF-8", response.getContentType());
-        assertEquals(CharEncoding.UTF_8, response.getCharacterEncoding());
-        
-        response.setCharacterEncoding(CharEncoding.ISO_8859_1);
-        assertEquals("text/plain;charset=ISO-8859-1", response.getContentType());
-        assertEquals(CharEncoding.ISO_8859_1, response.getCharacterEncoding());
-    }
-
-    @Test
-    public void testContentLength() throws Exception {
-        assertEquals(0, response.getContentLength());
-
-        response.setContentLength(55);
-        assertEquals(55, response.getContentLength());
-    }
-
-    @Test
-    public void testHeaders() throws Exception {
-        assertEquals(0, response.getHeaderNames().size());
-
-        response.addHeader("header1", "value1");
-        response.addIntHeader("header2", 5);
-        response.addDateHeader("header3", System.currentTimeMillis());
-
-        assertEquals(3, response.getHeaderNames().size());
-        assertTrue(response.containsHeader("header1"));
-        assertEquals("value1", response.getHeader("header1"));
-        assertEquals("5", response.getHeader("header2"));
-        assertNotNull(response.getHeader("header3"));
-
-        response.setHeader("header1", "value2");
-        response.addIntHeader("header2", 10);
-
-        assertEquals(3, response.getHeaderNames().size());
-
-        Collection<String> header1Values = response.getHeaders("header1");
-        assertEquals(1, header1Values.size());
-        assertEquals("value2", header1Values.iterator().next());
-
-        Collection<String> header2Values = response.getHeaders("header2");
-        assertEquals(2, header2Values.size());
-        Iterator<String> header2Iterator = header2Values.iterator();
-        assertEquals("5", header2Iterator.next());
-        assertEquals("10", header2Iterator.next());
-
-        response.reset();
-        assertEquals(0, response.getHeaderNames().size());
-    }
-
-    @Test
-    public void testRedirect() throws Exception {
-        response.sendRedirect("/location.html");
-        assertEquals(HttpServletResponse.SC_MOVED_TEMPORARILY, response.getStatus());
-        assertEquals("/location.html", response.getHeader("Location"));
-    }
-
-    @Test
-    public void testSendError() throws Exception {
-        response.sendError(HttpServletResponse.SC_NOT_FOUND);
-        assertEquals(HttpServletResponse.SC_NOT_FOUND, response.getStatus());
-    }
-
-    @Test
-    public void testSetStatus() throws Exception {
-        assertEquals(HttpServletResponse.SC_OK, response.getStatus());
-
-        response.setStatus(HttpServletResponse.SC_BAD_GATEWAY);
-        assertEquals(HttpServletResponse.SC_BAD_GATEWAY, response.getStatus());
-
-        response.reset();
-        assertEquals(HttpServletResponse.SC_OK, response.getStatus());
-    }
-
-    @Test
-    public void testWriteStringContent() throws Exception {
-        final String TEST_CONTENT = "Der Jodelkaiser äöü߀ ᚠᛇᚻ";
-        response.setCharacterEncoding(CharEncoding.UTF_8);
-        response.getWriter().write(TEST_CONTENT);
-        assertEquals(TEST_CONTENT, response.getOutputAsString());
-
-        response.resetBuffer();
-        assertEquals(0, response.getOutputAsString().length());
-    }
-
-    @Test
-    public void testWriteBinaryContent() throws Exception {
-        final byte[] TEST_DATA = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05 };
-        response.getOutputStream().write(TEST_DATA);
-        assertArrayEquals(TEST_DATA, response.getOutput());
-
-        response.resetBuffer();
-        assertEquals(0, response.getOutput().length);
-    }
-
-    @Test
-    public void testIsCommitted() throws Exception {
-        assertFalse(response.isCommitted());
-        response.flushBuffer();
-        assertTrue(response.isCommitted());
-    }
-
-    @Test
-    public void testCookies() {
-        assertNull(response.getCookies());
-
-        response.addCookie(new Cookie("cookie1", "value1"));
-        response.addCookie(new Cookie("cookie2", "value2"));
-
-        assertEquals("value1", response.getCookie("cookie1").getValue());
-
-        Cookie[] cookies = response.getCookies();
-        assertEquals(2, cookies.length);
-        assertEquals("value1", cookies[0].getValue());
-        assertEquals("value2", cookies[1].getValue());
-
-        response.reset();
-        assertNull(response.getCookies());
     }
 
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.