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
91
92
93
94
95
96
#include "gate/tests.hpp"
#include "gate/console.hpp"
#include "gate/debugging.h"

using namespace gate;

GATEXX_TEST_UNIT(Console)
{
    GATEXX_TEST_REQUIRE_EQUAL(Console.empty(), false);
    GATEXX_TEST_REQUIRE_NOT_EQUAL(Console.c_impl(), NULL);

    {
        GATEXX_TEST_CHECK_NOTHROW(Console.awaitChar(0));
        char_32_t receivedChar = 0;
        bool_t readSucceeded = false;
        try
        {
            readSucceeded = Console.readChar(receivedChar, 0);
        }
        catch (...)
        {
            readSucceeded = false;
        }
        if (readSucceeded)
        {
            GATEXX_TEST_CHECK(receivedChar == 0);
            GATE_DEBUG_TRACE_VALUE(receivedChar);
        }

        char buffer[32];<--- Shadowed declaration
        try {
            Console.peek(buffer, sizeof(buffer));
        }
        catch (...) {}

        try {
            gate_input_keycode_t k = 0;
            char buffer[16];<--- Shadow variable
            gate::size_t bufferLen = sizeof(buffer);
            Console.readKey(k, receivedChar, 0, buffer, bufferLen);
        }
        catch (...) {}

        try {
            String line;
            Console >> line;
        }
        catch (...) {}

        try {
            String line;
            Console.readLineRaw(line, 0);
        }
        catch (...) {}
    }

    {
        static char buffer[] = "Hello Console!\r\n";
        gate::size_t chars_written;
        GATEXX_TEST_CHECK_NOTHROW(chars_written = Console.write(buffer, sizeof(buffer) - 1));
        GATEXX_TEST_CHECK(chars_written > 0);

        GATEXX_TEST_CHECK_NOTHROW(chars_written = Console.writeBlock(buffer, sizeof(buffer) - 1));
        GATEXX_TEST_CHECK_EQUAL(chars_written, sizeof(buffer) - 1);
        GATEXX_TEST_CHECK_NOTHROW(Console.flush());
    }

    {
        static gate::int32_t const i4 = 1;
        static gate::int32_t const u4 = 2;
        static gate::int32_t const i8 = 3;
        static gate::int32_t const u8 = 4;
        static gate::real64_t const r = 5.5;
        GATEXX_TEST_CHECK_NOTHROW(Console.print(i4));
        GATEXX_TEST_CHECK_NOTHROW(Console.print(u4));
        GATEXX_TEST_CHECK_NOTHROW(Console.print(i8));
        GATEXX_TEST_CHECK_NOTHROW(Console.print(u8));
        GATEXX_TEST_CHECK_NOTHROW(Console.print(r, 0, 2, 0));
        GATEXX_TEST_CHECK_NOTHROW(Console.println("."));
        GATEXX_TEST_CHECK_NOTHROW(Console.flush());
    }

    {
        static String const errMsg = String::createStaticFrom("Console Error Test");
        GATEXX_TEST_CHECK_NOTHROW(Console << "Hello Console!" << strings::NewLine);
        GATEXX_TEST_CHECK_NOTHROW(Console.writeErr(errMsg));
        GATEXX_TEST_CHECK_NOTHROW(Console.writeErr("\r\n", 2));
        GATEXX_TEST_CHECK_NOTHROW(Console.flushErr());
    }

    {
        GATEXX_TEST_CHECK_NOTHROW(Console.getResource(GATE_STREAM_RESOURCE_INPUT));
        GATEXX_TEST_CHECK_NOTHROW(Console.getResource(GATE_STREAM_RESOURCE_OUTPUT));
        GATEXX_TEST_CHECK_NOTHROW(Console.getResource(GATE_STREAM_RESOURCE_ERROR));
    }
}