summaryrefslogtreecommitdiff
path: root/ShellPkg/Test
diff options
context:
space:
mode:
Diffstat (limited to 'ShellPkg/Test')
-rw-r--r--ShellPkg/Test/Mock/Include/GoogleTest/Library/MockShellCommandLib.h269
-rw-r--r--ShellPkg/Test/Mock/Include/GoogleTest/Library/MockShellLib.h395
-rw-r--r--ShellPkg/Test/Mock/Library/GoogleTest/MockShellCommandLib/MockShellCommandLib.cpp48
-rw-r--r--ShellPkg/Test/Mock/Library/GoogleTest/MockShellCommandLib/MockShellCommandLib.inf34
-rw-r--r--ShellPkg/Test/Mock/Library/GoogleTest/MockShellLib/MockShellLib.cpp69
-rw-r--r--ShellPkg/Test/Mock/Library/GoogleTest/MockShellLib/MockShellLib.inf34
-rw-r--r--ShellPkg/Test/ShellPkgHostTest.dsc29
7 files changed, 878 insertions, 0 deletions
diff --git a/ShellPkg/Test/Mock/Include/GoogleTest/Library/MockShellCommandLib.h b/ShellPkg/Test/Mock/Include/GoogleTest/Library/MockShellCommandLib.h
new file mode 100644
index 0000000..b3ac314
--- /dev/null
+++ b/ShellPkg/Test/Mock/Include/GoogleTest/Library/MockShellCommandLib.h
@@ -0,0 +1,269 @@
+/** @file MockShellCommandLib.h
+ Google Test mocks for ShellCommandLib
+
+ Copyright (c) Microsoft Corporation.
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef MOCK_SHELL_COMMAND_LIB_H_
+#define MOCK_SHELL_COMMAND_LIB_H_
+
+#include <Library/GoogleTestLib.h>
+#include <Library/FunctionMockLib.h>
+extern "C" {
+ #include <Uefi.h>
+ #include <Library/ShellCommandLib.h>
+}
+
+struct MockShellCommandLib {
+ MOCK_INTERFACE_DECLARATION (MockShellCommandLib);
+
+ MOCK_FUNCTION_DECLARATION (
+ RETURN_STATUS,
+ ShellCommandRegisterCommandName,
+ (IN CONST CHAR16 *CommandString,
+ IN SHELL_RUN_COMMAND CommandHandler,
+ IN SHELL_GET_MAN_FILENAME GetManFileName,
+ IN UINT32 ShellMinSupportLevel,
+ IN CONST CHAR16 *ProfileName,
+ IN CONST BOOLEAN CanAffectLE,
+ IN CONST EFI_HII_HANDLE HiiHandle,
+ IN CONST EFI_STRING_ID ManFormatHelp)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ RETURN_STATUS,
+ ShellCommandRunCommandHandler,
+ (IN CONST CHAR16 *CommandString,
+ IN OUT SHELL_STATUS *RetVal,
+ IN OUT BOOLEAN *CanAffectLE OPTIONAL)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CONST CHAR16 *,
+ ShellCommandGetManFileNameHandler,
+ (IN CONST CHAR16 *CommandString)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CONST COMMAND_LIST *,
+ ShellCommandGetCommandList,
+ (IN CONST BOOLEAN Sort)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ RETURN_STATUS,
+ ShellCommandRegisterAlias,
+ (IN CONST CHAR16 *Command,
+ IN CONST CHAR16 *Alias)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CONST ALIAS_LIST *,
+ ShellCommandGetInitAliasList,
+ ()
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ BOOLEAN,
+ ShellCommandIsOnAliasList,
+ (IN CONST CHAR16 *Alias)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ BOOLEAN,
+ ShellCommandIsCommandOnList,
+ (IN CONST CHAR16 *CommandString)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CHAR16 *,
+ ShellCommandGetCommandHelp,
+ (IN CONST CHAR16 *CommandString)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ CommandInit,
+ ()
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ BOOLEAN,
+ ShellCommandGetEchoState,
+ ()
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ VOID,
+ ShellCommandSetEchoState,
+ (IN BOOLEAN State)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ VOID,
+ ShellCommandRegisterExit,
+ (IN BOOLEAN ScriptOnly,
+ IN CONST UINT64 ErrorCode)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ UINT64,
+ ShellCommandGetExitCode,
+ ()
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ BOOLEAN,
+ ShellCommandGetExit,
+ ()
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ BOOLEAN,
+ ShellCommandGetScriptExit,
+ ()
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ SCRIPT_FILE *,
+ ShellCommandGetCurrentScriptFile,
+ ()
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ SCRIPT_FILE *,
+ ShellCommandSetNewScript,
+ (IN SCRIPT_FILE *Script OPTIONAL)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ VOID,
+ DeleteScriptFileStruct,
+ (IN SCRIPT_FILE *Script)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CONST CHAR16 *,
+ ShellCommandGetProfileList,
+ ()
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CHAR16 *,
+ ShellCommandCreateNewMappingName,
+ (IN CONST SHELL_MAPPING_TYPE Type)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellCommandConsistMappingInitialize,
+ (EFI_DEVICE_PATH_PROTOCOL ***Table)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellCommandConsistMappingUnInitialize,
+ (EFI_DEVICE_PATH_PROTOCOL **Table)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CHAR16 *,
+ ShellCommandConsistMappingGenMappingName,
+ (IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
+ IN EFI_DEVICE_PATH_PROTOCOL **Table)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ SHELL_MAP_LIST *,
+ ShellCommandFindMapItem,
+ (IN CONST CHAR16 *MapKey)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellCommandAddMapItemAndUpdatePath,
+ (IN CONST CHAR16 *Name,
+ IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
+ IN CONST UINT64 Flags,
+ IN CONST BOOLEAN Path)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellCommandCreateInitialMappingsAndPaths,
+ ()
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellCommandUpdateMapping,
+ ()
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_FILE_PROTOCOL *,
+ ConvertShellHandleToEfiFileProtocol,
+ (IN CONST SHELL_FILE_HANDLE Handle)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ BOOLEAN,
+ ShellFileHandleRemove,
+ (IN CONST SHELL_FILE_HANDLE Handle)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ SHELL_FILE_HANDLE,
+ ConvertEfiFileProtocolToShellHandle,
+ (IN CONST EFI_FILE_PROTOCOL *Handle,
+ IN CONST CHAR16 *Path)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CONST CHAR16 *,
+ ShellFileHandleGetPath,
+ (IN CONST SHELL_FILE_HANDLE Handle)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ BOOLEAN,
+ ShellFileHandleEof,
+ (IN SHELL_FILE_HANDLE Handle)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ VOID,
+ FreeBufferList,
+ (IN BUFFER_LIST *List)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ VOID,
+ DumpHex,
+ (IN UINTN Indent,
+ IN UINTN Offset,
+ IN UINTN DataSize,
+ IN VOID *UserData)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CHAR16 *,
+ CatSDumpHex,
+ (IN CHAR16 *Buffer,
+ IN UINTN Indent,
+ IN UINTN Offset,
+ IN UINTN DataSize,
+ IN VOID *UserData)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellSortFileList,
+ (IN OUT EFI_SHELL_FILE_INFO **FileList,
+ OUT EFI_SHELL_FILE_INFO **Duplicates OPTIONAL,
+ IN SHELL_SORT_FILE_LIST Order)
+ );
+};
+
+#endif
diff --git a/ShellPkg/Test/Mock/Include/GoogleTest/Library/MockShellLib.h b/ShellPkg/Test/Mock/Include/GoogleTest/Library/MockShellLib.h
new file mode 100644
index 0000000..5a98cf9
--- /dev/null
+++ b/ShellPkg/Test/Mock/Include/GoogleTest/Library/MockShellLib.h
@@ -0,0 +1,395 @@
+/** @file MockShellLib.h
+ Google Test mocks for ShellLib
+
+ Copyright (c) Microsoft Corporation.
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef MOCK_SHELL_LIB_H_
+#define MOCK_SHELL_LIB_H_
+
+#include <Library/GoogleTestLib.h>
+#include <Library/FunctionMockLib.h>
+extern "C" {
+ #include <Uefi.h>
+ #include <Library/ShellLib.h>
+}
+
+struct MockShellLib {
+ MOCK_INTERFACE_DECLARATION (MockShellLib);
+
+ MOCK_FUNCTION_DECLARATION (
+ CHAR16 *,
+ FullyQualifyPath,
+ (IN CONST CHAR16 *Path)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_FILE_INFO *,
+ ShellGetFileInfo,
+ (IN SHELL_FILE_HANDLE FileHandle)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellSetFileInfo,
+ (IN SHELL_FILE_HANDLE FileHandle,
+ IN EFI_FILE_INFO *FileInfo)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellOpenFileByDevicePath,
+ (IN OUT EFI_DEVICE_PATH_PROTOCOL **FilePath,
+ OUT SHELL_FILE_HANDLE *FileHandle,
+ IN UINT64 OpenMode,
+ IN UINT64 Attributes)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellOpenFileByName,
+ (IN CONST CHAR16 *FileName,
+ OUT SHELL_FILE_HANDLE *FileHandle,
+ IN UINT64 OpenMode,
+ IN UINT64 Attributes)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellCreateDirectory,
+ (IN CONST CHAR16 *DirectoryName,
+ OUT SHELL_FILE_HANDLE *FileHandle)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellReadFile,
+ (IN SHELL_FILE_HANDLE FileHandle,
+ IN OUT UINTN *ReadSize,
+ OUT VOID *Buffer)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellWriteFile,
+ (IN SHELL_FILE_HANDLE FileHandle,
+ IN OUT UINTN *BufferSize,
+ IN VOID *Buffer)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellCloseFile,
+ (IN SHELL_FILE_HANDLE *FileHandle)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellDeleteFile,
+ (IN SHELL_FILE_HANDLE *FileHandle)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellSetFilePosition,
+ (IN SHELL_FILE_HANDLE FileHandle,
+ IN UINT64 Position)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellGetFilePosition,
+ (IN SHELL_FILE_HANDLE FileHandle,
+ OUT UINT64 *Position)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellFlushFile,
+ (IN SHELL_FILE_HANDLE FileHandle)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellFindFirstFile,
+ (IN SHELL_FILE_HANDLE DirHandle,
+ OUT EFI_FILE_INFO **Buffer)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellFindNextFile,
+ (IN SHELL_FILE_HANDLE DirHandle,
+ IN OUT EFI_FILE_INFO *Buffer,
+ IN OUT BOOLEAN *NoFile)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellGetFileSize,
+ (IN SHELL_FILE_HANDLE FileHandle,
+ OUT UINT64 *Size)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ BOOLEAN,
+ ShellGetExecutionBreakFlag,
+ ()
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CONST CHAR16 *,
+ ShellGetEnvironmentVariable,
+ (IN CONST CHAR16 *EnvKey)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellSetEnvironmentVariable,
+ (IN CONST CHAR16 *EnvKey,
+ IN CONST CHAR16 *EnvVal,
+ IN BOOLEAN Volatile)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellExecute,
+ (IN EFI_HANDLE *ParentHandle,
+ IN CHAR16 *CommandLine,
+ IN BOOLEAN Output,
+ IN CHAR16 **EnvironmentVariables,
+ OUT EFI_STATUS *Status)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CONST CHAR16 *,
+ ShellGetCurrentDir,
+ (IN CHAR16 *CONST DeviceName OPTIONAL)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ VOID,
+ ShellSetPageBreakMode,
+ (IN BOOLEAN CurrentState)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellOpenFileMetaArg,
+ (IN CHAR16 *Arg,
+ IN UINT64 OpenMode,
+ IN OUT EFI_SHELL_FILE_INFO **ListHead)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellCloseFileMetaArg,
+ (IN OUT EFI_SHELL_FILE_INFO **ListHead)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CHAR16 *,
+ ShellFindFilePath,
+ (IN CONST CHAR16 *FileName)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CHAR16 *,
+ ShellFindFilePathEx,
+ (IN CONST CHAR16 *FileName,
+ IN CONST CHAR16 *FileExtension)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellCommandLineParseEx,
+ (IN CONST SHELL_PARAM_ITEM *CheckList,
+ OUT LIST_ENTRY **CheckPackage,
+ OUT CHAR16 **ProblemParam OPTIONAL,
+ IN BOOLEAN AutoPageBreak,
+ IN BOOLEAN AlwaysAllowNumbers)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ VOID,
+ ShellCommandLineFreeVarList,
+ (IN LIST_ENTRY *CheckPackage)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ BOOLEAN,
+ ShellCommandLineGetFlag,
+ (IN CONST LIST_ENTRY *CONST CheckPackage,
+ IN CONST CHAR16 *CONST KeyString)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CONST CHAR16 *,
+ ShellCommandLineGetValue,
+ (IN CONST LIST_ENTRY *CheckPackage,
+ IN CHAR16 *KeyString)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CONST CHAR16 *,
+ ShellCommandLineGetRawValue,
+ (IN CONST LIST_ENTRY *CONST CheckPackage,
+ IN UINTN Position)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ UINTN,
+ ShellCommandLineGetCount,
+ (IN CONST LIST_ENTRY *CheckPackage)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellCommandLineCheckDuplicate,
+ (IN CONST LIST_ENTRY *CheckPackage,
+ OUT CHAR16 **Param)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellInitialize,
+ ()
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellIsDirectory,
+ (IN CONST CHAR16 *DirName)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellIsFile,
+ (IN CONST CHAR16 *Name)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellIsFileInPath,
+ (IN CONST CHAR16 *Name)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ UINTN,
+ ShellStrToUintn,
+ (IN CONST CHAR16 *String)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ UINTN,
+ ShellHexStrToUintn,
+ (IN CONST CHAR16 *String)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CHAR16 *,
+ StrnCatGrow,
+ (IN OUT CHAR16 **Destination,
+ IN OUT UINTN *CurrentSize,
+ IN CONST CHAR16 *Source,
+ IN UINTN Count)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellCopySearchAndReplace,
+ (IN CONST CHAR16 *SourceString,
+ IN OUT CHAR16 *NewString,
+ IN UINTN NewSize,
+ IN CONST CHAR16 *FindTarget,
+ IN CONST CHAR16 *ReplaceWith,
+ IN CONST BOOLEAN SkipPreCarrot,
+ IN CONST BOOLEAN ParameterReplacing)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ BOOLEAN,
+ ShellIsHexaDecimalDigitCharacter,
+ (IN CHAR16 Char)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ BOOLEAN,
+ ShellIsDecimalDigitCharacter,
+ (IN CHAR16 Char)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellPromptForResponse,
+ (IN SHELL_PROMPT_REQUEST_TYPE Type,
+ IN CHAR16 *Prompt OPTIONAL,
+ IN OUT VOID **Response OPTIONAL)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellPromptForResponseHii,
+ (IN SHELL_PROMPT_REQUEST_TYPE Type,
+ IN CONST EFI_STRING_ID HiiFormatStringId,
+ IN CONST EFI_HII_HANDLE HiiFormatHandle,
+ IN OUT VOID **Response)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ BOOLEAN,
+ ShellIsHexOrDecimalNumber,
+ (IN CONST CHAR16 *String,
+ IN CONST BOOLEAN ForceHex,
+ IN CONST BOOLEAN StopAtSpace)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellConvertStringToUint64,
+ (IN CONST CHAR16 *String,
+ OUT UINT64 *Value,
+ IN CONST BOOLEAN ForceHex,
+ IN CONST BOOLEAN StopAtSpace)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellFileExists,
+ (IN CONST CHAR16 *Name)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ CHAR16 *,
+ ShellFileHandleReturnLine,
+ (IN SHELL_FILE_HANDLE Handle,
+ IN OUT BOOLEAN *Ascii)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellFileHandleReadLine,
+ (IN SHELL_FILE_HANDLE Handle,
+ IN OUT CHAR16 *Buffer,
+ IN OUT UINTN *Size,
+ IN BOOLEAN Truncate,
+ IN OUT BOOLEAN *Ascii)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellDeleteFileByName,
+ (IN CONST CHAR16 *FileName)
+ );
+
+ MOCK_FUNCTION_DECLARATION (
+ EFI_STATUS,
+ ShellPrintHelp,
+ (IN CONST CHAR16 *CommandToGetHelpOn,
+ IN CONST CHAR16 *SectionToGetHelpOn,
+ IN BOOLEAN PrintCommandText)
+ );
+};
+
+#endif
diff --git a/ShellPkg/Test/Mock/Library/GoogleTest/MockShellCommandLib/MockShellCommandLib.cpp b/ShellPkg/Test/Mock/Library/GoogleTest/MockShellCommandLib/MockShellCommandLib.cpp
new file mode 100644
index 0000000..31c498a
--- /dev/null
+++ b/ShellPkg/Test/Mock/Library/GoogleTest/MockShellCommandLib/MockShellCommandLib.cpp
@@ -0,0 +1,48 @@
+/** @file MockShellCommandLib.cpp
+ Google Test mocks for ShellCommandLib
+
+ Copyright (c) Microsoft Corporation.
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <GoogleTest/Library/MockShellCommandLib.h>
+
+MOCK_INTERFACE_DEFINITION (MockShellCommandLib);
+
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandRegisterCommandName, 8, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandRunCommandHandler, 3, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandGetManFileNameHandler, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandGetCommandList, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandRegisterAlias, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandGetInitAliasList, 0, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandIsOnAliasList, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandIsCommandOnList, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandGetCommandHelp, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, CommandInit, 0, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandGetEchoState, 0, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandSetEchoState, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandRegisterExit, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandGetExitCode, 0, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandGetExit, 0, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandGetScriptExit, 0, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandGetCurrentScriptFile, 0, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandSetNewScript, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, DeleteScriptFileStruct, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandGetProfileList, 0, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandCreateNewMappingName, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandConsistMappingInitialize, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandConsistMappingUnInitialize, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandConsistMappingGenMappingName, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandFindMapItem, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandAddMapItemAndUpdatePath, 4, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandCreateInitialMappingsAndPaths, 0, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellCommandUpdateMapping, 0, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ConvertShellHandleToEfiFileProtocol, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellFileHandleRemove, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ConvertEfiFileProtocolToShellHandle, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellFileHandleGetPath, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellFileHandleEof, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, FreeBufferList, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, DumpHex, 4, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, CatSDumpHex, 5, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellCommandLib, ShellSortFileList, 3, EFIAPI);
diff --git a/ShellPkg/Test/Mock/Library/GoogleTest/MockShellCommandLib/MockShellCommandLib.inf b/ShellPkg/Test/Mock/Library/GoogleTest/MockShellCommandLib/MockShellCommandLib.inf
new file mode 100644
index 0000000..de5a410
--- /dev/null
+++ b/ShellPkg/Test/Mock/Library/GoogleTest/MockShellCommandLib/MockShellCommandLib.inf
@@ -0,0 +1,34 @@
+## @file MockShellCommandLib.inf
+# Google Test mocks for ShellCommandLib
+#
+# Copyright (c) Microsoft Corporation.
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = MockShellCommandLib
+ FILE_GUID = 390bea01-510b-51bb-861f-369caef02153
+ MODULE_TYPE = HOST_APPLICATION
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = ShellCommandLib
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+[Sources]
+ MockShellCommandLib.cpp
+
+[Packages]
+ ShellPkg/ShellPkg.dec
+ MdePkg/MdePkg.dec
+ UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec
+
+[LibraryClasses]
+ GoogleTestLib
+
+[BuildOptions]
+ MSFT:*_*_*_CC_FLAGS = /EHs /bigobj
diff --git a/ShellPkg/Test/Mock/Library/GoogleTest/MockShellLib/MockShellLib.cpp b/ShellPkg/Test/Mock/Library/GoogleTest/MockShellLib/MockShellLib.cpp
new file mode 100644
index 0000000..f58967e
--- /dev/null
+++ b/ShellPkg/Test/Mock/Library/GoogleTest/MockShellLib/MockShellLib.cpp
@@ -0,0 +1,69 @@
+/** @file MockShellLib.cpp
+ Google Test mocks for ShellLib
+
+ Copyright (c) Microsoft Corporation.
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <GoogleTest/Library/MockShellLib.h>
+
+//
+// Global Variables that are not const
+//
+EFI_SHELL_PARAMETERS_PROTOCOL *gEfiShellParametersProtocol;
+EFI_SHELL_PROTOCOL *gEfiShellProtocol;
+
+MOCK_INTERFACE_DEFINITION (MockShellLib);
+
+MOCK_FUNCTION_DEFINITION (MockShellLib, FullyQualifyPath, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellGetFileInfo, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellSetFileInfo, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellOpenFileByDevicePath, 4, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellOpenFileByName, 4, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellCreateDirectory, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellReadFile, 3, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellWriteFile, 3, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellCloseFile, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellDeleteFile, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellSetFilePosition, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellGetFilePosition, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellFlushFile, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellFindFirstFile, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellFindNextFile, 3, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellGetFileSize, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellGetExecutionBreakFlag, 0, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellGetEnvironmentVariable, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellSetEnvironmentVariable, 3, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellExecute, 5, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellGetCurrentDir, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellSetPageBreakMode, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellOpenFileMetaArg, 3, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellCloseFileMetaArg, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellFindFilePath, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellFindFilePathEx, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellCommandLineParseEx, 5, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellCommandLineFreeVarList, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellCommandLineGetFlag, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellCommandLineGetValue, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellCommandLineGetRawValue, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellCommandLineGetCount, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellCommandLineCheckDuplicate, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellInitialize, 0, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellIsDirectory, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellIsFile, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellIsFileInPath, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellStrToUintn, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellHexStrToUintn, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, StrnCatGrow, 4, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellCopySearchAndReplace, 7, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellIsHexaDecimalDigitCharacter, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellIsDecimalDigitCharacter, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellPromptForResponse, 3, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellPromptForResponseHii, 4, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellIsHexOrDecimalNumber, 3, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellConvertStringToUint64, 4, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellFileExists, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellFileHandleReturnLine, 2, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellFileHandleReadLine, 5, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellDeleteFileByName, 1, EFIAPI);
+MOCK_FUNCTION_DEFINITION (MockShellLib, ShellPrintHelp, 3, EFIAPI);
diff --git a/ShellPkg/Test/Mock/Library/GoogleTest/MockShellLib/MockShellLib.inf b/ShellPkg/Test/Mock/Library/GoogleTest/MockShellLib/MockShellLib.inf
new file mode 100644
index 0000000..0400e83
--- /dev/null
+++ b/ShellPkg/Test/Mock/Library/GoogleTest/MockShellLib/MockShellLib.inf
@@ -0,0 +1,34 @@
+## @file MockShellLib.inf
+# Google Test mocks for ShellLib
+#
+# Copyright (c) Microsoft Corporation.
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = MockShellLib
+ FILE_GUID = 6014c132-e682-556d-b2d6-afee4fea7cc2
+ MODULE_TYPE = HOST_APPLICATION
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = ShellLib
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+# VALID_ARCHITECTURES = IA32 X64
+#
+
+[Sources]
+ MockShellLib.cpp
+
+[Packages]
+ ShellPkg/ShellPkg.dec
+ MdePkg/MdePkg.dec
+ UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec
+
+[LibraryClasses]
+ GoogleTestLib
+
+[BuildOptions]
+ MSFT:*_*_*_CC_FLAGS = /EHs /bigobj
diff --git a/ShellPkg/Test/ShellPkgHostTest.dsc b/ShellPkg/Test/ShellPkgHostTest.dsc
new file mode 100644
index 0000000..c90f0df
--- /dev/null
+++ b/ShellPkg/Test/ShellPkgHostTest.dsc
@@ -0,0 +1,29 @@
+## @file ShellPkgHostTest.dsc
+#
+# Copyright (c) Microsoft Corporation.
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+# Description
+#
+##
+
+[Defines]
+PLATFORM_NAME = ShellPkgHostTest
+PLATFORM_GUID = DE1A879F-BB19-44D8-A24F-21E79DB2A502
+PLATFORM_VERSION = 0.1
+DSC_SPECIFICATION = 0x00010005
+OUTPUT_DIRECTORY = Build/ShellPkg/HostTest
+SUPPORTED_ARCHITECTURES = IA32|X64|AARCH64
+BUILD_TARGETS = NOOPT
+SKUID_IDENTIFIER = DEFAULT
+
+!include UnitTestFrameworkPkg/UnitTestFrameworkPkgHost.dsc.inc
+
+[LibraryClasses.common.HOST_APPLICATION]
+
+[Components]
+ #
+ # Build HOST_APPLICATION Libraries With GoogleTest
+ #
+ ShellPkg/Test/Mock/Library/GoogleTest/MockShellLib/MockShellLib.inf
+ ShellPkg/Test/Mock/Library/GoogleTest/MockShellCommandLib/MockShellCommandLib.inf