Repository: wicket Updated Branches: refs/heads/WICKET-6219-no-fragment-resolver [created] fe1dd3c7c
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/fe1dd3c7 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/fe1dd3c7 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/fe1dd3c7 Branch: refs/heads/WICKET-6219-no-fragment-resolver Commit: fe1dd3c7cd37e20c775ea7f388afb0e9bffc9680 Parents: a63fb75 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: Fri Aug 19 23:20:59 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 | 17 ++-- .../markup/resolver/FragmentResolver.java | 1 + .../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, 194 insertions(+), 114 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/fe1dd3c7/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 ebe2dd1..e1fb1a9 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Application.java +++ b/wicket-core/src/main/java/org/apache/wicket/Application.java @@ -816,7 +816,7 @@ 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 FragmentResolver()); pageSettings.addComponentResolver(new RelativePathPrefixHandler()); pageSettings.addComponentResolver(new EnclosureHandler()); pageSettings.addComponentResolver(new InlineEnclosureHandler()); http://git-wip-us.apache.org/repos/asf/wicket/blob/fe1dd3c7/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 c5e49ec..bee0b69 100644 --- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java +++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java @@ -1497,11 +1497,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/fe1dd3c7/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/fe1dd3c7/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/fe1dd3c7/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/fe1dd3c7/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/fe1dd3c7/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 00e771f..24065fe 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/fe1dd3c7/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/fe1dd3c7/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..23f4160 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); @@ -127,16 +127,17 @@ public final class WicketTagIdentifier extends AbstractMarkupFilter tag.setUserData(MARKUP_CACHE_KEY, getMarkupResourceStream().getCacheKey()); tag.setModified(true); - if (isRaw(tag)) - { - tag.setFlag(ComponentTag.RENDER_RAW, true); - } - else if (tag.isClose() == false) + if (!isRaw(tag) && tag.isClose() == false) { tag.setAutoComponentTag(true); } } + if (isRaw(tag)) + { + tag.setFlag(ComponentTag.RENDER_RAW, true); + } + // If the tag is not a well-known wicket namespace tag if (!isWellKnown(tag)) { http://git-wip-us.apache.org/repos/asf/wicket/blob/fe1dd3c7/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 index bd25302..ba71f55 100644 --- 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 @@ -34,6 +34,7 @@ import org.apache.wicket.markup.html.WebComponent; * must be ignored. It is only indirectly referenced by component. * * @author Juergen Donnerstag + * @deprecated no auto component is needed for a fragment tag */ public class FragmentResolver implements IComponentResolver { http://git-wip-us.apache.org/repos/asf/wicket/blob/fe1dd3c7/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/fe1dd3c7/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 f9adf4e..94d5a0a 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/fe1dd3c7/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/fe1dd3c7/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>
