Repository: wicket Updated Branches: refs/heads/master b24decd2f -> c0cc33aaf
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/c0cc33aa Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/c0cc33aa Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/c0cc33aa Branch: refs/heads/master Commit: c0cc33aaff140d4cff28d8e9e25199b4b129c51c Parents: b24decd 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:46:29 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/c0cc33aa/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/c0cc33aa/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))); + } }
