Repository: wicket Updated Branches: refs/heads/master 4216e09a4 -> e72e54f09
WICKET-6219 removing FragmentResolver Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/e72e54f0 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e72e54f0 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e72e54f0 Branch: refs/heads/master Commit: e72e54f09b7ede1f05ffa0a9acd6b607e7e1feaf Parents: 4216e09 Author: Pedro Henrique Oliveira dos Santos <[email protected]> Authored: Fri Aug 19 21:26:58 2016 -0300 Committer: Pedro Henrique Oliveira dos Santos <[email protected]> Committed: Sat Aug 27 23:51:24 2016 -0300 ---------------------------------------------------------------------- .../java/org/apache/wicket/Application.java | 2 - .../java/org/apache/wicket/MarkupContainer.java | 5 ++ .../wicket/markup/AbstractMarkupFragment.java | 87 +------------------ .../apache/wicket/markup/IMarkupFragment.java | 10 +-- .../java/org/apache/wicket/markup/TagUtils.java | 88 ++++++++++++++++++++ .../org/apache/wicket/markup/WicketTag.java | 3 +- .../html/TransparentWebMarkupContainer.java | 7 ++ .../panel/FragmentMarkupSourcingStrategy.java | 5 +- .../parser/filter/WicketTagIdentifier.java | 6 +- .../markup/resolver/FragmentResolver.java | 64 -------------- .../resolver/WicketContainerResolver.java | 2 +- .../html/TransparentWebMarkupContainerTest.java | 66 ++++++++++++++- .../wicket/markup/html/panel/FragmentTest.java | 14 +--- .../markup/html/panel/FragmentTestPanel_2.html | 1 + 14 files changed, 186 insertions(+), 174 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/e72e54f0/wicket-core/src/main/java/org/apache/wicket/Application.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/Application.java b/wicket-core/src/main/java/org/apache/wicket/Application.java index d655fee..5b232d8 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Application.java +++ b/wicket-core/src/main/java/org/apache/wicket/Application.java @@ -51,7 +51,6 @@ import org.apache.wicket.markup.parser.filter.InlineEnclosureHandler; import org.apache.wicket.markup.parser.filter.RelativePathPrefixHandler; import org.apache.wicket.markup.parser.filter.WicketLinkTagHandler; import org.apache.wicket.markup.parser.filter.WicketMessageTagHandler; -import org.apache.wicket.markup.resolver.FragmentResolver; import org.apache.wicket.markup.resolver.HtmlHeaderResolver; import org.apache.wicket.markup.resolver.WicketContainerResolver; import org.apache.wicket.markup.resolver.WicketMessageResolver; @@ -643,7 +642,6 @@ public abstract class Application implements UnboundListener, IEventSink pageSettings.addComponentResolver(new HtmlHeaderResolver()); pageSettings.addComponentResolver(new WicketLinkTagHandler()); pageSettings.addComponentResolver(new WicketMessageResolver()); - pageSettings.addComponentResolver(new FragmentResolver()); pageSettings.addComponentResolver(new RelativePathPrefixHandler()); pageSettings.addComponentResolver(new EnclosureHandler()); pageSettings.addComponentResolver(new InlineEnclosureHandler()); http://git-wip-us.apache.org/repos/asf/wicket/blob/e72e54f0/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java index 062eda2..09705ff 100644 --- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java +++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java @@ -1430,11 +1430,16 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp // Get element as tag final ComponentTag tag = (ComponentTag)element; + if (tag instanceof WicketTag && ((WicketTag)tag).isFragmentTag()){ + return false; + } + // Get component id final String id = tag.getId(); // Get the component for the id from the given container Component component = get(id); + if (component == null) { component = ComponentResolvers.resolve(this, markupStream, tag, null); http://git-wip-us.apache.org/repos/asf/wicket/blob/e72e54f0/wicket-core/src/main/java/org/apache/wicket/markup/AbstractMarkupFragment.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/AbstractMarkupFragment.java b/wicket-core/src/main/java/org/apache/wicket/markup/AbstractMarkupFragment.java index 1533976..e1bc94e 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/AbstractMarkupFragment.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/AbstractMarkupFragment.java @@ -16,98 +16,15 @@ */ package org.apache.wicket.markup; -import java.util.Deque; -import java.util.LinkedList; - -import org.apache.wicket.util.lang.Args; - /** * A base implementation of {@link IMarkupFragment}. */ public abstract class AbstractMarkupFragment implements IMarkupFragment { - /** - * Find the markup fragment of component with id equal to {@code id}, starting at offset {@code streamOffset}. - * - * @param id - * The id of the component tag being searched for. - * @param streamOffset - * The offset in the markup stream from which to start searching. - * @return the {@link IMarkupFragment} of the component tag if found, {@code null} is not found. - */ + protected final IMarkupFragment find(final String id, int streamOffset) { - /* - * We need streamOffset because MarkupFragment starts searching from offset 1. - */ - Args.notEmpty(id, "id"); - Args.withinRange(0, size() - 1, streamOffset, "streamOffset"); - - Deque<Boolean> openTagUsability = new LinkedList<>(); - boolean canFind = true; - - MarkupStream stream = new MarkupStream(this); - stream.setCurrentIndex(streamOffset); - while (stream.hasMore()) - { - MarkupElement elem = stream.get(); - - if (elem instanceof ComponentTag) - { - ComponentTag tag = stream.getTag(); - - if (tag.isOpen() || tag.isOpenClose()) - { - if (canFind && tag.getId().equals(id)) - { - return stream.getMarkupFragment(); - } - else if (tag.isOpen() && !tag.hasNoCloseTag()) - { - openTagUsability.push(canFind); - - if (tag instanceof WicketTag) - { - WicketTag wtag = (WicketTag)tag; - - if (wtag.isExtendTag()) - { - canFind = true; - } - else if (wtag.isFragmentTag() || wtag.isContainerTag()) - { - canFind = false; - } - /* - * We should potentially also not try find child markup inside some other - * Wicket tags. Other tags that we should think about refusing to look for - * child markup inside include: container, body, border, child (we already - * have special extend handling). - */ - } - else if (!"head".equals(tag.getName()) && !tag.isAutoComponentTag()) - { - canFind = false; - } - } - } - else if (tag.isClose()) - { - if (openTagUsability.isEmpty()) - { - canFind = false; - } - else - { - canFind = openTagUsability.pop(); - } - } - } - - stream.next(); - } - - return null; + return TagUtils.findTagMarkup(this, id, null, streamOffset); } @Override http://git-wip-us.apache.org/repos/asf/wicket/blob/e72e54f0/wicket-core/src/main/java/org/apache/wicket/markup/IMarkupFragment.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/IMarkupFragment.java b/wicket-core/src/main/java/org/apache/wicket/markup/IMarkupFragment.java index dc070c4..ef51ce9 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/IMarkupFragment.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/IMarkupFragment.java @@ -55,13 +55,13 @@ public interface IMarkupFragment extends Iterable<MarkupElement> int size(); /** - * Find the markup fragment of the component with 'path' + * Finds a markup fragment that spans a tag * * @param id - * The component's id to search for - * @return -1, if not found + * the wicket:id attribute in the tag + * @return the markup fragment that spans the complete found tag */ - IMarkupFragment find(final String id); + IMarkupFragment find(final String wicketId); /** * @@ -70,4 +70,4 @@ public interface IMarkupFragment extends Iterable<MarkupElement> * @return markup string */ String toString(final boolean markupOnly); -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/wicket/blob/e72e54f0/wicket-core/src/main/java/org/apache/wicket/markup/TagUtils.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/TagUtils.java b/wicket-core/src/main/java/org/apache/wicket/markup/TagUtils.java index d75a1c3..9bd9433 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/TagUtils.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/TagUtils.java @@ -16,7 +16,11 @@ */ package org.apache.wicket.markup; +import java.util.Deque; +import java.util.LinkedList; + import org.apache.wicket.MarkupContainer; +import org.apache.wicket.util.lang.Args; import org.apache.wicket.util.value.IValueMap; import org.apache.wicket.util.value.ValueMap; @@ -213,4 +217,88 @@ public class TagUtils "Expected a Tag but found raw markup: " + elem.toString()); } } + + /** + * Find the markup fragment of a tag with wicket:id equal to {@code id} starting at offset {@code streamOffset}. + * + * @param id + * The wicket:id of the tag being searched for. + * @param tagName + * The tag name of the tag being searched for. + * @param streamOffset + * The offset in the markup stream from which to start searching. + * @return the {@link IMarkupFragment} of the component tag if found, {@code null} is not found. + */ + public static final IMarkupFragment findTagMarkup(IMarkupFragment fragment, String id, String tagName, int streamOffset) + { + /* + * We need streamOffset because MarkupFragment starts searching from offset 1. + */ + Args.notEmpty(id, "id"); + Args.withinRange(0, fragment.size() - 1, streamOffset, "streamOffset"); + + Deque<Boolean> openTagUsability = new LinkedList<Boolean>(); + boolean canFind = true; + + MarkupStream stream = new MarkupStream(fragment); + stream.setCurrentIndex(streamOffset); + while (stream.hasMore()) + { + MarkupElement elem = stream.get(); + + if (elem instanceof ComponentTag) + { + ComponentTag tag = stream.getTag(); + + if (tag.isOpen() || tag.isOpenClose()) + { + if (canFind && tag.getId().equals(id) && (tagName==null || tag.getName().equals(tagName))) + { + return stream.getMarkupFragment(); + } + else if (tag.isOpen() && !tag.hasNoCloseTag()) + { + openTagUsability.push(canFind); + + if (tag instanceof WicketTag) + { + WicketTag wtag = (WicketTag)tag; + + if (wtag.isExtendTag()) + { + canFind = true; + } + else if (wtag.isFragmentTag() || wtag.isContainerTag()) + { + canFind = false; + } + /* + * We should potentially also not try find child markup inside some other + * Wicket tags. Other tags that we should think about refusing to look for + * child markup inside include: container, body, border, child (we already + * have special extend handling). + */ + } + else if (!"head".equals(tag.getName()) && !tag.isAutoComponentTag()) + { + canFind = false; + } + } + } + else if (tag.isClose()) + { + if (openTagUsability.isEmpty()) + { + canFind = false; + } + else + { + canFind = openTagUsability.pop(); + } + } + } + stream.next(); + } + return null; + } } http://git-wip-us.apache.org/repos/asf/wicket/blob/e72e54f0/wicket-core/src/main/java/org/apache/wicket/markup/WicketTag.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/WicketTag.java b/wicket-core/src/main/java/org/apache/wicket/markup/WicketTag.java index b80958b..fe7cfe9 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/WicketTag.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/WicketTag.java @@ -23,7 +23,6 @@ import org.apache.wicket.markup.parser.filter.EnclosureHandler; import org.apache.wicket.markup.parser.filter.WicketLinkTagHandler; import org.apache.wicket.markup.parser.filter.WicketRemoveTagHandler; import org.apache.wicket.markup.parser.filter.WicketTagIdentifier; -import org.apache.wicket.markup.resolver.FragmentResolver; import org.apache.wicket.markup.resolver.HtmlHeaderResolver; import org.apache.wicket.markup.resolver.WicketContainerResolver; import org.apache.wicket.markup.resolver.WicketMessageResolver; @@ -171,7 +170,7 @@ public class WicketTag extends ComponentTag */ public final boolean isFragmentTag() { - return FragmentResolver.FRAGMENT.equalsIgnoreCase(getName()); + return WicketTagIdentifier.FRAGMENT.equalsIgnoreCase(getName()); } /** http://git-wip-us.apache.org/repos/asf/wicket/blob/e72e54f0/wicket-core/src/main/java/org/apache/wicket/markup/html/TransparentWebMarkupContainer.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/TransparentWebMarkupContainer.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/TransparentWebMarkupContainer.java index b32e128..f9f76de 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/TransparentWebMarkupContainer.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/TransparentWebMarkupContainer.java @@ -21,6 +21,7 @@ import org.apache.wicket.MarkupContainer; import org.apache.wicket.markup.ComponentTag; import org.apache.wicket.markup.MarkupElement; import org.apache.wicket.markup.MarkupStream; +import org.apache.wicket.markup.WicketTag; import org.apache.wicket.markup.html.internal.HtmlHeaderContainer; import org.apache.wicket.markup.resolver.ComponentResolvers; import org.apache.wicket.markup.resolver.IComponentResolver; @@ -55,6 +56,12 @@ public class TransparentWebMarkupContainer extends WebMarkupContainer implements @Override public Component resolve(MarkupContainer container, MarkupStream markupStream, ComponentTag tag) { + if (tag instanceof WicketTag && ((WicketTag)tag).isFragmentTag()) + { + // even having a wicket:id it isn't a component's markup + return null; + } + Component resolvedComponent = getParent().get(tag.getId()); if (resolvedComponent != null && getPage().wasRendered(resolvedComponent)) { http://git-wip-us.apache.org/repos/asf/wicket/blob/e72e54f0/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FragmentMarkupSourcingStrategy.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FragmentMarkupSourcingStrategy.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FragmentMarkupSourcingStrategy.java index 1d82e42..4aa61df 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FragmentMarkupSourcingStrategy.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/panel/FragmentMarkupSourcingStrategy.java @@ -16,6 +16,8 @@ */ package org.apache.wicket.markup.html.panel; +import static org.apache.wicket.markup.parser.filter.WicketTagIdentifier.FRAGMENT; + import org.apache.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.markup.ComponentTag; @@ -25,6 +27,7 @@ import org.apache.wicket.markup.MarkupElement; import org.apache.wicket.markup.MarkupException; import org.apache.wicket.markup.MarkupNotFoundException; import org.apache.wicket.markup.MarkupStream; +import org.apache.wicket.markup.TagUtils; import org.apache.wicket.markup.WicketTag; import org.apache.wicket.util.lang.Args; @@ -124,7 +127,7 @@ public class FragmentMarkupSourcingStrategy extends AbstractMarkupSourcingStrate } // Search for the fragment markup - IMarkupFragment childMarkup = markup.find(markupId); + IMarkupFragment childMarkup = TagUtils.findTagMarkup(markup, markupId, FRAGMENT, 1 ); if (childMarkup == null) { // There is one more option if the markup provider has associated markup http://git-wip-us.apache.org/repos/asf/wicket/blob/e72e54f0/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketTagIdentifier.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketTagIdentifier.java b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketTagIdentifier.java index 18a8b37..301321f 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketTagIdentifier.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/parser/filter/WicketTagIdentifier.java @@ -30,7 +30,6 @@ import org.apache.wicket.markup.html.border.Border; import org.apache.wicket.markup.html.form.AutoLabelTextResolver; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.parser.AbstractMarkupFilter; -import org.apache.wicket.markup.resolver.FragmentResolver; import org.apache.wicket.markup.resolver.HtmlHeaderResolver; import org.apache.wicket.markup.resolver.WicketContainerResolver; import org.apache.wicket.markup.resolver.WicketMessageResolver; @@ -57,8 +56,9 @@ public final class WicketTagIdentifier extends AbstractMarkupFilter private static final Set<String> RAW_TAG_NAMES = new HashSet<>(); public static final String CHILD = "child"; - + public static final String EXTEND = "extend"; + public static final String FRAGMENT = "fragment"; public static final String MARKUP_CACHE_KEY = "markupCacheKey"; static { @@ -69,7 +69,7 @@ public final class WicketTagIdentifier extends AbstractMarkupFilter WELL_KNOWN_TAG_NAMES.add(EnclosureHandler.ENCLOSURE); WELL_KNOWN_TAG_NAMES.add(WicketLinkTagHandler.LINK); WELL_KNOWN_TAG_NAMES.add(WicketRemoveTagHandler.REMOVE); - WELL_KNOWN_TAG_NAMES.add(FragmentResolver.FRAGMENT); + WELL_KNOWN_TAG_NAMES.add(WicketTagIdentifier.FRAGMENT); WELL_KNOWN_TAG_NAMES.add(HtmlHeaderResolver.HEAD); WELL_KNOWN_TAG_NAMES.add(HtmlHeaderResolver.HEADER_ITEMS); WELL_KNOWN_TAG_NAMES.add(WicketTagIdentifier.CHILD); http://git-wip-us.apache.org/repos/asf/wicket/blob/e72e54f0/wicket-core/src/main/java/org/apache/wicket/markup/resolver/FragmentResolver.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/resolver/FragmentResolver.java b/wicket-core/src/main/java/org/apache/wicket/markup/resolver/FragmentResolver.java deleted file mode 100644 index bd25302..0000000 --- a/wicket-core/src/main/java/org/apache/wicket/markup/resolver/FragmentResolver.java +++ /dev/null @@ -1,64 +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.wicket.markup.resolver; - -import org.apache.wicket.Component; -import org.apache.wicket.MarkupContainer; -import org.apache.wicket.markup.ComponentTag; -import org.apache.wicket.markup.MarkupStream; -import org.apache.wicket.markup.WicketTag; -import org.apache.wicket.markup.html.WebComponent; - -/** - * Usually you either have a markup file or a xml tag with wicket:id="myComponent" to associate - * markup with a component. However in some rare cases, especially when working with small panels it - * is a bit awkward to maintain tiny pieces of markup in plenty of panel markup files. Use cases are - * for example list views where list items are different depending on a state. - * <p> - * Inline panels provide a means to maintain the panels tiny piece of markup in the parents markup - * file. During the render process, when Wicket iterates over the markup file, the markup fragment - * must be ignored. It is only indirectly referenced by component. - * - * @author Juergen Donnerstag - */ -public class FragmentResolver implements IComponentResolver -{ - private static final long serialVersionUID = 1L; - - /** */ - public static final String FRAGMENT = "fragment"; - - @Override - public Component resolve(final MarkupContainer container, final MarkupStream markupStream, - final ComponentTag tag) - { - // If <wicket:...> - if (tag instanceof WicketTag) - { - final WicketTag wTag = (WicketTag)tag; - - // If <wicket:fragment ...> - if (wTag.isFragmentTag()) - { - return new WebComponent(wTag.getId()).setVisible(false); - } - } - - // We were not able to handle the tag - return null; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/wicket/blob/e72e54f0/wicket-core/src/main/java/org/apache/wicket/markup/resolver/WicketContainerResolver.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/resolver/WicketContainerResolver.java b/wicket-core/src/main/java/org/apache/wicket/markup/resolver/WicketContainerResolver.java index 562843d..28adcf1 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/resolver/WicketContainerResolver.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/resolver/WicketContainerResolver.java @@ -71,7 +71,7 @@ public class WicketContainerResolver implements IComponentResolver public Component resolve(final MarkupContainer container, final MarkupStream markupStream, final ComponentTag tag) { - if (tag instanceof WicketTag) + if (tag instanceof WicketTag && ((WicketTag)tag).isContainerTag()) { return container.get(tag.getId()); } http://git-wip-us.apache.org/repos/asf/wicket/blob/e72e54f0/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentWebMarkupContainerTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentWebMarkupContainerTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentWebMarkupContainerTest.java index 9ddc737..9233dcb 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentWebMarkupContainerTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentWebMarkupContainerTest.java @@ -16,6 +16,8 @@ */ package org.apache.wicket.markup.html; +import static org.hamcrest.Matchers.containsString; + import org.apache.wicket.Component; import org.apache.wicket.IPageManagerProvider; import org.apache.wicket.MarkupContainer; @@ -27,10 +29,12 @@ import org.apache.wicket.markup.IMarkupResourceStreamProvider; import org.apache.wicket.markup.MarkupException; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.border.Border; +import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.mock.MockPageManager; import org.apache.wicket.page.IManageablePage; import org.apache.wicket.page.IPageManager; import org.apache.wicket.page.IPageManagerContext; +import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.util.resource.IResourceStream; import org.apache.wicket.util.resource.StringResourceStream; import org.apache.wicket.util.tester.TagTester; @@ -262,7 +266,17 @@ public class TransparentWebMarkupContainerTest extends WicketTestCase assertEquals(TestEmbeddedTransparentMarkupContainer.LABEL_MARKUP, label.getMarkup().toString(true)); } - + + /** + * https://issues.apache.org/jira/browse/WICKET-6219 + */ + @Test + public void shouldAllowAFragmentIdConflictingToASibilingTagWicketId() throws Exception + { + tester.startPage(SubPageWithAFragment.class); + assertThat(tester.getLastResponseAsString(), containsString("content")); + } + /** */ public static class TestPage extends WebPage implements IMarkupResourceStreamProvider { @@ -422,4 +436,54 @@ public class TransparentWebMarkupContainerTest extends WicketTestCase "</body></html>"); } } + public static class PageWithAChildInsideATransparentContainer extends WebPage + implements + IMarkupResourceStreamProvider + { + private static final long serialVersionUID = 1L; + + public PageWithAChildInsideATransparentContainer(PageParameters parameters) + { + super(parameters); + add(new TransparentWebMarkupContainer("wrapper")); + } + + @Override + public IResourceStream getMarkupResourceStream(MarkupContainer container, + Class<?> containerClass) + { + return new StringResourceStream("" + // + "<html><body>" + // + " <div wicket:id=\"wrapper\">" + // + " <wicket:child/>" + // + " </div>" + // + "</body></html>"); + } + } + public static class SubPageWithAFragment extends PageWithAChildInsideATransparentContainer + { + private static final long serialVersionUID = 1L; + + public SubPageWithAFragment(PageParameters parameters) + { + super(parameters); + Fragment fragment = new Fragment("header", "header", this); + add(fragment); + } + + @Override + public IResourceStream getMarkupResourceStream(MarkupContainer container, + Class<?> containerClass) + { + if (PageWithAChildInsideATransparentContainer.class.equals(containerClass)) + return super.getMarkupResourceStream(container, containerClass); + return new StringResourceStream("" + // + "<html><body>" + // + "<wicket:extend>" + // + " <div wicket:id=\"header\"></div>" + // + " <wicket:fragment wicket:id=\"header\">content</wicket:fragment>" + // + "</wicket:extend>" + // + "</body></html>"); + } + } } http://git-wip-us.apache.org/repos/asf/wicket/blob/e72e54f0/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTest.java index 85d7924..6eded9a 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTest.java @@ -16,7 +16,8 @@ */ package org.apache.wicket.markup.html.panel; -import org.apache.wicket.markup.MarkupNotFoundException; +import static org.hamcrest.Matchers.containsString; + import org.apache.wicket.util.tester.WicketTestCase; import org.junit.Test; @@ -37,14 +38,7 @@ public class FragmentTest extends WicketTestCase @Test public void testComponentAndFragmentWithSameId() { - try - { - tester.startComponentInPage(FragmentTestPanel_2.class); - fail(); - } - catch (MarkupNotFoundException ex) - { - assertTrue(ex.getMessage().contains("is not a <wicket:fragment> tag")); - } + tester.startComponentInPage(FragmentTestPanel_2.class); + assertThat(tester.getLastResponseAsString(), containsString("fragment body")); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/e72e54f0/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel_2.html ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel_2.html b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel_2.html index 6d21336..5a17df2 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel_2.html +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/panel/FragmentTestPanel_2.html @@ -6,6 +6,7 @@ <div wicket:id="test">[test fragment goes here]</div> <wicket:fragment wicket:id="testFrag"> + fragment body </wicket:fragment> </wicket:panel>
