summaryrefslogtreecommitdiffstats
path: root/src/test/java/com/beust/jcommander/internal/DefaultConsoleTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/beust/jcommander/internal/DefaultConsoleTest.java')
-rw-r--r--src/test/java/com/beust/jcommander/internal/DefaultConsoleTest.java64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/test/java/com/beust/jcommander/internal/DefaultConsoleTest.java b/src/test/java/com/beust/jcommander/internal/DefaultConsoleTest.java
new file mode 100644
index 0000000..e101439
--- /dev/null
+++ b/src/test/java/com/beust/jcommander/internal/DefaultConsoleTest.java
@@ -0,0 +1,64 @@
+package com.beust.jcommander.internal;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+@Test
+public class DefaultConsoleTest {
+ public void readPasswordCanBeCalledMultipleTimes() {
+ final InputStream inBackup = System.in;
+ try {
+ final StringInputStream in = new StringInputStream();
+ System.setIn(in);
+ final Console console = new DefaultConsole();
+
+ in.setData("password1\n");
+ char[] password = console.readPassword(false);
+ Assert.assertEquals(password, "password1".toCharArray());
+ Assert.assertFalse(in.isClosedCalled(), "System.in stream shouldn't be closed");
+
+ in.setData("password2\n");
+ password = console.readPassword(false);
+ Assert.assertEquals(password, "password2".toCharArray());
+ Assert.assertFalse(in.isClosedCalled(), "System.in stream shouldn't be closed");
+ } finally {
+ System.setIn(inBackup);
+ }
+ }
+
+ private static class StringInputStream extends InputStream {
+ private byte[] data = new byte[0];
+ private int offset = 0;
+ private boolean closedCalled;
+
+ StringInputStream() {
+ super();
+ }
+
+ void setData(final String strData) {
+ data = strData.getBytes();
+ offset = 0;
+ }
+
+ boolean isClosedCalled() {
+ return closedCalled;
+ }
+
+ @Override
+ public int read() throws IOException {
+ if (offset >= data.length) {
+ return -1;
+ }
+ return 0xFFFF & data[offset++];
+ }
+
+ @Override
+ public void close() throws IOException {
+ closedCalled = true;
+ super.close();
+ }
+ }
+}