GP-3938: Several improvements to the Terminal.

This commit is contained in:
Dan
2026-06-23 16:47:41 +00:00
parent d70f969e8e
commit c2d0dd08a3
11 changed files with 509 additions and 419 deletions

View File

@@ -56,6 +56,48 @@ public class TerminalProviderTest extends AbstractGhidraHeadedDebuggerTest {
TerminalService terminalService;
ClipboardService clipboardService;
@Test
public void testDecodeUnicode() throws Exception {
// Two non-supplemental characters
char[] c = new char[] {
0x274c,
0x277c
};
byte[] b = new String(c).getBytes("utf8");
terminalService = addPlugin(tool, TerminalPlugin.class);
clipboardService = addPlugin(tool, ClipboardPlugin.class);
env.showFrontEndTool();
try (Terminal term = terminalService.createNullTerminal(Charset.forName("utf8"), out -> {
out.reset();
})) {
term.injectDisplayOutput(b);
term.injectDisplayOutput("\u001b[1D".getBytes("utf8"));
assertEquals(1, term.getCursorColumn());
}
}
@Test
public void testDecodeUnicode24Bit() throws Exception {
byte[] b = bytes(0xf0, 0x93, 0x90, 0xb3); // A supplemental character
terminalService = addPlugin(tool, TerminalPlugin.class);
clipboardService = addPlugin(tool, ClipboardPlugin.class);
env.showFrontEndTool();
try (Terminal term = terminalService.createNullTerminal(Charset.forName("utf8"), out -> {
out.reset();
})) {
term.injectDisplayOutput(b);
term.injectDisplayOutput(b);
term.injectDisplayOutput("\u001b[1D".getBytes("utf8"));
assertEquals(1, term.getCursorColumn());
}
}
@Test
@SuppressWarnings("resource")
public void testBash() throws Exception {
@@ -80,7 +122,7 @@ public class TerminalProviderTest extends AbstractGhidraHeadedDebuggerTest {
term.addTerminalListener(new TerminalListener() {
@Override
public void resized(short cols, short rows) {
System.err.println("resized: " + cols + "x" + rows);
// System.err.println("resized: " + cols + "x" + rows);
child.setWindowSize(cols, rows);
}
});
@@ -115,7 +157,7 @@ public class TerminalProviderTest extends AbstractGhidraHeadedDebuggerTest {
term.addTerminalListener(new TerminalListener() {
@Override
public void resized(short cols, short rows) {
System.err.println("resized: " + cols + "x" + rows);
// System.err.println("resized: " + cols + "x" + rows);
child.setWindowSize(cols, rows);
}
});
@@ -147,7 +189,7 @@ public class TerminalProviderTest extends AbstractGhidraHeadedDebuggerTest {
term.addTerminalListener(new TerminalListener() {
@Override
public void resized(short cols, short rows) {
System.err.println("resized: " + cols + "x" + rows);
// System.err.println("resized: " + cols + "x" + rows);
child.setWindowSize(cols, rows);
}
});