installed pty
[VSoRC/.git] / node_modules / node-pty / deps / winpty / misc / BufferResizeTests.cc
diff --git a/node_modules/node-pty/deps/winpty/misc/BufferResizeTests.cc b/node_modules/node-pty/deps/winpty/misc/BufferResizeTests.cc
new file mode 100644 (file)
index 0000000..a5bb074
--- /dev/null
@@ -0,0 +1,90 @@
+#include <windows.h>
+#include <cassert>
+
+#include "TestUtil.cc"
+
+void dumpInfoToTrace() {
+    CONSOLE_SCREEN_BUFFER_INFO info;
+    assert(GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info));
+    trace("win=(%d,%d,%d,%d)",
+        (int)info.srWindow.Left,
+        (int)info.srWindow.Top,
+        (int)info.srWindow.Right,
+        (int)info.srWindow.Bottom);
+    trace("buf=(%d,%d)",
+        (int)info.dwSize.X,
+        (int)info.dwSize.Y);
+    trace("cur=(%d,%d)",
+        (int)info.dwCursorPosition.X,
+        (int)info.dwCursorPosition.Y);
+}
+
+int main(int argc, char *argv[]) {
+    if (argc == 1) {
+        startChildProcess(L"CHILD");
+        return 0;
+    }
+
+    setWindowPos(0, 0, 1, 1);
+
+    if (false) {
+        // Reducing the buffer height can move the window up.
+        setBufferSize(80, 25);
+        setWindowPos(0, 20, 80, 5);
+        Sleep(2000);
+        setBufferSize(80, 10);
+    }
+
+    if (false) {
+        // Reducing the buffer height moves the window up and the buffer
+        // contents up too.
+        setBufferSize(80, 25);
+        setWindowPos(0, 20, 80, 5);
+        setCursorPos(0, 20);
+        printf("TEST1\nTEST2\nTEST3\nTEST4\n");
+        fflush(stdout);
+        Sleep(2000);
+        setBufferSize(80, 10);
+    }
+
+    if (false) {
+        // Reducing the buffer width can move the window left.
+        setBufferSize(80, 25);
+        setWindowPos(40, 0, 40, 25);
+        Sleep(2000);
+        setBufferSize(60, 25);
+    }
+
+    if (false) {
+        // Sometimes the buffer contents are shifted up; sometimes they're
+        // shifted down.  It seems to depend on the cursor position?
+
+        // setBufferSize(80, 25);
+        // setWindowPos(0, 20, 80, 5);
+        // setCursorPos(0, 20);
+        // printf("TESTa\nTESTb\nTESTc\nTESTd\nTESTe");
+        // fflush(stdout);
+        // setCursorPos(0, 0);
+        // printf("TEST1\nTEST2\nTEST3\nTEST4\nTEST5");
+        // fflush(stdout);
+        // setCursorPos(0, 24);
+        // Sleep(5000);
+        // setBufferSize(80, 24);
+
+        setBufferSize(80, 20);
+        setWindowPos(0, 10, 80, 10);
+        setCursorPos(0, 18);
+
+        printf("TEST1\nTEST2");
+        fflush(stdout);
+        setCursorPos(0, 18);
+
+        Sleep(2000);
+        setBufferSize(80, 18);
+    }
+
+    dumpInfoToTrace();
+    Sleep(30000);
+
+    return 0;
+}