001: package jline;
002:
003: import java.io.ByteArrayInputStream;
004: import java.io.InputStream;
005: import java.io.StringWriter;
006: import java.io.Writer;
007:
008: import junit.framework.TestCase;
009:
010: public class ConsoleReaderTest extends TestCase {
011:
012: public ConsoleReaderTest(String name) {
013: super (name);
014: }
015:
016: protected void setUp() throws Exception {
017: System.setProperty("jline.WindowsTerminal.directConsole",
018: "false");
019: }
020:
021: public void testDeleteAndBackspaceKeymappings() throws Exception {
022: // test only works on Windows
023: if (!(Terminal.getTerminal() instanceof WindowsTerminal))
024: return;
025:
026: ConsoleReader consoleReader = new ConsoleReader();
027: assertNotNull(consoleReader);
028: assertEquals(127, consoleReader
029: .getKeyForAction(ConsoleReader.DELETE_NEXT_CHAR));
030: assertEquals(8, consoleReader
031: .getKeyForAction(ConsoleReader.DELETE_PREV_CHAR));
032: }
033:
034: public void testReadline() throws Exception {
035: ConsoleReader consoleReader = createConsole("Sample String\r\n"
036: .getBytes());
037: assertNotNull(consoleReader);
038: String line = consoleReader.readLine();
039: assertEquals("Sample String", line);
040:
041: }
042:
043: public void testDeleteOnWindowsTerminal() throws Exception {
044: // test only works on Windows
045: if (!(Terminal.getTerminal() instanceof WindowsTerminal))
046: return;
047:
048: char[] characters = new char[] { 'S', 's',
049: WindowsTerminal.SPECIAL_KEY_INDICATOR,
050: WindowsTerminal.LEFT_ARROW_KEY,
051: WindowsTerminal.SPECIAL_KEY_INDICATOR,
052: WindowsTerminal.DELETE_KEY, '\r', 'n' };
053: assertWindowsKeyBehavior("S", characters);
054: }
055:
056: public void testNumpadDeleteOnWindowsTerminal() throws Exception {
057: // test only works on Windows
058: if (!(Terminal.getTerminal() instanceof WindowsTerminal))
059: return;
060:
061: char[] characters = new char[] { 'S', 's',
062: WindowsTerminal.NUMPAD_KEY_INDICATOR,
063: WindowsTerminal.LEFT_ARROW_KEY,
064: WindowsTerminal.NUMPAD_KEY_INDICATOR,
065: WindowsTerminal.DELETE_KEY, '\r', 'n' };
066: assertWindowsKeyBehavior("S", characters);
067: }
068:
069: public void testHomeKeyOnWindowsTerminal() throws Exception {
070: // test only works on Windows
071: if (!(Terminal.getTerminal() instanceof WindowsTerminal))
072: return;
073:
074: char[] characters = new char[] { 'S', 's',
075: WindowsTerminal.SPECIAL_KEY_INDICATOR,
076: WindowsTerminal.HOME_KEY, 'x', '\r', '\n' };
077: assertWindowsKeyBehavior("xSs", characters);
078:
079: }
080:
081: public void testEndKeyOnWindowsTerminal() throws Exception {
082: // test only works on Windows
083: if (!(Terminal.getTerminal() instanceof WindowsTerminal))
084: return;
085:
086: char[] characters = new char[] { 'S', 's',
087: WindowsTerminal.SPECIAL_KEY_INDICATOR,
088: WindowsTerminal.HOME_KEY, 'x',
089: WindowsTerminal.SPECIAL_KEY_INDICATOR,
090: WindowsTerminal.END_KEY, 'j', '\r', '\n' };
091: assertWindowsKeyBehavior("xSsj", characters);
092: }
093:
094: public void testPageUpOnWindowsTerminal() throws Exception {
095: // test only works on Windows
096: if (!(Terminal.getTerminal() instanceof WindowsTerminal))
097: return;
098:
099: char[] characters = new char[] {
100: WindowsTerminal.SPECIAL_KEY_INDICATOR,
101: WindowsTerminal.PAGE_UP_KEY, '\r', '\n' };
102: assertWindowsKeyBehavior("dir", characters);
103: }
104:
105: public void testPageDownOnWindowsTerminal() throws Exception {
106: // test only works on Windows
107: if (!(Terminal.getTerminal() instanceof WindowsTerminal))
108: return;
109:
110: char[] characters = new char[] {
111: WindowsTerminal.SPECIAL_KEY_INDICATOR,
112: WindowsTerminal.PAGE_DOWN_KEY, '\r', '\n' };
113: assertWindowsKeyBehavior("mkdir monkey", characters);
114: }
115:
116: public void testEscapeOnWindowsTerminal() throws Exception {
117: // test only works on Windows
118: if (!(Terminal.getTerminal() instanceof WindowsTerminal))
119: return;
120:
121: char[] characters = new char[] { 's', 's', 's',
122: WindowsTerminal.SPECIAL_KEY_INDICATOR,
123: WindowsTerminal.ESCAPE_KEY, '\r', '\n' };
124: assertWindowsKeyBehavior("", characters);
125: }
126:
127: public void testInsertOnWindowsTerminal() throws Exception {
128: // test only works on Windows
129: if (!(Terminal.getTerminal() instanceof WindowsTerminal))
130: return;
131:
132: char[] characters = new char[] { 'o', 'p', 's',
133: WindowsTerminal.SPECIAL_KEY_INDICATOR,
134: WindowsTerminal.HOME_KEY,
135: WindowsTerminal.SPECIAL_KEY_INDICATOR,
136: WindowsTerminal.INSERT_KEY, 'o', 'o', 'p', 's', '\r',
137: '\n' };
138: assertWindowsKeyBehavior("oops", characters);
139: }
140:
141: private void assertWindowsKeyBehavior(String expected, char[] input)
142: throws Exception {
143: StringBuffer buffer = new StringBuffer();
144: buffer.append(input);
145: ConsoleReader reader = createConsole(buffer.toString()
146: .getBytes());
147: assertNotNull(reader);
148: String line = reader.readLine();
149: assertEquals(expected, line);
150: }
151:
152: private ConsoleReader createConsole(byte[] bytes) throws Exception {
153: InputStream in = new ByteArrayInputStream(bytes);
154: Writer writer = new StringWriter();
155: ConsoleReader reader = new ConsoleReader(in, writer);
156: reader.setHistory(createSeededHistory());
157: return reader;
158: }
159:
160: private History createSeededHistory() {
161: History history = new History();
162: history.addToHistory("dir");
163: history.addToHistory("cd c:\\");
164: history.addToHistory("mkdir monkey");
165: return history;
166: }
167: }
|