diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/jcrmock/resource/VanityPathTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/jcrmock/resource/VanityPathTest.java
new file mode 100644
index 0000000..544fa81
--- /dev/null
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/jcrmock/resource/VanityPathTest.java
@@ -0,0 +1,31 @@
+/*
+ * 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.jcrmock.resource;
+
+import org.apache.sling.testing.mock.sling.ResourceResolverType;
+import org.apache.sling.testing.mock.sling.resource.AbstractVanityPathTest;
+
+public class VanityPathTest extends AbstractVanityPathTest {
+
+    @Override
+    protected ResourceResolverType getResourceResolverType() {
+        return ResourceResolverType.JCR_MOCK;
+    }
+
+}
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractVanityPathTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractVanityPathTest.java
new file mode 100644
index 0000000..c375d5f
--- /dev/null
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractVanityPathTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.resource;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.testing.mock.sling.ResourceResolverType;
+import org.apache.sling.testing.mock.sling.junit.SlingContext;
+import org.apache.sling.testing.mock.sling.junit.SlingContextBuilder;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * Validates vanity path handling 
+ */
+public abstract class AbstractVanityPathTest {
+
+    @Rule
+    public SlingContext context = new SlingContextBuilder(getResourceResolverType())
+        .resourceResolverFactoryActivatorProps(ImmutableMap.<String, Object>of(
+            "resource.resolver.mapping", new String[] {
+                "/:/", 
+                "/content/test/</"
+             }
+        ))
+        .build();
+
+    protected abstract ResourceResolverType getResourceResolverType();
+
+    @Before
+    public void setUp() throws Exception {
+       context.build().resource("/content")
+               .resource("test")
+               .resource("vanity", 
+                       "sling:vanityPath", "/my-vanity");
+    }
+
+    @Test
+    public void testVanityPath() throws Exception {
+        String mappedPath = context.resourceResolver().map("/content/test/my-vanity");
+        assertEquals("/my-vanity", mappedPath);
+
+        Resource resolved = context.resourceResolver().resolve(mappedPath);
+        assertEquals("sling:redirect", resolved.getResourceType());
+    }
+
+}
diff --git a/core/src/test/java/org/apache/sling/testing/mock/sling/rrmock/resource/VanityPathTest.java b/core/src/test/java/org/apache/sling/testing/mock/sling/rrmock/resource/VanityPathTest.java
new file mode 100644
index 0000000..18eff21
--- /dev/null
+++ b/core/src/test/java/org/apache/sling/testing/mock/sling/rrmock/resource/VanityPathTest.java
@@ -0,0 +1,33 @@
+/*
+ * 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.rrmock.resource;
+
+import org.apache.sling.testing.mock.sling.ResourceResolverType;
+import org.apache.sling.testing.mock.sling.resource.AbstractVanityPathTest;
+import org.junit.Ignore;
+
+@Ignore // vanity paths will not work with resource resolver mock - not supported in the mock resource resolver
+public class VanityPathTest extends AbstractVanityPathTest {
+
+    @Override
+    protected ResourceResolverType getResourceResolverType() {
+        return ResourceResolverType.RESOURCERESOLVER_MOCK;
+    }
+
+}
