diff --git a/src/main/java/com/github/zafarkhaja/semver/util/Stream.java b/src/main/java/com/github/zafarkhaja/semver/util/Stream.java index 9c11f05..5b3ed77 100644 --- a/src/main/java/com/github/zafarkhaja/semver/util/Stream.java +++ b/src/main/java/com/github/zafarkhaja/semver/util/Stream.java @@ -115,6 +115,15 @@ public class Stream implements Iterable { throw new UnexpectedElementException(lookahead, expected); } + /** + * Pushes back one element at a time. + */ + public void pushBack() { + if (offset > 0) { + offset--; + } + } + /** * Returns the next element in this stream without consuming it. * diff --git a/src/test/java/com/github/zafarkhaja/semver/util/StreamTest.java b/src/test/java/com/github/zafarkhaja/semver/util/StreamTest.java index 8947733..4a43aaa 100644 --- a/src/test/java/com/github/zafarkhaja/semver/util/StreamTest.java +++ b/src/test/java/com/github/zafarkhaja/semver/util/StreamTest.java @@ -203,4 +203,29 @@ public class StreamTest { } )); } + + @Test + public void shouldPushBackOneElementAtATime() { + Stream stream = new Stream( + new Character[] {'a', 'b', 'c'} + ); + assertEquals(Character.valueOf('a'), stream.consume()); + stream.pushBack(); + assertEquals(Character.valueOf('a'), stream.consume()); + } + + @Test + public void shouldStopPushingBackWhenThereAreNoElements() { + Stream stream = new Stream( + new Character[] {'a', 'b', 'c'} + ); + assertEquals(Character.valueOf('a'), stream.consume()); + assertEquals(Character.valueOf('b'), stream.consume()); + assertEquals(Character.valueOf('c'), stream.consume()); + stream.pushBack(); + stream.pushBack(); + stream.pushBack(); + stream.pushBack(); + assertEquals(Character.valueOf('a'), stream.consume()); + } }