public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-test][Patch] uefi-sct/SctPkg:Add checkpoint of ReadKeyStrokeEx Toggle state
@ 2018-11-07  6:47 Eric Jin
  2018-11-07 19:59 ` Supreeth Venkatesh
  0 siblings, 1 reply; 3+ messages in thread
From: Eric Jin @ 2018-11-07  6:47 UTC (permalink / raw)
  To: edk2-devel

UEFI drivers which implement the EFI_SIMPLE_TEXT_INPUT_EX protocol
are required to return KeyData.Key and KeyData.KeyState values.
These drivers must always return the most current state of
KeyData.KeyState.KeyShiftState and KeyData.KeyState.KeyToggleState.

The change in spec is "EFI_NOT_READY - There was no keystroke
data available. Current KeyData.KeyState values are exposed."

Cc: Supreeth Venkatesh <supreeth.venkatesh@arm.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Eric Jin <eric.jin@intel.com>
---
 .../Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c |   7 +-
 .../Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h |  12 +-
 .../BlackBoxTest/SimpleTextInputExBBTestFunction.c | 211 ++++++++++++++++++++
 .../BlackBoxTest/SimpleTextInputExBBTestMain.c     |  13 +-
 .../BlackBoxTest/SimpleTextInputExBBTestMain.h     |  22 ++-
 .../Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c |   7 +-
 .../Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h |  12 +-
 .../BlackBoxTest/SimpleTextInputExBBTestFunction.c | 213 ++++++++++++++++++++-
 .../BlackBoxTest/SimpleTextInputExBBTestMain.c     |  11 +-
 .../BlackBoxTest/SimpleTextInputExBBTestMain.h     |  20 +-
 10 files changed, 515 insertions(+), 13 deletions(-)

diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c
index 9cb19f4..ff2d50f 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c
@@ -1,7 +1,7 @@
 /** @file
 
   Copyright 2006 - 2012 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD License
@@ -63,3 +63,8 @@ EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid007 = EFI_TEST_SIMPLETEXTI
 EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid008 = EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_008_GUID;
 
 EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009 = EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_009_GUID;
+
+EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010 = EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID;
+
+EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011 = EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID;
+
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h
index 6c90fca..2a6be48 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h
@@ -1,7 +1,7 @@
 /** @file
 
   Copyright 2006 - 2010 Unified EFI, Inc.<BR>
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD License
@@ -119,3 +119,13 @@ extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid008;
 { 0x534369f7, 0x8399, 0x4353, { 0x94, 0xad, 0xc4, 0x48, 0xfa, 0xda, 0xeb, 0x84 } }
 
 extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009;
+
+#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID \
+{ 0xcf4d54eb, 0x6696, 0x4794, { 0x91, 0x74, 0x59, 0xd, 0x1c, 0x22, 0xa8, 0x67 } }
+
+extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010;
+
+#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID \
+{ 0xf8e8f879, 0xa6d4, 0x4fd3, { 0x8b, 0x8e, 0xba, 0x1d, 0x18, 0xf1, 0x40, 0x71 } }
+
+extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011;
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c
index 153ade0..4850627 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c
@@ -456,6 +456,78 @@ BBTestUnregisterKeyNotifyFunctionManualTest (
 }
 
 
+EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTest (
+  IN EFI_BB_TEST_PROTOCOL       *This,
+  IN VOID                       *ClientInterface,
+  IN EFI_TEST_LEVEL             TestLevel,
+  IN EFI_HANDLE                 SupportHandle
+  )
+{
+  EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib;
+  EFI_STATUS                            Status;
+  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL     *SimpleTextInputEx;
+  
+  EFI_DEVICE_PATH_PROTOCOL             *DevicePath;
+  CHAR16                               *DevicePathStr;
+
+  //
+  // init
+  //
+  SimpleTextInputEx = (EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL*)ClientInterface;
+
+  //
+  // Get the Standard Library Interface
+  //
+  Status = gtBS->HandleProtocol (
+                   SupportHandle,
+                   &gEfiStandardTestLibraryGuid,
+                   (VOID **) &StandardLib
+                   );
+  if (EFI_ERROR(Status)) {
+    return Status;
+  }
+  
+  //
+  // Get Device Path of current Simple_Text_Input_Ex_Protocol
+  // And out put device path or device name
+  //
+  Status = LocateDevicePathFromSimpleTextInputEx (SimpleTextInputEx, &DevicePath, StandardLib);
+  if (Status == EFI_SUCCESS) {
+    DevicePathStr = SctDevicePathToStr (DevicePath);
+    if (DevicePathStr != NULL) {
+      StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nCurrent Device: %s",
+                     DevicePathStr
+                     );
+      Status = gtBS->FreePool (DevicePathStr);
+      if (EFI_ERROR(Status))
+        return Status;
+      DevicePathStr=NULL;
+    }
+  } else {
+    //
+    // Console Splitter/StdErr
+    //
+    StandardLib->RecordMessage (
+                   StandardLib,
+                   EFI_VERBOSE_LEVEL_DEFAULT,
+                   L"\r\nCurrent Device: ConsoleSplitter/TxtIn"
+                   );
+  }
+
+  //
+  //
+  //
+  BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 ( StandardLib, SimpleTextInputEx );
+  
+  return EFI_SUCCESS;
+}
+
+
+
 //
 //Check Points
 //
@@ -1061,3 +1133,142 @@ BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
 
   return EFI_SUCCESS;
 }
+
+EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
+  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
+  )
+{
+  EFI_STATUS            Status;
+  EFI_TEST_ASSERTION    AssertionType;
+  EFI_KEY_DATA          Key;
+  UINT8                 Index;
+
+  EFI_KEY_TOGGLE_STATE  State = EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED;
+
+  EFI_KEY_TOGGLE_STATE  ValidState[] = {
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_NUM_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_CAPS_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE | EFI_NUM_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_NUM_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE |EFI_NUM_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
+                          0
+                          };  
+ 
+  //
+  //Reset the console
+  //
+  Status = SimpleTextInputEx->ReadKeyStrokeEx (
+                                  SimpleTextInputEx, 
+                                  &Key
+                                  );
+  if (EFI_ERROR(Status) && Status != EFI_NOT_READY) {
+    return Status;
+  }
+
+  if ((Key.KeyState.KeyToggleState & EFI_TOGGLE_STATE_VALID) == 0) {
+    return EFI_UNSUPPORTED;
+  }
+
+  //
+  //Set the KEY_STATE_EXPOSED to check the imcomplete keystroke support
+  //
+  Status = SimpleTextInputEx->SetState (
+                                SimpleTextInputEx,
+                                &State
+                                );
+
+  if (Status == EFI_UNSUPPORTED || Status == EFI_DEVICE_ERROR) {
+    StandardLib->RecordAssertion (
+                   StandardLib,
+                   EFI_TEST_ASSERTION_WARNING,
+                   gTestGenericFailureGuid,
+                   L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState - SetState() doesn't return EFI_SUCCESS with EFI_KEY_STATE_EXPOSED",
+                   L"%a:%d, Status = %r\n",
+                   __FILE__,
+                   (UINTN)__LINE__,
+                   Status
+                   );
+    return Status;
+  }
+
+  for (Index=0; ValidState[Index]; Index++) {
+
+    //
+    // Set the valid KeyToggleState
+    //
+    Status = SimpleTextInputEx->SetState (
+                                  SimpleTextInputEx,
+                                  ValidState + Index
+                                  );
+  
+    if (Status != EFI_SUCCESS) {
+      StandardLib->RecordAssertion (
+                     StandardLib,
+                     EFI_TEST_ASSERTION_FAILED,
+                     gTestGenericFailureGuid,
+                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState - SetState() doesn't return EFI_SUCCESS with the valid KeyToggleState",
+                     L"%a:%d, Status = %r, KeyToggleState = %x\n",
+                     __FILE__,
+                     (UINTN)__LINE__,
+                     Status,
+                     ValidState[Index]
+                     );
+      continue;
+    }
+
+    //
+    // Get the KeyToggleState
+    //
+    Status = SimpleTextInputEx->ReadKeyStrokeEx (
+                                  SimpleTextInputEx, 
+                                  &Key
+                                  );
+
+    if (Status != EFI_NOT_READY) {
+      AssertionType = EFI_TEST_ASSERTION_FAILED;
+
+      StandardLib->RecordAssertion (
+                     StandardLib,
+                     AssertionType,
+                     gSimpleTextInputExBBTestFunctionAssertionGuid010,
+                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStrokeEx - ReadKeyStrokeEx() doesn't return EFI_NOT_READY when there is no Key data and EFI_KEY_STATE_EXPOSED is enabled",
+                     L"%a:%d, Status = %r, Index = %d, KeyToggleState = %x\n",
+                     __FILE__,
+                     (UINTN)__LINE__,
+                     Status,
+                     Index,
+                     ValidState[Index]
+                     );
+
+    } else {
+      if (Key.KeyState.KeyToggleState == ValidState[Index] &&
+        (Key.KeyState.KeyShiftState == 0 || Key.KeyState.KeyShiftState == EFI_SHIFT_STATE_VALID) &&
+        Key.Key.ScanCode == 0 && Key.Key.UnicodeChar == 0)
+        AssertionType = EFI_TEST_ASSERTION_PASSED;
+      else
+        AssertionType = EFI_TEST_ASSERTION_FAILED;
+
+
+      StandardLib->RecordAssertion (
+                     StandardLib,
+                     AssertionType,
+                     gSimpleTextInputExBBTestFunctionAssertionGuid011,
+                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStrokeEx - ReadKeyStrokeEx() should get the ValidState with EFI_NOT_READY and other field is zero",
+                     L"%a:%d, Status = %r, Index = %d, KeyToggleState = %x, expect State = %x\n",
+                     __FILE__,
+                     (UINTN)__LINE__,
+                     Status,
+                     Index,
+                     Key.KeyState.KeyToggleState,
+                     ValidState[Index]
+                     );
+
+    }
+  }
+
+  return EFI_SUCCESS;
+}
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c
index fdbc90f..5b71b6a 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c
@@ -1,7 +1,7 @@
 /** @file
 
   Copyright 2006 - 2017 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD License
@@ -106,6 +106,15 @@ EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] = {
   },
 #endif
   {
+    EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107,
+    L"ReadKeyStrokeExFunctionAuto",
+    L"Function Auto test for Simple Text Input Ex Protocol ReadKeyStrokeEx().",
+    EFI_TEST_LEVEL_MINIMAL,
+    gSupportProtocolGuid,
+    EFI_TEST_CASE_AUTO,
+    BBTestReadKeyStrokeExFunctionAutoTest
+  },
+  {
     EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0201,
     L"ReadKeyStrokeExConformance",
     L"Conformance test for Simple Text Input Ex Protocol ReadKeyStrokeEx().",
@@ -151,7 +160,6 @@ BOOLEAN     BeenExecuted;
 //
 
 EFI_STATUS
-EFIAPI
 InitializeSimpleTextInputExBBTest (
   IN EFI_HANDLE                   ImageHandle,
   IN EFI_SYSTEM_TABLE             *SystemTable
@@ -179,7 +187,6 @@ InitializeSimpleTextInputExBBTest (
 
 
 EFI_STATUS
-EFIAPI
 UnloadSimpleTextInputExBBTest (
   IN EFI_HANDLE                   ImageHandle
   )
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h
index cb2160b..8676606 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h
+++ b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h
@@ -1,7 +1,7 @@
 /** @file
 
   Copyright 2006 - 2017 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD License
@@ -57,6 +57,8 @@ Abstract:
 #define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0106 \
 { 0xdbc6e659, 0xb0e0, 0x4471, { 0x94, 0x13, 0x45, 0x1b, 0xdc, 0xe2, 0xad, 0xc7 } }
 
+#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107 \
+{ 0x2c3ca282, 0x5644, 0x41b6, { 0xaf, 0xc9, 0x43, 0x87, 0xf2, 0x53, 0x89, 0xbd } }
 //
 // Entry GUIDs for Conf Test
 //
@@ -86,7 +88,6 @@ typedef enum {
 //
 //
 EFI_STATUS
-EFIAPI
 InitializeSimpleTextInputExBBTest (
   IN EFI_HANDLE                   ImageHandle,
   IN EFI_SYSTEM_TABLE             *SystemTable
@@ -94,7 +95,6 @@ InitializeSimpleTextInputExBBTest (
   
   
 EFI_STATUS
-EFIAPI
 UnloadSimpleTextInputExBBTest (
   IN EFI_HANDLE                   ImageHandle
   );
@@ -155,6 +155,15 @@ BBTestUnregisterKeyNotifyFunctionManualTest (
   IN EFI_TEST_LEVEL             TestLevel,
   IN EFI_HANDLE                 SupportHandle
   );
+
+
+EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTest (
+  IN EFI_BB_TEST_PROTOCOL       *This,
+  IN VOID                       *ClientInterface,
+  IN EFI_TEST_LEVEL             TestLevel,
+  IN EFI_HANDLE                 SupportHandle
+  );
   
   
 EFI_STATUS
@@ -239,6 +248,13 @@ BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
 
 
 EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
+  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
+  );
+
+
+EFI_STATUS
 BBTestReadKeyStrokeExConformanceTestCheckpoint1 (
   IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
   IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c
index b79772c..6876814 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c
@@ -1,7 +1,7 @@
 /** @file
 
   Copyright 2006 - 2015 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD License
@@ -63,3 +63,8 @@ EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid007 = EFI_TEST_SIMPLETEXTI
 EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid008 = EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_008_GUID;
 
 EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009 = EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_009_GUID;
+
+EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010 = EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID;
+
+EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011 = EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID;
+
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h
index 6c90fca..2a6be48 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h
+++ b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h
@@ -1,7 +1,7 @@
 /** @file
 
   Copyright 2006 - 2010 Unified EFI, Inc.<BR>
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD License
@@ -119,3 +119,13 @@ extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid008;
 { 0x534369f7, 0x8399, 0x4353, { 0x94, 0xad, 0xc4, 0x48, 0xfa, 0xda, 0xeb, 0x84 } }
 
 extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009;
+
+#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID \
+{ 0xcf4d54eb, 0x6696, 0x4794, { 0x91, 0x74, 0x59, 0xd, 0x1c, 0x22, 0xa8, 0x67 } }
+
+extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010;
+
+#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID \
+{ 0xf8e8f879, 0xa6d4, 0x4fd3, { 0x8b, 0x8e, 0xba, 0x1d, 0x18, 0xf1, 0x40, 0x71 } }
+
+extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011;
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c
index ce5a80a..0b953ca 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestFunction.c
@@ -456,6 +456,78 @@ BBTestUnregisterKeyNotifyFunctionManualTest (
 }
 
 
+EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTest (
+  IN EFI_BB_TEST_PROTOCOL       *This,
+  IN VOID                       *ClientInterface,
+  IN EFI_TEST_LEVEL             TestLevel,
+  IN EFI_HANDLE                 SupportHandle
+  )
+{
+  EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib;
+  EFI_STATUS                            Status;
+  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL     *SimpleTextInputEx;
+  
+  EFI_DEVICE_PATH_PROTOCOL             *DevicePath;
+  CHAR16                               *DevicePathStr;
+
+  //
+  // init
+  //
+  SimpleTextInputEx = (EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL*)ClientInterface;
+
+  //
+  // Get the Standard Library Interface
+  //
+  Status = gtBS->HandleProtocol (
+                   SupportHandle,
+                   &gEfiStandardTestLibraryGuid,
+                   (VOID **) &StandardLib
+                   );
+  if (EFI_ERROR(Status)) {
+    return Status;
+  }
+  
+  //
+  // Get Device Path of current Simple_Text_Input_Ex_Protocol
+  // And out put device path or device name
+  //
+  Status = LocateDevicePathFromSimpleTextInputEx (SimpleTextInputEx, &DevicePath, StandardLib);
+  if (Status == EFI_SUCCESS) {
+    DevicePathStr = SctDevicePathToStr (DevicePath);
+    if (DevicePathStr != NULL) {
+      StandardLib->RecordMessage (
+                     StandardLib,
+                     EFI_VERBOSE_LEVEL_DEFAULT,
+                     L"\r\nCurrent Device: %s",
+                     DevicePathStr
+                     );
+      Status = gtBS->FreePool (DevicePathStr);
+      if (EFI_ERROR(Status))
+        return Status;
+      DevicePathStr=NULL;
+    }
+  } else {
+    //
+    // Console Splitter/StdErr
+    //
+    StandardLib->RecordMessage (
+                   StandardLib,
+                   EFI_VERBOSE_LEVEL_DEFAULT,
+                   L"\r\nCurrent Device: ConsoleSplitter/TxtIn"
+                   );
+  }
+
+  //
+  //
+  //
+  BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 ( StandardLib, SimpleTextInputEx );
+  
+  return EFI_SUCCESS;
+}
+
+
+
 //
 //Check Points
 //
@@ -1060,4 +1132,143 @@ BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
            );
 
   return EFI_SUCCESS;
-}
\ No newline at end of file
+}
+
+EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
+  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
+  )
+{
+  EFI_STATUS            Status;
+  EFI_TEST_ASSERTION    AssertionType;
+  EFI_KEY_DATA          Key;
+  UINT8                 Index;
+
+  EFI_KEY_TOGGLE_STATE  State = EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED;
+
+  EFI_KEY_TOGGLE_STATE  ValidState[] = {
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_NUM_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_CAPS_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE | EFI_NUM_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_NUM_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
+                          EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE |EFI_NUM_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
+                          0
+                          };  
+ 
+  //
+  //Reset the console
+  //
+  Status = SimpleTextInputEx->ReadKeyStrokeEx (
+                                  SimpleTextInputEx, 
+                                  &Key
+                                  );
+  if (EFI_ERROR(Status) && Status != EFI_NOT_READY) {
+    return Status;
+  }
+
+  if ((Key.KeyState.KeyToggleState & EFI_TOGGLE_STATE_VALID) == 0) {
+    return EFI_UNSUPPORTED;
+  }
+
+  //
+  //Set the KEY_STATE_EXPOSED to check the imcomplete keystroke support
+  //
+  Status = SimpleTextInputEx->SetState (
+                                SimpleTextInputEx,
+                                &State
+                                );
+
+  if (Status == EFI_UNSUPPORTED || Status == EFI_DEVICE_ERROR) {
+    StandardLib->RecordAssertion (
+                   StandardLib,
+                   EFI_TEST_ASSERTION_WARNING,
+                   gTestGenericFailureGuid,
+                   L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState - SetState() doesn't return EFI_SUCCESS with EFI_KEY_STATE_EXPOSED",
+                   L"%a:%d, Status = %r\n",
+                   __FILE__,
+                   (UINTN)__LINE__,
+                   Status
+                   );
+    return Status;
+  }
+
+  for (Index=0; ValidState[Index]; Index++) {
+
+    //
+    // Set the valid KeyToggleState
+    //
+    Status = SimpleTextInputEx->SetState (
+                                  SimpleTextInputEx,
+                                  ValidState + Index
+                                  );
+  
+    if (Status != EFI_SUCCESS) {
+      StandardLib->RecordAssertion (
+                     StandardLib,
+                     EFI_TEST_ASSERTION_FAILED,
+                     gTestGenericFailureGuid,
+                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState - SetState() doesn't return EFI_SUCCESS with the valid KeyToggleState",
+                     L"%a:%d, Status = %r, KeyToggleState = %x\n",
+                     __FILE__,
+                     (UINTN)__LINE__,
+                     Status,
+                     ValidState[Index]
+                     );
+      continue;
+    }
+
+    //
+    // Get the KeyToggleState
+    //
+    Status = SimpleTextInputEx->ReadKeyStrokeEx (
+                                  SimpleTextInputEx, 
+                                  &Key
+                                  );
+
+    if (Status != EFI_NOT_READY) {
+      AssertionType = EFI_TEST_ASSERTION_FAILED;
+
+      StandardLib->RecordAssertion (
+                     StandardLib,
+                     AssertionType,
+                     gSimpleTextInputExBBTestFunctionAssertionGuid010,
+                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStrokeEx - ReadKeyStrokeEx() doesn't return EFI_NOT_READY when there is no Key data and EFI_KEY_STATE_EXPOSED is enabled",
+                     L"%a:%d, Status = %r, Index = %d, KeyToggleState = %x\n",
+                     __FILE__,
+                     (UINTN)__LINE__,
+                     Status,
+                     Index,
+                     ValidState[Index]
+                     );
+
+    } else {
+      if (Key.KeyState.KeyToggleState == ValidState[Index] &&
+        (Key.KeyState.KeyShiftState == 0 || Key.KeyState.KeyShiftState == EFI_SHIFT_STATE_VALID) &&
+        Key.Key.ScanCode == 0 && Key.Key.UnicodeChar == 0)
+        AssertionType = EFI_TEST_ASSERTION_PASSED;
+      else
+      	 AssertionType = EFI_TEST_ASSERTION_FAILED;
+
+
+      StandardLib->RecordAssertion (
+                     StandardLib,
+                     AssertionType,
+                     gSimpleTextInputExBBTestFunctionAssertionGuid011,
+                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStrokeEx - ReadKeyStrokeEx() should get the ValidState with EFI_NOT_READY and other field is zero",
+                     L"%a:%d, Status = %r, Index = %d, KeyToggleState = %x, expect State = %x\n",
+                     __FILE__,
+                     (UINTN)__LINE__,
+                     Status,
+                     Index,
+                     Key.KeyState.KeyToggleState,
+                     ValidState[Index]
+                     );
+
+    }
+  }
+
+  return EFI_SUCCESS;
+}
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c
index 43dbbda..c0a4f5a 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c
+++ b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.c
@@ -1,7 +1,7 @@
 /** @file
 
   Copyright 2006 - 2016 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD License
@@ -106,6 +106,15 @@ EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] = {
   },
 #endif
   {
+    EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107,
+    L"ReadKeyStrokeExFunctionAuto",
+    L"Function Auto test for Simple Text Input Ex Protocol ReadKeyStrokeEx().",
+    EFI_TEST_LEVEL_MINIMAL,
+    gSupportProtocolGuid,
+    EFI_TEST_CASE_AUTO,
+    BBTestReadKeyStrokeExFunctionAutoTest
+  },
+  {
     EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0201,
     L"ReadKeyStrokeExConformance",
     L"Conformance test for Simple Text Input Ex Protocol ReadKeyStrokeEx().",
diff --git a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h
index 0b3312e..bb0d8c9 100644
--- a/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h
+++ b/uefi-sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/SimpleTextInputExBBTestMain.h
@@ -1,7 +1,7 @@
 /** @file
 
   Copyright 2006 - 2014 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD License
@@ -61,6 +61,8 @@ Abstract:
 #define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0106 \
 { 0xdbc6e659, 0xb0e0, 0x4471, { 0x94, 0x13, 0x45, 0x1b, 0xdc, 0xe2, 0xad, 0xc7 } }
 
+#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107 \
+{ 0x2c3ca282, 0x5644, 0x41b6, { 0xaf, 0xc9, 0x43, 0x87, 0xf2, 0x53, 0x89, 0xbd } }
 //
 // Entry GUIDs for Conf Test
 //
@@ -157,6 +159,15 @@ BBTestUnregisterKeyNotifyFunctionManualTest (
   IN EFI_TEST_LEVEL             TestLevel,
   IN EFI_HANDLE                 SupportHandle
   );
+
+
+EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTest (
+  IN EFI_BB_TEST_PROTOCOL       *This,
+  IN VOID                       *ClientInterface,
+  IN EFI_TEST_LEVEL             TestLevel,
+  IN EFI_HANDLE                 SupportHandle
+  );
   
   
 EFI_STATUS
@@ -241,6 +252,13 @@ BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
 
 
 EFI_STATUS
+BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
+  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
+  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
+  );
+
+
+EFI_STATUS
 BBTestReadKeyStrokeExConformanceTestCheckpoint1 (
   IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
   IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
-- 
2.9.0.windows.1



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [edk2-test][Patch] uefi-sct/SctPkg:Add checkpoint of ReadKeyStrokeEx Toggle state
  2018-11-07  6:47 [edk2-test][Patch] uefi-sct/SctPkg:Add checkpoint of ReadKeyStrokeEx Toggle state Eric Jin
@ 2018-11-07 19:59 ` Supreeth Venkatesh
  2018-11-09  2:27   ` Jin, Eric
  0 siblings, 1 reply; 3+ messages in thread
From: Supreeth Venkatesh @ 2018-11-07 19:59 UTC (permalink / raw)
  To: Eric Jin, edk2-devel

Eric,

Could you please split these as PATCH (perhaps 3 or more) series as
there are more than 10 files changed in a single patch?.

Please see comments inline.

On Wed, 2018-11-07 at 14:47 +0800, Eric Jin wrote:
> UEFI drivers which implement the EFI_SIMPLE_TEXT_INPUT_EX protocol
> are required to return KeyData.Key and KeyData.KeyState values.
> These drivers must always return the most current state of
> KeyData.KeyState.KeyShiftState and KeyData.KeyState.KeyToggleState.
> 
> The change in spec is "EFI_NOT_READY - There was no keystroke
> data available. Current KeyData.KeyState values are exposed."
> 
> Cc: Supreeth Venkatesh <supreeth.venkatesh@arm.com>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Eric Jin <eric.jin@intel.com>
> ---
>  .../Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c |   7 +-
>  .../Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h |  12 +-
>  .../BlackBoxTest/SimpleTextInputExBBTestFunction.c | 211
> ++++++++++++++++++++
>  .../BlackBoxTest/SimpleTextInputExBBTestMain.c     |  13 +-
>  .../BlackBoxTest/SimpleTextInputExBBTestMain.h     |  22 ++-
>  .../Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c |   7 +-
>  .../Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h |  12 +-
>  .../BlackBoxTest/SimpleTextInputExBBTestFunction.c | 213
> ++++++++++++++++++++-
>  .../BlackBoxTest/SimpleTextInputExBBTestMain.c     |  11 +-
>  .../BlackBoxTest/SimpleTextInputExBBTestMain.h     |  20 +-
>  10 files changed, 515 insertions(+), 13 deletions(-)
> 
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c
> index 9cb19f4..ff2d50f 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2012 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010 - 2012, Intel Corporation. All rights
> reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of
> the BSD License
> @@ -63,3 +63,8 @@ EFI_GUID
> gSimpleTextInputExBBTestFunctionAssertionGuid007 =
> EFI_TEST_SIMPLETEXTI
>  EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid008 =
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_008_GUID;
>  
>  EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009 =
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_009_GUID;
> +
> +EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010 =
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID;
> +
> +EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011 =
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID;
> +
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h
> index 6c90fca..2a6be48 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2010 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of
> the BSD License
> @@ -119,3 +119,13 @@ extern EFI_GUID
> gSimpleTextInputExBBTestFunctionAssertionGuid008;
>  { 0x534369f7, 0x8399, 0x4353, { 0x94, 0xad, 0xc4, 0x48, 0xfa, 0xda,
> 0xeb, 0x84 } }
>  
>  extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009;
> +
> +#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID
> \
> +{ 0xcf4d54eb, 0x6696, 0x4794, { 0x91, 0x74, 0x59, 0xd, 0x1c, 0x22,
> 0xa8, 0x67 } }
> +
> +extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010;
> +
> +#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID
> \
> +{ 0xf8e8f879, 0xa6d4, 0x4fd3, { 0x8b, 0x8e, 0xba, 0x1d, 0x18, 0xf1,
> 0x40, 0x71 } }
> +
> +extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011;
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c
> index 153ade0..4850627 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c
> @@ -456,6 +456,78 @@ BBTestUnregisterKeyNotifyFunctionManualTest (
>  }
>  
>  
> +EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  )
> +{
> +  EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib;
> +  EFI_STATUS                            Status;
> +  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL     *SimpleTextInputEx;
> +  
> +  EFI_DEVICE_PATH_PROTOCOL             *DevicePath;
> +  CHAR16                               *DevicePathStr;
> +
> +  //
> +  // init
> +  //
> +  SimpleTextInputEx =
> (EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL*)ClientInterface;
> +
> +  //
> +  // Get the Standard Library Interface
> +  //
> +  Status = gtBS->HandleProtocol (
> +                   SupportHandle,
> +                   &gEfiStandardTestLibraryGuid,
> +                   (VOID **) &StandardLib
> +                   );
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +  
> +  //
> +  // Get Device Path of current Simple_Text_Input_Ex_Protocol
> +  // And out put device path or device name
> +  //
> +  Status = LocateDevicePathFromSimpleTextInputEx (SimpleTextInputEx,
> &DevicePath, StandardLib);
> +  if (Status == EFI_SUCCESS) {
> +    DevicePathStr = SctDevicePathToStr (DevicePath);
> +    if (DevicePathStr != NULL) {
> +      StandardLib->RecordMessage (
> +                     StandardLib,
> +                     EFI_VERBOSE_LEVEL_DEFAULT,
> +                     L"\r\nCurrent Device: %s",
> +                     DevicePathStr
> +                     );
> +      Status = gtBS->FreePool (DevicePathStr);
> +      if (EFI_ERROR(Status))
> +        return Status;
> +      DevicePathStr=NULL;
> +    }
> +  } else {
> +    //
> +    // Console Splitter/StdErr
> +    //
> +    StandardLib->RecordMessage (
> +                   StandardLib,
> +                   EFI_VERBOSE_LEVEL_DEFAULT,
> +                   L"\r\nCurrent Device: ConsoleSplitter/TxtIn"
> +                   );
> +  }
> +
> +  //
> +  //
> +  //
> +  BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 ( StandardLib,
> SimpleTextInputEx );
Alignment with StandardLib. Use the alignment format as above in 
StandardLib->RecordMessage.
> +  
> +  return EFI_SUCCESS;
> +}
> +
> +
> +
>  //
>  //Check Points
>  //
> @@ -1061,3 +1133,142 @@
> BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
>  
>    return EFI_SUCCESS;
>  }
> +
> +EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
> +  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
> +  )
> +{
> +  EFI_STATUS            Status;
> +  EFI_TEST_ASSERTION    AssertionType;
> +  EFI_KEY_DATA          Key;
> +  UINT8                 Index;
> +
> +  EFI_KEY_TOGGLE_STATE  State = EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED;
Alignment.
> +
> +  EFI_KEY_TOGGLE_STATE  ValidState[] = {
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_NUM_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_CAPS_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE | EFI_NUM_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE |
> EFI_CAPS_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_NUM_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE |EFI_NUM_LOCK_ACTIVE |
> EFI_CAPS_LOCK_ACTIVE,
Alignment weird.
> +                          0
> +                          };  
> + 
> +  //
> +  //Reset the console
> +  //
> +  Status = SimpleTextInputEx->ReadKeyStrokeEx (
> +                                  SimpleTextInputEx, 
> +                                  &Key
> +                                  );
> +  if (EFI_ERROR(Status) && Status != EFI_NOT_READY) {
> +    return Status;
> +  }
> +
> +  if ((Key.KeyState.KeyToggleState & EFI_TOGGLE_STATE_VALID) == 0) {
> +    return EFI_UNSUPPORTED;
> +  }
> +
> +  //
> +  //Set the KEY_STATE_EXPOSED to check the imcomplete keystroke
> support
> +  //
> +  Status = SimpleTextInputEx->SetState (
> +                                SimpleTextInputEx,
> +                                &State
> +                                );
> +
> +  if (Status == EFI_UNSUPPORTED || Status == EFI_DEVICE_ERROR) {
Extra parenthesis to make the priority clearer.
((Status == EFI_UNSUPPORTED) || (Status == EFI_DEVICE_ERROR))
> +    StandardLib->RecordAssertion (
> +                   StandardLib,
> +                   EFI_TEST_ASSERTION_WARNING,
> +                   gTestGenericFailureGuid,
> +                   L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState -
> SetState() doesn't return EFI_SUCCESS with EFI_KEY_STATE_EXPOSED",
> +                   L"%a:%d, Status = %r\n",
> +                   __FILE__,
> +                   (UINTN)__LINE__,
> +                   Status
> +                   );
> +    return Status;
> +  }
> +
> +  for (Index=0; ValidState[Index]; Index++) {
> +
> +    //
> +    // Set the valid KeyToggleState
> +    //
> +    Status = SimpleTextInputEx->SetState (
> +                                  SimpleTextInputEx,
> +                                  ValidState + Index
> +                                  );
> +  
> +    if (Status != EFI_SUCCESS) {
> +      StandardLib->RecordAssertion (
> +                     StandardLib,
> +                     EFI_TEST_ASSERTION_FAILED,
> +                     gTestGenericFailureGuid,
> +                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState -
> SetState() doesn't return EFI_SUCCESS with the valid KeyToggleState",
> +                     L"%a:%d, Status = %r, KeyToggleState = %x\n",
> +                     __FILE__,
> +                     (UINTN)__LINE__,
> +                     Status,
> +                     ValidState[Index]
> +                     );
> +      continue;
> +    }
> +
> +    //
> +    // Get the KeyToggleState
> +    //
> +    Status = SimpleTextInputEx->ReadKeyStrokeEx (
> +                                  SimpleTextInputEx, 
> +                                  &Key
> +                                  );
> +
> +    if (Status != EFI_NOT_READY) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +
> +      StandardLib->RecordAssertion (
> +                     StandardLib,
> +                     AssertionType,
> +                     gSimpleTextInputExBBTestFunctionAssertionGuid01
> 0,
> +                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStro
> keEx - ReadKeyStrokeEx() doesn't return EFI_NOT_READY when there is
> no Key data and EFI_KEY_STATE_EXPOSED is enabled",
> +                     L"%a:%d, Status = %r, Index = %d,
> KeyToggleState = %x\n",
> +                     __FILE__,
> +                     (UINTN)__LINE__,
> +                     Status,
> +                     Index,
> +                     ValidState[Index]
> +                     );
> +
> +    } else {
> +      if (Key.KeyState.KeyToggleState == ValidState[Index] &&
> +        (Key.KeyState.KeyShiftState == 0 ||
> Key.KeyState.KeyShiftState == EFI_SHIFT_STATE_VALID) &&
> +        Key.Key.ScanCode == 0 && Key.Key.UnicodeChar == 0)
Complicated conditional. Can it be broken down?
> +        AssertionType = EFI_TEST_ASSERTION_PASSED;
> +      else
> +        AssertionType = EFI_TEST_ASSERTION_FAILED;
Nit: braces after if and else even if there is is a single statement
after them to make code legible.
> +
> +
> +      StandardLib->RecordAssertion (
> +                     StandardLib,
> +                     AssertionType,
> +                     gSimpleTextInputExBBTestFunctionAssertionGuid01
> 1,
> +                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStro
> keEx - ReadKeyStrokeEx() should get the ValidState with EFI_NOT_READY
> and other field is zero",
> +                     L"%a:%d, Status = %r, Index = %d,
> KeyToggleState = %x, expect State = %x\n",
> +                     __FILE__,
> +                     (UINTN)__LINE__,
> +                     Status,
> +                     Index,
> +                     Key.KeyState.KeyToggleState,
> +                     ValidState[Index]
> +                     );
> +
> +    }
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c
> index fdbc90f..5b71b6a 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2017 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010 - 2017, Intel Corporation. All rights
> reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of
> the BSD License
> @@ -106,6 +106,15 @@ EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] = {
>    },
>  #endif
>    {
> +    EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107,
> +    L"ReadKeyStrokeExFunctionAuto",
> +    L"Function Auto test for Simple Text Input Ex Protocol
> ReadKeyStrokeEx().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestReadKeyStrokeExFunctionAutoTest
> +  },
> +  {
>      EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0201,
>      L"ReadKeyStrokeExConformance",
>      L"Conformance test for Simple Text Input Ex Protocol
> ReadKeyStrokeEx().",
> @@ -151,7 +160,6 @@ BOOLEAN     BeenExecuted;
>  //
>  
>  EFI_STATUS
> -EFIAPI
This change should be in another patch.
>  InitializeSimpleTextInputExBBTest (
>    IN EFI_HANDLE                   ImageHandle,
>    IN EFI_SYSTEM_TABLE             *SystemTable
> @@ -179,7 +187,6 @@ InitializeSimpleTextInputExBBTest (
>  
>  
>  EFI_STATUS
> -EFIAPI
This change should be in another patch.
>  UnloadSimpleTextInputExBBTest (
>    IN EFI_HANDLE                   ImageHandle
>    )
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h
> index cb2160b..8676606 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2017 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010 - 2017, Intel Corporation. All rights
> reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of
> the BSD License
> @@ -57,6 +57,8 @@ Abstract:
>  #define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0106 \
>  { 0xdbc6e659, 0xb0e0, 0x4471, { 0x94, 0x13, 0x45, 0x1b, 0xdc, 0xe2,
> 0xad, 0xc7 } }
>  
> +#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107 \
> +{ 0x2c3ca282, 0x5644, 0x41b6, { 0xaf, 0xc9, 0x43, 0x87, 0xf2, 0x53,
> 0x89, 0xbd } }
>  //
>  // Entry GUIDs for Conf Test
>  //
> @@ -86,7 +88,6 @@ typedef enum {
>  //
>  //
>  EFI_STATUS
> -EFIAPI
This change in another patch.

>  InitializeSimpleTextInputExBBTest (
>    IN EFI_HANDLE                   ImageHandle,
>    IN EFI_SYSTEM_TABLE             *SystemTable
> @@ -94,7 +95,6 @@ InitializeSimpleTextInputExBBTest (
>    
>    
>  EFI_STATUS
> -EFIAPI
This change should be in another patch.

>  UnloadSimpleTextInputExBBTest (
>    IN EFI_HANDLE                   ImageHandle
>    );
> @@ -155,6 +155,15 @@ BBTestUnregisterKeyNotifyFunctionManualTest (
>    IN EFI_TEST_LEVEL             TestLevel,
>    IN EFI_HANDLE                 SupportHandle
>    );
> +
> +
> +EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
>    
>    
>  EFI_STATUS
> @@ -239,6 +248,13 @@
> BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
>  
>  
>  EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
> +  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
> +  );
> +
> +
> +EFI_STATUS
>  BBTestReadKeyStrokeExConformanceTestCheckpoint1 (
>    IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
>    IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c
> index b79772c..6876814 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2015 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010 - 2015, Intel Corporation. All rights
> reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of
> the BSD License
> @@ -63,3 +63,8 @@ EFI_GUID
> gSimpleTextInputExBBTestFunctionAssertionGuid007 =
> EFI_TEST_SIMPLETEXTI
>  EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid008 =
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_008_GUID;
>  
>  EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009 =
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_009_GUID;
> +
> +EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010 =
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID;
> +
> +EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011 =
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID;
> +
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h
> index 6c90fca..2a6be48 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2010 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of
> the BSD License
> @@ -119,3 +119,13 @@ extern EFI_GUID
> gSimpleTextInputExBBTestFunctionAssertionGuid008;
>  { 0x534369f7, 0x8399, 0x4353, { 0x94, 0xad, 0xc4, 0x48, 0xfa, 0xda,
> 0xeb, 0x84 } }
>  
>  extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009;
> +
> +#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID
> \
> +{ 0xcf4d54eb, 0x6696, 0x4794, { 0x91, 0x74, 0x59, 0xd, 0x1c, 0x22,
> 0xa8, 0x67 } }
> +
> +extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010;
> +
> +#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID
> \
> +{ 0xf8e8f879, 0xa6d4, 0x4fd3, { 0x8b, 0x8e, 0xba, 0x1d, 0x18, 0xf1,
> 0x40, 0x71 } }
> +
> +extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011;
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c
> index ce5a80a..0b953ca 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c
> @@ -456,6 +456,78 @@ BBTestUnregisterKeyNotifyFunctionManualTest (
>  }
>  
>  
> +EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  )
> +{
> +  EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib;
> +  EFI_STATUS                            Status;
> +  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL     *SimpleTextInputEx;
> +  
> +  EFI_DEVICE_PATH_PROTOCOL             *DevicePath;
> +  CHAR16                               *DevicePathStr;
> +
> +  //
> +  // init
> +  //
> +  SimpleTextInputEx =
> (EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL*)ClientInterface;
> +
> +  //
> +  // Get the Standard Library Interface
> +  //
> +  Status = gtBS->HandleProtocol (
> +                   SupportHandle,
> +                   &gEfiStandardTestLibraryGuid,
> +                   (VOID **) &StandardLib
> +                   );
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +  
> +  //
> +  // Get Device Path of current Simple_Text_Input_Ex_Protocol
> +  // And out put device path or device name
> +  //
> +  Status = LocateDevicePathFromSimpleTextInputEx (SimpleTextInputEx,
> &DevicePath, StandardLib);
> +  if (Status == EFI_SUCCESS) {
> +    DevicePathStr = SctDevicePathToStr (DevicePath);
> +    if (DevicePathStr != NULL) {
> +      StandardLib->RecordMessage (
> +                     StandardLib,
> +                     EFI_VERBOSE_LEVEL_DEFAULT,
> +                     L"\r\nCurrent Device: %s",
> +                     DevicePathStr
> +                     );
> +      Status = gtBS->FreePool (DevicePathStr);
> +      if (EFI_ERROR(Status))
> +        return Status;
> +      DevicePathStr=NULL;
> +    }
> +  } else {
> +    //
> +    // Console Splitter/StdErr
> +    //
> +    StandardLib->RecordMessage (
> +                   StandardLib,
> +                   EFI_VERBOSE_LEVEL_DEFAULT,
> +                   L"\r\nCurrent Device: ConsoleSplitter/TxtIn"
> +                   );
> +  }
> +
> +  //
> +  //
> +  //
> +  BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 ( StandardLib,
> SimpleTextInputEx );
> +  
> +  return EFI_SUCCESS;
> +}
> +
> +
> +
>  //
>  //Check Points
>  //
> @@ -1060,4 +1132,143 @@
> BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
>             );
>  
>    return EFI_SUCCESS;
> -}
> \ No newline at end of file
> +}
> +
> +EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
> +  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
> +  )
> +{
> +  EFI_STATUS            Status;
> +  EFI_TEST_ASSERTION    AssertionType;
> +  EFI_KEY_DATA          Key;
> +  UINT8                 Index;
> +
> +  EFI_KEY_TOGGLE_STATE  State = EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED;
Indentation to align with EFI_TOGGLE_STATE_VALID.

> +
> +  EFI_KEY_TOGGLE_STATE  ValidState[] = {
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_NUM_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_CAPS_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE | EFI_NUM_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE |
> EFI_CAPS_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_NUM_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE |EFI_NUM_LOCK_ACTIVE |
> EFI_CAPS_LOCK_ACTIVE,
> +                          0
Indentation is weird in the above definition. please align.

> +                          };  
> + 
> +  //
> +  //Reset the console
> +  //
> +  Status = SimpleTextInputEx->ReadKeyStrokeEx (
> +                                  SimpleTextInputEx, 
> +                                  &Key
> +                                  );
> +  if (EFI_ERROR(Status) && Status != EFI_NOT_READY) {
Extra Parenthesis to make the priority of evaluation clearer.

> +    return Status;
> +  }
> +
> +  if ((Key.KeyState.KeyToggleState & EFI_TOGGLE_STATE_VALID) == 0) {
> +    return EFI_UNSUPPORTED;
> +  }
> +
> +  //
> +  //Set the KEY_STATE_EXPOSED to check the imcomplete keystroke
> support
> +  //
> +  Status = SimpleTextInputEx->SetState (
> +                                SimpleTextInputEx,
> +                                &State
> +                                );
> +
> +  if (Status == EFI_UNSUPPORTED || Status == EFI_DEVICE_ERROR) {
Parenthesis around both the conditions.
> +    StandardLib->RecordAssertion (
> +                   StandardLib,
> +                   EFI_TEST_ASSERTION_WARNING,
> +                   gTestGenericFailureGuid,
> +                   L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState -
> SetState() doesn't return EFI_SUCCESS with EFI_KEY_STATE_EXPOSED",
> +                   L"%a:%d, Status = %r\n",
> +                   __FILE__,
> +                   (UINTN)__LINE__,
> +                   Status
> +                   );
> +    return Status;
> +  }
> +
> +  for (Index=0; ValidState[Index]; Index++) {
> +
> +    //
> +    // Set the valid KeyToggleState
> +    //
> +    Status = SimpleTextInputEx->SetState (
> +                                  SimpleTextInputEx,
> +                                  ValidState + Index
> +                                  );
> +  
> +    if (Status != EFI_SUCCESS) {
> +      StandardLib->RecordAssertion (
> +                     StandardLib,
> +                     EFI_TEST_ASSERTION_FAILED,
> +                     gTestGenericFailureGuid,
> +                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState -
> SetState() doesn't return EFI_SUCCESS with the valid KeyToggleState",
> +                     L"%a:%d, Status = %r, KeyToggleState = %x\n",
> +                     __FILE__,
> +                     (UINTN)__LINE__,
> +                     Status,
> +                     ValidState[Index]
> +                     );
> +      continue;
> +    }
> +
> +    //
> +    // Get the KeyToggleState
> +    //
> +    Status = SimpleTextInputEx->ReadKeyStrokeEx (
> +                                  SimpleTextInputEx, 
> +                                  &Key
> +                                  );
> +
> +    if (Status != EFI_NOT_READY) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +
> +      StandardLib->RecordAssertion (
> +                     StandardLib,
> +                     AssertionType,
> +                     gSimpleTextInputExBBTestFunctionAssertionGuid01
> 0,
> +                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStro
> keEx - ReadKeyStrokeEx() doesn't return EFI_NOT_READY when there is
> no Key data and EFI_KEY_STATE_EXPOSED is enabled",
> +                     L"%a:%d, Status = %r, Index = %d,
> KeyToggleState = %x\n",
> +                     __FILE__,
> +                     (UINTN)__LINE__,
> +                     Status,
> +                     Index,
> +                     ValidState[Index]
> +                     );
> +
> +    } else {
> +      if (Key.KeyState.KeyToggleState == ValidState[Index] &&
> +        (Key.KeyState.KeyShiftState == 0 ||
> Key.KeyState.KeyShiftState == EFI_SHIFT_STATE_VALID) &&
> +        Key.Key.ScanCode == 0 && Key.Key.UnicodeChar == 0)
> +        AssertionType = EFI_TEST_ASSERTION_PASSED;
> +      else
> +      	 AssertionType = EFI_TEST_ASSERTION_FAILED;
> +
> +
> +      StandardLib->RecordAssertion (
> +                     StandardLib,
> +                     AssertionType,
> +                     gSimpleTextInputExBBTestFunctionAssertionGuid01
> 1,
> +                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStro
> keEx - ReadKeyStrokeEx() should get the ValidState with EFI_NOT_READY
> and other field is zero",
> +                     L"%a:%d, Status = %r, Index = %d,
> KeyToggleState = %x, expect State = %x\n",
> +                     __FILE__,
> +                     (UINTN)__LINE__,
> +                     Status,
> +                     Index,
> +                     Key.KeyState.KeyToggleState,
> +                     ValidState[Index]
> +                     );
> +
> +    }
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c
> index 43dbbda..c0a4f5a 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2016 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010 - 2016, Intel Corporation. All rights
> reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of
> the BSD License
> @@ -106,6 +106,15 @@ EFI_BB_TEST_ENTRY_FIELD gBBTestEntryField[] = {
>    },
>  #endif
>    {
> +    EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107,
> +    L"ReadKeyStrokeExFunctionAuto",
> +    L"Function Auto test for Simple Text Input Ex Protocol
> ReadKeyStrokeEx().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestReadKeyStrokeExFunctionAutoTest
> +  },
> +  {
>      EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0201,
>      L"ReadKeyStrokeExConformance",
>      L"Conformance test for Simple Text Input Ex Protocol
> ReadKeyStrokeEx().",
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h
> index 0b3312e..bb0d8c9 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2014 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010 - 2014, Intel Corporation. All rights
> reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of
> the BSD License
> @@ -61,6 +61,8 @@ Abstract:
>  #define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0106 \
>  { 0xdbc6e659, 0xb0e0, 0x4471, { 0x94, 0x13, 0x45, 0x1b, 0xdc, 0xe2,
> 0xad, 0xc7 } }
>  
> +#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107 \
> +{ 0x2c3ca282, 0x5644, 0x41b6, { 0xaf, 0xc9, 0x43, 0x87, 0xf2, 0x53,
> 0x89, 0xbd } }
>  //
>  // Entry GUIDs for Conf Test
>  //
> @@ -157,6 +159,15 @@ BBTestUnregisterKeyNotifyFunctionManualTest (
>    IN EFI_TEST_LEVEL             TestLevel,
>    IN EFI_HANDLE                 SupportHandle
>    );
> +
> +
> +EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
>    
>    
>  EFI_STATUS
> @@ -241,6 +252,13 @@
> BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
>  
>  
>  EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
> +  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
> +  );
> +
> +
> +EFI_STATUS
>  BBTestReadKeyStrokeExConformanceTestCheckpoint1 (
>    IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
>    IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [edk2-test][Patch] uefi-sct/SctPkg:Add checkpoint of ReadKeyStrokeEx Toggle state
  2018-11-07 19:59 ` Supreeth Venkatesh
@ 2018-11-09  2:27   ` Jin, Eric
  0 siblings, 0 replies; 3+ messages in thread
From: Jin, Eric @ 2018-11-09  2:27 UTC (permalink / raw)
  To: Supreeth Venkatesh, edk2-devel@lists.01.org; +Cc: Jin, Eric

Supreeth,

The Patch will be split in 2 patches in series, one of the test driver in EFI part, and the other in the IHV part.
The attribute alignment can be ignored due to the wordwrap in mail format.
RecordMessage format will be consistent and extra parenthesis will be added in the if statement.
Besides above, more comments are added to describe the checkpoint intention.

The Patch V3 will be sent out later. 

Best Regards
Eric

-----Original Message-----
From: Supreeth Venkatesh <supreeth.venkatesh@arm.com> 
Sent: Thursday, November 8, 2018 4:00 AM
To: Jin, Eric <eric.jin@intel.com>; edk2-devel@lists.01.org
Subject: Re: [edk2-test][Patch] uefi-sct/SctPkg:Add checkpoint of ReadKeyStrokeEx Toggle state

Eric,

Could you please split these as PATCH (perhaps 3 or more) series as there are more than 10 files changed in a single patch?.

Please see comments inline.

On Wed, 2018-11-07 at 14:47 +0800, Eric Jin wrote:
> UEFI drivers which implement the EFI_SIMPLE_TEXT_INPUT_EX protocol are 
> required to return KeyData.Key and KeyData.KeyState values.
> These drivers must always return the most current state of 
> KeyData.KeyState.KeyShiftState and KeyData.KeyState.KeyToggleState.
> 
> The change in spec is "EFI_NOT_READY - There was no keystroke data 
> available. Current KeyData.KeyState values are exposed."
> 
> Cc: Supreeth Venkatesh <supreeth.venkatesh@arm.com>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Eric Jin <eric.jin@intel.com>
> ---
>  .../Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c |   7 +-
>  .../Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h |  12 +-  
> .../BlackBoxTest/SimpleTextInputExBBTestFunction.c | 211
> ++++++++++++++++++++
>  .../BlackBoxTest/SimpleTextInputExBBTestMain.c     |  13 +-
>  .../BlackBoxTest/SimpleTextInputExBBTestMain.h     |  22 ++-
>  .../Protocol/SimpleTextInputEx/BlackBoxTest/Guid.c |   7 +-
>  .../Protocol/SimpleTextInputEx/BlackBoxTest/Guid.h |  12 +-  
> .../BlackBoxTest/SimpleTextInputExBBTestFunction.c | 213
> ++++++++++++++++++++-
>  .../BlackBoxTest/SimpleTextInputExBBTestMain.c     |  11 +-
>  .../BlackBoxTest/SimpleTextInputExBBTestMain.h     |  20 +-
>  10 files changed, 515 insertions(+), 13 deletions(-)
> 
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c
> index 9cb19f4..ff2d50f 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2012 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010 - 2012, Intel Corporation. All rights 
> reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of 
> the BSD License @@ -63,3 +63,8 @@ EFI_GUID
> gSimpleTextInputExBBTestFunctionAssertionGuid007 = 
> EFI_TEST_SIMPLETEXTI  EFI_GUID 
> gSimpleTextInputExBBTestFunctionAssertionGuid008 = 
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_008_GUID;
>  
>  EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009 = 
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_009_GUID;
> +
> +EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010 =
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID;
> +
> +EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011 =
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID;
> +
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h
> index 6c90fca..2a6be48 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2010 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of 
> the BSD License @@ -119,3 +119,13 @@ extern EFI_GUID 
> gSimpleTextInputExBBTestFunctionAssertionGuid008;
>  { 0x534369f7, 0x8399, 0x4353, { 0x94, 0xad, 0xc4, 0x48, 0xfa, 0xda, 
> 0xeb, 0x84 } }
>  
>  extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009;
> +
> +#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID
> \
> +{ 0xcf4d54eb, 0x6696, 0x4794, { 0x91, 0x74, 0x59, 0xd, 0x1c, 0x22,
> 0xa8, 0x67 } }
> +
> +extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010;
> +
> +#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID
> \
> +{ 0xf8e8f879, 0xa6d4, 0x4fd3, { 0x8b, 0x8e, 0xba, 0x1d, 0x18, 0xf1,
> 0x40, 0x71 } }
> +
> +extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011;
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c b/uefi- 
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c
> index 153ade0..4850627 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c
> @@ -456,6 +456,78 @@ BBTestUnregisterKeyNotifyFunctionManualTest (  }
>  
>  
> +EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  )
> +{
> +  EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib;
> +  EFI_STATUS                            Status;
> +  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL     *SimpleTextInputEx;
> +  
> +  EFI_DEVICE_PATH_PROTOCOL             *DevicePath;
> +  CHAR16                               *DevicePathStr;
> +
> +  //
> +  // init
> +  //
> +  SimpleTextInputEx =
> (EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL*)ClientInterface;
> +
> +  //
> +  // Get the Standard Library Interface  //  Status = 
> + gtBS->HandleProtocol (
> +                   SupportHandle,
> +                   &gEfiStandardTestLibraryGuid,
> +                   (VOID **) &StandardLib
> +                   );
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +  
> +  //
> +  // Get Device Path of current Simple_Text_Input_Ex_Protocol  // And 
> + out put device path or device name  //  Status = 
> + LocateDevicePathFromSimpleTextInputEx (SimpleTextInputEx,
> &DevicePath, StandardLib);
> +  if (Status == EFI_SUCCESS) {
> +    DevicePathStr = SctDevicePathToStr (DevicePath);
> +    if (DevicePathStr != NULL) {
> +      StandardLib->RecordMessage (
> +                     StandardLib,
> +                     EFI_VERBOSE_LEVEL_DEFAULT,
> +                     L"\r\nCurrent Device: %s",
> +                     DevicePathStr
> +                     );
> +      Status = gtBS->FreePool (DevicePathStr);
> +      if (EFI_ERROR(Status))
> +        return Status;
> +      DevicePathStr=NULL;
> +    }
> +  } else {
> +    //
> +    // Console Splitter/StdErr
> +    //
> +    StandardLib->RecordMessage (
> +                   StandardLib,
> +                   EFI_VERBOSE_LEVEL_DEFAULT,
> +                   L"\r\nCurrent Device: ConsoleSplitter/TxtIn"
> +                   );
> +  }
> +
> +  //
> +  //
> +  //
> +  BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 ( StandardLib,
> SimpleTextInputEx );
Alignment with StandardLib. Use the alignment format as above in 
StandardLib->RecordMessage.
> +  
> +  return EFI_SUCCESS;
> +}
> +
> +
> +
>  //
>  //Check Points
>  //
> @@ -1061,3 +1133,142 @@
> BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
>  
>    return EFI_SUCCESS;
>  }
> +
> +EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
> +  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
> +  )
> +{
> +  EFI_STATUS            Status;
> +  EFI_TEST_ASSERTION    AssertionType;
> +  EFI_KEY_DATA          Key;
> +  UINT8                 Index;
> +
> +  EFI_KEY_TOGGLE_STATE  State = EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED;
Alignment.
> +
> +  EFI_KEY_TOGGLE_STATE  ValidState[] = {
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_NUM_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_CAPS_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE | EFI_NUM_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_NUM_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE |EFI_NUM_LOCK_ACTIVE | 
> EFI_CAPS_LOCK_ACTIVE,
Alignment weird.
> +                          0
> +                          };
> + 
> +  //
> +  //Reset the console
> +  //
> +  Status = SimpleTextInputEx->ReadKeyStrokeEx (
> +                                  SimpleTextInputEx, 
> +                                  &Key
> +                                  );
> +  if (EFI_ERROR(Status) && Status != EFI_NOT_READY) {
> +    return Status;
> +  }
> +
> +  if ((Key.KeyState.KeyToggleState & EFI_TOGGLE_STATE_VALID) == 0) {
> +    return EFI_UNSUPPORTED;
> +  }
> +
> +  //
> +  //Set the KEY_STATE_EXPOSED to check the imcomplete keystroke
> support
> +  //
> +  Status = SimpleTextInputEx->SetState (
> +                                SimpleTextInputEx,
> +                                &State
> +                                );
> +
> +  if (Status == EFI_UNSUPPORTED || Status == EFI_DEVICE_ERROR) {
Extra parenthesis to make the priority clearer.
((Status == EFI_UNSUPPORTED) || (Status == EFI_DEVICE_ERROR))
> +    StandardLib->RecordAssertion (
> +                   StandardLib,
> +                   EFI_TEST_ASSERTION_WARNING,
> +                   gTestGenericFailureGuid,
> +                   L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState -
> SetState() doesn't return EFI_SUCCESS with EFI_KEY_STATE_EXPOSED",
> +                   L"%a:%d, Status = %r\n",
> +                   __FILE__,
> +                   (UINTN)__LINE__,
> +                   Status
> +                   );
> +    return Status;
> +  }
> +
> +  for (Index=0; ValidState[Index]; Index++) {
> +
> +    //
> +    // Set the valid KeyToggleState
> +    //
> +    Status = SimpleTextInputEx->SetState (
> +                                  SimpleTextInputEx,
> +                                  ValidState + Index
> +                                  );
> +  
> +    if (Status != EFI_SUCCESS) {
> +      StandardLib->RecordAssertion (
> +                     StandardLib,
> +                     EFI_TEST_ASSERTION_FAILED,
> +                     gTestGenericFailureGuid,
> +                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState -
> SetState() doesn't return EFI_SUCCESS with the valid KeyToggleState",
> +                     L"%a:%d, Status = %r, KeyToggleState = %x\n",
> +                     __FILE__,
> +                     (UINTN)__LINE__,
> +                     Status,
> +                     ValidState[Index]
> +                     );
> +      continue;
> +    }
> +
> +    //
> +    // Get the KeyToggleState
> +    //
> +    Status = SimpleTextInputEx->ReadKeyStrokeEx (
> +                                  SimpleTextInputEx, 
> +                                  &Key
> +                                  );
> +
> +    if (Status != EFI_NOT_READY) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +
> +      StandardLib->RecordAssertion (
> +                     StandardLib,
> +                     AssertionType,
> +                     gSimpleTextInputExBBTestFunctionAssertionGuid01
> 0,
> +                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStro
> keEx - ReadKeyStrokeEx() doesn't return EFI_NOT_READY when there is no 
> Key data and EFI_KEY_STATE_EXPOSED is enabled",
> +                     L"%a:%d, Status = %r, Index = %d,
> KeyToggleState = %x\n",
> +                     __FILE__,
> +                     (UINTN)__LINE__,
> +                     Status,
> +                     Index,
> +                     ValidState[Index]
> +                     );
> +
> +    } else {
> +      if (Key.KeyState.KeyToggleState == ValidState[Index] &&
> +        (Key.KeyState.KeyShiftState == 0 ||
> Key.KeyState.KeyShiftState == EFI_SHIFT_STATE_VALID) &&
> +        Key.Key.ScanCode == 0 && Key.Key.UnicodeChar == 0)
Complicated conditional. Can it be broken down?
> +        AssertionType = EFI_TEST_ASSERTION_PASSED;
> +      else
> +        AssertionType = EFI_TEST_ASSERTION_FAILED;
Nit: braces after if and else even if there is is a single statement after them to make code legible.
> +
> +
> +      StandardLib->RecordAssertion (
> +                     StandardLib,
> +                     AssertionType,
> +                     gSimpleTextInputExBBTestFunctionAssertionGuid01
> 1,
> +                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStro
> keEx - ReadKeyStrokeEx() should get the ValidState with EFI_NOT_READY 
> and other field is zero",
> +                     L"%a:%d, Status = %r, Index = %d,
> KeyToggleState = %x, expect State = %x\n",
> +                     __FILE__,
> +                     (UINTN)__LINE__,
> +                     Status,
> +                     Index,
> +                     Key.KeyState.KeyToggleState,
> +                     ValidState[Index]
> +                     );
> +
> +    }
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c
> index fdbc90f..5b71b6a 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2017 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010 - 2017, Intel Corporation. All rights 
> reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of 
> the BSD License @@ -106,6 +106,15 @@ EFI_BB_TEST_ENTRY_FIELD 
> gBBTestEntryField[] = {
>    },
>  #endif
>    {
> +    EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107,
> +    L"ReadKeyStrokeExFunctionAuto",
> +    L"Function Auto test for Simple Text Input Ex Protocol
> ReadKeyStrokeEx().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestReadKeyStrokeExFunctionAutoTest
> +  },
> +  {
>      EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0201,
>      L"ReadKeyStrokeExConformance",
>      L"Conformance test for Simple Text Input Ex Protocol 
> ReadKeyStrokeEx().",
> @@ -151,7 +160,6 @@ BOOLEAN     BeenExecuted;
>  //
>  
>  EFI_STATUS
> -EFIAPI
This change should be in another patch.
>  InitializeSimpleTextInputExBBTest (
>    IN EFI_HANDLE                   ImageHandle,
>    IN EFI_SYSTEM_TABLE             *SystemTable
> @@ -179,7 +187,6 @@ InitializeSimpleTextInputExBBTest (
>  
>  
>  EFI_STATUS
> -EFIAPI
This change should be in another patch.
>  UnloadSimpleTextInputExBBTest (
>    IN EFI_HANDLE                   ImageHandle
>    )
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h
> index cb2160b..8676606 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/EFI/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2017 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010 - 2017, Intel Corporation. All rights 
> reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of 
> the BSD License @@ -57,6 +57,8 @@ Abstract:
>  #define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0106 \  { 
> 0xdbc6e659, 0xb0e0, 0x4471, { 0x94, 0x13, 0x45, 0x1b, 0xdc, 0xe2, 
> 0xad, 0xc7 } }
>  
> +#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107 \ { 
> +0x2c3ca282, 0x5644, 0x41b6, { 0xaf, 0xc9, 0x43, 0x87, 0xf2, 0x53,
> 0x89, 0xbd } }
>  //
>  // Entry GUIDs for Conf Test
>  //
> @@ -86,7 +88,6 @@ typedef enum {
>  //
>  //
>  EFI_STATUS
> -EFIAPI
This change in another patch.

>  InitializeSimpleTextInputExBBTest (
>    IN EFI_HANDLE                   ImageHandle,
>    IN EFI_SYSTEM_TABLE             *SystemTable
> @@ -94,7 +95,6 @@ InitializeSimpleTextInputExBBTest (
>    
>    
>  EFI_STATUS
> -EFIAPI
This change should be in another patch.

>  UnloadSimpleTextInputExBBTest (
>    IN EFI_HANDLE                   ImageHandle
>    );
> @@ -155,6 +155,15 @@ BBTestUnregisterKeyNotifyFunctionManualTest (
>    IN EFI_TEST_LEVEL             TestLevel,
>    IN EFI_HANDLE                 SupportHandle
>    );
> +
> +
> +EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
>    
>    
>  EFI_STATUS
> @@ -239,6 +248,13 @@
> BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
>  
>  
>  EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
> +  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
> +  );
> +
> +
> +EFI_STATUS
>  BBTestReadKeyStrokeExConformanceTestCheckpoint1 (
>    IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
>    IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c
> index b79772c..6876814 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.c
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2015 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010 - 2015, Intel Corporation. All rights 
> reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of 
> the BSD License @@ -63,3 +63,8 @@ EFI_GUID
> gSimpleTextInputExBBTestFunctionAssertionGuid007 = 
> EFI_TEST_SIMPLETEXTI  EFI_GUID 
> gSimpleTextInputExBBTestFunctionAssertionGuid008 = 
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_008_GUID;
>  
>  EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009 = 
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_009_GUID;
> +
> +EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010 =
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID;
> +
> +EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011 =
> EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID;
> +
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h
> index 6c90fca..2a6be48 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> Guid.h
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2010 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of 
> the BSD License @@ -119,3 +119,13 @@ extern EFI_GUID 
> gSimpleTextInputExBBTestFunctionAssertionGuid008;
>  { 0x534369f7, 0x8399, 0x4353, { 0x94, 0xad, 0xc4, 0x48, 0xfa, 0xda, 
> 0xeb, 0x84 } }
>  
>  extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid009;
> +
> +#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_010_GUID
> \
> +{ 0xcf4d54eb, 0x6696, 0x4794, { 0x91, 0x74, 0x59, 0xd, 0x1c, 0x22,
> 0xa8, 0x67 } }
> +
> +extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid010;
> +
> +#define EFI_TEST_SIMPLETEXTINPUTEXBBTESTFUNCTION_ASSERTION_011_GUID
> \
> +{ 0xf8e8f879, 0xa6d4, 0x4fd3, { 0x8b, 0x8e, 0xba, 0x1d, 0x18, 0xf1,
> 0x40, 0x71 } }
> +
> +extern EFI_GUID gSimpleTextInputExBBTestFunctionAssertionGuid011;
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c b/uefi- 
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c
> index ce5a80a..0b953ca 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestFunction.c
> @@ -456,6 +456,78 @@ BBTestUnregisterKeyNotifyFunctionManualTest (  }
>  
>  
> +EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  )
> +{
> +  EFI_STANDARD_TEST_LIBRARY_PROTOCOL    *StandardLib;
> +  EFI_STATUS                            Status;
> +  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL     *SimpleTextInputEx;
> +  
> +  EFI_DEVICE_PATH_PROTOCOL             *DevicePath;
> +  CHAR16                               *DevicePathStr;
> +
> +  //
> +  // init
> +  //
> +  SimpleTextInputEx =
> (EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL*)ClientInterface;
> +
> +  //
> +  // Get the Standard Library Interface  //  Status = 
> + gtBS->HandleProtocol (
> +                   SupportHandle,
> +                   &gEfiStandardTestLibraryGuid,
> +                   (VOID **) &StandardLib
> +                   );
> +  if (EFI_ERROR(Status)) {
> +    return Status;
> +  }
> +  
> +  //
> +  // Get Device Path of current Simple_Text_Input_Ex_Protocol  // And 
> + out put device path or device name  //  Status = 
> + LocateDevicePathFromSimpleTextInputEx (SimpleTextInputEx,
> &DevicePath, StandardLib);
> +  if (Status == EFI_SUCCESS) {
> +    DevicePathStr = SctDevicePathToStr (DevicePath);
> +    if (DevicePathStr != NULL) {
> +      StandardLib->RecordMessage (
> +                     StandardLib,
> +                     EFI_VERBOSE_LEVEL_DEFAULT,
> +                     L"\r\nCurrent Device: %s",
> +                     DevicePathStr
> +                     );
> +      Status = gtBS->FreePool (DevicePathStr);
> +      if (EFI_ERROR(Status))
> +        return Status;
> +      DevicePathStr=NULL;
> +    }
> +  } else {
> +    //
> +    // Console Splitter/StdErr
> +    //
> +    StandardLib->RecordMessage (
> +                   StandardLib,
> +                   EFI_VERBOSE_LEVEL_DEFAULT,
> +                   L"\r\nCurrent Device: ConsoleSplitter/TxtIn"
> +                   );
> +  }
> +
> +  //
> +  //
> +  //
> +  BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 ( StandardLib,
> SimpleTextInputEx );
> +  
> +  return EFI_SUCCESS;
> +}
> +
> +
> +
>  //
>  //Check Points
>  //
> @@ -1060,4 +1132,143 @@
> BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
>             );
>  
>    return EFI_SUCCESS;
> -}
> \ No newline at end of file
> +}
> +
> +EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
> +  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
> +  )
> +{
> +  EFI_STATUS            Status;
> +  EFI_TEST_ASSERTION    AssertionType;
> +  EFI_KEY_DATA          Key;
> +  UINT8                 Index;
> +
> +  EFI_KEY_TOGGLE_STATE  State = EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED;
Indentation to align with EFI_TOGGLE_STATE_VALID.

> +
> +  EFI_KEY_TOGGLE_STATE  ValidState[] = {
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_NUM_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_CAPS_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE | EFI_NUM_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_NUM_LOCK_ACTIVE | EFI_CAPS_LOCK_ACTIVE,
> +                          EFI_TOGGLE_STATE_VALID |
> EFI_KEY_STATE_EXPOSED | EFI_SCROLL_LOCK_ACTIVE |EFI_NUM_LOCK_ACTIVE | 
> EFI_CAPS_LOCK_ACTIVE,
> +                          0
Indentation is weird in the above definition. please align.

> +                          };
> + 
> +  //
> +  //Reset the console
> +  //
> +  Status = SimpleTextInputEx->ReadKeyStrokeEx (
> +                                  SimpleTextInputEx, 
> +                                  &Key
> +                                  );
> +  if (EFI_ERROR(Status) && Status != EFI_NOT_READY) {
Extra Parenthesis to make the priority of evaluation clearer.

> +    return Status;
> +  }
> +
> +  if ((Key.KeyState.KeyToggleState & EFI_TOGGLE_STATE_VALID) == 0) {
> +    return EFI_UNSUPPORTED;
> +  }
> +
> +  //
> +  //Set the KEY_STATE_EXPOSED to check the imcomplete keystroke
> support
> +  //
> +  Status = SimpleTextInputEx->SetState (
> +                                SimpleTextInputEx,
> +                                &State
> +                                );
> +
> +  if (Status == EFI_UNSUPPORTED || Status == EFI_DEVICE_ERROR) {
Parenthesis around both the conditions.
> +    StandardLib->RecordAssertion (
> +                   StandardLib,
> +                   EFI_TEST_ASSERTION_WARNING,
> +                   gTestGenericFailureGuid,
> +                   L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState -
> SetState() doesn't return EFI_SUCCESS with EFI_KEY_STATE_EXPOSED",
> +                   L"%a:%d, Status = %r\n",
> +                   __FILE__,
> +                   (UINTN)__LINE__,
> +                   Status
> +                   );
> +    return Status;
> +  }
> +
> +  for (Index=0; ValidState[Index]; Index++) {
> +
> +    //
> +    // Set the valid KeyToggleState
> +    //
> +    Status = SimpleTextInputEx->SetState (
> +                                  SimpleTextInputEx,
> +                                  ValidState + Index
> +                                  );
> +  
> +    if (Status != EFI_SUCCESS) {
> +      StandardLib->RecordAssertion (
> +                     StandardLib,
> +                     EFI_TEST_ASSERTION_FAILED,
> +                     gTestGenericFailureGuid,
> +                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.SetState -
> SetState() doesn't return EFI_SUCCESS with the valid KeyToggleState",
> +                     L"%a:%d, Status = %r, KeyToggleState = %x\n",
> +                     __FILE__,
> +                     (UINTN)__LINE__,
> +                     Status,
> +                     ValidState[Index]
> +                     );
> +      continue;
> +    }
> +
> +    //
> +    // Get the KeyToggleState
> +    //
> +    Status = SimpleTextInputEx->ReadKeyStrokeEx (
> +                                  SimpleTextInputEx, 
> +                                  &Key
> +                                  );
> +
> +    if (Status != EFI_NOT_READY) {
> +      AssertionType = EFI_TEST_ASSERTION_FAILED;
> +
> +      StandardLib->RecordAssertion (
> +                     StandardLib,
> +                     AssertionType,
> +                     gSimpleTextInputExBBTestFunctionAssertionGuid01
> 0,
> +                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStro
> keEx - ReadKeyStrokeEx() doesn't return EFI_NOT_READY when there is no 
> Key data and EFI_KEY_STATE_EXPOSED is enabled",
> +                     L"%a:%d, Status = %r, Index = %d,
> KeyToggleState = %x\n",
> +                     __FILE__,
> +                     (UINTN)__LINE__,
> +                     Status,
> +                     Index,
> +                     ValidState[Index]
> +                     );
> +
> +    } else {
> +      if (Key.KeyState.KeyToggleState == ValidState[Index] &&
> +        (Key.KeyState.KeyShiftState == 0 ||
> Key.KeyState.KeyShiftState == EFI_SHIFT_STATE_VALID) &&
> +        Key.Key.ScanCode == 0 && Key.Key.UnicodeChar == 0)
> +        AssertionType = EFI_TEST_ASSERTION_PASSED;
> +      else
> +      	 AssertionType = EFI_TEST_ASSERTION_FAILED;
> +
> +
> +      StandardLib->RecordAssertion (
> +                     StandardLib,
> +                     AssertionType,
> +                     gSimpleTextInputExBBTestFunctionAssertionGuid01
> 1,
> +                     L"EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStro
> keEx - ReadKeyStrokeEx() should get the ValidState with EFI_NOT_READY 
> and other field is zero",
> +                     L"%a:%d, Status = %r, Index = %d,
> KeyToggleState = %x, expect State = %x\n",
> +                     __FILE__,
> +                     (UINTN)__LINE__,
> +                     Status,
> +                     Index,
> +                     Key.KeyState.KeyToggleState,
> +                     ValidState[Index]
> +                     );
> +
> +    }
> +  }
> +
> +  return EFI_SUCCESS;
> +}
> diff --git a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c
> index 43dbbda..c0a4f5a 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.c
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2016 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010 - 2016, Intel Corporation. All rights 
> reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of 
> the BSD License @@ -106,6 +106,15 @@ EFI_BB_TEST_ENTRY_FIELD 
> gBBTestEntryField[] = {
>    },
>  #endif
>    {
> +    EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107,
> +    L"ReadKeyStrokeExFunctionAuto",
> +    L"Function Auto test for Simple Text Input Ex Protocol
> ReadKeyStrokeEx().",
> +    EFI_TEST_LEVEL_MINIMAL,
> +    gSupportProtocolGuid,
> +    EFI_TEST_CASE_AUTO,
> +    BBTestReadKeyStrokeExFunctionAutoTest
> +  },
> +  {
>      EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0201,
>      L"ReadKeyStrokeExConformance",
>      L"Conformance test for Simple Text Input Ex Protocol 
> ReadKeyStrokeEx().", diff --git a/uefi- 
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h
> index 0b3312e..bb0d8c9 100644
> --- a/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h
> +++ b/uefi-
> sct/SctPkg/TestCase/UEFI/IHV/Protocol/SimpleTextInputEx/BlackBoxTest/
> SimpleTextInputExBBTestMain.h
> @@ -1,7 +1,7 @@
>  /** @file
>  
>    Copyright 2006 - 2014 Unified EFI, Inc.<BR>
> -  Copyright (c) 2010 - 2014, Intel Corporation. All rights 
> reserved.<BR>
> +  Copyright (c) 2010 - 2018, Intel Corporation. All rights
> reserved.<BR>
>  
>    This program and the accompanying materials
>    are licensed and made available under the terms and conditions of 
> the BSD License @@ -61,6 +61,8 @@ Abstract:
>  #define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0106 \  { 
> 0xdbc6e659, 0xb0e0, 0x4471, { 0x94, 0x13, 0x45, 0x1b, 0xdc, 0xe2, 
> 0xad, 0xc7 } }
>  
> +#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_TEST_ENTRY_GUID0107 \ { 
> +0x2c3ca282, 0x5644, 0x41b6, { 0xaf, 0xc9, 0x43, 0x87, 0xf2, 0x53,
> 0x89, 0xbd } }
>  //
>  // Entry GUIDs for Conf Test
>  //
> @@ -157,6 +159,15 @@ BBTestUnregisterKeyNotifyFunctionManualTest (
>    IN EFI_TEST_LEVEL             TestLevel,
>    IN EFI_HANDLE                 SupportHandle
>    );
> +
> +
> +EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTest (
> +  IN EFI_BB_TEST_PROTOCOL       *This,
> +  IN VOID                       *ClientInterface,
> +  IN EFI_TEST_LEVEL             TestLevel,
> +  IN EFI_HANDLE                 SupportHandle
> +  );
>    
>    
>  EFI_STATUS
> @@ -241,6 +252,13 @@
> BBTestUnregisterKeyNotifyFunctionManualTestCheckpoint1 (
>  
>  
>  EFI_STATUS
> +BBTestReadKeyStrokeExFunctionAutoTestCheckpoint1 (
> +  IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
> +  IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx
> +  );
> +
> +
> +EFI_STATUS
>  BBTestReadKeyStrokeExConformanceTestCheckpoint1 (
>    IN EFI_STANDARD_TEST_LIBRARY_PROTOCOL         *StandardLib,
>    IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL          *SimpleTextInputEx


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-11-09  2:27 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-11-07  6:47 [edk2-test][Patch] uefi-sct/SctPkg:Add checkpoint of ReadKeyStrokeEx Toggle state Eric Jin
2018-11-07 19:59 ` Supreeth Venkatesh
2018-11-09  2:27   ` Jin, Eric

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox