]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Application/ShellLibTestApp/sa3.c
First (Alpha) release of ShellPkg
[mirror_edk2.git] / ShellPkg / Application / ShellLibTestApp / sa3.c
diff --git a/ShellPkg/Application/ShellLibTestApp/sa3.c b/ShellPkg/Application/ShellLibTestApp/sa3.c
new file mode 100644 (file)
index 0000000..ae677b4
--- /dev/null
@@ -0,0 +1,336 @@
+/** @file\r
+  This is a simple shell application\r
+\r
+  This should be executed with "/Param2 Val1" and "/Param1" as the 2 command line options!\r
+\r
+  Copyright (c) 2008, Intel Corporation                                                         \r
+  All rights reserved. This program and the accompanying materials                          \r
+  are licensed and made available under the terms and conditions of the BSD License         \r
+  which accompanies this distribution.  The full text of the license may be found at        \r
+  http://opensource.org/licenses/bsd-license.php                                            \r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+\r
+**/\r
+\r
+#include <Uefi.h>\r
+#include <Library/UefiApplicationEntryPoint.h>\r
+#include <Library/UefiLib.h>\r
+#include <Library/ShellLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+\r
+SHELL_PARAM_ITEM ParamList[] = {\r
+  {L"/Param1", TypeFlag},\r
+  {L"/Param2", TypeValue},\r
+  {NULL, TypeMax}};\r
+\r
+/**\r
+  as the real entry point for the application.\r
+\r
+  @param[in] ImageHandle    The firmware allocated handle for the EFI image.  \r
+  @param[in] SystemTable    A pointer to the EFI System Table.\r
+  \r
+  @retval EFI_SUCCESS       The entry point is executed successfully.\r
+  @retval other             Some error occurs when executing this entry point.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UefiMain (\r
+  IN EFI_HANDLE        ImageHandle,\r
+  IN EFI_SYSTEM_TABLE  *SystemTable\r
+  )\r
+{\r
+  EFI_FILE_HANDLE     FileHandle;\r
+  EFI_STATUS          Status;\r
+  CHAR16              FileName[100];\r
+  UINTN               BufferSize;\r
+  UINT64              Position;\r
+  UINT8               Buffer[200];\r
+  EFI_FILE_INFO       *pFileInfo;\r
+  UINT64              Size;\r
+  BOOLEAN             NoFile;\r
+  EFI_SHELL_FILE_INFO *pShellFileInfo, *pShellFileInfo2;\r
+  LIST_ENTRY          *List;\r
+  \r
+  FileHandle = NULL;\r
+  StrCpy(FileName, L"testfile.txt");\r
+  Position = 0;\r
+  pFileInfo = NULL;\r
+  Size = 0;\r
+  NoFile = FALSE;\r
+  pShellFileInfo = NULL;\r
+  List = NULL;\r
+\r
+  ASSERT(ShellGetExecutionBreakFlag() == FALSE);\r
+  ASSERT(StrCmp(ShellGetCurrentDir(NULL), L"f8:\\") == 0);\r
+  Print(L"execution break and get cur dir - pass\r\n");\r
+\r
+  ShellSetPageBreakMode(TRUE);\r
+\r
+  Status = ShellOpenFileByName(FileName, \r
+                               &FileHandle, \r
+                               EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, \r
+                               0\r
+                               );\r
+  ASSERT_EFI_ERROR(Status);\r
+\r
+  BufferSize = StrSize(FileName);\r
+  Status = ShellWriteFile(FileHandle, &BufferSize, FileName);\r
+  ASSERT_EFI_ERROR(Status);\r
+  Status = ShellGetFilePosition(FileHandle, &Position);\r
+  ASSERT_EFI_ERROR(Status);\r
+  ASSERT(Position == 0x1A);\r
+  Status = ShellSetFilePosition(FileHandle, 0);\r
+  ASSERT_EFI_ERROR(Status);\r
+  BufferSize = sizeof(Buffer) * sizeof(Buffer[0]);\r
+  Status = ShellReadFile(FileHandle, &BufferSize, Buffer);\r
+  ASSERT_EFI_ERROR(Status);\r
+  ASSERT(BufferSize == 0x1A);\r
+  ASSERT(StrCmp((CHAR16*)Buffer, FileName) == 0);\r
+  pFileInfo = ShellGetFileInfo(FileHandle);\r
+  ASSERT(pFileInfo != NULL);\r
+  ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);\r
+  ASSERT(pFileInfo->FileSize == 0x1A);\r
+  FreePool(pFileInfo);\r
+  pFileInfo = NULL;\r
+  Status = ShellCloseFile(&FileHandle);\r
+  ASSERT(FileHandle == NULL);\r
+  ASSERT_EFI_ERROR(Status);\r
+  Print(L"read, write, create, getinfo - pass\r\n");\r
+\r
+  Status = ShellOpenFileByName(FileName, \r
+                               &FileHandle, \r
+                               EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, \r
+                               0\r
+                               );\r
+  ASSERT_EFI_ERROR(Status);\r
+  pFileInfo = ShellGetFileInfo(FileHandle);\r
+  ASSERT(pFileInfo != NULL);\r
+  pFileInfo->FileSize = 0x20;\r
+  Status = ShellSetFileInfo(FileHandle, pFileInfo);\r
+  FreePool(pFileInfo);\r
+  pFileInfo = NULL; \r
+  ASSERT_EFI_ERROR(Status);\r
+  pFileInfo = ShellGetFileInfo(FileHandle);\r
+  ASSERT(pFileInfo != NULL);\r
+  ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);\r
+  ASSERT(pFileInfo->PhysicalSize == 0x20);\r
+  ASSERT(pFileInfo->FileSize == 0x20);\r
+  ASSERT((pFileInfo->Attribute&EFI_FILE_DIRECTORY)==0);\r
+  FreePool(pFileInfo);\r
+  Status = ShellGetFileSize(FileHandle, &Size);\r
+  ASSERT(Size == 0x20);\r
+  ASSERT_EFI_ERROR(Status);\r
+  Status = ShellCloseFile(&FileHandle);\r
+  ASSERT(FileHandle == NULL);\r
+  ASSERT_EFI_ERROR(Status);\r
+  Print(L"setinfo and change size, getsize - pass\r\n");\r
+  \r
+  Status = ShellOpenFileByName(FileName, \r
+                               &FileHandle, \r
+                               EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, \r
+                               0\r
+                               );\r
+  ASSERT_EFI_ERROR(Status);\r
+\r
+  pFileInfo = ShellGetFileInfo(FileHandle);\r
+  ASSERT(pFileInfo != NULL);\r
+  ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);\r
+  ASSERT(pFileInfo->PhysicalSize == 0x20);\r
+  ASSERT(pFileInfo->FileSize == 0x20);\r
+  ASSERT((pFileInfo->Attribute&EFI_FILE_DIRECTORY)==0);\r
+  FreePool(pFileInfo);\r
+  pFileInfo = NULL;   \r
+  Status = ShellDeleteFile(&FileHandle);\r
+  ASSERT(FileHandle == NULL);\r
+  ASSERT_EFI_ERROR(Status);\r
+  Print(L"reopen file - pass\r\n");\r
+\r
+  Status = ShellOpenFileByName(FileName, \r
+                               &FileHandle, \r
+                               EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, \r
+                               0\r
+                               );\r
+  ASSERT_EFI_ERROR(Status);\r
+  pFileInfo = ShellGetFileInfo(FileHandle);\r
+  ASSERT(pFileInfo != NULL);\r
+  ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);\r
+  ASSERT(pFileInfo->PhysicalSize == 0x0);\r
+  ASSERT(pFileInfo->FileSize == 0x0);\r
+  ASSERT((pFileInfo->Attribute&EFI_FILE_DIRECTORY)==0);\r
+  FreePool(pFileInfo);\r
+  Status = ShellDeleteFile(&FileHandle);\r
+  ASSERT(FileHandle == NULL);\r
+  ASSERT_EFI_ERROR(Status);\r
+  Print(L"size of empty - pass\r\n");\r
+\r
+  Status = ShellOpenFileByName(FileName, \r
+                               &FileHandle, \r
+                               EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, \r
+                               0\r
+                               );\r
+  ASSERT(Status == EFI_NOT_FOUND);\r
+  ASSERT(FileHandle == NULL);\r
+\r
+  Status = ShellCreateDirectory(FileName, &FileHandle);\r
+  ASSERT_EFI_ERROR(Status);\r
+  ASSERT(FileHandle != NULL);\r
+  pFileInfo = ShellGetFileInfo(FileHandle);\r
+  ASSERT(pFileInfo != NULL);\r
+  ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);\r
+  ASSERT(pFileInfo->Attribute&EFI_FILE_DIRECTORY);\r
+  Status = ShellDeleteFile(&FileHandle);\r
+  ASSERT(FileHandle == NULL);\r
+  ASSERT_EFI_ERROR(Status);\r
+  Print(L"Directory create - pass\r\n");\r
+  \r
+  // FindFirst and FindNext\r
+  StrCpy(FileName, L"testDir");\r
+  Status = ShellCreateDirectory(FileName, &FileHandle);\r
+  Status = ShellCloseFile(&FileHandle);\r
+  StrCat(FileName, L"\\File.txt");\r
+  Status = ShellOpenFileByName(FileName, \r
+                               &FileHandle, \r
+                               EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, \r
+                               0\r
+                               );\r
+  ASSERT_EFI_ERROR(Status);\r
+  Status = ShellCloseFile(&FileHandle);\r
+  StrCpy(FileName, L"testDir");\r
+  Status = ShellOpenFileByName(FileName, \r
+                               &FileHandle, \r
+                               EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, \r
+                               0\r
+                               );\r
+  ASSERT_EFI_ERROR(Status);\r
+  Status = ShellFindFirstFile(FileHandle, pFileInfo);\r
+  ASSERT_EFI_ERROR(Status);\r
+  Status = ShellFindNextFile(FileHandle, pFileInfo, &NoFile);\r
+  ASSERT_EFI_ERROR(Status);\r
+  ASSERT(NoFile == FALSE);\r
+  Status = ShellFindNextFile(FileHandle, pFileInfo, &NoFile);\r
+  ASSERT_EFI_ERROR(Status);\r
+  ASSERT(NoFile == FALSE);\r
+  Status = ShellFindNextFile(FileHandle, pFileInfo, &NoFile);\r
+  ASSERT_EFI_ERROR(Status);\r
+  /// @todo - why is NoFile never set? limitation of NT32 file system?\r
+  Status = ShellDeleteFile(&FileHandle);\r
+  ASSERT(FileHandle == NULL);\r
+  ASSERT(Status == RETURN_WARN_DELETE_FAILURE);\r
+  Print(L"FindFirst - pass\r\n");\r
+  Print(L"FindNext - Verify with real EFI system.  Cant verify NoFile under NT32\r\n");\r
+\r
+  // open and close meta arg\r
+  Status = ShellOpenFileMetaArg(L"testDir\\*.*", EFI_FILE_MODE_READ, &pShellFileInfo);\r
+  ASSERT_EFI_ERROR(Status);\r
+  ASSERT(pShellFileInfo->Status == 0);\r
+  ASSERT(StrCmp(pShellFileInfo->FileName, L"File.txt") == 0);\r
+  ASSERT(pShellFileInfo->Handle);\r
+  ASSERT(pShellFileInfo->Info);\r
+  ASSERT(pShellFileInfo->Info->FileSize == 0);\r
+  ASSERT(StrCmp(pShellFileInfo->Info->FileName, L"File.txt") == 0);\r
+  ASSERT(pShellFileInfo->Info->Attribute == 0);\r
+  pShellFileInfo2 = (EFI_SHELL_FILE_INFO*)0x12345678;\r
+  Status = ShellOpenFileMetaArg(L"testDir\\*.*", EFI_FILE_MODE_READ, &pShellFileInfo2);\r
+  ASSERT(pShellFileInfo2 == NULL);\r
+  ASSERT(Status == EFI_UNSUPPORTED);\r
+  Status = ShellCloseFileMetaArg(&pShellFileInfo);\r
+  ASSERT_EFI_ERROR(Status);\r
+  Print(L"Open/Close Meta Arg - pass\r\n");\r
+\r
+  // now delete that file and that directory\r
+  StrCat(FileName, L"\\File.txt");\r
+  Status = ShellOpenFileByName(FileName, \r
+                               &FileHandle, \r
+                               EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, \r
+                               0\r
+                               );\r
+  ASSERT_EFI_ERROR(Status);\r
+  Status = ShellDeleteFile(&FileHandle);\r
+  ASSERT(FileHandle == NULL);\r
+  StrCpy(FileName, L"testDir");\r
+  ASSERT_EFI_ERROR(Status);\r
+  Status = ShellOpenFileByName(FileName, \r
+                               &FileHandle, \r
+                               EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, \r
+                               0\r
+                               );\r
+  Status = ShellDeleteFile(&FileHandle);\r
+  ASSERT(FileHandle == NULL);\r
+  ASSERT_EFI_ERROR(Status);\r
+\r
+  // get environment variable\r
+  // made for testing under nt32\r
+  ASSERT(StrCmp(ShellGetEnvironmentVariable(L"path"), L".;f8:\\efi\\tools;f8:\\efi\\boot;f8:\\;f9:\\efi\\tools;f9:\\efi\\boot;f9:\\") == 0);\r
+  Print(L"ShellGetEnvironmentVariable - pass\r\n");\r
+\r
+  // set environment variable\r
+  Status = ShellSetEnvironmentVariable(L"", L"", FALSE);\r
+  ASSERT(Status == EFI_UNSUPPORTED);\r
+  Print(L"ShellSetEnvironmentVariable - pass\r\n");\r
+\r
+  // ShellExecute\r
+  Status = ShellExecute(&ImageHandle, L"EmptyApplication.efi", TRUE, NULL, NULL);\r
+  ASSERT_EFI_ERROR(Status);\r
+  // the pass printout for this is performed by EmptyApplication\r
+  Print(L"\r\n");\r
+    \r
+  // command line param functions\r
+  Status = ShellCommandLineParse(ParamList, &List, NULL, FALSE);\r
+  // if you put an invalid parameter you SHOULD hit this assert.\r
+  ASSERT_EFI_ERROR(Status);\r
+  if (List) {\r
+    ASSERT(ShellCommandLineGetFlag(List, L"/Param5") == FALSE);\r
+    ASSERT(ShellCommandLineGetFlag(List, L"/Param1") != FALSE);\r
+    ASSERT(StrCmp(ShellCommandLineGetValue(List, L"/Param2"), L"Val1")==0);\r
+    ASSERT(StrCmp(ShellCommandLineGetRawValue(List, 0), L"SimpleApplication")==0);\r
+\r
+    ShellCommandLineFreeVarList(List);\r
+  } else {\r
+    Print(L"param checking skipped.\r\n");\r
+  }\r
+\r
+  // page break mode (done last so we can see the results)\r
+  // we set this true at the begining of the program\r
+  // this is enough lines to trigger the page...\r
+  Print(L"1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\n19\r\n20\r\n21\r\n22\r\n23\r\n24\r\n25\r\n26\r\n27\r\n28\r\n29\r\n30\r\n31\r\n");\r
+  ShellSetPageBreakMode(FALSE);\r
+  Print(L"1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n10\r\n11\r\n12\r\n13\r\n14\r\n15\r\n16\r\n17\r\n18\r\n19\r\n20\r\n21\r\n22\r\n23\r\n24\r\n25\r\n26\r\n27\r\n28\r\n29\r\n30\r\n31\r\n32\r\n33\r\n34\r\n35\r\n36\r\n37\r\n38\r\n39\r\n40\r\n41\r\n42\r\n43\r\n44\r\n45\r\n46\r\n47\r\n48\r\n49\r\n50\r\n51\r\n52\r\n53\r\n54\r\n55\r\n56\r\n57\r\n58\r\n59\r\n60\r\n");\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+\r
+/*\r
+done - ShellGetFileInfo\r
+done - ShellSetFileInfo\r
+done - ShellOpenFileByDevicePath\r
+done - ShellOpenFileByName\r
+done - ShellCreateDirectory\r
+done - ShellReadFile\r
+done - ShellWriteFile\r
+done - ShellCloseFile\r
+done - ShellDeleteFile\r
+done - ShellSetFilePosition\r
+done - ShellGetFilePosition\r
+???? - ShellFlushFile\r
+done - ShellFindFirstFile\r
+done - ShellFindNextFile\r
+done - ShellGetFileSize\r
+done - ShellGetExecutionBreakFlag\r
+done - ShellGetEnvironmentVariable\r
+done - ShellSetEnvironmentVariable\r
+done - ShellExecute\r
+done - ShellGetCurrentDir\r
+done - ShellSetPageBreakMode\r
+done - ShellOpenFileMetaArg\r
+done - ShellCloseFileMetaArg\r
+done - ShellCommandLineParse\r
+done - ShellCommandLineFreeVarList\r
+done - ShellCommandLineGetFlag\r
+done - ShellCommandLineGetValue\r
+done - ShellCommandLineGetRawValue\r
+*/
\ No newline at end of file