Repository: wicket
Updated Branches:
  refs/heads/wicket-7.x 3de8969f0 -> 74aa7983f


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/74aa7983
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/74aa7983
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/74aa7983

Branch: refs/heads/wicket-7.x
Commit: 74aa7983f07b8e310e471b7b31ca76d81abed3e8
Parents: 3de8969
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 19:59:21 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       |  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, 187 insertions(+), 110 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/74aa7983/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..0df8caf 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Application.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Application.java
@@ -61,7 +61,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;
@@ -816,7 +815,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/74aa7983/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/74aa7983/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/74aa7983/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/74aa7983/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/74aa7983/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/74aa7983/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/74aa7983/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/74aa7983/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/74aa7983/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/74aa7983/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/74aa7983/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/74aa7983/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/74aa7983/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>

Reply via email to