Repository: wicket
Updated Branches:
  refs/heads/wicket-7.x 9338bdffe -> fb0460b36


WICKET-6339 Wrong implementation of MarkupFragment.iterator()


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

Branch: refs/heads/wicket-7.x
Commit: fb0460b36bb72fff9f5008dd3d3fe5e8d666877b
Parents: 9338bdf
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Wed May 3 22:45:26 2017 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Wed May 3 22:45:26 2017 +0200

----------------------------------------------------------------------
 .../apache/wicket/markup/MarkupFragment.java    | 26 ++++++++++---
 .../wicket/markup/MarkupFragmentTest.java       | 40 +++++++++++++++++++-
 2 files changed, 59 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/fb0460b3/wicket-core/src/main/java/org/apache/wicket/markup/MarkupFragment.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/MarkupFragment.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/MarkupFragment.java
index 9df40ac..570547c 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/MarkupFragment.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/MarkupFragment.java
@@ -167,7 +167,7 @@ public class MarkupFragment extends AbstractMarkupFragment
        }
 
        /**
-        * @return The parent markup. Null if that is a a markup file.
+        * @return The parent markup. Null if that is a markup file.
         */
        private IMarkupFragment getParentMarkup()
        {
@@ -194,7 +194,7 @@ public class MarkupFragment extends AbstractMarkupFragment
                if (markupOnly == false)
                {
                        
buf.append(getRootMarkup().getMarkupResourceStream().toString());
-                       buf.append("\n");
+                       buf.append('\n');
                }
 
                for (int i = 0; i < size(); i++)
@@ -204,12 +204,26 @@ public class MarkupFragment extends AbstractMarkupFragment
                return buf.toString();
        }
 
-       /**
-        * @see java.lang.Iterable#iterator()
-        */
        @Override
        public Iterator<MarkupElement> iterator()
        {
-               return getRootMarkup().iterator(startIndex, size);
+               return new Iterator<MarkupElement>() {
+                       int index = 0;
+
+                       @Override
+                       public boolean hasNext() {
+                               return index < size;
+                       }
+
+                       @Override
+                       public MarkupElement next() {
+                               return get(index++);
+                       }
+
+                       @Override
+                       public void remove() {
+                               throw new UnsupportedOperationException("Cannot 
remove");
+                       }
+               };
        }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/fb0460b3/wicket-core/src/test/java/org/apache/wicket/markup/MarkupFragmentTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/MarkupFragmentTest.java 
b/wicket-core/src/test/java/org/apache/wicket/markup/MarkupFragmentTest.java
index e0b59ef..e65a866 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/MarkupFragmentTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/MarkupFragmentTest.java
@@ -18,12 +18,22 @@ package org.apache.wicket.markup;
 
 import org.apache.wicket.util.tester.WicketTestCase;
 import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
 
 /**
- * 
+ * Tests for {@link MarkupFragment}
  */
 public class MarkupFragmentTest extends WicketTestCase
 {
+       private static final Logger LOG = 
LoggerFactory.getLogger(MarkupFragmentTest.class);
+
        /** */
        @Test
        public void iteratorSameAsSizeForMarkup()
@@ -94,4 +104,32 @@ public class MarkupFragmentTest extends WicketTestCase
 
                assertEquals(1, fragment.size());
        }
+
+       /**
+        * https://issues.apache.org/jira/browse/WICKET-6339
+        */
+       @Test
+       public void iteratorMustBeSameAsGetByIndex() {
+               // test markup
+               Markup markup = 
Markup.of("<html><body><wicket:panel><wicket:container wicket:id='content'><a 
wicket:id='link' 
href='https://www.google.de'>Test</a></wicket:container></wicket:panel></body></html>");
+
+               IMarkupFragment firstLevelFragment = markup.find("content");
+               LOG.debug("First level fragment: '{}' with size '{}'", 
firstLevelFragment, firstLevelFragment.size());
+
+               // construct a new fragment for the link-Tag as sub-fragment of 
firstLevelFragment
+               MarkupFragment secondLevelFragment = new 
MarkupFragment(firstLevelFragment, 1);
+               LOG.debug("Second level fragment: '{}' with size '{}'", 
secondLevelFragment, secondLevelFragment.size());
+
+               List<MarkupElement> iteratorElements = new 
ArrayList<>(secondLevelFragment.size());
+               for (MarkupElement markupElement : secondLevelFragment) {
+                       iteratorElements.add(markupElement);
+               }
+               List<MarkupElement> getElements = new 
ArrayList<>(secondLevelFragment.size());
+               for (int i = 0; i < secondLevelFragment.size(); i++) {
+                       getElements.add(secondLevelFragment.get(i));
+               }
+
+               // elements from iterator should match the ones from the get(i) 
method
+               assertThat(getElements, is(equalTo(iteratorElements)));
+       }
 }

Reply via email to