1d627b357c2a63b003869de40221c02b04d0eb663Julien Massenetpackage com.beust.jcommander.internal; 2d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet 3d627b357c2a63b003869de40221c02b04d0eb663Julien Massenetimport java.io.IOException; 4d627b357c2a63b003869de40221c02b04d0eb663Julien Massenetimport java.io.InputStream; 5d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet 6d627b357c2a63b003869de40221c02b04d0eb663Julien Massenetimport org.testng.Assert; 7d627b357c2a63b003869de40221c02b04d0eb663Julien Massenetimport org.testng.annotations.Test; 8d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet 9d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet@Test 10d627b357c2a63b003869de40221c02b04d0eb663Julien Massenetpublic class DefaultConsoleTest { 11d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet public void readPasswordCanBeCalledMultipleTimes() { 12d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet final InputStream inBackup = System.in; 13d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet try { 14d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet final StringInputStream in = new StringInputStream(); 15d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet System.setIn(in); 16d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet final Console console = new DefaultConsole(); 17d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet 18d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet in.setData("password1\n"); 19d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet char[] password = console.readPassword(false); 20d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet Assert.assertEquals(password, "password1".toCharArray()); 21d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet Assert.assertFalse(in.isClosedCalled(), "System.in stream shouldn't be closed"); 22d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet 23d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet in.setData("password2\n"); 24d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet password = console.readPassword(false); 25d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet Assert.assertEquals(password, "password2".toCharArray()); 26d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet Assert.assertFalse(in.isClosedCalled(), "System.in stream shouldn't be closed"); 27d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet } finally { 28d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet System.setIn(inBackup); 29d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet } 30d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet } 31d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet 32d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet private static class StringInputStream extends InputStream { 33d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet private byte[] data = new byte[0]; 34d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet private int offset = 0; 35d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet private boolean closedCalled; 36d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet 37d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet StringInputStream() { 38d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet super(); 39d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet } 40d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet 41d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet void setData(final String strData) { 42d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet data = strData.getBytes(); 43d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet offset = 0; 44d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet } 45d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet 46d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet boolean isClosedCalled() { 47d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet return closedCalled; 48d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet } 49d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet 50d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet @Override 51d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet public int read() throws IOException { 52d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet if (offset >= data.length) { 53d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet return -1; 54d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet } 55d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet return 0xFFFF & data[offset++]; 56d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet } 57d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet 58d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet @Override 59d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet public void close() throws IOException { 60d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet closedCalled = true; 61d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet super.close(); 62d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet } 63d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet } 64d627b357c2a63b003869de40221c02b04d0eb663Julien Massenet} 65