diff --git a/testing/wicket-js-tests/Gruntfile.js b/testing/wicket-js-tests/Gruntfile.js
index 85eda6ed714..564f9e4e216 100644
--- a/testing/wicket-js-tests/Gruntfile.js
+++ b/testing/wicket-js-tests/Gruntfile.js
@@ -8,7 +8,8 @@
* 3) run: npm install (This will use package.json and install grunt and all dependencies)
* 4.1) grunt jshint - checks all JavaScript files with JSHint
* 4.2) grunt jshint:core - checks only the files in wicket-core
- * 4.3) grunt - starts the registered tasks: starting a web server and running all tests (Ajax, non-Ajax and AMD)
+ * 4.3) grunt - starts the registered tasks: starting a web server and running all tests (Ajax, non-Ajax, XML
+ * replacement and AMD)
*/
/*global module: true */
@@ -18,11 +19,10 @@ module.exports = function(grunt) {
var
coreJs = [
- '../../wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery-debug.js',
'../../wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js',
+ '../../wicket-core/src/main/java/org/apache/wicket/ajax/res/js/xml-replacement-method.js',
"../../wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckSelector.js",
"../../wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadField.js",
- "../../wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.js",
"../../wicket-core/src/main/java/org/apache/wicket/markup/html/pages/wicket-browser-info.js"
],
extensionsJs = [
@@ -30,7 +30,6 @@ module.exports = function(grunt) {
"../../wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/wicket-ajaxdownload.js",
"../../wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.js",
"../../wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js",
- "../../wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/modal/res/modal.js",
"../../wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/wicket-filterform.js"
],
nativeWebSocketJs = [
@@ -43,7 +42,8 @@ module.exports = function(grunt) {
"../../wicket-core/src/test/js/dom.js",
"../../wicket-core/src/test/js/channels.js",
"../../wicket-core/src/test/js/event.js",
- "../../wicket-core/src/test/js/timer.js"
+ "../../wicket-core/src/test/js/timer.js",
+ "../../wicket-core/src/test/js/xml-replacement.js"
],
gymTestsJs = [
"../../wicket-examples/src/main/webapp/js-test/tests/ajax/form.js",
@@ -108,11 +108,22 @@ module.exports = function(grunt) {
urls: [
'http://localhost:38887/test/js/all.html?4.0.0'
],
- puppeteer: {
- headless: true,
- args: ['--no-sandbox']
+ puppeteer: {
+ headless: true,
+ args: ['--no-sandbox']
}
}
+ },
+
+ /**
+ * Run XML reaplcement method tests
+ */
+ "xml-replacement": {
+ options: {
+ urls: [
+ 'http://localhost:38887/test/js/xml-replacement.html?4.0.0'
+ ]
+ }
}
},
diff --git a/testing/wicket-js-tests/src/test/java/org/apache/wicket/testing/jstest/StartJavaScriptTests.java b/testing/wicket-js-tests/src/test/java/org/apache/wicket/testing/jstest/StartJavaScriptTests.java
index d16011ab79b..e0242ec632a 100644
--- a/testing/wicket-js-tests/src/test/java/org/apache/wicket/testing/jstest/StartJavaScriptTests.java
+++ b/testing/wicket-js-tests/src/test/java/org/apache/wicket/testing/jstest/StartJavaScriptTests.java
@@ -21,7 +21,6 @@
import java.net.URI;
import javax.management.MBeanServer;
-
import org.eclipse.jetty.jmx.MBeanContainer;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
@@ -114,9 +113,9 @@ public static void main(String[] args)
try
{
server.start();
-
+
browse();
-
+
server.join();
}
catch (Exception e)
diff --git a/wicket-core-tests/src/test/java/org/apache/wicket/core/request/handler/AbstractPartialPageRequestHandlerTest.java b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/handler/AbstractPartialPageRequestHandlerTest.java
new file mode 100644
index 00000000000..6e29073b390
--- /dev/null
+++ b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/handler/AbstractPartialPageRequestHandlerTest.java
@@ -0,0 +1,154 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.core.request.handler;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.Page;
+import org.apache.wicket.markup.Markup;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.page.PartialPageUpdate;
+import org.apache.wicket.page.XmlPartialPageUpdate;
+import org.apache.wicket.request.IRequestCycle;
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.jupiter.api.Test;
+
+class AbstractPartialPageRequestHandlerTest extends WicketTestCase
+{
+ @Test
+ void passesNoReplacementMethodToUpdateForComponentWithOverriddenMarkupIdRegisteredWithout()
+ {
+ Label label = tester.startComponentInPage(new Label("some ID"));
+ ReplacementMethodsExposingUpdate update = new ReplacementMethodsExposingUpdate(label.getPage());
+ AbstractPartialPageRequestHandler handler = new TestPartialPageRequestHandler(label.getPage(), update);
+
+ handler.add(label, "the ID");
+
+ assertNull(update.getReplacementMethodPublic(label.getMarkupId()));
+ }
+
+ @Test
+ void passesNoReplacementMethodToUpdateForComponentRegisteredWithout()
+ {
+ Component label = tester.startComponentInPage(new Label("the ID").setOutputMarkupId(true));
+ ReplacementMethodsExposingUpdate update = new ReplacementMethodsExposingUpdate(label.getPage());
+ AbstractPartialPageRequestHandler handler = new TestPartialPageRequestHandler(label.getPage(), update);
+
+ handler.add(label);
+
+ assertNull(update.getReplacementMethodPublic(label.getMarkupId()));
+ }
+
+ @Test
+ void passesNoReplacementMethodToUpdateForChildrenRegisteredWithout()
+ {
+ Component label = new Label("the ID").setOutputMarkupId(true).setMarkup(Markup.of(""));
+ MarkupContainer container = new WebMarkupContainer("some ID").add(label);
+ tester.startComponentInPage(container.setMarkup(Markup.of("")));
+ ReplacementMethodsExposingUpdate update = new ReplacementMethodsExposingUpdate(container.getPage());
+ AbstractPartialPageRequestHandler handler = new TestPartialPageRequestHandler(container.getPage(), update);
+
+ handler.addChildren(container, Label.class);
+
+ assertNull(update.getReplacementMethodPublic(label.getMarkupId()));
+ }
+
+ @Test
+ void passesReplacementMethodToUpdateForComponentWithOverriddenMarkupIdRegisteredWithOne()
+ {
+ Label label = tester.startComponentInPage(new Label("some ID"));
+ ReplacementMethodsExposingUpdate update = new ReplacementMethodsExposingUpdate(label.getPage());
+ AbstractPartialPageRequestHandler handler = new TestPartialPageRequestHandler(label.getPage(), update);
+
+ handler.add("theReplacementMethod", label, "the ID");
+
+ assertEquals("theReplacementMethod", update.getReplacementMethodPublic(label.getMarkupId()));
+ }
+
+ @Test
+ void passesReplacementMethodToUpdateForComponentRegisteredWithOne()
+ {
+ Component label = tester.startComponentInPage(new Label("the ID").setOutputMarkupId(true));
+ ReplacementMethodsExposingUpdate update = new ReplacementMethodsExposingUpdate(label.getPage());
+ AbstractPartialPageRequestHandler handler = new TestPartialPageRequestHandler(label.getPage(), update);
+
+ handler.add("theReplacementMethod", label);
+
+ assertEquals("theReplacementMethod", update.getReplacementMethodPublic(label.getMarkupId()));
+ }
+
+ @Test
+ void passesReplacementMethodToUpdateForChildrenRegisteredWithOne()
+ {
+ Component label = new Label("the ID").setOutputMarkupId(true).setMarkup(Markup.of(""));
+ MarkupContainer container = new WebMarkupContainer("some ID").add(label);
+ tester.startComponentInPage(container.setMarkup(Markup.of("")));
+ ReplacementMethodsExposingUpdate update = new ReplacementMethodsExposingUpdate(container.getPage());
+ AbstractPartialPageRequestHandler handler = new TestPartialPageRequestHandler(container.getPage(), update);
+
+ handler.addChildren("theReplacementMethod", container, Label.class);
+
+ assertEquals("theReplacementMethod", update.getReplacementMethodPublic(label.getMarkupId()));
+ }
+
+ private static class ReplacementMethodsExposingUpdate extends XmlPartialPageUpdate
+ {
+ public ReplacementMethodsExposingUpdate(Page page)
+ {
+ super(page);
+ }
+
+ public String getReplacementMethodPublic(String markupId) {
+ return getReplacementMethod(markupId);
+ }
+ }
+
+ private static class TestPartialPageRequestHandler extends AbstractPartialPageRequestHandler
+ {
+ private final ReplacementMethodsExposingUpdate update;
+
+ public TestPartialPageRequestHandler(Page page, ReplacementMethodsExposingUpdate update)
+ {
+ super(page);
+ this.update = update;
+ }
+
+ @Override
+ protected PartialPageUpdate getUpdate()
+ {
+ return update;
+ }
+
+ @Override
+ public Collection extends Component> getComponents()
+ {
+ return List.of();
+ }
+
+ @Override
+ public void respond(IRequestCycle requestCycle)
+ {
+ }
+ }
+}
diff --git a/wicket-core-tests/src/test/java/org/apache/wicket/core/request/handler/MathmlSubexpressionPanel.java b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/handler/MathmlSubexpressionPanel.java
new file mode 100644
index 00000000000..b60eed36149
--- /dev/null
+++ b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/handler/MathmlSubexpressionPanel.java
@@ -0,0 +1,34 @@
+/*
+ * 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.handler;
+
+import org.apache.wicket.markup.MarkupType;
+import org.apache.wicket.markup.html.panel.Panel;
+
+public class MathmlSubexpressionPanel extends Panel
+{
+ public MathmlSubexpressionPanel(String id)
+ {
+ super(id);
+ }
+
+ @Override
+ public MarkupType getMarkupType()
+ {
+ return new MarkupType("xml", "application/mathml+xml");
+ }
+}
diff --git a/wicket-core-tests/src/test/java/org/apache/wicket/core/request/handler/MathmlSubexpressionPanel.xml b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/handler/MathmlSubexpressionPanel.xml
new file mode 100644
index 00000000000..30fd1ac9b99
--- /dev/null
+++ b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/handler/MathmlSubexpressionPanel.xml
@@ -0,0 +1,18 @@
+
+
+
diff --git a/wicket-core-tests/src/test/java/org/apache/wicket/core/request/handler/XmlReplacementEnablingBehaviorTest.java b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/handler/XmlReplacementEnablingBehaviorTest.java
new file mode 100644
index 00000000000..a9d932fa818
--- /dev/null
+++ b/wicket-core-tests/src/test/java/org/apache/wicket/core/request/handler/XmlReplacementEnablingBehaviorTest.java
@@ -0,0 +1,138 @@
+/*
+ * 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.handler;
+
+import static org.apache.wicket.markup.parser.XmlTag.TagType.CLOSE;
+import static org.apache.wicket.markup.parser.XmlTag.TagType.OPEN;
+import static org.apache.wicket.markup.parser.XmlTag.TagType.OPEN_CLOSE;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+class XmlReplacementEnablingBehaviorTest extends WicketTestCase
+{
+ private static final String SOME_ELEMENT = "someelement";
+ private static final String SOME_ID = "some-id";
+ private static final String SOME_NAMESPACE_URI = "some-namespace-uri";
+
+ @Test
+ void doesNotAcceptNullNamespaceUri()
+ {
+ Assertions.assertThrows(IllegalArgumentException.class, () -> new XmlReplacementEnablingBehavior(null));
+ }
+
+ @Test
+ void addsJavaScriptsNeededForXmlReplacement()
+ {
+ tester.startPage(XmlReplacementEnablingBehaviorTest.TestPage.class);
+
+ tester.assertContains("");
+ }
+
+ @Test
+ void doesNotAllowBindingToMultipleComponents()
+ {
+ var behavior = new XmlReplacementEnablingBehavior(SOME_NAMESPACE_URI);
+ behavior.bind(new WebMarkupContainer(SOME_ID));
+
+ Assertions.assertThrows(IllegalStateException.class, () -> behavior.bind(new WebMarkupContainer(SOME_ID)));
+ }
+
+ @Test
+ void enablesOutputOfMarkupIdOnBindingToComponent()
+ {
+ var behavior = new XmlReplacementEnablingBehavior(SOME_NAMESPACE_URI);
+ var component = new WebMarkupContainer(SOME_ID);
+ behavior.bind(component);
+
+ Assertions.assertTrue(component.getOutputMarkupId());
+ }
+
+ @Test
+ void setsNamespaceUriOnComponentOpenTag()
+ {
+ var behavior = new XmlReplacementEnablingBehavior("http://example.com/the-namespace-uri");
+ var tag = new ComponentTag(SOME_ELEMENT, OPEN);
+
+ behavior.onComponentTag(new WebMarkupContainer(SOME_ID), tag);
+
+ assertEquals("http://example.com/the-namespace-uri", tag.getAttribute("xmlns"));
+ }
+
+ @Test
+ void setsNamespaceUriOnComponentOpenCloseTag()
+ {
+ var behavior = new XmlReplacementEnablingBehavior("http://example.com/the-namespace-uri");
+ var tag = new ComponentTag(SOME_ELEMENT, OPEN_CLOSE);
+
+ behavior.onComponentTag(new WebMarkupContainer(SOME_ID), tag);
+
+ assertEquals("http://example.com/the-namespace-uri", tag.getAttribute("xmlns"));
+ }
+
+ @Test
+ void doesNotSetNamespaceUriOnComponentCloseTag()
+ {
+ var behavior = new XmlReplacementEnablingBehavior("http://example.com/the-namespace-uri");
+ var tag = new ComponentTag(SOME_ELEMENT, CLOSE);
+
+ behavior.onComponentTag(new WebMarkupContainer(SOME_ID), tag);
+
+ assertNull(tag.getAttribute("xmlns"));
+ }
+
+ @Test
+ void disablesRenderingOfWicketTags()
+ {
+ tester.startPage(XmlReplacementEnablingBehaviorTest.TestPage.class);
+
+ tester.assertContainsNot("");
+ }
+
+ public static class TestPage extends WebPage implements IMarkupResourceStreamProvider
+ {
+ /** */
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Construct.
+ */
+ public TestPage()
+ {
+ add(new MathmlSubexpressionPanel("component")
+ .add(new XmlReplacementEnablingBehavior(XmlReplacementEnablingBehavior.MATHML_NAMESPACE_URI)));
+ }
+
+ @Override
+ public IResourceStream getMarkupResourceStream(MarkupContainer container,
+ Class> containerClass)
+ {
+ return new StringResourceStream(
+ "");
+ }
+ }
+}
diff --git a/wicket-core-tests/src/test/java/org/apache/wicket/core/util/license/ApacheLicenceHeaderTest.java b/wicket-core-tests/src/test/java/org/apache/wicket/core/util/license/ApacheLicenceHeaderTest.java
index ed9e9def94a..5c51b9f4601 100644
--- a/wicket-core-tests/src/test/java/org/apache/wicket/core/util/license/ApacheLicenceHeaderTest.java
+++ b/wicket-core-tests/src/test/java/org/apache/wicket/core/util/license/ApacheLicenceHeaderTest.java
@@ -44,6 +44,7 @@ class ApacheLicenceHeaderTest extends ApacheLicenseHeaderTestCase
// the licence header breaks the tests in IE
htmlIgnore.add("src/test/js/all.html");
+ htmlIgnore.add("src/test/js/xml-replacement.html");
/*
* See NOTICE.txt
@@ -52,6 +53,7 @@ class ApacheLicenceHeaderTest extends ApacheLicenseHeaderTestCase
// the xml prolog breaks the tests in IE
xmlPrologIgnore.add("src/test/js/all.html");
xmlPrologIgnore.add("src/test/js/amd.html");
+ xmlPrologIgnore.add("src/test/js/xml-replacement.html");
/*
* .css in test is very test specific and a license header would confuse and make it unclear
diff --git a/wicket-core-tests/src/test/java/org/apache/wicket/page/PageForPartialUpdate.html b/wicket-core-tests/src/test/java/org/apache/wicket/page/PageForPartialUpdate.html
index c6a2f30ed87..3ccd564cf34 100644
--- a/wicket-core-tests/src/test/java/org/apache/wicket/page/PageForPartialUpdate.html
+++ b/wicket-core-tests/src/test/java/org/apache/wicket/page/PageForPartialUpdate.html
@@ -15,5 +15,6 @@
two brackets: ]] greater than: > CDATA end: ]]>
+ test
diff --git a/wicket-core-tests/src/test/java/org/apache/wicket/page/PageForPartialUpdate.java b/wicket-core-tests/src/test/java/org/apache/wicket/page/PageForPartialUpdate.java
index 06867563f8b..488fe653cc2 100644
--- a/wicket-core-tests/src/test/java/org/apache/wicket/page/PageForPartialUpdate.java
+++ b/wicket-core-tests/src/test/java/org/apache/wicket/page/PageForPartialUpdate.java
@@ -29,6 +29,7 @@ public class PageForPartialUpdate extends WebPage
private static final long serialVersionUID = 1L;
public WebMarkupContainer container;
+ public WebMarkupContainer alternativeReplacement;
/**
* Construct.
@@ -43,5 +44,8 @@ public void renderHead(IHeaderResponse response) {
};
container.setOutputMarkupId(true);
add(container);
+
+ alternativeReplacement = new WebMarkupContainer("alternativeReplacement");
+ add(alternativeReplacement);
}
}
diff --git a/wicket-core-tests/src/test/java/org/apache/wicket/page/PartialPageUpdateTest.java b/wicket-core-tests/src/test/java/org/apache/wicket/page/PartialPageUpdateTest.java
new file mode 100644
index 00000000000..9f9d011b847
--- /dev/null
+++ b/wicket-core-tests/src/test/java/org/apache/wicket/page/PartialPageUpdateTest.java
@@ -0,0 +1,107 @@
+/*
+ * 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.page;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+import org.apache.wicket.request.Response;
+import org.apache.wicket.request.http.WebResponse;
+import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.jupiter.api.Test;
+
+class PartialPageUpdateTest extends WicketTestCase
+{
+ @Test
+ void returnsNoReplacementMethodIfNotSpecified()
+ {
+ var page = new PageForPartialUpdate();
+ tester.startPage(page);
+ var update = new TestPartialPageUpdate(page);
+
+ update.add(page.alternativeReplacement, "theMarkupId");
+
+ assertNull(update.getReplacementMethod("theMarkupId"));
+ }
+
+ @Test
+ void returnsNoReplacementMethodIfNull()
+ {
+ var page = new PageForPartialUpdate();
+ tester.startPage(page);
+ var update = new TestPartialPageUpdate(page);
+
+ update.add(null, page.alternativeReplacement, "theMarkupId");
+
+ assertNull(update.getReplacementMethod("theMarkupId"));
+ }
+
+ @Test
+ void returnsReplacementMethodIfSpecified()
+ {
+ var page = new PageForPartialUpdate();
+ tester.startPage(page);
+ var update = new TestPartialPageUpdate(page);
+
+ update.add("theReplacementMethod", page.alternativeReplacement, "theMarkupId");
+
+ assertEquals("theReplacementMethod", update.getReplacementMethod("theMarkupId"));
+ }
+
+ private static class TestPartialPageUpdate extends PartialPageUpdate
+ {
+ public TestPartialPageUpdate(PageForPartialUpdate page)
+ {
+ super(page);
+ }
+
+ @Override
+ protected void writeFooter(Response response, String encoding)
+ {
+ }
+
+ @Override
+ protected void writeHeader(Response response, String encoding)
+ {
+ }
+
+ @Override
+ protected void writeComponent(Response response, String markupId, CharSequence contents)
+ {
+ }
+
+ @Override
+ protected void writePriorityEvaluation(Response response, CharSequence contents)
+ {
+ }
+
+ @Override
+ protected void writeHeaderContribution(Response response, CharSequence contents)
+ {
+ }
+
+ @Override
+ protected void writeEvaluation(Response response, CharSequence contents)
+ {
+ }
+
+ @Override
+ public void setContentType(WebResponse response, String encoding)
+ {
+ }
+ }
+}
diff --git a/wicket-core-tests/src/test/java/org/apache/wicket/page/XmlPartialPageUpdateTest.java b/wicket-core-tests/src/test/java/org/apache/wicket/page/XmlPartialPageUpdateTest.java
index ab82a41742c..2e1204e6790 100644
--- a/wicket-core-tests/src/test/java/org/apache/wicket/page/XmlPartialPageUpdateTest.java
+++ b/wicket-core-tests/src/test/java/org/apache/wicket/page/XmlPartialPageUpdateTest.java
@@ -39,15 +39,15 @@ class XmlPartialPageUpdateTest extends WicketTestCase
void encodeCdataEnd()
{
PageForPartialUpdate page = new PageForPartialUpdate();
-
+
XmlPartialPageUpdate update = new XmlPartialPageUpdate(page);
-
+
update.add(page.container, page.container.getMarkupId());
-
+
MockWebResponse response = new MockWebResponse();
-
+
update.writeTo(response, "UTF-8");
-
+
String expected = " two brackets: ]] greater than: > CDATA end: ]]]]> ]]>
+
+
+
+
+
+
+
+
+