This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-collections.git
commit 7ab92fa0c5ed356b4f395320724c096a063425b4 Author: Gary D. Gregory <[email protected]> AuthorDate: Wed Aug 20 06:51:33 2025 -0400 Sort members --- .../collections4/iterators/IteratorChainTest.java | 132 ++++++++++----------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/src/test/java/org/apache/commons/collections4/iterators/IteratorChainTest.java b/src/test/java/org/apache/commons/collections4/iterators/IteratorChainTest.java index 8d642e774..4ada92c66 100644 --- a/src/test/java/org/apache/commons/collections4/iterators/IteratorChainTest.java +++ b/src/test/java/org/apache/commons/collections4/iterators/IteratorChainTest.java @@ -150,6 +150,51 @@ public class IteratorChainTest extends AbstractIteratorTest<String> { }); } + @Test + public void testChainOfChains() { + final Iterator<String> iteratorChain1 = new IteratorChain<>(list1.iterator(), list2.iterator()); + final Iterator<String> iteratorChain2 = new IteratorChain<>(list3.iterator(), list4.iterator()); + final Iterator<String> iteratorChainOfChains = new IteratorChain<>(iteratorChain1, iteratorChain2); + + for (final String testValue : testArray1234) { + final String iterValue = (String) iteratorChainOfChains.next(); + assertEquals(testValue, iterValue, "Iteration value is correct"); + } + + assertFalse(iteratorChainOfChains.hasNext(), "Iterator should now be empty"); + assertThrows(NoSuchElementException.class, iteratorChainOfChains::next, "NoSuchElementException must be thrown"); + } + + @Test + public void testChainOfUnmodifiableChains() { + final Iterator<String> iteratorChain1 = new IteratorChain<>(list1.iterator(), list2.iterator()); + final Iterator<String> unmodifiableChain1 = IteratorUtils.unmodifiableIterator(iteratorChain1); + final Iterator<String> iteratorChain2 = new IteratorChain<>(list3.iterator(), list4.iterator()); + final Iterator<String> unmodifiableChain2 = IteratorUtils.unmodifiableIterator(iteratorChain2); + final Iterator<String> iteratorChainOfChains = new IteratorChain<>(unmodifiableChain1, unmodifiableChain2); + + for (final String testValue : testArray1234) { + final String iterValue = (String) iteratorChainOfChains.next(); + assertEquals(testValue, iterValue, "Iteration value is correct"); + } + + assertFalse(iteratorChainOfChains.hasNext(), "Iterator should now be empty"); + assertThrows(NoSuchElementException.class, iteratorChainOfChains::next, "NoSuchElementException must be thrown"); + } + + @Test + public void testChainOfUnmodifiableChainsRetainsUnmodifiableBehaviourOfNestedIterator() { + final Iterator<String> iteratorChain1 = new IteratorChain<>(list1.iterator(), list2.iterator()); + final Iterator<String> unmodifiableChain1 = IteratorUtils.unmodifiableIterator(iteratorChain1); + final Iterator<String> iteratorChain2 = new IteratorChain<>(list3.iterator(), list4.iterator()); + final Iterator<String> unmodifiableChain2 = IteratorUtils.unmodifiableIterator(iteratorChain2); + final Iterator<String> iteratorChainOfChains = new IteratorChain<>(unmodifiableChain1, unmodifiableChain2); + + iteratorChainOfChains.next(); + assertThrows(UnsupportedOperationException.class, iteratorChainOfChains::remove, + "Calling remove must fail when nested iterator is unmodifiable"); + } + @Test void testConstructList() { final List<Iterator<String>> list = new ArrayList<>(); @@ -226,6 +271,27 @@ public class IteratorChainTest extends AbstractIteratorTest<String> { assertThrows(NoSuchElementException.class, iter::next); } + @Test + public void testMultipleChainedIteratorPerformWellCollections722() { + final Map<Integer, List<Integer>> source = new HashMap<>(); + for (int i = 0; i < 50; i++) { + source.put(i, Arrays.asList(1, 2, 3)); + } + + Iterator<Integer> iterator = IteratorUtils.emptyIterator(); + final Set<Entry<Integer, List<Integer>>> entries = source.entrySet(); + for (final Entry<Integer, List<Integer>> entry : entries) { + final Iterator<Integer> next = entry.getValue().iterator(); + iterator = IteratorUtils.chainedIterator(iterator, next); + } + final Iterator<Integer> lastIterator = iterator; + assertTimeoutPreemptively(Duration.ofSeconds(2), () -> { + while (lastIterator.hasNext()) { + lastIterator.next().toString(); + } + }); + } + @Test @Override public void testRemove() { @@ -278,70 +344,4 @@ public class IteratorChainTest extends AbstractIteratorTest<String> { assertEquals(0, list1.size()); assertEquals(1, list2.size()); } - - @Test - public void testChainOfChains() { - final Iterator<String> iteratorChain1 = new IteratorChain<>(list1.iterator(), list2.iterator()); - final Iterator<String> iteratorChain2 = new IteratorChain<>(list3.iterator(), list4.iterator()); - final Iterator<String> iteratorChainOfChains = new IteratorChain<>(iteratorChain1, iteratorChain2); - - for (final String testValue : testArray1234) { - final String iterValue = (String) iteratorChainOfChains.next(); - assertEquals(testValue, iterValue, "Iteration value is correct"); - } - - assertFalse(iteratorChainOfChains.hasNext(), "Iterator should now be empty"); - assertThrows(NoSuchElementException.class, iteratorChainOfChains::next, "NoSuchElementException must be thrown"); - } - - @Test - public void testChainOfUnmodifiableChains() { - final Iterator<String> iteratorChain1 = new IteratorChain<>(list1.iterator(), list2.iterator()); - final Iterator<String> unmodifiableChain1 = IteratorUtils.unmodifiableIterator(iteratorChain1); - final Iterator<String> iteratorChain2 = new IteratorChain<>(list3.iterator(), list4.iterator()); - final Iterator<String> unmodifiableChain2 = IteratorUtils.unmodifiableIterator(iteratorChain2); - final Iterator<String> iteratorChainOfChains = new IteratorChain<>(unmodifiableChain1, unmodifiableChain2); - - for (final String testValue : testArray1234) { - final String iterValue = (String) iteratorChainOfChains.next(); - assertEquals(testValue, iterValue, "Iteration value is correct"); - } - - assertFalse(iteratorChainOfChains.hasNext(), "Iterator should now be empty"); - assertThrows(NoSuchElementException.class, iteratorChainOfChains::next, "NoSuchElementException must be thrown"); - } - - @Test - public void testChainOfUnmodifiableChainsRetainsUnmodifiableBehaviourOfNestedIterator() { - final Iterator<String> iteratorChain1 = new IteratorChain<>(list1.iterator(), list2.iterator()); - final Iterator<String> unmodifiableChain1 = IteratorUtils.unmodifiableIterator(iteratorChain1); - final Iterator<String> iteratorChain2 = new IteratorChain<>(list3.iterator(), list4.iterator()); - final Iterator<String> unmodifiableChain2 = IteratorUtils.unmodifiableIterator(iteratorChain2); - final Iterator<String> iteratorChainOfChains = new IteratorChain<>(unmodifiableChain1, unmodifiableChain2); - - iteratorChainOfChains.next(); - assertThrows(UnsupportedOperationException.class, iteratorChainOfChains::remove, - "Calling remove must fail when nested iterator is unmodifiable"); - } - - @Test - public void testMultipleChainedIteratorPerformWellCollections722() { - final Map<Integer, List<Integer>> source = new HashMap<>(); - for (int i = 0; i < 50; i++) { - source.put(i, Arrays.asList(1, 2, 3)); - } - - Iterator<Integer> iterator = IteratorUtils.emptyIterator(); - final Set<Entry<Integer, List<Integer>>> entries = source.entrySet(); - for (final Entry<Integer, List<Integer>> entry : entries) { - final Iterator<Integer> next = entry.getValue().iterator(); - iterator = IteratorUtils.chainedIterator(iterator, next); - } - final Iterator<Integer> lastIterator = iterator; - assertTimeoutPreemptively(Duration.ofSeconds(2), () -> { - while (lastIterator.hasNext()) { - lastIterator.next().toString(); - } - }); - } }
