terminal/src/host/ft_host/API_AliasTests.cpp
Dustin Howett a89b66f770 Merged PR 6598109: [Git2Git] Pull Request 6508625: Update TAEF to vPack 10.63 (latest)
A change required significant changes in TAEF published headers. This PR consumes those changes.

Related work items: #20301352
2021-11-09 19:21:35 +00:00

146 lines
5.5 KiB
C++

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
#include "precomp.h"
// This particular block is necessary so we can include both a UNICODE and non-UNICODE version
// of our test supporting function so we can accurately portray and measure both types of text
// and test both versions of the console API.
// 1. Turn on Unicode if it isn't on already (it really should be) and include the headers
#ifndef UNICODE
#define UNICODE
#endif
#ifndef _UNICODE
#define _UNICODE
#endif
#include "API_AliasTestsHelpers.hpp"
// 2. Undefine Unicode and include the header again to get the other version of the functions
#undef UNICODE
#undef _UNICODE
#include "API_AliasTestsHelpers.hpp"
// 3. Finish up by putting Unicode back on for the rest of the code (like it should have been in the first place)
#define UNICODE
#define _UNICODE
// End double include block.
// This class is intended to test:
// GetConsoleAlias
using namespace WEX::TestExecution;
using namespace WEX::Common;
using namespace WEX::Logging;
class AliasTests
{
BEGIN_TEST_CLASS(AliasTests)
END_TEST_CLASS()
BEGIN_TEST_METHOD(TestGetConsoleAlias)
TEST_METHOD_PROPERTY(L"Data:strSource", L"{g}")
TEST_METHOD_PROPERTY(L"Data:strExpectedTarget", L"{cmd.exe /k echo foo}")
TEST_METHOD_PROPERTY(L"Data:strExeName", L"{cmd.exe}")
TEST_METHOD_PROPERTY(L"Data:dwSource", L"{0, 1}")
TEST_METHOD_PROPERTY(L"Data:dwTarget", L"{0, 1, 2, 3, 4, 5, 6}")
TEST_METHOD_PROPERTY(L"Data:dwExeName", L"{0, 1}")
TEST_METHOD_PROPERTY(L"Data:bUnicode", L"{FALSE, TRUE}")
TEST_METHOD_PROPERTY(L"Data:bSetFirst", L"{FALSE, TRUE}")
END_TEST_METHOD()
};
// Caller must free ppsz if not null.
void ConvertWToA(_In_ PCWSTR pwsz,
_Out_ char** ppsz)
{
*ppsz = nullptr;
UINT const cp = CP_ACP;
DWORD const dwBytesNeeded = WideCharToMultiByte(cp, 0, pwsz, -1, nullptr, 0, nullptr, nullptr);
VERIFY_WIN32_BOOL_SUCCEEDED(dwBytesNeeded, L"Verify that WC2MB could detect bytes needed for conversion.");
char* psz = new char[dwBytesNeeded];
VERIFY_IS_NOT_NULL(psz, L"Verify we could allocate necessary bytes for conversion.");
VERIFY_WIN32_BOOL_SUCCEEDED(WideCharToMultiByte(cp, 0, pwsz, -1, psz, dwBytesNeeded, nullptr, nullptr), L"Verify that WC2MB did the conversion successfully.");
*ppsz = psz;
}
void AliasTests::TestGetConsoleAlias()
{
// Retrieve combinatorial parameters.
DWORD dwSource, dwTarget, dwExeName;
bool bUnicode, bSetFirst;
String strSource, strExpectedTarget, strExeName;
VERIFY_SUCCEEDED_RETURN(TestData::TryGetValue(L"strSource", strSource), L"Get source string");
VERIFY_SUCCEEDED_RETURN(TestData::TryGetValue(L"strExpectedTarget", strExpectedTarget), L"Get expected target string");
VERIFY_SUCCEEDED_RETURN(TestData::TryGetValue(L"strExeName", strExeName), L"Get EXE name");
VERIFY_SUCCEEDED_RETURN(TestData::TryGetValue(L"dwSource", dwSource), L"Get source string type");
VERIFY_SUCCEEDED_RETURN(TestData::TryGetValue(L"dwTarget", dwTarget), L"Get target string type");
VERIFY_SUCCEEDED_RETURN(TestData::TryGetValue(L"dwExeName", dwExeName), L"Get EXE Name type");
VERIFY_SUCCEEDED_RETURN(TestData::TryGetValue(L"bUnicode", bUnicode), L"Get whether this test is running in Unicode.");
VERIFY_SUCCEEDED_RETURN(TestData::TryGetValue(L"bSetFirst", bSetFirst), L"Whether we should set this alias before trying to get it.");
Log::Comment(String().Format(L"Source type: %d Target type: %d Exe type: %d Unicode: %d Set First: %d\r\n", dwSource, dwTarget, dwExeName, bUnicode, bSetFirst));
if (bUnicode)
{
TestGetConsoleAliasHelperW((wchar_t*)strSource.GetBuffer(),
(wchar_t*)strExpectedTarget.GetBuffer(),
(wchar_t*)strExeName.GetBuffer(),
dwSource,
dwTarget,
dwExeName,
bUnicode,
bSetFirst);
}
else
{
// If we're not Unicode, we need to convert all the Unicode strings from our test into A strings.
char* szSource = nullptr;
char* szExpectedTarget = nullptr;
char* szExeName = nullptr;
auto cleanupSource = wil::scope_exit([&] {
if (nullptr != szSource)
{
delete[] szSource;
szSource = nullptr;
}
});
auto cleanupExpectedTarget = wil::scope_exit([&] {
if (nullptr != szExpectedTarget)
{
delete[] szExpectedTarget;
szExpectedTarget = nullptr;
}
});
auto cleanupExeName = wil::scope_exit([&] {
if (nullptr != szExeName)
{
delete[] szExeName;
szExeName = nullptr;
}
});
ConvertWToA(strSource, &szSource);
ConvertWToA(strExpectedTarget, &szExpectedTarget);
ConvertWToA(strExeName, &szExeName);
TestGetConsoleAliasHelperA(szSource,
szExpectedTarget,
szExeName,
dwSource,
dwTarget,
dwExeName,
bUnicode,
bSetFirst);
}
}