terminal/src/host/ft_host/API_ModeTests.cpp
Michael Niksa 31b27407ac Merged PR 3490896: [Git2Git] Merged PR 3487659: [Git2Git] Merged PR 3487638: inbox: merge github changes up to 122f0de3
[Git2Git] Merged PR 3487659: [Git2Git] Merged PR 3487638: inbox: merge github changes up to 122f0de3

[Git2Git] Merged PR 3487638: inbox: merge github changes up to 122f0de3

Related work items: #22702360, #22702370, #22702376 Retrieved from https://microsoft.visualstudio.com OpenConsole Dart inbox 311175250f

Related work items: #22702360, #22702370, #22702376 Retrieved from https://microsoft.visualstudio.com os OS official/rs_onecore_dep_uxp aa5182a2b1dceefb61e09aad392aac0a56970d80

Related work items: #22702360, #22702370, #22702376
2019-07-10 19:38:26 +00:00

168 lines
6.4 KiB
C++

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
#include "precomp.h"
using namespace WEX::Logging;
// This class is intended to test:
// GetConsoleMode
// SetConsoleMode
class ModeTests
{
BEGIN_TEST_CLASS(ModeTests)
END_TEST_CLASS()
TEST_METHOD_SETUP(TestSetup);
TEST_METHOD_CLEANUP(TestCleanup);
TEST_METHOD(TestGetConsoleModeInvalid);
TEST_METHOD(TestSetConsoleModeInvalid);
TEST_METHOD(TestConsoleModeInputScenario);
TEST_METHOD(TestConsoleModeScreenBufferScenario);
TEST_METHOD(TestGetConsoleDisplayMode);
TEST_METHOD(TestGetConsoleProcessList);
};
bool ModeTests::TestSetup()
{
return Common::TestBufferSetup();
}
bool ModeTests::TestCleanup()
{
return Common::TestBufferCleanup();
}
void ModeTests::TestGetConsoleModeInvalid()
{
BEGIN_TEST_METHOD_PROPERTIES()
TEST_METHOD_PROPERTY(L"IsPerfTest", L"true")
END_TEST_METHOD_PROPERTIES()
DWORD dwConsoleMode = (DWORD)-1;
VERIFY_WIN32_BOOL_FAILED(GetConsoleMode(INVALID_HANDLE_VALUE, &dwConsoleMode));
VERIFY_ARE_EQUAL(dwConsoleMode, (DWORD)-1);
dwConsoleMode = (DWORD)-1;
VERIFY_WIN32_BOOL_FAILED(GetConsoleMode(nullptr, &dwConsoleMode));
VERIFY_ARE_EQUAL(dwConsoleMode, (DWORD)-1);
}
void ModeTests::TestSetConsoleModeInvalid()
{
VERIFY_WIN32_BOOL_FAILED(SetConsoleMode(INVALID_HANDLE_VALUE, 0));
VERIFY_WIN32_BOOL_FAILED(SetConsoleMode(nullptr, 0));
HANDLE hConsoleInput = GetStdInputHandle();
VERIFY_WIN32_BOOL_FAILED(SetConsoleMode(hConsoleInput, 0xFFFFFFFF), L"Can't set invalid input flags");
VERIFY_WIN32_BOOL_FAILED(SetConsoleMode(hConsoleInput, ENABLE_ECHO_INPUT),
L"Can't set ENABLE_ECHO_INPUT without ENABLE_LINE_INPUT on input handle");
VERIFY_WIN32_BOOL_FAILED(SetConsoleMode(Common::_hConsole, 0xFFFFFFFF), L"Can't set invalid output flags");
}
void ModeTests::TestConsoleModeInputScenario()
{
HANDLE hConsoleInput = GetStdInputHandle();
const DWORD dwInputModeToSet = ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_WINDOW_INPUT;
VERIFY_WIN32_BOOL_SUCCEEDED(SetConsoleMode(hConsoleInput, dwInputModeToSet), L"Set valid flags for input");
DWORD dwInputMode = (DWORD)-1;
VERIFY_WIN32_BOOL_SUCCEEDED(GetConsoleMode(hConsoleInput, &dwInputMode), L"Get recently set flags for input");
VERIFY_ARE_EQUAL(dwInputMode, dwInputModeToSet, L"Make sure SetConsoleMode worked for input");
}
void ModeTests::TestConsoleModeScreenBufferScenario()
{
const DWORD dwOutputModeToSet = ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT;
VERIFY_WIN32_BOOL_SUCCEEDED(SetConsoleMode(Common::_hConsole, dwOutputModeToSet),
L"Set initial output flags");
DWORD dwOutputMode = (DWORD)-1;
VERIFY_WIN32_BOOL_SUCCEEDED(GetConsoleMode(Common::_hConsole, &dwOutputMode), L"Get new output flags");
VERIFY_ARE_EQUAL(dwOutputMode, dwOutputModeToSet, L"Make sure output flags applied appropriately");
VERIFY_WIN32_BOOL_SUCCEEDED(SetConsoleMode(Common::_hConsole, 0), L"Set zero output flags");
dwOutputMode = (DWORD)-1;
VERIFY_WIN32_BOOL_SUCCEEDED(GetConsoleMode(Common::_hConsole, &dwOutputMode), L"Get zero output flags");
VERIFY_ARE_EQUAL(dwOutputMode, (DWORD)0, L"Verify able to set zero output flags");
}
void ModeTests::TestGetConsoleDisplayMode()
{
DWORD dwMode = 0;
SetLastError(0);
VERIFY_WIN32_BOOL_SUCCEEDED(GetConsoleDisplayMode(&dwMode));
VERIFY_ARE_EQUAL(0u, GetLastError());
}
void ModeTests::TestGetConsoleProcessList()
{
// Set last error to 0.
Log::Comment(L"Test null and 0");
{
SetLastError(0);
VERIFY_ARE_EQUAL(0ul, GetConsoleProcessList(nullptr, 0), L"Return value should be 0");
VERIFY_ARE_EQUAL(static_cast<DWORD>(ERROR_INVALID_PARAMETER), GetLastError(), L"Last error should be invalid parameter.");
}
Log::Comment(L"Test null and a valid length");
{
SetLastError(0);
VERIFY_ARE_EQUAL(0ul, GetConsoleProcessList(nullptr, 10), L"Return value should be 0");
VERIFY_ARE_EQUAL(static_cast<DWORD>(ERROR_INVALID_PARAMETER), GetLastError(), L"Last error should be invalid parameter.");
}
Log::Comment(L"Test valid buffer and a zero length");
{
DWORD one = 0;
const DWORD oneOriginal = one;
SetLastError(0);
VERIFY_ARE_EQUAL(0ul, GetConsoleProcessList(&one, 0), L"Return value should be 0");
VERIFY_ARE_EQUAL(static_cast<DWORD>(ERROR_INVALID_PARAMETER), GetLastError(), L"Last error should be invalid parameter.");
VERIFY_ARE_EQUAL(oneOriginal, one, L"Buffer should not have been touched.");
}
Log::Comment(L"Test a valid buffer of length 1");
{
DWORD one = 0;
const DWORD oneOriginal = one;
SetLastError(0);
VERIFY_ARE_EQUAL(2ul, GetConsoleProcessList(&one, 1), L"Return value should be 2 because there are at least two processes attached during tests.");
VERIFY_ARE_EQUAL(static_cast<DWORD>(ERROR_SUCCESS), GetLastError(), L"Last error should be success.");
VERIFY_ARE_EQUAL(oneOriginal, one, L"Buffer should not have been touched.");
}
Log::Comment(L"Test a valid buffer of length 2");
{
DWORD two[2] = { 0 };
SetLastError(0);
VERIFY_ARE_EQUAL(2ul, GetConsoleProcessList(two, 2), L"Return value should be 2 because there are at least two processes attached during tests.");
VERIFY_ARE_EQUAL(static_cast<DWORD>(ERROR_SUCCESS), GetLastError(), L"Last error should be success.");
VERIFY_ARE_NOT_EQUAL(0ul, two[0], L"Slot 0 was filled");
VERIFY_ARE_NOT_EQUAL(0ul, two[1], L"Slot 1 was filled.");
}
Log::Comment(L"Test a valid buffer of length 5");
{
DWORD five[5] = { 0 };
SetLastError(0);
VERIFY_ARE_EQUAL(2ul, GetConsoleProcessList(five, 2), L"Return value should be 2 because there are at least two processes attached during tests.");
VERIFY_ARE_EQUAL(static_cast<DWORD>(ERROR_SUCCESS), GetLastError(), L"Last error should be success.");
VERIFY_ARE_NOT_EQUAL(0ul, five[0], L"Slot 0 was filled");
VERIFY_ARE_NOT_EQUAL(0ul, five[1], L"Slot 1 was filled.");
VERIFY_ARE_EQUAL(0ul, five[2], L"Slot 2 is still empty.");
VERIFY_ARE_EQUAL(0ul, five[3], L"Slot 3 is still empty.");
VERIFY_ARE_EQUAL(0ul, five[4], L"Slot 4 is still empty.");
}
}