static void testC()

in misc/ScreenBufferTest.cc [490:559]


static void testC(int argc, char *argv[]) {
    if (!strcmp(argv[1], "C")) {
        startChildProcess(L"C:parent");
        return;
    }

    if (!strcmp(argv[1], "C:parent")) {
        startChildInSameConsole(L"C:child");
        writeTest("<-- origBuffer -->");
        g_prefix = "parent: ";

        // At time=4, open newBuffer1.
        Sleep(4000);
        trace("%s---- t=4", g_prefix);
        const HANDLE newBuffer1 = openConout();

        // At time=8, open newBuffer2, and close newBuffer1.
        Sleep(4000);
        trace("%s---- t=8", g_prefix);
        const HANDLE newBuffer2 = openConout();
        closeHandle(newBuffer1);

        // At time=25, cleanup of newBuffer2.
        Sleep(17000);
        trace("%s---- t=25", g_prefix);
        closeHandle(newBuffer2);

        Sleep(240000);
        return;
    }

    if (!strcmp(argv[1], "C:child")) {
        g_prefix = "child: ";

        // At time=2, create newBuffer1 and activate it.
        Sleep(2000);
        trace("%s---- t=2", g_prefix);
        const HANDLE newBuffer1 = createBuffer();
        setConsoleActiveScreenBuffer(newBuffer1);
        writeTest(newBuffer1, "<-- newBuffer1 -->");

        // At time=6, create newBuffer2 and activate it.
        Sleep(4000);
        trace("%s---- t=6", g_prefix);
        const HANDLE newBuffer2 = createBuffer();
        setConsoleActiveScreenBuffer(newBuffer2);
        writeTest(newBuffer2, "<-- newBuffer2 -->");

        // At time=10, attempt to switch back to newBuffer1.  The parent process
        // has opened and closed its handle to newBuffer1, so does it still exist?
        Sleep(4000);
        trace("%s---- t=10", g_prefix);
        setConsoleActiveScreenBuffer(newBuffer1);
        writeTest(newBuffer1, "write to newBuffer1: TEST PASSED!");

        // At time=25, cleanup of newBuffer2.
        Sleep(15000);
        trace("%s---- t=25", g_prefix);
        closeHandle(newBuffer2);

        // At time=35, cleanup of newBuffer1.  The console should switch to the
        // initial buffer again.
        Sleep(10000);
        trace("%s---- t=35", g_prefix);
        closeHandle(newBuffer1);

        Sleep(240000);
        return;
    }
}