ShellPkg: Added MockShellLib

Signed-off-by: Bhavani Subramanian <v-bhavanisu@microsoft.com>
This commit is contained in:
Bhavani Subramanian
2025-01-22 11:26:22 -08:00
committed by mergify[bot]
parent 9c1259b4ed
commit 6ea05b5c95
6 changed files with 537 additions and 1 deletions

View File

@@ -38,7 +38,9 @@
"NetworkPkg/NetworkPkg.dec"
],
# For host based unit tests
"AcceptableDependencies-HOST_APPLICATION":[],
"AcceptableDependencies-HOST_APPLICATION":[
"UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec"
],
# For UEFI shell based apps
"AcceptableDependencies-UEFI_APPLICATION":[],
"IgnoreInf": []

View File

@@ -17,6 +17,7 @@
[Includes]
Include
Test/Mock/Include
[LibraryClasses]
## @libraryclass Provides most Shell APIs. Only available for Shell applications

View File

@@ -0,0 +1,399 @@
/** @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 <PiPei.h>
#include <PiDxe.h>
#include <PiSmm.h>
#include <PiMm.h>
#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

View File

@@ -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);

View File

@@ -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

View File

@@ -0,0 +1,31 @@
## @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]
#
# List of Unit test packages
#
#
# Build HOST_APPLICATION Libraries With GoogleTest
#
ShellPkg/Test/Mock/Library/GoogleTest/MockShellLib/MockShellLib.inf