]> git.proxmox.com Git - mirror_edk2.git/blob - ShellPkg/Application/ShellLibTestApp/sa3.c
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9469 6f19259b...
[mirror_edk2.git] / ShellPkg / Application / ShellLibTestApp / sa3.c
1 /** @file
2 This is a simple shell application
3
4 This should be executed with "/Param2 Val1" and "/Param1" as the 2 command line options!
5
6 Copyright (c) 2008-2009, Intel Corporation
7 All rights reserved. This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15 **/
16
17 #include <Uefi.h>
18 #include <Library/UefiApplicationEntryPoint.h>
19 #include <Library/UefiLib.h>
20 #include <Library/ShellLib.h>
21 #include <Library/DebugLib.h>
22 #include <Library/MemoryAllocationLib.h>
23
24 SHELL_PARAM_ITEM ParamList[] = {
25 {L"/Param1", TypeFlag},
26 {L"/Param2", TypeValue},
27 {L"/Param3", TypeDoubleValue},
28 {L"/Param4", TypeMaxValue},
29 {NULL, TypeMax}};
30
31 /**
32 as the real entry point for the application.
33
34 @param[in] ImageHandle The firmware allocated handle for the EFI image.
35 @param[in] SystemTable A pointer to the EFI System Table.
36
37 @retval EFI_SUCCESS The entry point is executed successfully.
38 @retval other Some error occurs when executing this entry point.
39
40 **/
41 EFI_STATUS
42 EFIAPI
43 UefiMain (
44 IN EFI_HANDLE ImageHandle,
45 IN EFI_SYSTEM_TABLE *SystemTable
46 )
47 {
48 EFI_FILE_HANDLE FileHandle;
49 EFI_STATUS Status;
50 CHAR16 FileName[100];
51 // UINTN BufferSize;
52 // UINT64 Position;
53 // UINT8 Buffer[200];
54 EFI_FILE_INFO *pFileInfo;
55 UINT64 Size;
56 BOOLEAN NoFile;
57 EFI_SHELL_FILE_INFO *pShellFileInfo;
58 LIST_ENTRY *List;
59 CONST CHAR16 *Tester;
60
61 FileHandle = NULL;
62 StrCpy(FileName, L"testfile.txt");
63 // Position = 0;
64 pFileInfo = NULL;
65 Size = 0;
66 NoFile = FALSE;
67 pShellFileInfo = NULL;
68 List = NULL;
69
70 // command line param functions
71 Status = ShellCommandLineParse(ParamList, &List, NULL, FALSE);
72 // if you put an invalid parameter you SHOULD hit this assert.
73 ASSERT_EFI_ERROR(Status);
74 if (List) {
75 ASSERT(ShellCommandLineGetFlag(List, L"/Param5") == FALSE);
76 ASSERT(ShellCommandLineGetFlag(List, L"/Param1") != FALSE);
77 ASSERT(StrCmp(ShellCommandLineGetValue(List, L"/Param2"), L"Val1")==0);
78 ASSERT(StrCmp(ShellCommandLineGetRawValue(List, 0), L"SimpleApplication.efi")==0);
79 Tester = ShellCommandLineGetValue(List, L"/Param3");
80 Tester = ShellCommandLineGetValue(List, L"/Param4");
81
82 ShellCommandLineFreeVarList(List);
83 } else {
84 Print(L"param checking skipped.\r\n");
85 }
86
87 // return (EFI_SUCCESS);
88
89
90 ASSERT(ShellGetExecutionBreakFlag() == FALSE);
91 ASSERT(StrCmp(ShellGetCurrentDir(NULL), L"f10:\\") == 0);
92 Print(L"execution break and get cur dir - pass\r\n");
93
94 ShellSetPageBreakMode(TRUE);
95
96 Status = ShellOpenFileByName(FileName,
97 &FileHandle,
98 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
99 0
100 );
101 ASSERT_EFI_ERROR(Status);
102
103 BufferSize = StrSize(FileName);
104 Status = ShellWriteFile(FileHandle, &BufferSize, FileName);
105 ASSERT_EFI_ERROR(Status);
106 Status = ShellGetFilePosition(FileHandle, &Position);
107 ASSERT_EFI_ERROR(Status);
108 ASSERT(Position == 0x1A);
109 Status = ShellSetFilePosition(FileHandle, 0);
110 ASSERT_EFI_ERROR(Status);
111 BufferSize = sizeof(Buffer) * sizeof(Buffer[0]);
112 Status = ShellReadFile(FileHandle, &BufferSize, Buffer);
113 ASSERT_EFI_ERROR(Status);
114 ASSERT(BufferSize == 0x1A);
115 ASSERT(StrCmp((CHAR16*)Buffer, FileName) == 0);
116 pFileInfo = ShellGetFileInfo(FileHandle);
117 ASSERT(pFileInfo != NULL);
118 ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);
119 ASSERT(pFileInfo->FileSize == 0x1A);
120 FreePool(pFileInfo);
121 pFileInfo = NULL;
122 Status = ShellCloseFile(&FileHandle);
123 ASSERT_EFI_ERROR(Status);
124 Print(L"read, write, create, getinfo - pass\r\n");
125
126 Status = ShellOpenFileByName(FileName,
127 &FileHandle,
128 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
129 0
130 );
131 ASSERT_EFI_ERROR(Status);
132 pFileInfo = ShellGetFileInfo(FileHandle);
133 ASSERT(pFileInfo != NULL);
134 pFileInfo->FileSize = 0x20;
135 Status = ShellSetFileInfo(FileHandle, pFileInfo);
136 FreePool(pFileInfo);
137 pFileInfo = NULL;
138 ASSERT_EFI_ERROR(Status);
139 pFileInfo = ShellGetFileInfo(FileHandle);
140 ASSERT(pFileInfo != NULL);
141 ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);
142 ASSERT(pFileInfo->PhysicalSize == 0x20);
143 ASSERT(pFileInfo->FileSize == 0x20);
144 ASSERT((pFileInfo->Attribute&EFI_FILE_DIRECTORY)==0);
145 FreePool(pFileInfo);
146 Status = ShellGetFileSize(FileHandle, &Size);
147 ASSERT(Size == 0x20);
148 ASSERT_EFI_ERROR(Status);
149 Status = ShellCloseFile(&FileHandle);
150 ASSERT_EFI_ERROR(Status);
151 Print(L"setinfo and change size, getsize - pass\r\n");
152
153 Status = ShellOpenFileByName(FileName,
154 &FileHandle,
155 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
156 0
157 );
158 ASSERT_EFI_ERROR(Status);
159
160 pFileInfo = ShellGetFileInfo(FileHandle);
161 ASSERT(pFileInfo != NULL);
162 ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);
163 ASSERT(pFileInfo->PhysicalSize == 0x20);
164 ASSERT(pFileInfo->FileSize == 0x20);
165 ASSERT((pFileInfo->Attribute&EFI_FILE_DIRECTORY)==0);
166 FreePool(pFileInfo);
167 pFileInfo = NULL;
168 Status = ShellDeleteFile(&FileHandle);
169 ASSERT_EFI_ERROR(Status);
170 Print(L"reopen file - pass\r\n");
171
172 Status = ShellOpenFileByName(FileName,
173 &FileHandle,
174 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
175 0
176 );
177 ASSERT_EFI_ERROR(Status);
178 pFileInfo = ShellGetFileInfo(FileHandle);
179 ASSERT(pFileInfo != NULL);
180 ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);
181 ASSERT(pFileInfo->PhysicalSize == 0x0);
182 ASSERT(pFileInfo->FileSize == 0x0);
183 ASSERT((pFileInfo->Attribute&EFI_FILE_DIRECTORY)==0);
184 FreePool(pFileInfo);
185 Status = ShellDeleteFile(&FileHandle);
186 ASSERT_EFI_ERROR(Status);
187 Print(L"size of empty - pass\r\n");
188
189 Status = ShellOpenFileByName(FileName,
190 &FileHandle,
191 EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
192 0
193 );
194 ASSERT(Status == EFI_NOT_FOUND);
195 ASSERT(FileHandle == NULL);
196
197 Status = ShellCreateDirectory(FileName, &FileHandle);
198 ASSERT_EFI_ERROR(Status);
199 ASSERT(FileHandle != NULL);
200 pFileInfo = ShellGetFileInfo(FileHandle);
201 ASSERT(pFileInfo != NULL);
202 ASSERT(StrCmp(pFileInfo->FileName, FileName) == 0);
203 ASSERT(pFileInfo->Attribute&EFI_FILE_DIRECTORY);
204 Status = ShellDeleteFile(&FileHandle);
205 ASSERT_EFI_ERROR(Status);
206 Print(L"Directory create - pass\r\n");
207
208 // FindFirst and FindNext
209 StrCpy(FileName, L"testDir");
210 Status = ShellCreateDirectory(FileName, &FileHandle);
211 Status = ShellCloseFile(&FileHandle);
212 StrCat(FileName, L"\\File.txt");
213 Status = ShellOpenFileByName(FileName,
214 &FileHandle,
215 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
216 0
217 );
218 ASSERT_EFI_ERROR(Status);
219 Status = ShellCloseFile(&FileHandle);
220 StrCpy(FileName, L"testDir");
221 Status = ShellOpenFileByName(FileName,
222 &FileHandle,
223 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
224 0
225 );
226 ASSERT_EFI_ERROR(Status);
227 Status = ShellFindFirstFile(FileHandle, &pFileInfo);
228 ASSERT_EFI_ERROR(Status);
229 Status = ShellFindNextFile(FileHandle, pFileInfo, &NoFile);
230 ASSERT_EFI_ERROR(Status);
231 ASSERT(NoFile == FALSE);
232 Status = ShellFindNextFile(FileHandle, pFileInfo, &NoFile);
233 ASSERT_EFI_ERROR(Status);
234 ASSERT(NoFile == FALSE);
235 Status = ShellFindNextFile(FileHandle, pFileInfo, &NoFile);
236 ASSERT_EFI_ERROR(Status);
237 ///@todo - why is NoFile never set? limitation of NT32 file system?
238 Status = ShellDeleteFile(&FileHandle);
239 ASSERT(Status == RETURN_WARN_DELETE_FAILURE);
240 Print(L"FindFirst - pass\r\n");
241 Print(L"FindNext - Verify with real EFI system. Cant verify NoFile under NT32\r\n");
242
243 // open and close meta arg
244 Status = ShellOpenFileMetaArg(L"testDir\\*.*", EFI_FILE_MODE_READ, &pShellFileInfo);
245 ASSERT_EFI_ERROR(Status);
246 ASSERT(pShellFileInfo->Status == 0);
247 ASSERT(StrCmp(pShellFileInfo->FileName, L"File.txt") == 0);
248 ASSERT(pShellFileInfo->Handle);
249 ASSERT(pShellFileInfo->Info);
250 ASSERT(pShellFileInfo->Info->FileSize == 0);
251 ASSERT(StrCmp(pShellFileInfo->Info->FileName, L"File.txt") == 0);
252 ASSERT(pShellFileInfo->Info->Attribute == 0);
253
254 Status = ShellCloseFileMetaArg(&pShellFileInfo);
255 ASSERT_EFI_ERROR(Status);
256 Print(L"Open/Close Meta Arg - pass\r\n");
257
258 // now delete that file and that directory
259 StrCat(FileName, L"\\File.txt");
260 Status = ShellOpenFileByName(FileName,
261 &FileHandle,
262 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
263 0
264 );
265 ASSERT_EFI_ERROR(Status);
266 Status = ShellDeleteFile(&FileHandle);
267 StrCpy(FileName, L"testDir");
268 ASSERT_EFI_ERROR(Status);
269 Status = ShellOpenFileByName(FileName,
270 &FileHandle,
271 EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE,
272 0
273 );
274 Status = ShellDeleteFile(&FileHandle);
275 ASSERT_EFI_ERROR(Status);
276
277 // get environment variable
278 // made for testing under nt32
279 ASSERT(StrCmp(ShellGetEnvironmentVariable(L"path"), L".;f10:\\efi\\tools;f10:\\efi\\boot;f10:\\;f9:\\efi\\tools;f9:\\efi\\boot;f9:\\") == 0);
280 Print(L"ShellGetEnvironmentVariable - pass\r\n");
281
282 // set environment variable
283 Status = ShellSetEnvironmentVariable(L"", L"", FALSE);
284 ASSERT(Status == EFI_UNSUPPORTED);
285 Print(L"ShellSetEnvironmentVariable - pass\r\n");
286
287 // ShellExecute
288 Status = ShellExecute(&ImageHandle, L"EmptyApplication.efi", TRUE, NULL, NULL);
289 ASSERT_EFI_ERROR(Status);
290 // the pass printout for this is performed by EmptyApplication
291 Print(L"\r\n");
292
293 // page break mode (done last so we can see the results)
294 // we set this true at the begining of the program
295 // this is enough lines to trigger the page...
296 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");
297 ShellSetPageBreakMode(FALSE);
298 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");
299
300 return EFI_SUCCESS;
301 }
302
303
304 /*
305 done - ShellGetFileInfo
306 done - ShellSetFileInfo
307 done - ShellOpenFileByDevicePath
308 done - ShellOpenFileByName
309 done - ShellCreateDirectory
310 done - ShellReadFile
311 done - ShellWriteFile
312 done - ShellCloseFile
313 done - ShellDeleteFile
314 done - ShellSetFilePosition
315 done - ShellGetFilePosition
316 ???? - ShellFlushFile
317 done - ShellFindFirstFile
318 done - ShellFindNextFile
319 done - ShellGetFileSize
320 done - ShellGetExecutionBreakFlag
321 done - ShellGetEnvironmentVariable
322 done - ShellSetEnvironmentVariable
323 done - ShellExecute
324 done - ShellGetCurrentDir
325 done - ShellSetPageBreakMode
326 done - ShellOpenFileMetaArg
327 done - ShellCloseFileMetaArg
328 done - ShellCommandLineParse
329 done - ShellCommandLineFreeVarList
330 done - ShellCommandLineGetFlag
331 done - ShellCommandLineGetValue
332 done - ShellCommandLineGetRawValue
333 */