mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-12 14:39:49 +00:00
8166446: SingletonIterator.forEachRemaining doesn't advance before calling action
Reviewed-by: martin
This commit is contained in:
parent
53224e0782
commit
9877170d02
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -4699,8 +4699,8 @@ public class Collections {
|
||||
public void forEachRemaining(Consumer<? super E> action) {
|
||||
Objects.requireNonNull(action);
|
||||
if (hasNext) {
|
||||
action.accept(e);
|
||||
hasNext = false;
|
||||
action.accept(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -23,6 +23,7 @@
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8024500 8166446
|
||||
* @run testng SingletonIterator
|
||||
*/
|
||||
|
||||
@ -38,6 +39,15 @@ import static org.testng.Assert.fail;
|
||||
|
||||
@Test(groups = "unit")
|
||||
public class SingletonIterator {
|
||||
static void assertIteratorExhausted(Iterator<?> it) {
|
||||
assertFalse(it.hasNext());
|
||||
try {
|
||||
it.next();
|
||||
fail("should have thrown NoSuchElementException");
|
||||
} catch (NoSuchElementException success) { }
|
||||
it.forEachRemaining(e -> { throw new AssertionError("action called incorrectly"); });
|
||||
}
|
||||
|
||||
public void testForEachRemaining() {
|
||||
Iterator<String> it = Collections.singleton("TheOne").iterator();
|
||||
AtomicInteger cnt = new AtomicInteger(0);
|
||||
@ -48,13 +58,18 @@ public class SingletonIterator {
|
||||
});
|
||||
|
||||
assertEquals(cnt.get(), 1);
|
||||
assertFalse(it.hasNext());
|
||||
assertIteratorExhausted(it);
|
||||
}
|
||||
|
||||
static class SingletonException extends RuntimeException { }
|
||||
|
||||
public void testThrowFromForEachRemaining() {
|
||||
Iterator<String> it = Collections.singleton("TheOne").iterator();
|
||||
|
||||
try {
|
||||
String str = it.next();
|
||||
fail("Should throw NoSuchElementException at end");
|
||||
} catch (NoSuchElementException ex) {
|
||||
// ignore;
|
||||
}
|
||||
it.forEachRemaining(s -> { throw new SingletonException(); });
|
||||
} catch (SingletonException ignore) { }
|
||||
|
||||
assertIteratorExhausted(it);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user