Skip to content

Commit a86bd6c

Browse files
committed
Add TimestampedObserver.isClosed().
1 parent 0a175dd commit a86bd6c

3 files changed

Lines changed: 18 additions & 0 deletions

File tree

src/changes/changes.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,9 @@ The <action> type attribute can be add,update,fix,remove.
433433
<action dev="ggregory" type="add" due-to="Gary Gregory">
434434
Add IOConsumer.asConsumer().
435435
</action>
436+
<action dev="ggregory" type="add" due-to="Gary Gregory">
437+
Add TimestampedObserver.isClosed().
438+
</action>
436439
<!-- UPDATE -->
437440
<action dev="kinow" type="update" due-to="Dependabot, Gary Gregory">
438441
Bump actions/cache from 2.1.6 to 3.0.7 #307, #337.

src/main/java/org/apache/commons/io/input/TimestampedObserver.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,16 @@ public Duration getOpenToNowDuration() {
8686
return Duration.between(openInstant, Instant.now());
8787
}
8888

89+
/**
90+
* Tests whether {@link #closed()} has been called.
91+
*
92+
* @return whether {@link #closed()} has been called.
93+
* @since 2.12.0
94+
*/
95+
public boolean isClosed() {
96+
return closeInstant != null;
97+
}
98+
8999
@Override
90100
public String toString() {
91101
return "TimestampedObserver [openInstant=" + openInstant + ", closeInstant=" + closeInstant + "]";

src/test/java/org/apache/commons/io/input/TimestampedObserverTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static org.junit.jupiter.api.Assertions.assertNotNull;
2121
import static org.junit.jupiter.api.Assertions.assertNull;
2222
import static org.junit.jupiter.api.Assertions.assertTrue;
23+
import static org.junit.jupiter.api.Assertions.assertFalse;
2324

2425
import java.io.ByteArrayInputStream;
2526
import java.io.IOException;
@@ -39,18 +40,22 @@ public void test() throws IOException, InterruptedException {
3940
// Some OS' clock granularity may be high.
4041
Thread.sleep(20);
4142
final TimestampedObserver timestampedObserver = new TimestampedObserver();
43+
assertFalse(timestampedObserver.isClosed());
4244
// Java 8 instant resolution is not great.
4345
Thread.sleep(20);
4446
// toString() should not blow up before close().
4547
assertNotNull(timestampedObserver.toString());
4648
assertTrue(timestampedObserver.getOpenInstant().isAfter(before));
4749
assertTrue(timestampedObserver.getOpenToNowDuration().toNanos() > 0);
4850
assertNull(timestampedObserver.getCloseInstant());
51+
assertFalse(timestampedObserver.isClosed());
4952
final byte[] buffer = MessageDigestCalculatingInputStreamTest.generateRandomByteStream(IOUtils.DEFAULT_BUFFER_SIZE);
5053
try (ObservableInputStream ois = new ObservableInputStream(new ByteArrayInputStream(buffer), timestampedObserver)) {
5154
assertTrue(timestampedObserver.getOpenInstant().isAfter(before));
5255
assertTrue(timestampedObserver.getOpenToNowDuration().toNanos() > 0);
56+
assertFalse(timestampedObserver.isClosed());
5357
}
58+
assertTrue(timestampedObserver.isClosed());
5459
assertTrue(timestampedObserver.getOpenInstant().isAfter(before));
5560
assertTrue(timestampedObserver.getOpenToNowDuration().toNanos() > 0);
5661
assertTrue(timestampedObserver.getCloseInstant().isAfter(timestampedObserver.getOpenInstant()));

0 commit comments

Comments
 (0)