blob: e1014391e962487cc26bb1f0fbd1e481dbda43d1 [file] [log] [blame]
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();
}
}
}