aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty/winpty/misc/BufferResizeTests.cc
blob: a5bb074826f105ba9b256eb7416dc23b4ffd7561 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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;
}