Repository: wicket
Updated Branches:
  refs/heads/wicket-7.x ea57ae108 -> 3b14e585e


WICKET-6170 Wrong requestmapper used for cache decorated resources

Undecorate the url before passing it for compatibility score calculation.


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/3b14e585
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/3b14e585
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/3b14e585

Branch: refs/heads/wicket-7.x
Commit: 3b14e585e0b8a025d2ddcb22d7f74ba5c7cde758
Parents: ea57ae1
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Sat May 21 13:37:36 2016 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Sat May 21 13:37:36 2016 +0200

----------------------------------------------------------------------
 .../core/request/mapper/ResourceMapper.java     |  7 ++-
 ...esourceMapperWithDecoratedResourcesTest.java | 61 ++++++++++++++++++++
 .../core/request/mapper/decorated-resource.css  |  1 +
 3 files changed, 68 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/3b14e585/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
index d89543e..b6565be 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
@@ -172,7 +172,12 @@ public class ResourceMapper extends 
AbstractBookmarkableMapper
        @Override
        public int getCompatibilityScore(Request request)
        {
-               int score = super.getCompatibilityScore(request);
+               Url originalUrl = new Url(request.getUrl());
+               PageParameters parameters = extractPageParameters(request, 
mountSegments.length, parametersEncoder);
+               removeCachingDecoration(originalUrl, parameters);
+               Request requestWithoutDecoration = 
request.cloneWithUrl(originalUrl);
+
+               int score = 
super.getCompatibilityScore(requestWithoutDecoration);
                if (score > 0)
                {
                        score--; // pages always have priority over resources

http://git-wip-us.apache.org/repos/asf/wicket/blob/3b14e585/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/ResourceMapperWithDecoratedResourcesTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/ResourceMapperWithDecoratedResourcesTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/ResourceMapperWithDecoratedResourcesTest.java
new file mode 100644
index 0000000..6cacfbb
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/ResourceMapperWithDecoratedResourcesTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.wicket.core.request.mapper;
+
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.protocol.http.request.HomePage;
+import org.apache.wicket.request.resource.CssResourceReference;
+import 
org.apache.wicket.request.resource.caching.FilenameWithVersionResourceCachingStrategy;
+import 
org.apache.wicket.request.resource.caching.version.CachingResourceVersion;
+import 
org.apache.wicket.request.resource.caching.version.MessageDigestResourceVersion;
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.Assert;
+import org.junit.Test;
+
+
+/**
+ * Simple test using the WicketTester
+ */
+public class ResourceMapperWithDecoratedResourcesTest extends WicketTestCase {
+
+       @Override
+       protected WebApplication newApplication() {
+               return new MockApplication() {
+                       @Override
+                       public void init() {
+                               super.init();
+                               getResourceSettings().setCachingStrategy(new 
FilenameWithVersionResourceCachingStrategy(
+                                               new CachingResourceVersion(new 
MessageDigestResourceVersion())));
+                               mountResource("stylesheet.css", new 
CssResourceReference(ResourceMapperWithDecoratedResourcesTest.class, 
"decorated-resource.css"));
+                               mountPage("/", HomePage.class);
+                       }
+               };
+       }
+
+       @Test
+       public void resourceNoCacheDecorationSuccessfully() {
+               tester.executeUrl("stylesheet.css");
+               Assert.assertEquals("body { background-color: lightblue; }", 
tester.getLastResponseAsString());
+       }
+       
+       @Test
+       public void resourceWithCacheDecorationSuccessfully() {
+               tester.executeUrl("stylesheet-ver-9876543210.css");
+               Assert.assertEquals("body { background-color: lightblue; }", 
tester.getLastResponseAsString());
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/3b14e585/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/decorated-resource.css
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/decorated-resource.css
 
b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/decorated-resource.css
new file mode 100644
index 0000000..57a5407
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/decorated-resource.css
@@ -0,0 +1 @@
+body { background-color: lightblue; }
\ No newline at end of file

Reply via email to