From d627b357c2a63b003869de40221c02b04d0eb663 Mon Sep 17 00:00:00 2001 From: Julien Massenet Date: Mon, 5 Aug 2013 14:41:43 +0200 Subject: Do not close System.in when using DefaultConsole --- .../jcommander/internal/DefaultConsoleTest.java | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/test/java/com/beust/jcommander/internal/DefaultConsoleTest.java (limited to 'src/test/java/com/beust') 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(); + } + } +} -- cgit v1.2.3